JACK Audio Connection Kit

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken
Jack Audio Connection Kit
JACK Audio Connection Kit
Ontwikkelaar linux-audio-dev
Recentste versie 1.9.9 
(2012)
Status Actief
Besturingssysteem Linux, Mac OS X, Windows en Unix
Geschreven in C en C++
Categorie Audio
Licentie GPL/LGPL
Website (en) Projectpagina
Portaal  Portaalicoon   Informatica
Vrije software

JACK Audio Connection Kit of kort JACK is een high-bandwith-, low-latency-audioserver, geschreven voor POSIX-besturingssystemen zoals Linux, Unix en Mac OS X, maar ook beschikbaar voor Windows. Jack kan verschillende audio-applicaties verbinden met het audioapparaat en kan ook audiodata delen tussen de verschillende applicaties onderling.

De clients kunnen werken als een eigen proces of als plug-in in de jack-server. Jack gecreëerd met het doel naar professionele audiobewerking, met het oog op twee belangrijke gebieden: synchrone uitvoering van alle clientapplicaties en low-latency-operatie.

Overzicht[bewerken]

In april 2001 begonnen de mensen van de linux-audio-dev-lijst de noodzaak te zien aan een systeem dat high-bandwidth-, low-latency-, sample-synchronised-datacommunicatie toeliet tussen verschillende onafhankelijke audio-applicaties. Zo een systeem moest een robuuste prestatie 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 broncode van Ardour) bekendgemaakt onder de naam JACK, een acroniem van JACK Audio Connection Kit. Jack heeft de doelen van LAAGA grotendeels ingevuld, hoewel Jack nog steeds in ontwikkeling is.

Origineel werden de audiobron, de effecten, de sequencer enzovoorts bestuurd door hardware die door middel van een kabel aan elkaar gekoppeld waren. Het probleem was dan de invoer/uitvoer van die hardware naar en van het pc-systeem. De laatste jaren is het de trend die hardware als programmatuur 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 toe om de verschillende audio-applicaties onderling met elkaar te verbinden 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 hoofdzakelijk 2 aspecten doet:

  1. Het verzorgt een abstractielaag voor programmeurs die de audio-interface wegwerkt, zodat de programmeurs zich kunnen concentreren op de kernfunctionaliteit van hun software-applicatie.
  2. Het laat applicaties toe om audiodata 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 audiodata kan verzenden/ontvangen en andere audioverwerkingstaken kan uitvoeren. Alle audiodata in JACK wordt voorgesteld als 32-bitwaarden met drijvende komma. 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 vier stappen:

  • de nieuwe audio-applicatie oproepen om te verbinden 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 audiodata 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 die je toelaat JACK makkelijker te configureren. Het is de aangeprezen manier om met JACK te werken.

Jack Hoofdcontrolescherm
Jack Audio connectiescherm

Ontwerpdoelen[bewerken]

schema van het ontwerp van JACK

JACK is ontworpen met de volgende doelen:

  • Jack moet snelle, low-latency-streaming van data mogelijk maken tussen onafhankelijke applicaties.
  • Jack moet ieder streamingdatatype 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 audiostreams worden ondersteund
  • Een Jack-client kan meerdere data-streams produceren
  • De Jack API wordt gespecificeerd in ANSI C waarden. Er zijn geen beperkingen hoe servers en clients worden geïmplementeerd
  • Het moet mogelijk zijn om reeds draaiende applicaties te verbinden met Jack
  • Het moet mogelijk zijn om Jack-clients toe te voegen of te verwijderen terwijl de server werkt.

Porting[bewerken]

Jack is ontworpen om te kunnen werken op een systeem dat voldoet aan de POSIX- en ANSI 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. Informatie over hoe Jack te porten naar een ander platform kan men terugvinden in het Porting JACK-document.

Licenties[bewerken]

JACK is vrije software, herdistribueren en/of aanpassen is toegestaan onder de GPL en LGPL zoals gepubliceerd door de Free Software Foundation. De Jack-server is vrijgegeven onder de GPL-licentie, terwijl de Jack-bibliotheek vrijgegeven is onder de LGPL-licentie, wat toelaat dat eigendomsgebonden programma's de Jack-services gebruiken.

Zie ook[bewerken]

Externe links[bewerken]