jack1 codebase
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

166 lines
6.8KB

  1. /*
  2. * This is the main page of the JACK reference manual, built using
  3. * doxygen.
  4. */
  5. /**
  6. @mainpage JACK Audio Connection Kit
  7. @section intro Introduction
  8. JACK is a low-latency audio server, written for any operating system
  9. that is reasonably POSIX compliant. It currently exists for Linux, OS
  10. X, Solaris, FreeBSD and Windows. It can connect several client
  11. applications to an audio device, and allow them to share audio with
  12. each other. Clients can run as separate processes like normal
  13. applications, or within the JACK server as "plugins".
  14. JACK was designed from the ground up for professional audio work, and
  15. its design focuses on two key areas: synchronous execution of all
  16. clients, and low latency operation.
  17. @see <http://jackaudio.org>
  18. @section jack_overview JACK Overview
  19. Traditionally it has been hard if not impossible to write audio
  20. applications that can share data with each other. In addition,
  21. configuring and managing audio interface hardware has often been one
  22. of the most complex aspect of writing audio software.
  23. JACK changes all this by providing an API that does several things:
  24. 1. provides a high level abstraction for programmers that
  25. removes the audio interface hardware from the picture and
  26. allows them to concentrate on the core functionality of
  27. their software.
  28. 2. allows applications to send and receive audio data to/from
  29. each other as well as the audio interface. There is no
  30. difference in how an application sends or receives
  31. data regardless of whether it comes from/goes to another application
  32. or an audio interface.
  33. For programmers with experience of several other audio APIs such as
  34. PortAudio, Apple's CoreAudio, Steinberg's VST and ASIO as well as many
  35. others, JACK presents a familiar model: your program provides a
  36. "callback" function that will be executed at the right time. Your
  37. callback can send and receive data as well as do other signal
  38. processing tasks. You are not responsible for managing audio
  39. interfaces or threading, and there is no "format negotiation": all
  40. audio data within JACK is represented as 32 bit floating point values.
  41. For those with experiences rooted in the Unix world, JACK presents a
  42. somewhat unfamiliar API. Most Unix APIs are based on the read/write
  43. model spawned by the "everything is a file" abstraction that Unix is
  44. rightly famous for. The problem with this design is that it fails to
  45. take the realtime nature of audio interfaces into account, or more
  46. precisely, it fails to force application developers to pay sufficient
  47. attention to this aspect of their task. In addition, it becomes rather
  48. difficult to facilitate inter-application audio routing when different
  49. programs are not all running synchronously.
  50. Using JACK within your program is very simple, and typically consists
  51. of just:
  52. - calling @ref jack_client_open() to connect to the JACK server.
  53. - registering "ports" to enable data to be moved to and from
  54. your application.
  55. - registering a "process callback" which will be called at the
  56. right time by the JACK server.
  57. - telling JACK that your application is ready to start processing
  58. data.
  59. There is a lot more that you can do with JACK's interfaces, but for
  60. many applications, this is all that is needed. The @ref
  61. simple_client.c example demonstrates a complete (simple!) JACK
  62. application that just copies the signal arriving at its input port to
  63. its output port. Similarly, @ref inprocess.c shows how to write an
  64. internal client "plugin" that runs within the JACK server process.
  65. @section reference Reference
  66. The JACK programming interfaces are described in several header files.
  67. We present them here broken into useful categories to make the API a
  68. little clearer:
  69. - @ref ClientFunctions
  70. - @ref ClientCallbacks
  71. - @ref ClientThreads
  72. - @ref ServerControl
  73. - @ref PortFunctions
  74. - @ref PortSearching
  75. - @ref LatencyFunctions
  76. - @ref TimeFunctions
  77. - @ref TransportControl
  78. - @ref ErrorOutput
  79. - @ref NonCallbackAPI
  80. - @ref MIDIAPI
  81. - @ref SessionClientFunctions
  82. - @ref WeakLinkage
  83. The full API is described in:
  84. - @ref jack.h "<jack/jack.h>" is the main JACK interface.
  85. - @ref statistics.h "<jack/statistics.h>" provides interfaces for
  86. monitoring the performance of a running JACK server.
  87. - @ref intclient.h "<jack/intclient.h>" allows loading and unloading
  88. JACK internal clients.
  89. - @ref ringbuffer.h "<jack/ringbuffer.h>" defines a simple API for
  90. using lock-free ringbuffers. These are a good way to pass data
  91. between threads, when streaming realtime data to slower media, like
  92. audio file playback or recording.
  93. - @ref transport.h "<jack/transport.h>" defines a simple transport
  94. control mechanism for starting, stopping and repositioning clients.
  95. This is described in the @ref transport-design document.
  96. - @ref types.h "<jack/types.h>" defines the main JACK data types.
  97. - @ref thread.h "<jack/thread.h>" functions standardize thread
  98. creation for JACK and its clients.
  99. - @ref midiport.h "<jack/midiport.h>" functions to handle reading
  100. and writing of MIDI data to a port
  101. - @ref session.h "<jack/session.h>" functions that form the JACK
  102. session API
  103. In addition, the tools directory provides numerous examples
  104. of simple JACK clients that nevertheless use the API to do something
  105. useful. It includes
  106. - a metronome.
  107. - a recording client that can capture any number of channels
  108. from any JACK sources and store them as an audio file.
  109. - command line clients to control the transport mechanism,
  110. change the buffer size and more.
  111. - commands to load and unload JACK internal clients.
  112. - tools for checking the status of a running JACK system.
  113. and many more.
  114. @section porting Porting
  115. JACK is designed to be portable to any system supporting the relevant
  116. POSIX and ANSI C standards. It currently runs under GNU/Linux, Mac OS
  117. X and Berkeley Unix on several different processor architectures. If
  118. you want to port JACK to another platform, please read the @ref
  119. porting-guide document.
  120. @section license License
  121. Copyright (C) 2001-2011 by Paul Davis, Stephane Letz, Jack O'Quinn, Torben Hohn and others.
  122. JACK is free software; you can redistribute it and/or modify it under
  123. the terms of the GNU GPL and LGPL licenses as published by the Free
  124. Software Foundation, <http://www.gnu.org>. The JACK server uses the
  125. GPL, as noted in the source file headers. However, the JACK library
  126. is licensed under the LGPL, allowing proprietary programs to link with
  127. it and use JACK services. You should have received a copy of these
  128. Licenses along with the program; if not, write to the Free Software
  129. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  130. USA.
  131. This program is distributed in the hope that it will be useful, but
  132. WITHOUT ANY WARRANTY; without even the implied warranty of
  133. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  134. General Public License for more details.
  135. */