| 
							- /*
 -  * This is the main page of the JACK reference manual, built using
 -  * doxygen.
 -  */
 - 
 - /**
 - @mainpage JACK Audio Connection Kit
 - 
 - @section intro Introduction
 - 
 - JACK is a low-latency audio server, written for any operating system
 - that is reasonably POSIX compliant. It currently exists for Linux, OS
 - X, Solaris, FreeBSD and Windows. It can connect several client
 - applications to an audio device, and allow them to share audio with
 - each other.  Clients can run as separate processes like normal
 - applications, or within the JACK server as "plugins".
 - 
 - JACK was designed from the ground up for professional audio work, and
 - its design focuses on two key areas: synchronous execution of all
 - clients, and low latency operation.
 - 
 - @see <http://jackaudio.org>
 - 
 - @section jack_overview JACK Overview
 - 
 - Traditionally it has been hard if not impossible to write audio
 - applications that can share data with each other. In addition,
 - configuring and managing audio interface hardware has often been one
 - of the most complex aspect of writing audio software.
 - 
 - JACK changes all this by providing an API that does several things:
 - 
 -     1. provides a high level abstraction for programmers that
 -        removes the audio interface hardware from the picture and
 -        allows them to concentrate on the core functionality of
 -        their software.
 - 
 -     2. allows applications to send and receive audio data to/from
 -        each other as well as the audio interface. There is no
 -        difference in how an application sends or receives
 -        data regardless of whether it comes from/goes to another application 
 -        or an audio interface.
 - 
 - For programmers with experience of several other audio APIs such as
 - PortAudio, Apple's CoreAudio, Steinberg's VST and ASIO as well as many
 - others, JACK presents a familiar model: your program provides a
 - "callback" function that will be executed at the right time. Your
 - callback can send and receive data as well as do other signal
 - processing tasks. You are not responsible for managing audio
 - interfaces or threading, and there is no "format negotiation": all
 - audio data within JACK is represented as 32 bit floating point values.
 - 
 - For those with experiences rooted in the Unix world, JACK presents a
 - somewhat unfamiliar API. Most Unix APIs are based on the read/write
 - model spawned by the "everything is a file" abstraction that Unix is
 - rightly famous for. The problem with this design is that it fails to
 - take the realtime nature of audio interfaces into account, or more
 - precisely, it fails to force application developers to pay sufficient
 - attention to this aspect of their task. In addition, it becomes rather
 - difficult to facilitate inter-application audio routing when different
 - programs are not all running synchronously.
 - 
 - Using JACK within your program is very simple, and typically consists
 - of just:
 - 
 -    - calling @ref jack_client_open() to connect to the JACK server.
 -    - registering "ports" to enable data to be moved to and from
 -        your application.
 -    - registering a "process callback" which will be called at the
 -        right time by the JACK server.
 -    - telling JACK that your application is ready to start processing
 -        data.
 - 
 - There is a lot more that you can do with JACK's interfaces, but for
 - many applications, this is all that is needed.  The @ref
 - simple_client.c example demonstrates a complete (simple!) JACK
 - application that just copies the signal arriving at its input port to
 - its output port.  Similarly, @ref inprocess.c shows how to write an
 - internal client "plugin" that runs within the JACK server process.
 - 
 - @section reference Reference
 - 
 - The JACK programming interfaces are described in several header files.
 - We present them here broken into useful categories to make the API a
 - little clearer:
 - 
 -     - @ref ClientFunctions
 -     - @ref ClientCallbacks
 -     - @ref ClientThreads
 -     - @ref ServerControl
 -     - @ref PortFunctions
 -     - @ref PortSearching
 -     - @ref LatencyFunctions
 -     - @ref TimeFunctions
 -     - @ref TransportControl
 -     - @ref ErrorOutput
 -     - @ref NonCallbackAPI
 -     - @ref MIDIAPI
 -     - @ref SessionClientFunctions
 -     - @ref WeakLinkage
 - 
 - The full API is described in:
 - 
 -   - @ref jack.h "<jack/jack.h>" is the main JACK interface.
 -   - @ref statistics.h "<jack/statistics.h>" provides interfaces for
 -   monitoring the performance of a running JACK server.
 -   - @ref intclient.h "<jack/intclient.h>" allows loading and unloading
 -   JACK internal clients.
 -   - @ref ringbuffer.h "<jack/ringbuffer.h>" defines a simple API for
 -   using lock-free ringbuffers.  These are a good way to pass data
 -   between threads, when streaming realtime data to slower media, like
 -   audio file playback or recording.
 -   - @ref transport.h "<jack/transport.h>" defines a simple transport
 -   control mechanism for starting, stopping and repositioning clients.
 -   This is described in the @ref transport-design document.
 -   - @ref types.h "<jack/types.h>" defines the main JACK data types.
 -   - @ref thread.h "<jack/thread.h>" functions standardize thread
 -   creation for JACK and its clients.
 -   - @ref midiport.h "<jack/midiport.h>" functions to handle reading
 -   and writing of MIDI data to a port
 -   - @ref session.h "<jack/session.h>" functions that form the JACK
 -   session API
 - 
 - In addition, the tools directory provides numerous examples
 - of simple JACK clients that nevertheless use the API to do something
 - useful.  It includes
 - 
 -   - a metronome.
 -   - a recording client that can capture any number of channels
 -       from any JACK sources and store them as an audio file.
 -   - command line clients to control the transport mechanism,
 -        change the buffer size and more.      
 -   - commands to load and unload JACK internal clients.
 -   - tools for checking the status of a running JACK system.
 - 
 - and many more.
 - 
 - @section porting Porting
 - 
 - JACK is designed to be portable to any system supporting the relevant
 - POSIX and ANSI C standards.  It currently runs under GNU/Linux, Mac OS
 - X and Berkeley Unix on several different processor architectures.  If
 - you want to port JACK to another platform, please read the @ref
 - porting-guide document.
 - 
 - @section license License
 - 
 - Copyright (C) 2001-2011 by Paul Davis, Stephane Letz, Jack O'Quinn, Torben Hohn and others.
 - 
 - JACK is free software; you can redistribute it and/or modify it under
 - the terms of the GNU GPL and LGPL licenses as published by the Free
 - Software Foundation, <http://www.gnu.org>.  The JACK server uses the
 - GPL, as noted in the source file headers.  However, the JACK library
 - is licensed under the LGPL, allowing proprietary programs to link with
 - it and use JACK services.  You should have received a copy of these
 - Licenses along with the program; if not, write to the Free Software
 - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
 - USA.
 - 
 - This program is distributed in the hope that it will be useful, but
 - WITHOUT ANY WARRANTY; without even the implied warranty of
 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 - General Public License for more details.
 - 
 - */
 
 
  |