JACK Audio Connection Kit
Jack Audio Connection Kit | |
---|---|
Jack Audio Connection Kit |
|
|
|
Ontwikkelaar | linux-audio-dev |
Meest recente versie | JACK 0.102.20 / |
Laatse bèta versie | / |
Besturingssysteem | GNU/Linux of Mac OSX |
Categorie | audio |
Licentie | GPL/LGPL |
Website | http://jackit.sourceforge.net/docs/faq.php |
JACK Audio Connection Kit of kort JACK is een high-bandwith, low-latency audio server, geschreven voor POSIX operating systems zoals GNU/Linux en Apple’s OS X. Jack kan verschillende audio applicaties verbinden met het audio apparaat en kan ook audio data delen tussen de verschillende applicaties onderling. De client applicaties kunnen werken als een eigen process of als plugin in de jack-server. Jack is van het begin gecreërd met het doel naar professionele audiobewerking, met het oog op twee belangrijke gebieden: synchrone uitvoering van alle client applicaties en low-latency operatie.
Inhoud |
[bewerk] Een voorbeeld
Laten we even denken dat je een multitrack recorder/mixer gebruikt op je Linux-machine. Het programma werkt prima. Nu heb je nog een leuke audio-applicatie gevonden, bijvoorbeeld een virtuele drum machine. Zou het nu niet leuk zijn kon je die beide combineren: je drum compilatie opnemen met je recorder-applicatie? Dit was vroeger een probleem, maar met behulp van Jack is dit nu mogelijk. Dit is het probleem dat Jack probeert op te lossen.
[bewerk] Overzicht
In april 2001 begonnen de mensen van de linux-audio-dev-lijst de nood te zien aan een systeem dat high-bandwidth, low-latency, sample-synchronised data-communicatie toeliet tussen verschillende onafhankelijke audio-applicaties. Zo een systeem moest een robuste performantie leveren, ook bij systemen met veel cpu-belasting. Het project kreeg de naam LAAGA (Linux Audio Applications Glue API). In de herfst van 2001 werd een eerste implementatie (een afleiding van de source code van Ardour) bekendgemaakt onder de naam JACK, een acronym van JACK Audio Connection Kit. Jack heeft de doelen van LAAGA grotendeels ingevuld, hoewel Jack nog steeds in ontwikkeling is.
Origineel werden de audio bron, de effecten, de sequencer, enzovoorts bestuurt door hardware die door middel van een kabel aan elkaar gekoppeld waren. Het probleem was dan de input/output van die hardware naar en van het pc-systeem. De laatste jaren is het de trend die hardware als software te implementeren op dezelfde machine. Er ontstond toen een nieuw probleem; in plaats van de hardware te verbinden met elkaar was er een eenduidige manier nodig om de verschillende software-applicaties met elkaar te laten communiceren. JACK staat je toe de verschillende audio-applicaties onderling met elkaar te connecteren net zoals de hardware aan elkaar werd gekoppeld.
Traditioneel was het zeer moeilijk om audio applicaties te schrijven die hun audio data met elkaar konden delen. JACK verandert dit door een API te verzorgen die hoofzakelijk 2 aspecten doet:
- Het verzorgt een abstractielaag voor programmeurs die de audio interface wegwerkt, zodat de programmeurs zich kunnen concentreren op de core functionaliteit van hun software-applicatie
- Het laat applicaties toe om audio data te ontvangen en te verzenden van en naar andere audio applicaties alsook van de audio interface. Het maakt niet uit voor de applicaties of het verzenden/ontvangen van een andere applicatie komt of van de audio interface.
JACK beschikt over een callback-functie die audio data kan verzenden/ontvangen en andere audio processing taken kan uitvoeren. Alle audio data in JACK wordt voorgesteld als 32-bit floating point-waarden. Jack is ontworpen om één server te draaien en meerdere clients, die dan onderling verbonden zijn. Jack kan ook meerdere servers draaien, maar iedere Jack-server heeft zijn eigen audio-setup, onderling zijn de Jack-servers niet met elkaar verbonden.
JACK gebruiken met een audio-applicatie is eenvoudig en bestaat typisch uit deze 4 stappen:
- de nieuwe audio-applicatie oproepen om te connecteren met de JACK-server
- poorten registreren om ervoor te zorgen dat de audio data gecommuniceerd kan worden naar en van de applicatie
- callback process registreren, die op tijd opgeroepen zal worden door de JACK-server
- JACK vertellen dat de applicatie klaar staat om audio data te verwerken
JACK komt zelf niet met een GUI (Graphical User Interface); eens had je command line nodig om JACK te configureren en te controleren. Nu bestaat er een GUI onder de naam qjackctl, het is een GUI dat je toelaat JACK makkelijker te configureren. Het is de aangeprezen manier om met JACK te werken.
[bewerk] Jack ontwerpdoelen
JACK is ontworpen met de volgende doelen:
- Jack moet snelle, low-latency streaming van data mogelijk maken tussen onafhankelijke applicaties
- Jack moet ieder streaming data type ondersteunen, niet slechts audio
- In een typische setup draait Jack één server en meerdere clients. Het is mogelijk om meerdere servers te draaien, maar iedere server vormt een aparte audio-setup. Er is geen mogelijkheid van communicatie tussen meerdere servers, zoals dat wel mogelijk is tussen de clients.
- Applicaties die Jack gebruiken hebben elk hun eigen grafische interface tot Jack. Jack maakt geen specificaties voor een GUI. Als gevolg daarvan zijn verschillende stukjes van Jack-setup verspreidt over de verschillende applicaties.
- Jack verzorgt volledige, sample accurate synchronisatie
- Data wordt door Jack gepresenteerd als 32-bit floating point waarden
- Enkel non-interleaved audio streams worden ondersteund
- Een Jack-client kan meerdere data-streams produceren
- De Jack API wordt gespecificeerd in ANCI C waarden. Er zijn geen beperkingen hoe servers en clients worden geïmplementeerd
- Het moet mogelijk zijn om reeds draaiende applicaties te connecteren met Jack
- Het moet mogelijk zijn om Jack-clients toe te voegen of te verwijderen terwijl de server werkt.
[bewerk] Porting
Jack is ontworpen om te kunnen werken op een systeem dat voldoet aan de POSIX en ANCI C standaarden. Momenteel werkt het al op GNU/Linux en Mac OS X. De ontwikkelaars van Jack zijn momenteel aan het werken aan een versie voor Microsoft Windows. Als je Jack wilt porten naar een ander platform, lees het Porting JACK document.
[bewerk] Licenties
JACK is vrije software, herdistribueren en/of aanpassen is toegestaan onder de GNU GPL en LGPL licenties zoals gepubliceerd door de Free Software Foundation. De Jack-server is vrijgegeven onder de GPL-licentie, terwijl de Jack-library vrijgegeven is onder de LGPL-licentie, wat toelaat dat eigendomsgebonden programma's de Jack-services gebruiken.