jack port and integration on macosx
play

Jack Port and Integration on MacOSX Stphane Letz Grame, centre de - PowerPoint PPT Presentation

LAD 2004 : Jack Port and Integration on MacOSX Jack Port and Integration on MacOSX Stphane Letz Grame, centre de cration musicale Lyon, France GRAME : Centre National de Cration Musicale LAD 2004 : Jack Port and Integration on MacOSX Plan


  1. LAD 2004 : Jack Port and Integration on MacOSX Jack Port and Integration on MacOSX Stéphane Letz Grame, centre de création musicale Lyon, France GRAME : Centre National de Création Musicale

  2. LAD 2004 : Jack Port and Integration on MacOSX Plan • Porting the Linux code to MacOSX • Integration with CoreAudio architecture : the JackOSX project • Jackd evolution : more structure, multi-processor version GRAME : Centre National de Création Musicale

  3. LAD 2004 : Jack Port and Integration on MacOSX Porting the Linux code • Use of the POSIX shared memory API more reliable on MacOSX • Rewriting the engine audio cycle for a callback-based activation scheme • Using Mach Remote Procedure Call for client activation : the Linux FIFO based code is not used anymore, all clients are activated in a loop inside the Jack engine - - Synchronous RPC are fast because the scheduler is bypassed - - Thread migration : the calling thread parameters (priority, time quantum..) are transferred to the called thread • Client Real-Time threads : fixed priority time constrained threads (period, computation, constraint) • Use an additional real-time thread for client process call GRAME : Centre National de Création Musicale

  4. LAD 2004 : Jack Port and Integration on MacOSX Drivers • Current one : a PortAudio based driver that can also work on Linux • In development : a more efficient “native” CoreAudio based driver, using the Apple HALOuputUnit component (takes care of all audio stream adaptation) GRAME : Centre National de Création Musicale

  5. LAD 2004 : Jack Port and Integration on MacOSX Performance • Measuring the audio cycle on a iBook G3/700 using jackd timing code • At 64 frames : client activation time : ~ 50 us (jack_metro in “thru” mode) • At 64 frames : finding the maximum additional latency - jackd only : ~ 5 us (0.5 %) - jackd + 1 jack_metro client : ~ 55 us (3.5 %) - jackd + 1 jack_metro client + moving windows + network access… : up to ~ 260 us - jackd + 2 jack_metro clients : ~ 120 us (7.5 %) - jackd + 2 jack_metro clients + moving windows + network access… : up to ~ 360 us • Maximum additional latency of about 200 us • Really stable • Jackd can be used with 32 frame buffers GRAME : Centre National de Création Musicale

  6. LAD 2004 : Jack Port and Integration on MacOSX Integration in the CoreAudio architecture MacOSX audio architecture : HAL : Hardware Abstraction Layer in user space : multi-channel audio, real-time thread activation (for Audio callback), mixing for output…, expose the API for applications IOKIT : a C++ based layer that implements generic services for driver developers Drivers : kernel drivers, interaction with the hardware GRAME : Centre National de Création Musicale

  7. LAD 2004 : Jack Port and Integration on MacOSX HAL model • A “software interrupt” based model • Each client can use its own buffer size (starting from 14 frames…) • The HAL takes care of waking-up real-time (callback) threads at the right time • All real-time threads run at a fixed priority, but correct thread interleaving is done by the HAL by carefully setting the time-constraint parameters : period, computation, constraint • Drivers usually publish their “native” capabilities : stream and sample format, sample rate, buffer size…. • Application may use optimized (Altivec…) AudioConverter components to convert in their own format if needed • AudioUnits : a plug-in API to be used by host applications GRAME : Centre National de Création Musicale

  8. LAD 2004 : Jack Port and Integration on MacOSX Jack Audio Router (JAR) The bridge between regular CoreAudio applications and the Jack server • Using JAR, a CoreAudio application becomes a Jack client • A user space driver placed between the HAL and IOKit layer • Implements the HAL “Plug-in API” • Loaded by the HAL like kernel drivers to become available for applications GRAME : Centre National de Création Musicale

  9. LAD 2004 : Jack Port and Integration on MacOSX JAR (2) : behaviour • JAR presents itself as an n mono non-interleaved stream , fixed buffer size , fixed sample rate driver • Behaves like a kernel driver for the HAL, will be available like other drivers for applications • Can be used as the default system driver for applications like iTunes, QuickTime Player, DLSSynth… GRAME : Centre National de Création Musicale

  10. LAD 2004 : Jack Port and Integration on MacOSX JAR (3) : mapping the CoreAudio API on the Jack API • Parameter query API : AudioDeviceGetProperty • Client activation AudioDeviceAddIOProc ==> jack_client_new jack_client_port_register jack_set_process_callback AudioDeviceStartIOProc ==> jack_client_activate AudioDeviceStopOProc ==> jack_client_deactivate AudioDeviceRemoveIOProc ==> jack_client_port_unregister jack_client_close • Described in global settings : - number of input/ouput jack ports - auto connection with drivers - JAR as default system driver GRAME : Centre National de Création Musicale

  11. LAD 2004 : Jack Port and Integration on MacOSX Jack Plug-ins, JackPilot • Extend the audio routing capabilities inside plug-ins host applications : track insert….. • JackAU (AudioUnit API) and JackVST (VST API) • JackPilot : global settings : jackd parameters, connections manager Native Jack Clients CoreAudio Applications Pure Data (without plugin support) Reason, iTunes, Quicktime ... JAR Audio Hardware Jack Server JAR Built-In, MOTU 828 … JackVST or JackAU channel insert … CoreAudio Applications JackVST or JackAU (with plugin support) channel insert … Cubase SX, Logic, Max/MSP ... CoreAudio Applications (with plugin support) Cubase SX, Logic, Max/MSP ... GRAME : Centre National de Création Musicale

  12. LAD 2004 : Jack Port and Integration on MacOSX JackOSX project • All the components are distributed in a package called JackOSX • Source Forge project : JAR, Jack Plug-ins, CoreAudio drivers • Web site : www.jackosx.com • In collaboration with Johnny Petrantoni and Dan Nigrin GRAME : Centre National de Création Musicale

  13. LAD 2004 : Jack Port and Integration on MacOSX Synchronization • Allowing transparent synchronization between Jack native clients and CoreAudio applications • Mapping the Jack transport API to the MIDI clock sync API • Converting Jack transport state events to MIDI Start , Stop , Continue, SongPos messages using the CoreMIDI API GRAME : Centre National de Création Musicale

  14. LAD 2004 : Jack Port and Integration on MacOSX Jack evolution : MacOSX specifics • In MacOSX, the natural way to implement a server/client system is to use the Mach Interface Generator (MIG) to define new Remote Procedure Calls • Synchronous and asynchronous functions can be defined : - function call is actually done using Mach ports and messages - MIG takes care of parameter management - synchronous calls are implemented with send/receive Mach messages that use the fast “thread migration” system • Socket based communications can be completely suppressed • The server defines a public Mach port for client/server communication • When opening, each client defines its own private port for server/client communication - Opening a client : rpc_jack_client_new (mach_port_t server, const char* name, int* refnum…) - Calling the client process callback : rpc_jack_client_process(mach_port_t client, jack_frame_t frames,….) GRAME : Centre National de Création Musicale

  15. LAD 2004 : Jack Port and Integration on MacOSX Multi-processor version (1) • In the current version , the client graph is sorted to determine an order for client activation each time the graph topology changes • Multi-processor version : activate parallel nodes on different processors - no more “a priori” sorting - a data flow model : a node become runnable when all of its input ports have been filled up GRAME : Centre National de Création Musicale

  16. LAD 2004 : Jack Port and Integration on MacOSX Multi-processor version (2) • Using system primitives : - describe data dependencies between nodes with semaphores - need of inter-process semaphores • Implementing a “mini” scheduler, for an audio cycle : - starting from the input, find all runnable nodes, put them on a lock-free shared list - one thread per processor that takes a runnable node, execute it, propagate output port “readiness” to connected inputs - re-compute runnable nodes - until all nodes have been executed GRAME : Centre National de Création Musicale

  17. LAD 2004 : Jack Port and Integration on MacOSX Jackd architecture re-organisation (1) • More structure: - Isolate the server/client communication code - Isolate the client activation code (FIFO on Linux, futexes on kernel 2.6, synchronous RPC on MacOSX, semaphores…) - More secure use of shared memory segment : distinguish between R/W and R only segments on the client side - Move all port data structure and connections to shared memory - Thinking in term of lock-free access whenever possible GRAME : Centre National de Création Musicale

  18. LAD 2004 : Jack Port and Integration on MacOSX Jackd architecture re-organisation (2) • More structure : - Moving the FreeWheel code as an autonomous driver - Isolate Watch Dog thread code …… • Fix some API problems : - Memory leak (jack_port_by_id and jack_port_by_name…) - Some state change are not notified to other clients : change of port names… …… GRAME : Centre National de Création Musicale

  19. LAD 2004 : Jack Port and Integration on MacOSX DEMO GRAME : Centre National de Création Musicale

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend