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.

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