diff --git a/ChangeLog b/ChangeLog index f7cd2b5d..e6d85017 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23,11 +23,57 @@ Paul Davis --------------------------- Jackdmp changes log ---------------------------- +--------------------------- + +2009-07-17 Stephane Letz + + * Loopback backend reborn as a dynamically loadable separated backend. + * -L parameter for loopback backend activated again in jackd. + +2009-07-17 Stephane Letz + + * Big rewrite of Solaris boomer driver, seems to work in duplex mode at least. + +2009-07-16 Stephane Letz + + * In combined --dbus and --classic compilation code, use PulseAudio acquire/release code. + +2009-07-15 Stephane Letz + + * Rename JackDriver::Init method to JackDriver::Initialize (to avoid confusion with JackThread::Init method). + * Update Solaris boomer driver. + * Report some cleanup and documentation improvements done on JACK1 timing functions. + +2009-07-11 Stephane Letz + + * Raise drivers time out used in synchronous mode. + +2009-07-09 Stephane Letz + + * Use __attribute__((__packed__)) again, more fixes for 64/32 mixed mode. + * Torben Hohn changes for 64/32 mixed mode in wscripts. + * Add compile time option for maximum ports per application. + +2009-07-07 Stephane Letz + + * Use __attribute__((__aligned__(32))) instead of __attribute__((__packed__)) for 64/32 mixed mode. + +2009-07-03 Stephane Letz + + * Another Tim Bechmann memops.c optimization patch. + +2009-07-01 Stephane Letz + + * Tim Bechmann memops.c optimization patch. + +2009-06-30 Stephane Letz + + * Tim Bechmann patch : hammerfall, only release monitor thread, if it has been created. 2009-06-19 Stephane Letz * Correct JackTransportEngine::MakeAllLocating, sync callback has to be called in this case also. + * NetJack2 code : better error checkout, method renaming. 2009-06-17 Stephane Letz diff --git a/README b/README index f11e26f9..5e746d3d 100644 --- a/README +++ b/README @@ -137,8 +137,6 @@ The binary elements are : - JackRouter.dll : an ASIO/JACK driver that allows ASIO compatible applications to become JACK clients and access the JACK server. ASIO "jackified" applications appear with their names. Ableton Live, Samplitude, Reason, Arturia applications have been successfully tested. To install it, use "regsvr32 JackRouter.dll" in a terminal (use regsvr32 /u JackRouter.dll to uninstall). [VISTA special note: regsvr32 has to be used with "administrator" priviledges to properly register JackRouter.dll (Start Menu -> All Programs -> Accessories -> Right Click on Command Prompt -> Run As Administrator)]. A JackRouter.ini file is used by the driver to read parameters : an [IO] section allows to setup the number of input/output jack ports for the application and a [AUTO_CONNECT] section allows to setup jack ports autoconnection mode to machine input/output. -All dll are compiled in "release" mode. The "Debug" folder contains debug version of all dlls and libraries. MSVCRTD.dll and MSVCP60D.dll debug dll are also included. - WARNING !! WARNING !! Depending of the used interface and driver settings, the PortAudio layer may add additionnal buffering between the real card interrupt and the jack server callback. This usually result in *unregular* calls of the jack server callback (for example if jack server used a 256 frames buffer and the card used a 512 frames, the jack server callback will be called twice every card interrupt). For proper functionning of jack server and clients in this case, the jack server has to be started in "synchronous" mode, using the "-S" parameter. @@ -156,16 +154,6 @@ Automatic server launch Starting from the 0.64 version, automatic server launch from client is implemented : when the server is not yet running, and if the client uses the "jack_client_open" API, the server will be started automatically. The server configuration is saved in a ".jackdrc" file located in the user home folder. The Qjackctl tool allows to save its configuration in this . jackdrc (setting can be done in Qjackctl Setup/Misc). If no configuration file is found, a default setup will be used. WARNING : automatic server launch is not implemented on Windows - ----------------- -Loopback driver ----------------- - -An experimental loopback driver allows to manually "pipeline" applications connected in sequence, and thus parallelize sequential sub-graph. Lets say we have A ==> B graph, by using the loopback driver, it can be rewritten as : A ==> loopback driver ==> B. At each cycle, the loopback driver copy buffers received on its input ports (at the previous cycle) to its output ports. The resulting graph become parallel and thus can take profit of multi-processors machines, at each cycle A and B can be activated in parallel. Note that the loopback driver add a one buffer delay in the connection, which may be relevant in more complex graphs when having global synchronicity between clients is a desirable property. - -To activate loopback driver, use : - -- jackd (jackdmp) ... -L n ... where n is the number of input/output ports. ------------------ Validations tools @@ -225,6 +213,7 @@ Note : To experiment with the -S option, jackdmp must be launched in a console. 1.9.0 : Waf based build system : Nedko Arnaudov, Grame for preliminary OSX support. Control API, dbus based server control access : Nedko Arnaudov, Grame. NetJack2 components (in progress) : jack_net backend, netmanager, audioadapter, netadapter : Romain Moret, Grame. Code restructuring to help port on other architectures : Michael Voigt. Code cleanup/optimization : Tim Blechmann. Improve handling of server internal clients that can now be loaded/unloaded using the new server control API : Grame. A lot of bug fix and improvements. 1.9.1 : Fix jackctl_server_unload_internal. Filter SIGPIPE to avoid having client get a SIGPIPE when trying to access a died server. Libjack shutdown handler does not "deactivate" (fActive = false) the client anymore, so that jack_deactivate correctly does the job later on. Better isolation of server and clients system resources to allow starting the server in several user account at the same time. Report ringbuffer.c fixes from jack1. Client and library global context cleanup in case of incorrect shutdown handling (that is applications not correctly closing client after server has shutdown). Use JACK_DRIVER_DIR variable in internal clients loader. For ALSA driver, synchronize with latest jack1 memops functions. Synchronize jack2 public headers with jack1 ones. Implement jack_client_real_time_priority and jack_client_max_real_time_priority API. Use up to BUFFER_SIZE_MAX frames in midi ports, fix for ticket #117. Cleanup server starting code for clients directly linked with libjackserver.so. JackMessageBuffer was using thread "Stop" scheme in destructor, now use the safer thread "Kill" way. Synchronize ALSA backend code with JACK1 one. Set default mode to 'slow' in JackNetDriver and JackNetAdapter. Simplify audio packet order verification. Fix JackNetInterface::SetNetBufferSize for socket buffer size computation and JackNetMasterInterface::DataRecv if synch packet is received, various cleanup. Better recovery of network overload situations, now "resynchronize" by skipping cycles.". Support for BIG_ENDIAN machines in NetJack2. Support for BIG_ENDIAN machines in NetJack2 for MIDI ports. Support for "-h" option in internal clients to print the parameters. In NetJack2, fix a bug when capture or playback only channels are used. Add a JACK_INTERNAL_DIR environment variable to be used for internal clients. Add a resample quality parameter in audioadapter. Now correctly return an error if JackServer::SetBufferSize could not change the buffer size (and was just restoring the current one). Use PRIu32 kind of macro in JackAlsaDriver again. Add a resample quality parameter in netadapter. 1.9.2 : Solaris version. New "profiling" tools. Rework the mutex/signal classes. Support for BIG_ENDIAN machines in NetJack2. D-BUS based device reservation to better coexist with PulseAudio on Linux. Add auto_connect parameter in netmanager and netadapter. Use Torben Hohn PI controler code for adapters. Client incorrect re-naming fixed : now done at socket and fifo level. Virtualize and allow overriding of thread creation function, to allow Wine support (from JACK1). +1.9.3 : New JackBoomerDriver class for Boomer driver on Solaris. Add mixed 32/64 bits mode (off by default). Native MIDI backend (JackCoreMidiDriver, JackWinMMEDriver). In ALSA audio card reservation code, tries to open the card even if reservation fails. Clock source setting on Linux. Add jackctl_server_switch_master API. Fix transport callback (timebase master, sync) issue when used after jack_activate (RT thread was not running). D-Bus access for jackctl_server_add_slave/jackctl_server_remove_slave API. Cleanup "loopback" stuff in server. Torben Hohn fix for InitTime and GetMicroSeconds in JackWinTime.c. New jack_free function added in jack.h. Reworked Torben Hohn fix for server restart issue on Windows. Correct jack_set_error_function, jack_set_info_function and jack_set_thread_creator functions. Correct JackFifo::TimedWait for EINTR handling. Move DBus based audio device reservation code in ALSA backend compilation. Correct JackTransportEngine::MakeAllLocating, sync callback has to be called in this case also. NetJack2 code : better error checkout, method renaming. Tim Bechmann patch : hammerfall, only release monitor thread, if it has been created. Tim Bechmann memops.c optimization patches. In combined --dbus and --classic compilation code, use PulseAudio acquire/release code. Big rewrite of Solaris boomer driver, seems to work in duplex mode at least. Loopback backend reborn as a dynamically loadable separated backend. This is a work in progress but the implementation is now stable enough to be tested. jackdmp has been used successfully with the following applications : Ardour, Hydrogen, Jamin, Qjackctl, Jack-Rack, SooperLooper, AlsaPlayer... diff --git a/common/JackAPI.cpp b/common/JackAPI.cpp index 4eadc797..d609a915 100644 --- a/common/JackAPI.cpp +++ b/common/JackAPI.cpp @@ -1465,14 +1465,8 @@ EXPORT jack_nframes_t jack_last_frame_time(const jack_client_t* ext_client) #ifdef __CLIENTDEBUG__ JackLibGlobals::CheckContext(); #endif - JackTimer timer; JackEngineControl* control = GetEngineControl(); - if (control) { - control->ReadFrameTime(&timer); - return timer.CurFrame(); - } else { - return 0; - } + return (control) ? control->fFrameTimer.ReadCurrentState()->CurFrame() : 0; } EXPORT float jack_cpu_load(jack_client_t* ext_client) diff --git a/common/JackActivationCount.h b/common/JackActivationCount.h index c9824937..8a22bc67 100644 --- a/common/JackActivationCount.h +++ b/common/JackActivationCount.h @@ -73,7 +73,7 @@ class JackActivationCount return fValue; } -}; +} POST_PACKED_STRUCTURE; } // end of namespace diff --git a/common/JackAtomicArrayState.h b/common/JackAtomicArrayState.h index 29adc592..8a0daf08 100644 --- a/common/JackAtomicArrayState.h +++ b/common/JackAtomicArrayState.h @@ -21,6 +21,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #define __JackAtomicArrayState__ #include "JackAtomic.h" +#include "JackCompilerDeps.h" #include // for memcpy namespace Jack @@ -67,7 +68,7 @@ struct AtomicArrayCounter return *this; } -}; +} POST_PACKED_STRUCTURE; #define Counter1(e) (e).info.fLongVal #define GetIndex1(e, state) ((e).info.scounter.fByteVal[state]) @@ -247,7 +248,7 @@ class JackAtomicArrayState WriteNextStateStopAux(state); } -}; +} POST_PACKED_STRUCTURE; } // end of namespace diff --git a/common/JackAtomicState.h b/common/JackAtomicState.h index 5dbd1366..eaf164ee 100644 --- a/common/JackAtomicState.h +++ b/common/JackAtomicState.h @@ -21,6 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define __JackAtomicState__ #include "JackAtomic.h" +#include "JackCompilerDeps.h" #include // for memcpy namespace Jack @@ -68,7 +69,7 @@ struct AtomicCounter return *this; } -}; +} POST_PACKED_STRUCTURE; #define Counter(e) (e).info.fLongVal #define CurIndex(e) (e).info.scounter.fShortVal1 @@ -250,11 +251,10 @@ class JackAtomicState } while (cur_index != next_index); } */ -}; - + +} POST_PACKED_STRUCTURE; } // end of namespace - #endif diff --git a/common/JackAudioDriver.cpp b/common/JackAudioDriver.cpp index fc753123..505db38e 100644 --- a/common/JackAudioDriver.cpp +++ b/common/JackAudioDriver.cpp @@ -79,6 +79,22 @@ int JackAudioDriver::Open(jack_nframes_t buffer_size, return JackDriver::Open(buffer_size, samplerate, capturing, playing, inchannels, outchannels, monitor, capture_driver_name, playback_driver_name, capture_latency, playback_latency); } +int JackAudioDriver::Open(bool capturing, + bool playing, + int inchannels, + int outchannels, + bool monitor, + const char* capture_driver_name, + const char* playback_driver_name, + jack_nframes_t capture_latency, + jack_nframes_t playback_latency) +{ + fCaptureChannels = inchannels; + fPlaybackChannels = outchannels; + fWithMonitorPorts = monitor; + return JackDriver::Open(capturing, playing, inchannels, outchannels, monitor, capture_driver_name, playback_driver_name, capture_latency, playback_latency); +} + int JackAudioDriver::Attach() { JackPort* port; @@ -269,7 +285,7 @@ void JackAudioDriver::ProcessGraphSync() fGraphManager->ResumeRefNum(&fClientControl, fSynchroTable); if (ProcessSlaves() < 0) jack_error("JackAudioDriver::ProcessSync ProcessSlaves error, engine may now behave abnormally!!"); - if (fGraphManager->SuspendRefNum(&fClientControl, fSynchroTable, fEngineControl->fTimeOutUsecs) < 0) + if (fGraphManager->SuspendRefNum(&fClientControl, fSynchroTable, DRIVER_TIMEOUT_FACTOR * fEngineControl->fTimeOutUsecs) < 0) jack_error("JackAudioDriver::ProcessSync SuspendRefNum error, engine may now behave abnormally!!"); } else { // Graph not finished: do not activate it jack_error("JackAudioDriver::ProcessSync: error"); diff --git a/common/JackAudioDriver.h b/common/JackAudioDriver.h index 93d6830d..6fb64e64 100644 --- a/common/JackAudioDriver.h +++ b/common/JackAudioDriver.h @@ -74,6 +74,16 @@ class SERVER_EXPORT JackAudioDriver : public JackDriver jack_nframes_t capture_latency, jack_nframes_t playback_latency); + virtual int Open(bool capturing, + bool playing, + int inchannels, + int outchannels, + bool monitor, + const char* capture_driver_name, + const char* playback_driver_name, + jack_nframes_t capture_latency, + jack_nframes_t playback_latency); + virtual int Process(); virtual int ProcessNull(); diff --git a/common/JackConnectionManager.h b/common/JackConnectionManager.h index bb972e31..47543038 100644 --- a/common/JackConnectionManager.h +++ b/common/JackConnectionManager.h @@ -116,7 +116,7 @@ class JackFixedArray return fCounter; } -}; +} POST_PACKED_STRUCTURE; /*! \brief Utility class. @@ -151,7 +151,8 @@ class JackFixedArray1 : public JackFixedArray return true; } } -}; + +} POST_PACKED_STRUCTURE; /*! \brief Utility class. @@ -226,7 +227,7 @@ class JackFixedMatrix return false; } -}; +} POST_PACKED_STRUCTURE; /*! \brief Utility class. @@ -339,7 +340,7 @@ class JackLoopFeedback return -1; } -}; +} POST_PACKED_STRUCTURE; /*! \brief For client timing measurements. @@ -356,6 +357,7 @@ struct JackClientTiming {} ~JackClientTiming() {} + } POST_PACKED_STRUCTURE; /*! @@ -450,7 +452,7 @@ class SERVER_EXPORT JackConnectionManager int ResumeRefNum(JackClientControl* control, JackSynchro* table, JackClientTiming* timing); int SuspendRefNum(JackClientControl* control, JackSynchro* table, JackClientTiming* timing, long time_out_usec); -}; +} POST_PACKED_STRUCTURE; } // end of namespace diff --git a/common/JackConstants.h b/common/JackConstants.h index 0e05c058..f5355afc 100644 --- a/common/JackConstants.h +++ b/common/JackConstants.h @@ -38,10 +38,14 @@ #endif #define DRIVER_PORT_NUM 256 -#define PORT_NUM_FOR_CLIENT 256 + +#ifndef PORT_NUM_FOR_CLIENT +#define PORT_NUM_FOR_CLIENT 512 +#endif + #define FIRST_AVAILABLE_PORT 1 -#define CONNECTION_NUM_FOR_PORT 256 +#define CONNECTION_NUM_FOR_PORT PORT_NUM_FOR_CLIENT #ifndef CLIENT_NUM #define CLIENT_NUM 64 @@ -86,6 +90,7 @@ #define SOCKET_TIME_OUT 5 // in sec #define DRIVER_OPEN_TIMEOUT 5 // in sec #define FREEWHEEL_DRIVER_TIMEOUT 10 // in sec +#define DRIVER_TIMEOUT_FACTOR 10 #define NO_PORT 0xFFFE diff --git a/common/JackControlAPI.cpp b/common/JackControlAPI.cpp index abd6d28a..488046c9 100644 --- a/common/JackControlAPI.cpp +++ b/common/JackControlAPI.cpp @@ -43,6 +43,7 @@ #include "JackLockedEngine.h" #include "JackConstants.h" #include "JackDriverLoader.h" +#include "JackServerGlobals.h" using namespace Jack; @@ -618,7 +619,9 @@ get_realtime_priority_constraint() return constraint_ptr; } -EXPORT jackctl_server_t * jackctl_server_create() +EXPORT jackctl_server_t * jackctl_server_create( + bool (* on_device_acquire)(const char * device_name), + void (* on_device_release)(const char * device_name)) { struct jackctl_server * server_ptr; union jackctl_parameter_value value; @@ -762,6 +765,9 @@ EXPORT jackctl_server_t * jackctl_server_create() goto fail_free_parameters; } + JackServerGlobals::on_device_acquire = on_device_acquire; + JackServerGlobals::on_device_release = on_device_release; + if (!jackctl_drivers_load(server_ptr)) { goto fail_free_parameters; diff --git a/common/JackControlAPI.h b/common/JackControlAPI.h index 8046c63d..cc07dcab 100644 --- a/common/JackControlAPI.h +++ b/common/JackControlAPI.h @@ -88,7 +88,9 @@ jackctl_wait_signals( sigset_t signals); EXPORT jackctl_server_t * -jackctl_server_create(); +jackctl_server_create( + bool (* on_device_acquire)(const char * device_name), + void (* on_device_release)(const char * device_name)); EXPORT void jackctl_server_destroy( diff --git a/common/JackDriver.cpp b/common/JackDriver.cpp index 609952dc..9fde4917 100644 --- a/common/JackDriver.cpp +++ b/common/JackDriver.cpp @@ -339,7 +339,7 @@ int JackDriver::SetSampleRate(jack_nframes_t sample_rate) return 0; } -bool JackDriver::Init() +bool JackDriver::Initialize() { return true; } diff --git a/common/JackDriver.h b/common/JackDriver.h index c7e9ff72..6b80dc33 100644 --- a/common/JackDriver.h +++ b/common/JackDriver.h @@ -203,7 +203,7 @@ class SERVER_EXPORT JackDriver : public JackDriverClientInterface virtual JackClientControl* GetClientControl() const; virtual bool IsRealTime() const; - virtual bool Init(); // To be called by the wrapping thread Init method when the driver is a "blocking" one + virtual bool Initialize(); // To be called by the wrapping thread Init method when the driver is a "blocking" one }; diff --git a/common/JackFilters.h b/common/JackFilters.h index 2af946d2..76bf7ecd 100644 --- a/common/JackFilters.h +++ b/common/JackFilters.h @@ -54,7 +54,8 @@ namespace Jack mean += fTable[i]; return mean / MAX_SIZE; } - }; + + } POST_PACKED_STRUCTURE; class JackDelayLockedLoop { @@ -136,7 +137,7 @@ namespace Jack return fCurrentWakeup; } - }; + } POST_PACKED_STRUCTURE; class JackAtomicDelayLockedLoop : public JackAtomicState { @@ -201,7 +202,7 @@ namespace Jack return res; } - }; + } POST_PACKED_STRUCTURE; /* Torben Hohn PI controler from JACK1 @@ -301,7 +302,6 @@ namespace Jack } */ - double GetRatio(int error) { double smooth_offset = error; diff --git a/common/JackFrameTimer.h b/common/JackFrameTimer.h index 1468f1b5..aca70add 100644 --- a/common/JackFrameTimer.h +++ b/common/JackFrameTimer.h @@ -44,8 +44,8 @@ class SERVER_EXPORT JackTimer jack_time_t fCurrentCallback; jack_time_t fNextWakeUp; float fSecondOrderIntegrator; - bool fInitialized; float fFilterCoefficient; /* set once, never altered */ + bool fInitialized; public: @@ -67,7 +67,7 @@ class SERVER_EXPORT JackTimer return fCurrentWakeup; } -}; +} POST_PACKED_STRUCTURE; /*! \brief A class using the JackAtomicState to manage jack time. diff --git a/common/JackFreewheelDriver.cpp b/common/JackFreewheelDriver.cpp index 161c3897..c28e30c3 100644 --- a/common/JackFreewheelDriver.cpp +++ b/common/JackFreewheelDriver.cpp @@ -41,7 +41,7 @@ int JackFreewheelDriver::Process() } else { fGraphManager->ResumeRefNum(&fClientControl, fSynchroTable); // Signal all clients if (fEngineControl->fSyncMode) { - if (fGraphManager->SuspendRefNum(&fClientControl, fSynchroTable, fEngineControl->fTimeOutUsecs) < 0) { + if (fGraphManager->SuspendRefNum(&fClientControl, fSynchroTable, DRIVER_TIMEOUT_FACTOR * fEngineControl->fTimeOutUsecs) < 0) { jack_error("JackFreewheelDriver::ProcessSync SuspendRefNum error"); return -1; } diff --git a/common/JackLoopbackDriver.cpp b/common/JackLoopbackDriver.cpp index 3c9df5b0..48a9d253 100644 --- a/common/JackLoopbackDriver.cpp +++ b/common/JackLoopbackDriver.cpp @@ -20,6 +20,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "JackSystemDeps.h" #include "JackLoopbackDriver.h" +#include "JackDriverLoader.h" #include "JackEngineControl.h" #include "JackGraphManager.h" #include "JackError.h" @@ -31,8 +32,6 @@ namespace Jack int JackLoopbackDriver::Process() { - assert(fCaptureChannels == fPlaybackChannels); - // Loopback copy for (int i = 0; i < fCaptureChannels; i++) { memcpy(GetInputBuffer(i), GetOutputBuffer(i), sizeof(float) * fEngineControl->fBufferSize); @@ -40,7 +39,7 @@ int JackLoopbackDriver::Process() fGraphManager->ResumeRefNum(&fClientControl, fSynchroTable); // Signal all clients if (fEngineControl->fSyncMode) { - if (fGraphManager->SuspendRefNum(&fClientControl, fSynchroTable, fEngineControl->fTimeOutUsecs) < 0) { + if (fGraphManager->SuspendRefNum(&fClientControl, fSynchroTable, DRIVER_TIMEOUT_FACTOR * fEngineControl->fTimeOutUsecs) < 0) { jack_error("JackLoopbackDriver::ProcessSync SuspendRefNum error"); return -1; } @@ -49,3 +48,61 @@ int JackLoopbackDriver::Process() } } // end of namespace + +#ifdef __cplusplus +extern "C" +{ +#endif + + SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor() + { + jack_driver_desc_t * desc; + unsigned int i; + + desc = (jack_driver_desc_t*)calloc (1, sizeof (jack_driver_desc_t)); + strcpy(desc->name, "loopback"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 + strcpy(desc->desc, "Loopback backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 + + desc->nparams = 1; + desc->params = (jack_driver_param_desc_t*)calloc (desc->nparams, sizeof (jack_driver_param_desc_t)); + + i = 0; + strcpy(desc->params[i].name, "channels"); + desc->params[i].character = 'c'; + desc->params[i].type = JackDriverParamInt; + desc->params[i].value.ui = 0; + strcpy(desc->params[i].short_desc, "Maximum number of loopback ports"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); + + return desc; + } + + SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params) + { + const JSList * node; + const jack_driver_param_t * param; + int channels = 2; + + for (node = params; node; node = jack_slist_next (node)) { + param = (const jack_driver_param_t *) node->data; + + switch (param->character) { + + case 'c': + channels = param->value.ui; + break; + } + } + + Jack::JackDriverClientInterface* driver = new Jack::JackLoopbackDriver(engine, table); + if (driver->Open(1, 1, channels, channels, false, "loopback", "loopback", 0, 0) == 0) { + return driver; + } else { + delete driver; + return NULL; + } + } + +#ifdef __cplusplus +} +#endif diff --git a/common/JackNetDriver.cpp b/common/JackNetDriver.cpp index c949001d..641c95c4 100644 --- a/common/JackNetDriver.cpp +++ b/common/JackNetDriver.cpp @@ -121,13 +121,13 @@ namespace Jack as a "dummy driver, until Init method returns. */ - bool JackNetDriver::Init() + bool JackNetDriver::Initialize() { - jack_log ( "JackNetDriver::Init()" ); + jack_log("JackNetDriver::Initialize()"); //new loading, but existing socket, restart the driver if (fSocket.IsSocket()) { - jack_info( "Restarting driver..." ); + jack_info("Restarting driver..."); FreeAll(); } diff --git a/common/JackNetDriver.h b/common/JackNetDriver.h index 058489a1..d8fb0bb2 100644 --- a/common/JackNetDriver.h +++ b/common/JackNetDriver.h @@ -50,7 +50,7 @@ namespace Jack JackGnuPlotMonitor* fNetTimeMon; #endif - bool Init(); + bool Initialize(); void FreeAll(); int AllocPorts(); diff --git a/common/JackNetInterface.cpp b/common/JackNetInterface.cpp index 78e9dbb9..5131c98c 100644 --- a/common/JackNetInterface.cpp +++ b/common/JackNetInterface.cpp @@ -204,8 +204,7 @@ namespace Jack int rx_bytes = 0; //socket - if ( fSocket.NewSocket() == SOCKET_ERROR ) - { + if ( fSocket.NewSocket() == SOCKET_ERROR ) { jack_error ( "Can't create socket : %s", StrError ( NET_ERROR_CODE ) ); return false; } @@ -215,8 +214,7 @@ namespace Jack jack_error ( "Can't set timeout : %s", StrError ( NET_ERROR_CODE ) ); //connect - if ( fSocket.Connect() == SOCKET_ERROR ) - { + if ( fSocket.Connect() == SOCKET_ERROR ) { jack_error ( "Can't connect : %s", StrError ( NET_ERROR_CODE ) ); return false; } @@ -245,22 +243,19 @@ namespace Jack SessionParamsNToH(&net_params, &host_params); } while ( ( GetPacketType ( &host_params ) != START_MASTER ) && ( ++attempt < SLAVE_SETUP_RETRY ) ); - if ( attempt == SLAVE_SETUP_RETRY ) - { + if ( attempt == SLAVE_SETUP_RETRY ) { jack_error ( "Slave doesn't respond, exiting." ); return false; } //set the new timeout for the socket - if ( SetRxTimeout() == SOCKET_ERROR ) - { + if ( SetRxTimeout() == SOCKET_ERROR ) { jack_error ( "Can't set rx timeout : %s", StrError ( NET_ERROR_CODE ) ); return false; } //set the new rx buffer size - if ( SetNetBufferSize() == SOCKET_ERROR ) - { + if ( SetNetBufferSize() == SOCKET_ERROR ) { jack_error ( "Can't set net buffer sizes : %s", StrError ( NET_ERROR_CODE ) ); return false; } @@ -619,7 +614,7 @@ namespace Jack //first, get a master, do it until a valid connection is running do { - status = GetNetMaster(); + status = SendAvailableToMaster(); if ( status == NET_SOCKET_ERROR ) return false; } @@ -651,7 +646,7 @@ namespace Jack do { //get a master - status = GetNetMaster(); + status = SendAvailableToMaster(); if (status == NET_SOCKET_ERROR) return false; } @@ -678,26 +673,27 @@ namespace Jack return true; } - net_status_t JackNetSlaveInterface::GetNetMaster() + net_status_t JackNetSlaveInterface::SendAvailableToMaster() { - jack_log ( "JackNetSlaveInterface::GetNetMaster()" ); + jack_log ( "JackNetSlaveInterface::SendAvailableToMaster()" ); //utility session_params_t host_params; int rx_bytes = 0; //socket - if ( fSocket.NewSocket() == SOCKET_ERROR ) - { + if ( fSocket.NewSocket() == SOCKET_ERROR ) { jack_error ( "Fatal error : network unreachable - %s", StrError ( NET_ERROR_CODE ) ); return NET_SOCKET_ERROR; } //bind the socket - if ( fSocket.Bind() == SOCKET_ERROR ) + if ( fSocket.Bind() == SOCKET_ERROR ) { jack_error ( "Can't bind the socket : %s", StrError ( NET_ERROR_CODE ) ); + return NET_SOCKET_ERROR; + } //timeout on receive - if ( fSocket.SetTimeOut ( SLAVE_INIT_TIMEOUT ) == SOCKET_ERROR ) + if ( fSocket.SetTimeOut ( SLAVE_INIT_TIMEOUT ) == SOCKET_ERROR ) jack_error ( "Can't set timeout : %s", StrError ( NET_ERROR_CODE ) ); //disable local loop @@ -730,12 +726,13 @@ namespace Jack fParams = host_params; //set the new buffer sizes - if ( SetNetBufferSize() == SOCKET_ERROR ) + if ( SetNetBufferSize() == SOCKET_ERROR ) { jack_error ( "Can't set net buffer sizes : %s", StrError ( NET_ERROR_CODE ) ); + return NET_SOCKET_ERROR; + } //connect the socket - if ( fSocket.Connect() == SOCKET_ERROR ) - { + if ( fSocket.Connect() == SOCKET_ERROR ) { jack_error ( "Error in connect : %s", StrError ( NET_ERROR_CODE ) ); return NET_CONNECT_ERROR; } diff --git a/common/JackNetInterface.h b/common/JackNetInterface.h index c655a3b0..ca90875f 100644 --- a/common/JackNetInterface.h +++ b/common/JackNetInterface.h @@ -151,7 +151,7 @@ namespace Jack bool InitConnection(); bool InitRendering(); - net_status_t GetNetMaster(); + net_status_t SendAvailableToMaster(); net_status_t SendStartToMaster(); void SetParams(); diff --git a/common/JackNetManager.cpp b/common/JackNetManager.cpp index 86d23522..b4e45853 100644 --- a/common/JackNetManager.cpp +++ b/common/JackNetManager.cpp @@ -618,7 +618,7 @@ namespace Jack switch ( GetPacketType ( &host_params ) ) { case SLAVE_AVAILABLE: - if ( ( net_master = MasterInit ( host_params ) ) ) + if ( ( net_master = InitMaster ( host_params ) ) ) SessionParamsDisplay ( &net_master->fParams ); else jack_error ( "Can't init new net master..." ); @@ -636,9 +636,9 @@ namespace Jack while ( fRunning ); } - JackNetMaster* JackNetMasterManager::MasterInit ( session_params_t& params ) + JackNetMaster* JackNetMasterManager::InitMaster ( session_params_t& params ) { - jack_log ( "JackNetMasterManager::MasterInit, Slave : %s", params.fName ); + jack_log ( "JackNetMasterManager::InitMaster, Slave : %s", params.fName ); //check MASTER <<==> SLAVE network protocol coherency if (params.fProtocolVersion != MASTER_PROTOCOL) { diff --git a/common/JackNetManager.h b/common/JackNetManager.h index b6ad7857..29c8386d 100644 --- a/common/JackNetManager.h +++ b/common/JackNetManager.h @@ -105,7 +105,7 @@ namespace Jack bool fAutoConnect; void Run(); - JackNetMaster* MasterInit ( session_params_t& params ); + JackNetMaster* InitMaster ( session_params_t& params ); master_list_it_t FindMaster ( uint32_t client_id ); int KillMaster ( session_params_t* params ); void SetSlaveName ( session_params_t& params ); diff --git a/common/JackServerGlobals.cpp b/common/JackServerGlobals.cpp index 815d5330..7698c640 100644 --- a/common/JackServerGlobals.cpp +++ b/common/JackServerGlobals.cpp @@ -30,6 +30,8 @@ namespace Jack JackServer* JackServerGlobals::fInstance; unsigned int JackServerGlobals::fUserCount; +bool (* JackServerGlobals::on_device_acquire)(const char * device_name) = NULL; +void (* JackServerGlobals::on_device_release)(const char * device_name) = NULL; int JackServerGlobals::Start(const char* server_name, jack_driver_desc_t* driver_desc, diff --git a/common/JackServerGlobals.h b/common/JackServerGlobals.h index c972a9bf..fac85bd3 100644 --- a/common/JackServerGlobals.h +++ b/common/JackServerGlobals.h @@ -38,6 +38,8 @@ struct SERVER_EXPORT JackServerGlobals { static JackServer* fInstance; static unsigned int fUserCount; + static bool (* on_device_acquire)(const char * device_name); + static void (* on_device_release)(const char * device_name); JackServerGlobals(); ~JackServerGlobals(); diff --git a/common/JackThreadedDriver.cpp b/common/JackThreadedDriver.cpp index a1e16556..0ab139eb 100644 --- a/common/JackThreadedDriver.cpp +++ b/common/JackThreadedDriver.cpp @@ -209,7 +209,7 @@ bool JackThreadedDriver::Execute() bool JackThreadedDriver::Init() { - if (fDriver->Init()) { + if (fDriver->Initialize()) { if (fDriver->IsRealTime()) { jack_log("JackThreadedDriver::Init IsRealTime"); // Will do "something" on OSX only... diff --git a/common/JackTransportEngine.h b/common/JackTransportEngine.h index 2adac8b1..a1ff2b97 100644 --- a/common/JackTransportEngine.h +++ b/common/JackTransportEngine.h @@ -195,7 +195,6 @@ class SERVER_EXPORT JackTransportEngine : public JackAtomicArrayStateInit(); + fDriver->Initialize(); fRunning = true; return false; } diff --git a/common/JackWeakAPI.cpp b/common/JackWeakAPI.cpp index 2715922b..4888a92a 100644 --- a/common/JackWeakAPI.cpp +++ b/common/JackWeakAPI.cpp @@ -152,17 +152,91 @@ DECL_FUNCTION(const char**, jack_port_get_connections, (const jack_port_t *port) DECL_FUNCTION(const char**, jack_port_get_all_connections, (const jack_port_t *port), (port)); DECL_FUNCTION(int, jack_port_tie, (jack_port_t *src, jack_port_t *dst), (src, dst)); DECL_FUNCTION(int, jack_port_untie, (jack_port_t *port), (port)); - - -DECL_FUNCTION(jack_nframes_t, jack_get_buffer_size, (jack_client_t *client), (client)); +DECL_FUNCTION(jack_nframes_t, jack_port_get_latency, (jack_port_t *port)); +DECL_FUNCTION(jack_nframes_t, jack_port_get_total_latency ,(jack_client_t *), (jack_port_t *port)); +DECL_VOID_FUNCTION(jack_port_set_latency, (jack_port_t *), (jack_nframes_t)); +DECL_FUNCTION(int, jack_recompute_total_latency, (jack_client_t*), (jack_port_t* port)); +DECL_FUNCTION(int, jack_recompute_total_latencies, (jack_client_t*)); + +DECL_FUNCTION(int, jack_port_set_name, (jack_port_t *port), (const char *port_name)); +DECL_FUNCTION(int, jack_port_set_alias, (jack_port_t *port), (const char *alias)); +DECL_FUNCTION(int, jack_port_unset_alias, (jack_port_t *port), (const char *alias)); +DECL_FUNCTION(int, jack_port_get_aliases, (const jack_port_t *port), (char* const aliases[2])); +DECL_FUNCTION(int, jack_port_request_monitor, (jack_port_t *port), (int onoff)); +DECL_FUNCTION(int, jack_port_request_monitor_by_name, (jack_client_t *client), (const char *port_name), (int onoff)); +DECL_FUNCTION(int, jack_port_ensure_monitor, (jack_port_t *port), (int onoff)); +DECL_FUNCTION(int, jack_port_monitoring_input, (jack_port_t *port)); +DECL_FUNCTION(int, jack_connect, (jack_client_t *), (const char *source_port), (const char *destination_port)); +DECL_FUNCTION(int, jack_disconnect, (jack_client_t *), (const char *source_port), (const char *destination_port)); +DECL_FUNCTION(int, jack_port_disconnect, (jack_client_t *), (jack_port_t *)); +DECL_FUNCTION(int, jack_port_name_size,(void)); +DECL_FUNCTION(int, jack_port_type_size,(void)); + DECL_FUNCTION(jack_nframes_t, jack_get_sample_rate, (jack_client_t *client), (client)); -DECL_FUNCTION(jack_nframes_t, jack_port_get_total_latency, (jack_client_t *client, jack_port_t *port), (client, port)); -DECL_VOID_FUNCTION(jack_set_error_function, (void (*func)(const char *)), (func)); - - +DECL_FUNCTION(jack_nframes_t, jack_get_buffer_size, (jack_client_t *client), (client)); DECL_FUNCTION(const char**, jack_get_ports, (jack_client_t *client, const char *port_name_pattern, const char * type_name_pattern, unsigned long flags), (client, port_name_pattern, type_name_pattern, flags)); -DECL_FUNCTION(int, jack_connect, (jack_client_t *client, const char *source_port, const char *destination_port), (client, source_port, destination_port)); -DECL_FUNCTION(int, jack_set_port_connect_callback, (jack_client_t *client, JackPortConnectCallback connect_callback, void *arg), - (client, connect_callback, arg)); -DECL_FUNCTION(jack_port_t *, jack_port_by_id, (jack_client_t *client, jack_port_id_t port_id), (client, port_id)); +DECL_FUNCTION(jack_port_t *, jack_port_by_name, (jack_client_t *), (const char *port_name)); +DECL_FUNCTION(jack_port_t *, jack_port_by_id, (jack_client_t *client), (jack_port_id_t port_id)); + +DECL_FUNCTION(int, jack_engine_takeover_timebase, (jack_client_t *)); +DECL_FUNCTION(jack_nframes_t, jack_frames_since_cycle_start, (const jack_client_t *)); +DECL_FUNCTION(jack_time_t, jack_get_time()); +DECL_FUNCTION(jack_nframes_t, jack_time_to_frames, (const jack_client_t *client), (jack_time_t time)); +DECL_FUNCTION(jack_time_t, jack_frames_to_time, (const jack_client_t *client), (jack_nframes_t frames)); +DECL_FUNCTION(jack_nframes_t, jack_frame_time, (const jack_client_t *)); +DECL_FUNCTION(jack_nframes_t, jack_last_frame_time, (const jack_client_t *client)); +DECL_FUNCTION(float, jack_cpu_load, (jack_client_t *client)); +DECL_FUNCTION(pthread_t, jack_client_thread_id, (jack_client_t *)); +DECL_VOID_FUNCTION(jack_set_error_function, (print_function)); +DECL_VOID_FUNCTION(jack_set_info_function, (print_function)); + +DECL_FUNCTION(float, jack_get_max_delayed_usecs, (jack_client_t *client)); +DECL_FUNCTION(float, jack_get_xrun_delayed_usecs, (jack_client_t *client)); +DECL_VOID_FUNCTION(jack_reset_max_delayed_usecs, (jack_client_t *client)); + +DECL_FUNCTION(int, jack_release_timebase, (jack_client_t *client)); +DECL_FUNCTION(int, jack_set_sync_callback, (jack_client_t *client, (JackSyncCallback sync_callback), (void *arg)); +DECL_FUNCTION(int, jack_set_sync_timeout, (jack_client_t *client), (jack_time_t timeout)); +DECL_FUNCTION(int, jack_set_timebase_callback, (jack_client_t *client), (int conditional), (JackTimebaseCallback timebase_callback), (void *arg)); +DECL_FUNCTION(int, jack_transport_locate, (jack_client_t *client), (jack_nframes_t frame)); +DECL_FUNCTION(jack_transport_state_t, jack_transport_query, (const jack_client_t *client), (jack_position_t *pos)); +DECL_FUNCTION(jack_nframes_t, jack_get_current_transport_frame, (const jack_client_t *client)); +DECL_FUNCTION(int, jack_transport_reposition, (jack_client_t *client), (jack_position_t *pos)); +DECL_VOID_FUNCTION(jack_transport_start, (jack_client_t *client)); +DECL_VOID_FUNCTION(jack_transport_stop, (jack_client_t *client)); +DECL_VOID_FUNCTION(jack_get_transport_info, (jack_client_t *client), (jack_transport_info_t *tinfo)); +DECL_VOID_FUNCTION(jack_set_transport_info, (jack_client_t *client), (jack_transport_info_t *tinfo)); + +DECL_FUNCTION(int, jack_client_real_time_priority, (jack_client_t*)); +DECL_FUNCTION(int, jack_client_max_real_time_priority, (jack_client_t*)); +DECL_FUNCTION(int, jack_acquire_real_time_scheduling, (pthread_t thread), (int priority)); +DECL_FUNCTION(int, jack_client_create_thread, (jack_client_t* client), + (pthread_t *thread), + (int priority), + (int realtime), // boolean + (thread_routine routine), + (void *arg)); +DECL_FUNCTION(int, jack_drop_real_time_scheduling, (pthread_t thread)); + +DECL_FUNCTION(int, jack_client_stop_thread, (jack_client_t* client), (pthread_t thread)); +DECL_FUNCTION(int, jack_client_kill_thread, (jack_client_t* client), (pthread_t thread)); +#ifndef WIN32 +DECL_VOID_FUNCTION(jack_set_thread_creator, (jack_thread_creator_t jtc)); +#endif +DECL_FUNCTION(char *, jack_get_internal_client_name, (jack_client_t *client, (jack_intclient_t intclient)); +DECL_FUNCTION(jack_intclient_t, jack_internal_client_handle, (jack_client_t *client), (const char *client_name), (jack_status_t *status)); +DECL_FUNCTION(jack_intclient_t, jack_internal_client_load, (jack_client_t *client), (const char *client_name), (jack_options_t options), (jack_status_t *status), ...)); + +DECL_FUNCTION(jack_status_t, jack_internal_client_unload, (jack_client_t *client), jack_intclient_t intclient)); +DECL_VOID_FUNCTION(jack_free, (void* ptr)); + +// MIDI + +DECL_FUNCTION(jack_nframes_t, jack_midi_get_event_count, (void* port_buffer)); +DECL_FUNCTION(int jack_midi_event_get(jack_midi_event_t* event, void* port_buffer, jack_nframes_t event_index); +DECL_VOID_FUNCTION(jack_midi_clear_buffer, (void* port_buffer)); +DECL_FUNCTION(size_t, jack_midi_max_event_size, (void* port_buffer)); +DECL_FUNCTION(jack_midi_data_t*, jack_midi_event_reserve, (void* port_buffer), (jack_nframes_t time), (size_t data_size)); +DECL_FUNCTIO(int jack_midi_event_write, (void* port_buffer), (jack_nframes_t time), (const jack_midi_data_t* data), (size_t data_size)); +DECL_FUNCTION(jack_nframes_t, jack_midi_get_lost_event_count, (void* port_buffer)); diff --git a/common/Jackdmp.cpp b/common/Jackdmp.cpp index e2bf6b8f..53a10bb0 100644 --- a/common/Jackdmp.cpp +++ b/common/Jackdmp.cpp @@ -32,6 +32,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "JackConstants.h" #include "JackDriverLoader.h" +#if defined(JACK_DBUS) && defined(__linux__) +#include +#include "audio_reserve.h" +#endif + /* This is a simple port of the old jackdmp.cpp file to use the new Jack 2.0 control API. Available options for the server are "hard-coded" in the source. A much better approach would be to use the control API to: @@ -92,6 +97,7 @@ static void usage(FILE* file) "usage: jackdmp [ --realtime OR -R [ --realtime-priority OR -P priority ] ]\n" " [ --name OR -n server-name ]\n" " [ --timeout OR -t client-timeout-in-msecs ]\n" + " [ --loopback OR -L loopback-port-number ]\n" " [ --midi OR -X midi-driver ]\n" " [ --verbose OR -v ]\n" #ifdef __linux__ @@ -156,17 +162,19 @@ int main(int argc, char* argv[]) const char* server_name = "default"; jackctl_driver_t * audio_driver_ctl; jackctl_driver_t * midi_driver_ctl; + jackctl_driver_t * loopback_driver_ctl; #ifdef __linux__ - const char *options = "-ad:X:P:uvrshVRL:STFl:t:mn:p:c:"; + const char *options = "-ad:X:P:uvrshVRL:STFl:t:mn:p:c:L:"; #else - const char *options = "-ad:X:P:uvrshVRL:STFl:t:mn:p:"; + const char *options = "-ad:X:P:uvrshVRL:STFl:t:mn:p:L:"; #endif struct option long_options[] = { #ifdef __linux__ { "clock-source", 1, 0, 'c' }, #endif + { "loopback-driver", 1, 0, 'L' }, { "audio-driver", 1, 0, 'd' }, { "midi-driver", 1, 0, 'X' }, { "verbose", 0, 0, 'v' }, @@ -200,14 +208,18 @@ int main(int argc, char* argv[]) int port_max = 512; int do_mlock = 1; int do_unlock = 0; + int loopback = 0; bool show_version = false; sigset_t signals; jackctl_parameter_t* param; union jackctl_parameter_value value; copyright(stdout); - - server_ctl = jackctl_server_create(); +#if defined(JACK_DBUS) && defined(__linux__) + server_ctl = jackctl_server_create(audio_acquire, audio_release); +#else + server_ctl = jackctl_server_create(NULL, NULL); +#endif if (server_ctl == NULL) { fprintf(stderr, "Failed to create server object\n"); return -1; @@ -245,6 +257,10 @@ int main(int argc, char* argv[]) seen_audio_driver = true; audio_driver_name = optarg; break; + + case 'L': + loopback = atoi(optarg); + break; case 'X': seen_midi_driver = true; @@ -316,14 +332,6 @@ int main(int argc, char* argv[]) } break; - case 'L': - param = jackctl_get_parameter(server_parameters, "loopback-ports"); - if (param != NULL) { - value.ui = atoi(optarg); - jackctl_parameter_set_value(param, &value); - } - break; - case 'T': param = jackctl_get_parameter(server_parameters, "temporary"); if (param != NULL) { @@ -414,6 +422,20 @@ int main(int argc, char* argv[]) jackctl_server_add_slave(server_ctl, midi_driver_ctl); } + + // Loopback driver + if (loopback > 0) { + loopback_driver_ctl = jackctl_server_get_driver(server_ctl, "loopback"); + if (loopback_driver_ctl != NULL) { + const JSList * loopback_parameters = jackctl_driver_get_parameters(loopback_driver_ctl); + param = jackctl_get_parameter(loopback_parameters, "channels"); + if (param != NULL) { + value.ui = loopback; + jackctl_parameter_set_value(param, &value); + } + jackctl_server_add_slave(server_ctl, loopback_driver_ctl); + } + } notify_server_start(server_name); diff --git a/common/jack/control.h b/common/jack/control.h index b3f5756e..263af1d1 100644 --- a/common/jack/control.h +++ b/common/jack/control.h @@ -109,12 +109,17 @@ jackctl_wait_signals( /** * Call this function to create server object. * + * @param on_device_acquire - Optional callback to be called before device is acquired. If false is returned, device usage will fail + * @param on_device_release - Optional callback to be called after device is released. + * * @return server object handle, NULL if creation of server object * failed. Successfully created server object must be destroyed with * paired call to ::jackctl_server_destroy */ jackctl_server_t * -jackctl_server_create(); +jackctl_server_create( + bool (* on_device_acquire)(const char * device_name), + void (* on_device_release)(const char * device_name)); /** * Call this function to destroy server object. diff --git a/common/jack/jack.h b/common/jack/jack.h index 2a31cbaf..5dc6290e 100644 --- a/common/jack/jack.h +++ b/common/jack/jack.h @@ -108,6 +108,7 @@ jack_client_t * jack_client_open (const char *client_name, * \bold THIS FUNCTION IS DEPRECATED AND SHOULD NOT BE USED IN * NEW JACK CLIENTS * +* @deprecated Please use jack_client_open(). */ jack_client_t * jack_client_new (const char *client_name); @@ -212,8 +213,7 @@ int jack_is_realtime (jack_client_t *client); * \bold THIS FUNCTION IS DEPRECATED AND SHOULD NOT BE USED IN * NEW JACK CLIENTS. * - * It should be replace by use of @ jack_cycle_wait and @ jack_cycle_signal functions. - * + * @deprecated Please use jack_cycle_wait() and jack_cycle_signal() functions. */ jack_nframes_t jack_thread_wait (jack_client_t*, int status); @@ -236,7 +236,7 @@ void jack_cycle_signal (jack_client_t* client, int status); /** * Tell the Jack server to call @a thread_callback in the RT thread. - * Typical use are in conjunction with @a jack_cycle_wait and @ jack_cycle_signal functions. + * Typical use are in conjunction with @a jack_cycle_wait and @a jack_cycle_signal functions. * The code in the supplied function must be suitable for real-time * execution. That means that it cannot call functions that might * block for a long time. This includes malloc, free, printf, @@ -483,7 +483,7 @@ int jack_set_xrun_callback (jack_client_t *, /*@}*/ /** - * @defgroup ServerControl Controlling & querying JACK server operation + * @defgroup ServerClientControl Controlling & querying JACK server operation * @{ */ @@ -835,7 +835,7 @@ int jack_port_set_alias (jack_port_t *port, const char *alias); */ int jack_port_unset_alias (jack_port_t *port, const char *alias); -/* +/** * Get any aliases known for @port. * * @return the number of aliases discovered for the port @@ -984,47 +984,57 @@ jack_port_t * jack_port_by_id (jack_client_t *client, /** * @defgroup TimeFunctions Handling time * @{ - */ + * + * JACK time is in units of 'frames', according to the current sample rate. + * The absolute value of frame times is meaningless, frame times have meaning + * only relative to each other. + */ /** - * @return the time in frames that has passed since the JACK server - * began the current process cycle. + * @return the estimated time in frames that has passed since the JACK + * server began the current process cycle. */ jack_nframes_t jack_frames_since_cycle_start (const jack_client_t *); /** - * @return an estimate of the current time in frames. This is a - * running counter, no significance should be attached to its value, - * but it can be compared to a previously returned value. + * @return the estimated current time in frames. + * This function is intended for use in other threads (not the process + * callback). The return value can be compared with the value of + * jack_last_frame_time to relate time in other threads to JACK time. */ jack_nframes_t jack_frame_time (const jack_client_t *); /** - * @return the frame_time after the last processing of the graph - * this is only to be used from the process callback. - * - * This function can be used to put timestamps generated by - * jack_frame_time() in correlation to the current process cycle. + * @return the precise time at the start of the current process cycle. + * This function may only be used from the process callback, and can + * be used to interpret timestamps generated by jack_frame_time() in + * other threads with respect to the current process cycle. + * + * This is the only jack time function that returns exact time: + * when used during the process callback it always returns the same + * value (until the next process callback, where it will return + * that value + nframes, etc). The return value is guaranteed to be + * monotonic and linear in this fashion unless an xrun occurs. + * If an xrun occurs, clients must check this value again, as time + * may have advanced in a non-linear way (e.g. cycles may have been skipped). */ jack_nframes_t jack_last_frame_time (const jack_client_t *client); /** - * @return estimated time in microseconds of the specified frame time + * @return the estimated time in microseconds of the specified frame time */ jack_time_t jack_frames_to_time(const jack_client_t *client, jack_nframes_t); /** - * @return estimated time in frames for the specified system time. + * @return the estimated time in frames for the specified system time. */ jack_nframes_t jack_time_to_frames(const jack_client_t *client, jack_time_t); /** * @return return JACK's current system time in microseconds, - * using JACK clock source. + * using the JACK clock source. * * The value returned is guaranteed to be monotonic, but not linear. - * - * This function is a client version of @function jack_get_microseconds(). */ jack_time_t jack_get_time(); diff --git a/common/jack/midiport.h b/common/jack/midiport.h index 68841ccd..da0b940d 100644 --- a/common/jack/midiport.h +++ b/common/jack/midiport.h @@ -47,7 +47,7 @@ typedef struct _jack_midi_event * @{ */ -/* Get number of events in a port buffer. +/** Get number of events in a port buffer. * * @param port_buffer Port buffer from which to retrieve event. * @return number of events inside @a port_buffer diff --git a/common/jack/types.h b/common/jack/types.h index 595dd510..fa65ce5c 100644 --- a/common/jack/types.h +++ b/common/jack/types.h @@ -454,6 +454,7 @@ typedef enum { JackBBTFrameOffset = 0x40, /**< Frame offset of BBT information */ JackAudioVideoRatio = 0x80, /**< audio frames per video frame */ JackVideoFrameOffset = 0x100 /**< frame offset of first video frame */ + } jack_position_bits_t; /** all valid position bits */ @@ -641,7 +642,6 @@ typedef struct { double ticks_per_beat; double beats_per_minute; -} -jack_transport_info_t; +} jack_transport_info_t; #endif /* __jack_types_h__ */ diff --git a/common/memops.c b/common/memops.c index 520b3dc8..7112d40e 100644 --- a/common/memops.c +++ b/common/memops.c @@ -164,6 +164,32 @@ } +#if defined (__SSE2__) && !defined (__sun__) + +/* generates same as _mm_set_ps(1.f, 1.f, 1f., 1f) but faster */ +static inline __m128 gen_one(void) +{ + volatile __m128i x; + __m128i ones = _mm_cmpeq_epi32(x, x); + return (__m128)_mm_slli_epi32 (_mm_srli_epi32(ones, 25), 23); +} + +static inline __m128 clip(__m128 s, __m128 min, __m128 max) +{ + return _mm_min_ps(max, _mm_max_ps(s, min)); +} + +static inline __m128i float_24_sse(__m128 s) +{ + const __m128 upper_bound = gen_one(); /* NORMALIZED_FLOAT_MAX */ + const __m128 lower_bound = _mm_sub_ps(_mm_setzero_ps(), upper_bound); + + __m128 clipped = clip(s, lower_bound, upper_bound); + __m128 scaled = _mm_mul_ps(clipped, _mm_set1_ps(SAMPLE_24BIT_SCALING)); + return _mm_cvtps_epi32(scaled); +} +#endif + /* Linear Congruential noise generator. From the music-dsp list * less random than rand(), but good enough and 10x faster */ @@ -254,7 +280,7 @@ void sample_move_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigne while (unrolled--) { __m128 in = _mm_load_ps(src); __m128 scaled = _mm_mul_ps(in, factor); - __m128 clipped = _mm_min_ps(int_max, _mm_max_ps(scaled, int_min)); + __m128 clipped = clip(scaled, int_min, int_max); __m128i y = _mm_cvttps_epi32(clipped); __m128i shifted = _mm_slli_epi32(y, 8); @@ -264,13 +290,11 @@ void sample_move_d32u24_sS (char *dst, jack_default_audio_sample_t *src, unsigne __m128i shuffled3 = _mm_shuffle_epi32(shifted, _MM_SHUFFLE(2, 1, 0, 3)); _mm_store_ss((float*)dst, (__m128)shifted); - dst += dst_skip; - _mm_store_ss((float*)dst, (__m128)shuffled1); - dst += dst_skip; - _mm_store_ss((float*)dst, (__m128)shuffled2); - dst += dst_skip; - _mm_store_ss((float*)dst, (__m128)shuffled3); - dst += dst_skip; + + _mm_store_ss((float*)(dst+dst_skip), (__m128)shuffled1); + _mm_store_ss((float*)(dst+2*dst_skip), (__m128)shuffled2); + _mm_store_ss((float*)(dst+3*dst_skip), (__m128)shuffled3); + dst += 4*dst_skip; src+= 4; } @@ -300,6 +324,8 @@ void sample_move_dS_s32u24s (jack_default_audio_sample_t *dst, char *src, unsign { /* ALERT: signed sign-extension portability !!! */ + const jack_default_audio_sample_t scaling = 1.0/SAMPLE_24BIT_SCALING; + while (nsamples--) { int x; #if __BYTE_ORDER == __LITTLE_ENDIAN @@ -319,7 +345,7 @@ void sample_move_dS_s32u24s (jack_default_audio_sample_t *dst, char *src, unsign x <<= 8; x |= (unsigned char)(src[0]); #endif - *dst = (x >> 8) / SAMPLE_24BIT_SCALING; + *dst = (x >> 8) * scaling; dst++; src += src_skip; } @@ -357,8 +383,9 @@ void sample_move_dS_s32u24 (jack_default_audio_sample_t *dst, char *src, unsigne /* ALERT: signed sign-extension portability !!! */ + const jack_default_audio_sample_t scaling = 1.0/SAMPLE_24BIT_SCALING; while (nsamples--) { - *dst = (*((int *) src) >> 8) / SAMPLE_24BIT_SCALING; + *dst = (*((int *) src) >> 8) * scaling; dst++; src += src_skip; } @@ -386,8 +413,38 @@ void sample_move_d24_sSs (char *dst, jack_default_audio_sample_t *src, unsigned void sample_move_d24_sS (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) { - int32_t z; - +#if defined (__SSE2__) && !defined (__sun__) + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + while (nsamples >= 4) { + int i; + int32_t z[4]; + __m128 samples = _mm_loadu_ps(src); + __m128i converted = float_24_sse(samples); + + __m128i shuffled1 = _mm_shuffle_epi32(converted, _MM_SHUFFLE(0, 3, 2, 1)); + __m128i shuffled2 = _mm_shuffle_epi32(converted, _MM_SHUFFLE(1, 0, 3, 2)); + __m128i shuffled3 = _mm_shuffle_epi32(converted, _MM_SHUFFLE(2, 1, 0, 3)); + + _mm_store_ss((float*)z, (__m128)converted); + _mm_store_ss((float*)z+1, (__m128)shuffled1); + _mm_store_ss((float*)z+2, (__m128)shuffled2); + _mm_store_ss((float*)z+3, (__m128)shuffled3); + + for (i = 0; i != 4; ++i) { +#if __BYTE_ORDER == __LITTLE_ENDIAN + memcpy (dst, z+i, 3); +#elif __BYTE_ORDER == __BIG_ENDIAN + memcpy (dst, (float*)((char *)&z + 1)+i, 3); +#endif + dst += dst_skip; + } + nsamples -= 4; + src += 4; + } +#endif + + int32_t z; + while (nsamples--) { float_24 (*src, z); #if __BYTE_ORDER == __LITTLE_ENDIAN @@ -398,12 +455,13 @@ void sample_move_d24_sS (char *dst, jack_default_audio_sample_t *src, unsigned l dst += dst_skip; src++; } -} +} void sample_move_dS_s24s (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip) { /* ALERT: signed sign-extension portability !!! */ + const jack_default_audio_sample_t scaling = 1.0/SAMPLE_24BIT_SCALING; while (nsamples--) { int x; #if __BYTE_ORDER == __LITTLE_ENDIAN @@ -427,15 +485,43 @@ void sample_move_dS_s24s (jack_default_audio_sample_t *dst, char *src, unsigned x |= 0xff << 24; } #endif - *dst = x / SAMPLE_24BIT_SCALING; + *dst = x * scaling; dst++; src += src_skip; } -} +} void sample_move_dS_s24 (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip) { - /* ALERT: signed sign-extension portability !!! */ + const jack_default_audio_sample_t scaling = 1.f/SAMPLE_24BIT_SCALING; + +#if defined (__SSE2__) && !defined (__sun__) + const __m128 scaling_block = _mm_set_ps1(scaling); + while (nsamples >= 4) { + int x0, x1, x2, x3; + +#if __BYTE_ORDER == __LITTLE_ENDIAN + memcpy((char*)&x0 + 1, src, 3); + memcpy((char*)&x1 + 1, src+src_skip, 3); + memcpy((char*)&x2 + 1, src+2*src_skip, 3); + memcpy((char*)&x3 + 1, src+3*src_skip, 3); +#elif __BYTE_ORDER == __BIG_ENDIAN + memcpy(&x0, src, 3); + memcpy(&x1, src+src_skip, 3); + memcpy(&x2, src+2*src_skip, 3); + memcpy(&x3, src+3*src_skip, 3); +#endif + src += 4 * src_skip; + + const __m128i block_i = _mm_set_epi32(x3, x2, x1, x0); + const __m128i shifted = _mm_srai_epi32(block_i, 8); + const __m128 converted = _mm_cvtepi32_ps (shifted); + const __m128 scaled = _mm_mul_ps(converted, scaling_block); + _mm_storeu_ps(dst, scaled); + dst += 4; + nsamples -= 4; + } +#endif while (nsamples--) { int x; @@ -445,11 +531,11 @@ void sample_move_dS_s24 (jack_default_audio_sample_t *dst, char *src, unsigned l memcpy(&x, src, 3); #endif x >>= 8; - *dst = x / SAMPLE_24BIT_SCALING; + *dst = x * scaling; dst++; src += src_skip; } -} +} void sample_move_d16_sSs (char *dst, jack_default_audio_sample_t *src, unsigned long nsamples, unsigned long dst_skip, dither_state_t *state) @@ -636,6 +722,7 @@ void sample_move_dither_shaped_d16_sS (char *dst, jack_default_audio_sample_t * void sample_move_dS_s16s (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip) { short z; + const jack_default_audio_sample_t scaling = 1.0/SAMPLE_16BIT_SCALING; /* ALERT: signed sign-extension portability !!! */ while (nsamples--) { @@ -648,7 +735,7 @@ void sample_move_dS_s16s (jack_default_audio_sample_t *dst, char *src, unsigned z <<= 8; z |= (unsigned char)(src[0]); #endif - *dst = z / SAMPLE_16BIT_SCALING; + *dst = z * scaling; dst++; src += src_skip; } @@ -657,8 +744,9 @@ void sample_move_dS_s16s (jack_default_audio_sample_t *dst, char *src, unsigned void sample_move_dS_s16 (jack_default_audio_sample_t *dst, char *src, unsigned long nsamples, unsigned long src_skip) { /* ALERT: signed sign-extension portability !!! */ + const jack_default_audio_sample_t scaling = 1.0/SAMPLE_16BIT_SCALING; while (nsamples--) { - *dst = (*((short *) src)) / SAMPLE_16BIT_SCALING; + *dst = (*((short *) src)) * scaling; dst++; src += src_skip; } diff --git a/common/wscript b/common/wscript index 2c7aa609..951ab68b 100644 --- a/common/wscript +++ b/common/wscript @@ -119,7 +119,6 @@ def build(bld): 'JackExternalClient.cpp', 'JackFreewheelDriver.cpp', 'JackInternalClient.cpp', - 'JackLoopbackDriver.cpp', 'JackServer.cpp', 'JackThreadedDriver.cpp', 'JackRestartThreadedDriver.cpp', @@ -212,7 +211,7 @@ def build(bld): clientlib.defines = 'HAVE_CONFIG_H' clientlib.uselib = uselib clientlib.install_path = '${LIBDIR}' - if bld.env['BUILD_JACKDBUS'] == True: + if bld.env['BUILD_JACKDBUS'] == True and bld.env['BUILD_JACKD'] == False: clientlib.uselib.append('DBUS-1') clientlib.includes = includes clientlib.name = 'clientlib' @@ -258,6 +257,10 @@ def build(bld): if bld.env['IS_SUN']: clientlib.env.append_value("LINKFLAGS", "-lnsl -lsocket") + if bld.env['BUILD_WITH_32_64']: + print "create 32bit lib..." + clientlib32bit = clientlib.clone('lib32') + create_jack_process_obj(bld, 'netmanager', 'JackNetManager.cpp', serverlib) create_jack_process_obj(bld, 'profiler', 'JackProfiler.cpp', serverlib) diff --git a/dbus/audio_reserve.c b/dbus/audio_reserve.c index 00412130..120db64f 100644 --- a/dbus/audio_reserve.c +++ b/dbus/audio_reserve.c @@ -22,74 +22,107 @@ #include #include #include +#include #include "reserve.h" #include "audio_reserve.h" #include "JackError.h" -static DBusConnection* connection = NULL; +#define DEVICE_MAX 2 + +typedef struct reserved_audio_device { + + char device_name[64]; + rd_device * reserved_device; + +} reserved_audio_device; + +static DBusConnection* gConnection = NULL; +static reserved_audio_device gReservedDevice[DEVICE_MAX]; +static int gReserveCount = 0; SERVER_EXPORT int audio_reservation_init() { DBusError error; - dbus_error_init(&error); - if (!(connection = dbus_bus_get(DBUS_BUS_SESSION, &error))) { + if (!(gConnection = dbus_bus_get(DBUS_BUS_SESSION, &error))) { jack_error("Failed to connect to session bus for device reservation %s\n", error.message); return -1; } + jack_info("audio_reservation_init"); return 0; } SERVER_EXPORT int audio_reservation_finish() { - if (connection) - dbus_connection_unref(connection); + if (gConnection) { + dbus_connection_unref(gConnection); + gConnection = NULL; + jack_info("audio_reservation_finish"); + } return 0; } -SERVER_EXPORT void* audio_acquire(int num) +SERVER_EXPORT bool audio_acquire(const char * device_name) { - DBusError error; - rd_device* device; - char audio_name[32]; - int e; - - snprintf(audio_name, sizeof(audio_name) - 1, "Audio%d", num); - if ((e = rd_acquire( - &device, - connection, - audio_name, + DBusError error; + int ret; + + // Open DBus connection first time + if (gReserveCount == 0) + audio_reservation_init(); + + assert(gReserveCount < DEVICE_MAX); + + if ((ret= rd_acquire( + &gReservedDevice[gReserveCount].reserved_device, + gConnection, + device_name, "Jack audio server", INT32_MAX, NULL, &error)) < 0) { - jack_error("Failed to acquire device name : %s error : %s", audio_name, (error.message ? error.message : strerror(-e))); - return NULL; + jack_error("Failed to acquire device name : %s error : %s", device_name, (error.message ? error.message : strerror(-ret))); + return false; } - jack_info("Acquire audio card %s", audio_name); - return (void*)device; + strcpy(gReservedDevice[gReserveCount].device_name, device_name); + gReserveCount++; + jack_info("Acquire audio card %s", device_name); + return true; } -SERVER_EXPORT void audio_reserve_loop() +SERVER_EXPORT void audio_release(const char * device_name) { - if (connection) { - while (dbus_connection_read_write_dispatch (connection, -1)) - ; // empty loop body + int i; + + // Look for corresponding reserved device + for (i = 0; i < DEVICE_MAX; i++) { + if (strcmp(gReservedDevice[i].device_name, device_name) == 0) + break; + } + + if (i < DEVICE_MAX) { + jack_info("Released audio card %s", device_name); + rd_release(gReservedDevice[i].reserved_device); + } else { + jack_error("Audio card %s not found!!", device_name); } + + // Close DBus connection last time + gReserveCount--; + if (gReserveCount == 0) + audio_reservation_finish(); } -SERVER_EXPORT void audio_release(void* dev) +SERVER_EXPORT void audio_reserve_loop() { - rd_device* device = (rd_device*)dev; - if (device) { - jack_info("Release audio card"); - rd_release(device); - } else { - jack_info("No audio card to release..."); - } + if (gConnection != NULL) { + while (dbus_connection_read_write_dispatch (gConnection, -1)) + ; // empty loop body + } } + diff --git a/dbus/audio_reserve.h b/dbus/audio_reserve.h index 9a5c34c5..db01f1ab 100644 --- a/dbus/audio_reserve.h +++ b/dbus/audio_reserve.h @@ -20,6 +20,7 @@ #define __audio_reserve__ #include "JackCompilerDeps.h" +#include #ifdef __cplusplus extern "C" { @@ -28,8 +29,8 @@ extern "C" { SERVER_EXPORT int audio_reservation_init(); SERVER_EXPORT int audio_reservation_finish(); -SERVER_EXPORT void* audio_acquire(int num); -SERVER_EXPORT void audio_release(void* dev); +SERVER_EXPORT bool audio_acquire(const char * device_name); +SERVER_EXPORT void audio_release(const char * device_name); SERVER_EXPORT void audio_reserve_loop(); #ifdef __cplusplus diff --git a/dbus/controller.c b/dbus/controller.c index f5c53f69..17b51fdf 100644 --- a/dbus/controller.c +++ b/dbus/controller.c @@ -29,6 +29,7 @@ #include "controller.h" #include "controller_internal.h" #include "xml.h" +#include "reserve.h" struct jack_dbus_interface_descriptor * g_jackcontroller_interfaces[] = { @@ -279,6 +280,68 @@ jack_controller_switch_master( return TRUE; } +#define DEVICE_MAX 2 + +typedef struct reserved_audio_device { + + char device_name[64]; + rd_device * reserved_device; + +} reserved_audio_device; + + +int g_device_count = 0; +static reserved_audio_device g_reserved_device[DEVICE_MAX]; + +static +bool +on_device_acquire(const char * device_name) +{ + int ret; + DBusError error; + + ret = rd_acquire( + &g_reserved_device[g_device_count].reserved_device, + g_connection, + device_name, + "Jack audio server", + INT32_MAX, + NULL, + &error); + if (ret < 0) + { + jack_error("Failed to acquire device name : %s error : %s", device_name, (error.message ? error.message : strerror(-ret))); + return false; + } + + strcpy(g_reserved_device[g_device_count].device_name, device_name); + g_device_count++; + jack_info("Acquired audio card %s", device_name); + return true; +} + +static +void +on_device_release(const char * device_name) +{ + int i; + + // Look for corresponding reserved device + for (i = 0; i < DEVICE_MAX; i++) { + if (strcmp(g_reserved_device[i].device_name, device_name) == 0) + break; + } + + if (i < DEVICE_MAX) { + jack_info("Released audio card %s", device_name); + rd_release(g_reserved_device[i].reserved_device); + } else { + jack_error("Audio card %s not found!!", device_name); + } + + g_device_count--; +} + void * jack_controller_create( DBusConnection *connection) @@ -303,7 +366,7 @@ jack_controller_create( goto fail; } - controller_ptr->server = jackctl_server_create(); + controller_ptr->server = jackctl_server_create(on_device_acquire, on_device_release); if (controller_ptr->server == NULL) { jack_error("Failed to create server object"); diff --git a/dbus/jackdbus.h b/dbus/jackdbus.h index 0c82de86..d94bc334 100644 --- a/dbus/jackdbus.h +++ b/dbus/jackdbus.h @@ -312,5 +312,6 @@ jack_dbus_send_signal( #define JACK_CONTROLLER_OBJECT_PATH "/org/jackaudio/Controller" extern struct jack_dbus_interface_descriptor * g_jackcontroller_interfaces[]; +extern DBusConnection * g_connection; #endif /* #ifndef DBUS_H__3DB2458F_44B2_43EA_882A_9F888DF71A88__INCLUDED */ diff --git a/dbus/reserve.c b/dbus/reserve.c index 9a9591d2..bc698a6a 100644 --- a/dbus/reserve.c +++ b/dbus/reserve.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "reserve.h" @@ -120,7 +121,7 @@ static DBusHandlerResult object_handler( dbus_error_init(&error); - d = userdata; + d = (rd_device*)userdata; assert(d->ref >= 1); if (dbus_message_is_method_call( @@ -296,7 +297,7 @@ static DBusHandlerResult filter_handler( dbus_error_init(&error); - d = userdata; + d = (rd_device*)userdata; if (dbus_message_is_signal(m, "org.freedesktop.DBus", "NameLost")) { const char *name; @@ -352,10 +353,7 @@ oom: return DBUS_HANDLER_RESULT_NEED_MEMORY; } - -static const struct DBusObjectPathVTable vtable ={ - .message_function = object_handler -}; +static DBusObjectPathVTable vtable; int rd_acquire( rd_device **_d, @@ -372,6 +370,8 @@ int rd_acquire( DBusMessage *m = NULL, *reply = NULL; dbus_bool_t good; + vtable.message_function = object_handler; + if (!error) error = &_error; @@ -389,7 +389,7 @@ int rd_acquire( if (!request_cb && priority != INT32_MAX) return -EINVAL; - if (!(d = calloc(sizeof(rd_device), 1))) + if (!(d = (rd_device *)calloc(sizeof(rd_device), 1))) return -ENOMEM; d->ref = 1; @@ -408,13 +408,13 @@ int rd_acquire( d->connection = dbus_connection_ref(connection); d->request_cb = request_cb; - if (!(d->service_name = malloc(sizeof(SERVICE_PREFIX) + strlen(device_name)))) { + if (!(d->service_name = (char*)malloc(sizeof(SERVICE_PREFIX) + strlen(device_name)))) { r = -ENOMEM; goto fail; } sprintf(d->service_name, SERVICE_PREFIX "%s", d->device_name); - if (!(d->object_path = malloc(sizeof(OBJECT_PREFIX) + strlen(device_name)))) { + if (!(d->object_path = (char*)malloc(sizeof(OBJECT_PREFIX) + strlen(device_name)))) { r = -ENOMEM; goto fail; } diff --git a/dbus/reserve.h b/dbus/reserve.h index b315a08c..6e16a07d 100644 --- a/dbus/reserve.h +++ b/dbus/reserve.h @@ -28,6 +28,13 @@ #include #include +# ifndef INT32_MIN +# define INT32_MIN (-2147483647-1) +# endif +# ifndef INT32_MAX +# define INT32_MAX (2147483647) +# endif + typedef struct rd_device rd_device; /* Prototype for a function that is called whenever someone else wants @@ -40,6 +47,10 @@ typedef int (*rd_request_cb_t)( rd_device *d, int forced); /* Non-zero if an application forcibly took the lock away without asking. If this is the case then the return value of this call is ignored. */ +#ifdef __cplusplus +extern "C" { +#endif + /* Try to lock the device. Returns 0 on success, a negative errno * style return value on error. The DBus error might be set as well if * the error was caused D-Bus. */ @@ -66,4 +77,8 @@ void rd_set_userdata(rd_device *d, void *userdata); * userdata was set. */ void* rd_get_userdata(rd_device *d); +#ifdef __cplusplus +} /* extern "C" */ +#endif + #endif diff --git a/dbus/wscript b/dbus/wscript index 8cef8baa..e23e67b0 100644 --- a/dbus/wscript +++ b/dbus/wscript @@ -32,10 +32,12 @@ def configure(conf): if conf.is_defined('HAVE_EXPAT'): conf.env['LIB_EXPAT'] = ['expat'] - conf.env['BUILD_JACKDBUS'] = conf.is_defined('HAVE_EXPAT') and conf.is_defined('HAVE_DBUS_1') + conf.env['BUILD_JACKDBUS1'] = conf.is_defined('HAVE_EXPAT') and conf.is_defined('HAVE_DBUS_1') + def build(bld): - if bld.env["BUILD_JACKDBUS"] != True: + + if bld.env['BUILD_JACKDBUS1'] != True: return obj = bld.new_task_gen('cc', 'program') @@ -59,6 +61,7 @@ def build(bld): #'xml_nop.c', 'xml_write_raw.c', 'sigsegv.c', + 'reserve.c', ] if bld.env['IS_LINUX']: obj.uselib = 'PTHREAD DL RT DBUS-1 EXPAT' diff --git a/doxyfile b/doxyfile index 84f79166..930b9eaf 100644 --- a/doxyfile +++ b/doxyfile @@ -304,7 +304,7 @@ WARN_LOGFILE = # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = common posix macosx macosx/coreaudio/ linux linux/alsa windows windows/portaudio common/jack/control.h +INPUT = common posix macosx macosx/coreaudio/ linux linux/alsa windows windows/portaudio common/jack/ # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp diff --git a/example-clients/server_control.cpp b/example-clients/server_control.cpp index c21492a3..64ec977c 100644 --- a/example-clients/server_control.cpp +++ b/example-clients/server_control.cpp @@ -167,7 +167,7 @@ int main(int argc, char *argv[]) } } - server = jackctl_server_create(); + server = jackctl_server_create(NULL, NULL); parameters = jackctl_server_get_parameters(server); /* diff --git a/linux/alsa/JackAlsaDriver.cpp b/linux/alsa/JackAlsaDriver.cpp index 59743dc9..45486f53 100644 --- a/linux/alsa/JackAlsaDriver.cpp +++ b/linux/alsa/JackAlsaDriver.cpp @@ -48,8 +48,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "usx2y.h" #include "generic.h" #include "memops.h" +#include "JackServerGlobals.h" -#include "audio_reserve.h" //#define DEBUG_WAKEUP 1 @@ -104,31 +104,48 @@ JackAlsaDriver::alsa_driver_check_capabilities (alsa_driver_t *driver) return 0; } -int -JackAlsaDriver::alsa_driver_check_card_type (alsa_driver_t *driver) +static +char * +get_control_device_name (const char * device_name) { - int err; - snd_ctl_card_info_t *card_info; char * ctl_name; regex_t expression; - snd_ctl_card_info_alloca (&card_info); - regcomp(&expression, "(plug)?hw:[0-9](,[0-9])?", REG_ICASE | REG_EXTENDED); - if (!regexec(&expression, driver->alsa_name_playback, 0, NULL, 0)) { + if (!regexec(&expression, device_name, 0, NULL, 0)) { /* the user wants a hw or plughw device, the ctl name * should be hw:x where x is the card number */ char tmp[5]; - strncpy(tmp, strstr(driver->alsa_name_playback, "hw"), 4); + strncpy(tmp, strstr(device_name, "hw"), 4); tmp[4] = '\0'; - jack_log("control device %s", tmp); + //jack_log("control device %s", tmp); ctl_name = strdup(tmp); } else { - ctl_name = strdup(driver->alsa_name_playback); + ctl_name = strdup(device_name); } + regfree(&expression); + + if (ctl_name == NULL) { + jack_error("strdup(\"%s\") failed.", ctl_name); + } + + return ctl_name; +} + +int +JackAlsaDriver::alsa_driver_check_card_type (alsa_driver_t *driver) +{ + int err; + snd_ctl_card_info_t *card_info; + char * ctl_name; + + snd_ctl_card_info_alloca (&card_info); + + ctl_name = get_control_device_name(driver->alsa_name_playback); + // XXX: I don't know the "right" way to do this. Which to use // driver->alsa_name_playback or driver->alsa_name_capture. if ((err = snd_ctl_open (&driver->ctl_handle, ctl_name, 0)) < 0) { @@ -145,9 +162,8 @@ JackAlsaDriver::alsa_driver_check_card_type (alsa_driver_t *driver) } driver->alsa_driver = strdup(snd_ctl_card_info_get_driver (card_info)); - jack_info("Using ALSA driver %s running on %s", driver->alsa_driver, snd_ctl_card_info_get_longname(card_info)); + jack_info("Using ALSA driver %s running on card %i - %s", driver->alsa_driver, snd_ctl_card_info_get_card(card_info), snd_ctl_card_info_get_longname(card_info)); - regfree(&expression); free(ctl_name); return alsa_driver_check_capabilities (driver); @@ -2143,22 +2159,45 @@ int JackAlsaDriver::Detach() return JackAudioDriver::Detach(); } -#if defined(JACK_DBUS) static int card_to_num(const char* device) { - const char* t; - int i; + int err; + char* ctl_name; + snd_ctl_card_info_t *card_info; + snd_ctl_t* ctl_handle; + int i = -1; - if ((t = strchr(device, ':'))) - device = t + 1; + snd_ctl_card_info_alloca (&card_info); - if ((i = snd_card_get_index(device)) < 0) { - i = atoi(device); + ctl_name = get_control_device_name(device); + if (ctl_name == NULL) { + jack_error("get_control_device_name() failed."); + goto fail; } + if ((err = snd_ctl_open (&ctl_handle, ctl_name, 0)) < 0) { + jack_error ("control open \"%s\" (%s)", ctl_name, + snd_strerror(err)); + goto free; + } + + if ((err = snd_ctl_card_info(ctl_handle, card_info)) < 0) { + jack_error ("control hardware info \"%s\" (%s)", + device, snd_strerror (err)); + goto close; + } + + i = snd_ctl_card_info_get_card(card_info); + +close: + snd_ctl_close(ctl_handle); + +free: + free(ctl_name); + +fail: return i; } -#endif int JackAlsaDriver::Open(jack_nframes_t nframes, jack_nframes_t user_nperiods, @@ -2192,25 +2231,24 @@ int JackAlsaDriver::Open(jack_nframes_t nframes, else if (strcmp(midi_driver_name, "raw") == 0) midi = alsa_rawmidi_new((jack_client_t*)this); -#if defined(JACK_DBUS) - if (audio_reservation_init() < 0) { - jack_error("Audio device reservation service not available...."); - } else if (strcmp(capture_driver_name, playback_driver_name) == 0) { // Same device for input and output - fReservedCaptureDevice = audio_acquire(card_to_num(capture_driver_name)); - if (fReservedCaptureDevice == NULL) { - jack_error("Error audio device %s cannot be acquired, trying to open it anyway...", capture_driver_name); - } - } else { - fReservedCaptureDevice = audio_acquire(card_to_num(capture_driver_name)); - if (fReservedCaptureDevice == NULL) { - jack_error("Error capture audio device %s cannot be acquired, trying to open it anyway...", capture_driver_name); - } - fReservedPlaybackDevice = audio_acquire(card_to_num(playback_driver_name)); - if (fReservedPlaybackDevice == NULL) { - jack_error("Error playback audio device %s cannot be acquired, trying to open it anyway...", playback_driver_name); - } + if (JackServerGlobals::on_device_acquire != NULL) + { + int capture_card = card_to_num(capture_driver_name); + int playback_card = card_to_num(playback_driver_name); + char audio_name[32]; + + snprintf(audio_name, sizeof(audio_name) - 1, "Audio%d", capture_card); + if (!JackServerGlobals::on_device_acquire(audio_name)) { + jack_error("Audio device %s cannot be acquired, trying to open it anyway...", capture_driver_name); + } + + if (playback_card != capture_card) { + snprintf(audio_name, sizeof(audio_name) - 1, "Audio%d", playback_card); + if (!JackServerGlobals::on_device_acquire(audio_name)) { + jack_error("Audio device %s cannot be acquired, trying to open it anyway...", playback_driver_name); + } + } } -#endif fDriver = alsa_driver_new ("alsa_pcm", (char*)playback_driver_name, (char*)capture_driver_name, NULL, @@ -2245,11 +2283,23 @@ int JackAlsaDriver::Close() { JackAudioDriver::Close(); alsa_driver_delete((alsa_driver_t*)fDriver); -#if defined(JACK_DBUS) - audio_release(fReservedCaptureDevice); - audio_release(fReservedPlaybackDevice); - audio_reservation_finish(); -#endif + + if (JackServerGlobals::on_device_release != NULL) + { + char audio_name[32]; + int capture_card = card_to_num(fCaptureDriverName); + if (capture_card >= 0) { + snprintf(audio_name, sizeof(audio_name) - 1, "Audio%d", capture_card); + JackServerGlobals::on_device_release(audio_name); + } + + int playback_card = card_to_num(fPlaybackDriverName); + if (playback_card >= 0 && playback_card != capture_card) { + snprintf(audio_name, sizeof(audio_name) - 1, "Audio%d", playback_card); + JackServerGlobals::on_device_release(audio_name); + } + } + return 0; } diff --git a/linux/alsa/JackAlsaDriver.h b/linux/alsa/JackAlsaDriver.h index 6fab0baf..fc66195a 100644 --- a/linux/alsa/JackAlsaDriver.h +++ b/linux/alsa/JackAlsaDriver.h @@ -40,8 +40,8 @@ class JackAlsaDriver : public JackAudioDriver private: jack_driver_t* fDriver; - void* fReservedCaptureDevice; - void* fReservedPlaybackDevice; + int fReservedCaptureDevice; + int fReservedPlaybackDevice; void alsa_driver_release_channel_dependent_memory(alsa_driver_t *driver); int alsa_driver_check_capabilities(alsa_driver_t *driver); @@ -121,8 +121,8 @@ class JackAlsaDriver : public JackAudioDriver JackAlsaDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table) : JackAudioDriver(name, alias, engine, table) ,fDriver(NULL) - ,fReservedCaptureDevice(NULL) - ,fReservedPlaybackDevice(NULL) + ,fReservedCaptureDevice(-1) + ,fReservedPlaybackDevice(-1) {} virtual ~JackAlsaDriver() {} diff --git a/linux/alsa/hammerfall.c b/linux/alsa/hammerfall.c index 74f7941e..c2e3efea 100644 --- a/linux/alsa/hammerfall.c +++ b/linux/alsa/hammerfall.c @@ -206,8 +206,10 @@ hammerfall_release (jack_hardware_t *hw) return; } - pthread_cancel (h->monitor_thread); - pthread_join (h->monitor_thread, &status); + if (h->monitor_thread) { + pthread_cancel (h->monitor_thread); + pthread_join (h->monitor_thread, &status); + } free (h); } diff --git a/linux/wscript b/linux/wscript index 966a8ddf..8e12b8ad 100644 --- a/linux/wscript +++ b/linux/wscript @@ -31,10 +31,14 @@ def build(bld): jackd.includes = ['../linux', '../posix', '../common/jack', '../common', '../dbus'] jackd.defines = 'HAVE_CONFIG_H' jackd.source = ['../common/Jackdmp.cpp'] - jackd.uselib = 'PTHREAD DL RT' + if bld.env['IS_LINUX'] and bld.env['BUILD_JACKDBUS']: + jackd.source += ['../dbus/reserve.c', '../dbus/audio_reserve.c'] + jackd.uselib = 'PTHREAD DL RT DBUS-1' + else: + jackd.uselib = 'PTHREAD DL RT' jackd.uselib_local = 'serverlib' jackd.target = 'jackd' - + create_jack_driver_obj(bld, 'dummy', '../common/JackDummyDriver.cpp') alsa_driver_src = ['alsa/JackAlsaDriver.cpp', @@ -47,10 +51,6 @@ def build(bld): 'alsa/hammerfall.c', 'alsa/ice1712.c' ] - - if bld.env['BUILD_JACKDBUS']: - alsa_driver_src += ['../dbus/reserve.c', '../dbus/audio_reserve.c'] - if bld.env['BUILD_DRIVER_ALSA'] == True: create_jack_driver_obj(bld, 'alsa', alsa_driver_src, "ALSA") @@ -63,3 +63,4 @@ def build(bld): create_jack_driver_obj(bld, 'net', '../common/JackNetDriver.cpp') + create_jack_driver_obj(bld, 'loopback', '../common/JackLoopbackDriver.cpp') diff --git a/macosx/Jack-Info.plist b/macosx/Jack-Info.plist index ea2a9e42..924e644a 100644 --- a/macosx/Jack-Info.plist +++ b/macosx/Jack-Info.plist @@ -19,6 +19,6 @@ CFBundleSignature ???? CFBundleVersion - 1.9.2 + 1.9.3 diff --git a/macosx/JackMachSemaphore.h b/macosx/JackMachSemaphore.h index c82fa8d5..e87f0c5c 100644 --- a/macosx/JackMachSemaphore.h +++ b/macosx/JackMachSemaphore.h @@ -47,7 +47,7 @@ class SERVER_EXPORT JackMachSemaphore : public detail::JackSynchro public: - JackMachSemaphore(): fSemaphore(0) + JackMachSemaphore():JackSynchro(), fSemaphore(0) {} bool Signal(); diff --git a/macosx/JackPlatformPlug_os.h b/macosx/JackPlatformPlug_os.h index 24d94252..c52a259f 100644 --- a/macosx/JackPlatformPlug_os.h +++ b/macosx/JackPlatformPlug_os.h @@ -35,7 +35,7 @@ namespace Jack /* __JackPlatformMutex__ */ #include "JackPosixMutex.h" -namespace Jack {typedef JackPosixMutex JackMutex; } +namespace Jack { typedef JackPosixMutex JackMutex; } /* __JackPlatformThread__ */ #include "JackMachThread.h" @@ -47,8 +47,6 @@ namespace Jack { typedef JackMachSemaphore JackSynchro; } /* __JackPlatformProcessSync__ */ #include "JackProcessSync.h" -//#include "JackMachProcessSync.h" -//namespace Jack { typedef JackMachProcessSync JackProcessSync; } /* Only on windows a special JackProcessSync is used. It is directly defined by including JackProcessSync.h here */ /* __JackPlatformServerChannel__ */ diff --git a/macosx/Jackdmp.xcodeproj/project.pbxproj b/macosx/Jackdmp.xcodeproj/project.pbxproj index 32ac3988..e0839f84 100644 --- a/macosx/Jackdmp.xcodeproj/project.pbxproj +++ b/macosx/Jackdmp.xcodeproj/project.pbxproj @@ -19,6 +19,11 @@ 4B35C6AC0D4733B9000DE7AE /* PBXTargetDependency */, 4B35C6B00D4733B9000DE7AE /* PBXTargetDependency */, 4B35C6B20D4733B9000DE7AE /* PBXTargetDependency */, + 4BDCDC2C1002036100B15929 /* PBXTargetDependency */, + 4BDCDC2E1002036100B15929 /* PBXTargetDependency */, + 4BDCDC301002036100B15929 /* PBXTargetDependency */, + 4BDCDC39100203D500B15929 /* PBXTargetDependency */, + 4BDCDC3B100203D500B15929 /* PBXTargetDependency */, 4B35C6860D4733B9000DE7AE /* PBXTargetDependency */, 4B35C6880D4733B9000DE7AE /* PBXTargetDependency */, 4B35C68A0D4733B9000DE7AE /* PBXTargetDependency */, @@ -29,8 +34,6 @@ 4B35C6940D4733B9000DE7AE /* PBXTargetDependency */, 4B35C6960D4733B9000DE7AE /* PBXTargetDependency */, 4B0A29300D5210C4002EFF74 /* PBXTargetDependency */, - 4B35C6980D4733B9000DE7AE /* PBXTargetDependency */, - 4B35C69A0D4733B9000DE7AE /* PBXTargetDependency */, 4B35C69C0D4733B9000DE7AE /* PBXTargetDependency */, 4B35C69E0D4733B9000DE7AE /* PBXTargetDependency */, 4B35C6A00D4733B9000DE7AE /* PBXTargetDependency */, @@ -41,9 +44,7 @@ 4BFA83380DF6AB540087B4E1 /* PBXTargetDependency */, 4BFA833A0DF6AB540087B4E1 /* PBXTargetDependency */, 4BFA833C0DF6AB540087B4E1 /* PBXTargetDependency */, - 4B35C6A60D4733B9000DE7AE /* PBXTargetDependency */, - 4B35C6A80D4733B9000DE7AE /* PBXTargetDependency */, - 4B35C6AA0D4733B9000DE7AE /* PBXTargetDependency */, + 4B43A8E91014618D00E52943 /* PBXTargetDependency */, ); name = "All Universal 32/64 bits"; productName = All; @@ -61,6 +62,7 @@ 4BF339280F8B87800080FB5B /* PBXTargetDependency */, 4B699DBC097D421700A18468 /* PBXTargetDependency */, BA222AF20DC883F3001A17F4 /* PBXTargetDependency */, + 4B43A8CD1014607100E52943 /* PBXTargetDependency */, 4BD624D30CBCF55700DE782F /* PBXTargetDependency */, BA222AF00DC883EF001A17F4 /* PBXTargetDependency */, 4B19B32C0E23636E00DD4A82 /* PBXTargetDependency */, @@ -81,13 +83,7 @@ 4B0A28F40D520D11002EFF74 /* PBXTargetDependency */, 4B363DE50DEB037F001F72D9 /* PBXTargetDependency */, 4BFA99AC0AAAF41D009E916C /* PBXTargetDependency */, - 4BFA99500AAAED90009E916C /* PBXTargetDependency */, - 4BFA99520AAAED90009E916C /* PBXTargetDependency */, - 4B5F25B30DEEA2430041E486 /* PBXTargetDependency */, 4BFA99540AAAED90009E916C /* PBXTargetDependency */, - 4BFA99580AAAED90009E916C /* PBXTargetDependency */, - 4BFA995A0AAAED90009E916C /* PBXTargetDependency */, - 4BFA995C0AAAED90009E916C /* PBXTargetDependency */, 4B363E750DEB0838001F72D9 /* PBXTargetDependency */, 4B363E770DEB0838001F72D9 /* PBXTargetDependency */, 4B363EF20DEB0965001F72D9 /* PBXTargetDependency */, @@ -210,7 +206,6 @@ 4B35C4AE0D4731D1000DE7AE /* JackMachNotifyChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB298908AF450200D450D4 /* JackMachNotifyChannel.h */; }; 4B35C4AF0D4731D1000DE7AE /* JackMachServerChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB297808AF44ED00D450D4 /* JackMachServerChannel.h */; }; 4B35C4B00D4731D1000DE7AE /* JackMachServerNotifyChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB297A08AF44ED00D450D4 /* JackMachServerNotifyChannel.h */; }; - 4B35C4B10D4731D1000DE7AE /* JackLoopbackDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF70ACB0908EE95008B75AD /* JackLoopbackDriver.h */; }; 4B35C4B20D4731D1000DE7AE /* JackConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B66A8580934964500A89560 /* JackConstants.h */; }; 4B35C4B30D4731D1000DE7AE /* JackTransportEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD4B4D409BACD9600750C0F /* JackTransportEngine.h */; }; 4B35C4B40D4731D1000DE7AE /* JackServerGlobals.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC2168D0A444BED00BDA09F /* JackServerGlobals.h */; }; @@ -255,7 +250,6 @@ 4B35C4E70D4731D1000DE7AE /* JackMachNotifyChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB298808AF450200D450D4 /* JackMachNotifyChannel.cpp */; }; 4B35C4E80D4731D1000DE7AE /* JackMachServerChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB297908AF44ED00D450D4 /* JackMachServerChannel.cpp */; }; 4B35C4E90D4731D1000DE7AE /* JackMachServerNotifyChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB297708AF44ED00D450D4 /* JackMachServerNotifyChannel.cpp */; }; - 4B35C4EA0D4731D1000DE7AE /* JackLoopbackDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF70ACA0908EE95008B75AD /* JackLoopbackDriver.cpp */; }; 4B35C4EB0D4731D1000DE7AE /* JackTransportEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD4B4D509BACD9600750C0F /* JackTransportEngine.cpp */; }; 4B35C4EC0D4731D1000DE7AE /* JackServerAPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1F50834EFB000C94B91 /* JackServerAPI.cpp */; }; 4B35C4ED0D4731D1000DE7AE /* JackServerGlobals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BC216880A444BDE00BDA09F /* JackServerGlobals.cpp */; }; @@ -300,6 +294,10 @@ 4B363F3E0DEB0C31001F72D9 /* showtime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363F3D0DEB0C31001F72D9 /* showtime.c */; }; 4B363F760DEB0D7D001F72D9 /* impulse_grabber.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363F750DEB0D7D001F72D9 /* impulse_grabber.c */; }; 4B3F49080AD8503300491C6E /* cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B3F49070AD8503300491C6E /* cpu.c */; }; + 4B43A8CA1014605000E52943 /* JackLoopbackDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B43A8C81014605000E52943 /* JackLoopbackDriver.cpp */; }; + 4B43A8CB1014605000E52943 /* JackLoopbackDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B43A8C91014605000E52943 /* JackLoopbackDriver.h */; }; + 4B43A8DF1014615800E52943 /* JackLoopbackDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B43A8C91014605000E52943 /* JackLoopbackDriver.h */; }; + 4B43A8E11014615800E52943 /* JackLoopbackDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B43A8C81014605000E52943 /* JackLoopbackDriver.cpp */; }; 4B4CA9750E02CF9600F4BFDA /* JackRestartThreadedDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B4CA9730E02CF9600F4BFDA /* JackRestartThreadedDriver.h */; }; 4B4CA9760E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4CA9740E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp */; }; 4B4CA9770E02CF9600F4BFDA /* JackRestartThreadedDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B4CA9730E02CF9600F4BFDA /* JackRestartThreadedDriver.h */; }; @@ -415,7 +413,6 @@ 4B699C77097D421600A18468 /* JackMachNotifyChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB298908AF450200D450D4 /* JackMachNotifyChannel.h */; }; 4B699C78097D421600A18468 /* JackMachServerChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB297808AF44ED00D450D4 /* JackMachServerChannel.h */; }; 4B699C79097D421600A18468 /* JackMachServerNotifyChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB297A08AF44ED00D450D4 /* JackMachServerNotifyChannel.h */; }; - 4B699C7A097D421600A18468 /* JackLoopbackDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF70ACB0908EE95008B75AD /* JackLoopbackDriver.h */; }; 4B699C7B097D421600A18468 /* JackConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B66A8580934964500A89560 /* JackConstants.h */; }; 4B699C7E097D421600A18468 /* JackMachPort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B799AD607899652003F3F15 /* JackMachPort.cpp */; }; 4B699C7F097D421600A18468 /* JackShmMem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1880834EE7900C94B91 /* JackShmMem.cpp */; }; @@ -445,7 +442,6 @@ 4B699CA2097D421600A18468 /* JackMachNotifyChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB298808AF450200D450D4 /* JackMachNotifyChannel.cpp */; }; 4B699CA3097D421600A18468 /* JackMachServerChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB297908AF44ED00D450D4 /* JackMachServerChannel.cpp */; }; 4B699CA4097D421600A18468 /* JackMachServerNotifyChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB297708AF44ED00D450D4 /* JackMachServerNotifyChannel.cpp */; }; - 4B699CA5097D421600A18468 /* JackLoopbackDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF70ACA0908EE95008B75AD /* JackLoopbackDriver.cpp */; }; 4B699CB4097D421600A18468 /* metro.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D16B0834EDF000C94B91 /* metro.c */; }; 4B699CC4097D421600A18468 /* lsp.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1690834EDE600C94B91 /* lsp.c */; }; 4B699CF6097D421600A18468 /* freewheel.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1710834EE0F00C94B91 /* freewheel.c */; }; @@ -504,16 +500,11 @@ 4BA4ADB50E87AB2600F26C85 /* JackCoreAudioDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BE5FECC0E725C090020B576 /* JackCoreAudioDriver.h */; }; 4BA692B30CBE4C2D00EAD520 /* ipload.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BA692B20CBE4C2D00EAD520 /* ipload.c */; }; 4BA692D70CBE4CC600EAD520 /* ipunload.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BA692D60CBE4CC600EAD520 /* ipunload.c */; }; - 4BA7BDCE0DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; }; - 4BA7BDCF0DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; }; - 4BA7BDD00DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; }; - 4BA7BDD10DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; }; - 4BA7BDD20DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; }; - 4BA7BE0F0DC232A400AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; }; - 4BA7BE1A0DC2347500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; }; - 4BA7BE200DC234FB00AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; }; - 4BA7BE240DC2350D00AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; }; - 4BA7BE270DC2352A00AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; }; + 4BA7BE0F0DC232A400AA3457 /* Jackdmp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackdmp.framework */; }; + 4BA7BE1A0DC2347500AA3457 /* Jackdmp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackdmp.framework */; }; + 4BA7BE200DC234FB00AA3457 /* Jackdmp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackdmp.framework */; }; + 4BA7BE240DC2350D00AA3457 /* Jackdmp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackdmp.framework */; }; + 4BA7BE270DC2352A00AA3457 /* Jackdmp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackdmp.framework */; }; 4BA7FECA0D8E76650017FF73 /* control.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BA7FEC80D8E76650017FF73 /* control.c */; }; 4BAB95B80B9E20B800A0C723 /* JackPortType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BAB95B60B9E20B800A0C723 /* JackPortType.cpp */; }; 4BAB95B90B9E20B800A0C723 /* JackPortType.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BAB95B70B9E20B800A0C723 /* JackPortType.h */; }; @@ -554,6 +545,52 @@ 4BD4B4D809BACD9600750C0F /* JackTransportEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD4B4D409BACD9600750C0F /* JackTransportEngine.h */; }; 4BD4B4D909BACD9600750C0F /* JackTransportEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD4B4D509BACD9600750C0F /* JackTransportEngine.cpp */; }; 4BD6240D0CBCF16600DE782F /* inprocess.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BD6240C0CBCF16600DE782F /* inprocess.c */; }; + 4BDCDB951001FB9C00B15929 /* JackCoreMidiDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF339140F8B86DC0080FB5B /* JackCoreMidiDriver.h */; }; + 4BDCDB971001FB9C00B15929 /* JackCoreMidiDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF339150F8B86DC0080FB5B /* JackCoreMidiDriver.cpp */; }; + 4BDCDBB91001FCC000B15929 /* JackNetDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = BA222ADD0DC882A5001A17F4 /* JackNetDriver.h */; }; + 4BDCDBBA1001FCC000B15929 /* JackNetInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B76C7690E5AB2DB00E2AC21 /* JackNetInterface.h */; }; + 4BDCDBBB1001FCC000B15929 /* JackNetUnixSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC3B6BA0E703BCC0066E42F /* JackNetUnixSocket.h */; }; + 4BDCDBBD1001FCC000B15929 /* JackNetDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA222ADC0DC882A5001A17F4 /* JackNetDriver.cpp */; }; + 4BDCDBBE1001FCC000B15929 /* JackNetInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B76C7680E5AB2DB00E2AC21 /* JackNetInterface.cpp */; }; + 4BDCDBBF1001FCC000B15929 /* JackNetUnixSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BC3B6B90E703BCC0066E42F /* JackNetUnixSocket.cpp */; }; + 4BDCDBD11001FD0100B15929 /* JackWaitThreadedDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BBC93B80DF9736C002DF220 /* JackWaitThreadedDriver.cpp */; }; + 4BDCDBD21001FD0200B15929 /* JackWaitThreadedDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BBC93B90DF9736C002DF220 /* JackWaitThreadedDriver.h */; }; + 4BDCDBD91001FD2D00B15929 /* JackNetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BA222AEC0DC883B3001A17F4 /* JackNetManager.h */; }; + 4BDCDBDA1001FD2D00B15929 /* JackNetInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B76C7690E5AB2DB00E2AC21 /* JackNetInterface.h */; }; + 4BDCDBDB1001FD2D00B15929 /* JackNetUnixSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC3B6BA0E703BCC0066E42F /* JackNetUnixSocket.h */; }; + 4BDCDBDC1001FD2D00B15929 /* JackArgParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF284170F31B4BC00B05BE3 /* JackArgParser.h */; }; + 4BDCDBDE1001FD2D00B15929 /* JackNetManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA222AEB0DC883B3001A17F4 /* JackNetManager.cpp */; }; + 4BDCDBDF1001FD2D00B15929 /* JackNetInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B76C7680E5AB2DB00E2AC21 /* JackNetInterface.cpp */; }; + 4BDCDBE01001FD2D00B15929 /* JackNetUnixSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BC3B6B90E703BCC0066E42F /* JackNetUnixSocket.cpp */; }; + 4BDCDBE11001FD2D00B15929 /* JackMachTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF5FBC80E878D24003D2374 /* JackMachTime.c */; }; + 4BDCDBE21001FD2D00B15929 /* JackArgParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF284160F31B4BC00B05BE3 /* JackArgParser.cpp */; }; + 4BDCDBEE1001FD7300B15929 /* JackAudioAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B19B3070E2362E700DD4A82 /* JackAudioAdapter.h */; }; + 4BDCDBEF1001FD7300B15929 /* JackAudioAdapterInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B19B3090E2362E700DD4A82 /* JackAudioAdapterInterface.h */; }; + 4BDCDBF01001FD7300B15929 /* JackException.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B19B30C0E2362E700DD4A82 /* JackException.h */; }; + 4BDCDBF11001FD7300B15929 /* JackLibSampleRateResampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B19B30F0E2362E700DD4A82 /* JackLibSampleRateResampler.h */; }; + 4BDCDBF21001FD7300B15929 /* JackCoreAudioAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BE5FED00E725C320020B576 /* JackCoreAudioAdapter.h */; }; + 4BDCDBF41001FD7300B15929 /* JackAudioAdapter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B19B3060E2362E700DD4A82 /* JackAudioAdapter.cpp */; }; + 4BDCDBF51001FD7300B15929 /* JackAudioAdapterInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B19B3080E2362E700DD4A82 /* JackAudioAdapterInterface.cpp */; }; + 4BDCDBF61001FD7300B15929 /* JackLibSampleRateResampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B19B30E0E2362E700DD4A82 /* JackLibSampleRateResampler.cpp */; }; + 4BDCDBF71001FD7300B15929 /* JackResampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B19B3120E2362E700DD4A82 /* JackResampler.cpp */; }; + 4BDCDBF81001FD7300B15929 /* JackAudioAdapterFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF4BAB00E3480AB00403CDF /* JackAudioAdapterFactory.cpp */; }; + 4BDCDBF91001FD7300B15929 /* JackCoreAudioAdapter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BE5FECF0E725C320020B576 /* JackCoreAudioAdapter.cpp */; }; + 4BDCDC091001FDA800B15929 /* JackArgParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF284160F31B4BC00B05BE3 /* JackArgParser.cpp */; }; + 4BDCDC0A1001FDA800B15929 /* JackArgParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF284170F31B4BC00B05BE3 /* JackArgParser.h */; }; + 4BDCDC111001FDE300B15929 /* JackAudioAdapterInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B19B3090E2362E700DD4A82 /* JackAudioAdapterInterface.h */; }; + 4BDCDC121001FDE300B15929 /* JackException.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B19B30C0E2362E700DD4A82 /* JackException.h */; }; + 4BDCDC131001FDE300B15929 /* JackLibSampleRateResampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B19B30F0E2362E700DD4A82 /* JackLibSampleRateResampler.h */; }; + 4BDCDC141001FDE300B15929 /* JackNetAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B5E08E00E5B676C00BEE4E0 /* JackNetAdapter.h */; }; + 4BDCDC151001FDE300B15929 /* JackNetInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B76C7690E5AB2DB00E2AC21 /* JackNetInterface.h */; }; + 4BDCDC161001FDE300B15929 /* JackAudioAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B19B3070E2362E700DD4A82 /* JackAudioAdapter.h */; }; + 4BDCDC171001FDE300B15929 /* JackNetUnixSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC3B6BA0E703BCC0066E42F /* JackNetUnixSocket.h */; }; + 4BDCDC191001FDE300B15929 /* JackAudioAdapterInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B19B3080E2362E700DD4A82 /* JackAudioAdapterInterface.cpp */; }; + 4BDCDC1A1001FDE300B15929 /* JackLibSampleRateResampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B19B30E0E2362E700DD4A82 /* JackLibSampleRateResampler.cpp */; }; + 4BDCDC1B1001FDE300B15929 /* JackResampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B19B3120E2362E700DD4A82 /* JackResampler.cpp */; }; + 4BDCDC1C1001FDE300B15929 /* JackNetAdapter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B5E08DF0E5B676C00BEE4E0 /* JackNetAdapter.cpp */; }; + 4BDCDC1D1001FDE300B15929 /* JackNetInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B76C7680E5AB2DB00E2AC21 /* JackNetInterface.cpp */; }; + 4BDCDC1E1001FDE300B15929 /* JackAudioAdapter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B19B3060E2362E700DD4A82 /* JackAudioAdapter.cpp */; }; + 4BDCDC1F1001FDE300B15929 /* JackNetUnixSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BC3B6B90E703BCC0066E42F /* JackNetUnixSocket.cpp */; }; 4BE3225A0CC611EF00AFA640 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B6C737F0CC60A6D001AFFD4 /* types.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4BE3225B0CC611F500AFA640 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B6C737F0CC60A6D001AFFD4 /* types.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4BE4CC010CDA153400CCF5BB /* JackTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BE4CBFF0CDA153400CCF5BB /* JackTools.cpp */; }; @@ -577,12 +614,6 @@ 4BF284190F31B4BC00B05BE3 /* JackArgParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF284170F31B4BC00B05BE3 /* JackArgParser.h */; }; 4BF2841A0F31B4BC00B05BE3 /* JackArgParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF284160F31B4BC00B05BE3 /* JackArgParser.cpp */; }; 4BF2841B0F31B4BC00B05BE3 /* JackArgParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF284170F31B4BC00B05BE3 /* JackArgParser.h */; }; - 4BF2F4210F9F4DA300B3FFAD /* JackDummyDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BC3988908B3CF6C00B6F371 /* JackDummyDriver.cpp */; }; - 4BF2F4220F9F4DA700B3FFAD /* JackDummyDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BC3988908B3CF6C00B6F371 /* JackDummyDriver.cpp */; }; - 4BF339160F8B86DC0080FB5B /* JackCoreMidiDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF339140F8B86DC0080FB5B /* JackCoreMidiDriver.h */; }; - 4BF339170F8B86DC0080FB5B /* JackCoreMidiDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF339150F8B86DC0080FB5B /* JackCoreMidiDriver.cpp */; }; - 4BF339180F8B86DC0080FB5B /* JackCoreMidiDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF339140F8B86DC0080FB5B /* JackCoreMidiDriver.h */; }; - 4BF339190F8B86DC0080FB5B /* JackCoreMidiDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF339150F8B86DC0080FB5B /* JackCoreMidiDriver.cpp */; }; 4BF3391A0F8B86DC0080FB5B /* JackCoreMidiDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF339140F8B86DC0080FB5B /* JackCoreMidiDriver.h */; }; 4BF3391B0F8B86DC0080FB5B /* JackCoreMidiDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF339150F8B86DC0080FB5B /* JackCoreMidiDriver.cpp */; }; 4BF339210F8B873E0080FB5B /* JackMidiDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF3391F0F8B873E0080FB5B /* JackMidiDriver.cpp */; }; @@ -598,7 +629,6 @@ 4BF5FBC90E878D24003D2374 /* JackMachTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF5FBC80E878D24003D2374 /* JackMachTime.c */; }; 4BF5FBCA0E878D24003D2374 /* JackMachTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF5FBC80E878D24003D2374 /* JackMachTime.c */; }; 4BF5FBCB0E878D24003D2374 /* JackMachTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF5FBC80E878D24003D2374 /* JackMachTime.c */; }; - 4BFA5E920DEC4D9C00FA4CDB /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; }; 4BFA5E9F0DEC4DD900FA4CDB /* testMutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFA5E9E0DEC4DD900FA4CDB /* testMutex.cpp */; }; 4BFA82850DF6A9E40087B4E1 /* evmon.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363E200DEB0401001F72D9 /* evmon.c */; }; 4BFA82980DF6A9E40087B4E1 /* bufsize.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363E710DEB0808001F72D9 /* bufsize.c */; }; @@ -738,20 +768,6 @@ remoteGlobalIDString = 4B35C56C0D4731D2000DE7AE; remoteInfo = "jack_external_metro 64 bits"; }; - 4B35C6970D4733B9000DE7AE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4B35C5780D4731D2000DE7AE; - remoteInfo = "testAtomic 64 bits"; - }; - 4B35C6990D4733B9000DE7AE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4B35C5880D4731D2000DE7AE; - remoteInfo = "testSem 64 bits"; - }; 4B35C69B0D4733B9000DE7AE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; @@ -787,27 +803,6 @@ remoteGlobalIDString = 4B35C5CC0D4731D2000DE7AE; remoteInfo = "jack_unload 64 bits"; }; - 4B35C6A50D4733B9000DE7AE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4B35C5D80D4731D2000DE7AE; - remoteInfo = "synchroServer 64 bits"; - }; - 4B35C6A70D4733B9000DE7AE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4B35C5EC0D4731D2000DE7AE; - remoteInfo = "synchroClient 64 bits"; - }; - 4B35C6A90D4733B9000DE7AE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4B35C6000D4731D2000DE7AE; - remoteInfo = "synchroServerClient 64 bits"; - }; 4B35C6AB0D4733B9000DE7AE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; @@ -878,6 +873,20 @@ remoteGlobalIDString = 4B363F680DEB0D4E001F72D9; remoteInfo = "jack_impulse_grabber Universal"; }; + 4B43A8CC1014607100E52943 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4B43A8B010145F6F00E52943; + remoteInfo = "jack_loopback Universal"; + }; + 4B43A8E81014618D00E52943 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4B43A8DD1014615800E52943; + remoteInfo = "jack_loopback 64 bits"; + }; 4B5A1BCE0CD1CCC80005BF74 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; @@ -892,13 +901,6 @@ remoteGlobalIDString = 4B5A1BD00CD1CCE10005BF74; remoteInfo = jack_midisine; }; - 4B5F25B20DEEA2430041E486 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4BFA5E8B0DEC4D9C00FA4CDB; - remoteInfo = "testMutex Universal"; - }; 4B699DB3097D421700A18468 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; @@ -969,6 +971,41 @@ remoteGlobalIDString = 4BD623ED0CBCF0F000DE782F; remoteInfo = inprocess; }; + 4BDCDC2B1002036100B15929 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4BDCDB931001FB9C00B15929; + remoteInfo = "jack_coremidi 64 bits"; + }; + 4BDCDC2D1002036100B15929 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4BDCDBB71001FCC000B15929; + remoteInfo = "jack_net 64 bits"; + }; + 4BDCDC2F1002036100B15929 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4BDCDBD71001FD2D00B15929; + remoteInfo = "netmanager 64 bits"; + }; + 4BDCDC38100203D500B15929 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4BDCDBEC1001FD7300B15929; + remoteInfo = "audioadapter 64 bits"; + }; + 4BDCDC3A100203D500B15929 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4BDCDC0F1001FDE300B15929; + remoteInfo = "netadapter 64 bits"; + }; 4BE99D620AD7A19100C59091 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; @@ -1060,20 +1097,6 @@ remoteGlobalIDString = 4B699D03097D421600A18468; remoteInfo = "jack_external_metro Universal"; }; - 4BFA994F0AAAED90009E916C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4B699D13097D421600A18468; - remoteInfo = "testAtomic Universal"; - }; - 4BFA99510AAAED90009E916C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4B699D27097D421600A18468; - remoteInfo = "testSem Universal"; - }; 4BFA99530AAAED90009E916C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; @@ -1088,27 +1111,6 @@ remoteGlobalIDString = 4BE6C6910A3E096F005A203A; remoteInfo = "jack_test Universal"; }; - 4BFA99570AAAED90009E916C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4B699D4F097D421600A18468; - remoteInfo = "synchroServer Universal"; - }; - 4BFA99590AAAED90009E916C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4B699D67097D421600A18468; - remoteInfo = "synchroClient Universal"; - }; - 4BFA995B0AAAED90009E916C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4B699D7F097D421700A18468; - remoteInfo = "synchroServerClient Universal"; - }; 4BFA99AB0AAAF41D009E916C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; @@ -1185,7 +1187,7 @@ 4B0A28E60D52073D002EFF74 /* jack_thread_wait */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait; sourceTree = BUILT_PRODUCTS_DIR; }; 4B0A28EC0D520852002EFF74 /* tw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tw.c; path = "../example-clients/tw.c"; sourceTree = SOURCE_ROOT; }; 4B0A292D0D52108E002EFF74 /* jack_thread_wait */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait; sourceTree = BUILT_PRODUCTS_DIR; }; - 4B19B3000E23620F00DD4A82 /* audioadapter.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = audioadapter.so; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B19B3000E23620F00DD4A82 /* netmanager.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = netmanager.so; sourceTree = BUILT_PRODUCTS_DIR; }; 4B19B3060E2362E700DD4A82 /* JackAudioAdapter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackAudioAdapter.cpp; path = ../common/JackAudioAdapter.cpp; sourceTree = SOURCE_ROOT; }; 4B19B3070E2362E700DD4A82 /* JackAudioAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackAudioAdapter.h; path = ../common/JackAudioAdapter.h; sourceTree = SOURCE_ROOT; }; 4B19B3080E2362E700DD4A82 /* JackAudioAdapterInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackAudioAdapterInterface.cpp; path = ../common/JackAudioAdapterInterface.cpp; sourceTree = SOURCE_ROOT; }; @@ -1197,7 +1199,7 @@ 4B2C28F908DAD01E00249230 /* JackGlobals.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackGlobals.cpp; path = ../common/JackGlobals.cpp; sourceTree = SOURCE_ROOT; }; 4B35C4250D4731D1000DE7AE /* jackdmp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jackdmp; sourceTree = BUILT_PRODUCTS_DIR; }; 4B35C4830D4731D1000DE7AE /* Jackmp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Jackmp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Jackservermp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B35C4FC0D4731D1000DE7AE /* Jackdmp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Jackdmp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4B35C5140D4731D1000DE7AE /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; 4B35C5200D4731D1000DE7AE /* jack_midisine */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midisine; sourceTree = BUILT_PRODUCTS_DIR; }; 4B35C52C0D4731D1000DE7AE /* jack_metro */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_metro; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1221,25 +1223,29 @@ 4B35C6290D4731D2000DE7AE /* jack_portaudio.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = jack_portaudio.so; sourceTree = BUILT_PRODUCTS_DIR; }; 4B35C6340D4731D2000DE7AE /* jack_dummy.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = jack_dummy.so; sourceTree = BUILT_PRODUCTS_DIR; }; 4B35C63E0D4731D3000DE7AE /* inprocess.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = inprocess.so; sourceTree = BUILT_PRODUCTS_DIR; }; - 4B363DD80DEB02F6001F72D9 /* jack_alias */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_alias; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B363DD80DEB02F6001F72D9 /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; 4B363DDE0DEB034E001F72D9 /* alias.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = alias.c; path = "../example-clients/alias.c"; sourceTree = SOURCE_ROOT; }; - 4B363E1A0DEB03C5001F72D9 /* jack_evmon */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_evmon; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B363E1A0DEB03C5001F72D9 /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; 4B363E200DEB0401001F72D9 /* evmon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = evmon.c; path = "../example-clients/evmon.c"; sourceTree = SOURCE_ROOT; }; - 4B363E4E0DEB0775001F72D9 /* jack_bufsize */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_bufsize; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B363E4E0DEB0775001F72D9 /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; 4B363E710DEB0808001F72D9 /* bufsize.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bufsize.c; path = "../example-clients/bufsize.c"; sourceTree = SOURCE_ROOT; }; - 4B363EE90DEB091C001F72D9 /* jack_rec */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_rec; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B363EE90DEB091C001F72D9 /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; 4B363EED0DEB094B001F72D9 /* capture_client.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = capture_client.c; path = "../example-clients/capture_client.c"; sourceTree = SOURCE_ROOT; }; - 4B363F1E0DEB0A6A001F72D9 /* jack_monitor_client */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_monitor_client; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B363F1E0DEB0A6A001F72D9 /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; 4B363F220DEB0AB0001F72D9 /* monitor_client.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = monitor_client.c; path = "../example-clients/monitor_client.c"; sourceTree = SOURCE_ROOT; }; - 4B363F350DEB0BD1001F72D9 /* jack_showtime */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_showtime; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B363F350DEB0BD1001F72D9 /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; 4B363F3D0DEB0C31001F72D9 /* showtime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = showtime.c; path = "../example-clients/showtime.c"; sourceTree = SOURCE_ROOT; }; - 4B363F720DEB0D4E001F72D9 /* jack_impulse_grabber */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_impulse_grabber; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B363F720DEB0D4E001F72D9 /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; 4B363F750DEB0D7D001F72D9 /* impulse_grabber.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = impulse_grabber.c; path = "../example-clients/impulse_grabber.c"; sourceTree = SOURCE_ROOT; }; 4B37C20306DF1FBE0016E567 /* CALatencyLog.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = CALatencyLog.cpp; path = /Developer/Examples/CoreAudio/PublicUtility/CALatencyLog.cpp; sourceTree = ""; }; 4B37C20406DF1FBE0016E567 /* CALatencyLog.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = CALatencyLog.h; path = /Developer/Examples/CoreAudio/PublicUtility/CALatencyLog.h; sourceTree = ""; }; 4B37C20906DF1FE20016E567 /* latency.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = latency.c; path = /Developer/Examples/CoreAudio/PublicUtility/latency.c; sourceTree = ""; }; 4B3F49070AD8503300491C6E /* cpu.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = cpu.c; path = ../tests/cpu.c; sourceTree = SOURCE_ROOT; }; 4B4259E5076B635E00C1ECE1 /* JackMacEngineRPC.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackMacEngineRPC.cpp; sourceTree = SOURCE_ROOT; }; + 4B43A8BA10145F6F00E52943 /* jack_dummy.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = jack_dummy.so; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B43A8C81014605000E52943 /* JackLoopbackDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackLoopbackDriver.cpp; path = ../common/JackLoopbackDriver.cpp; sourceTree = SOURCE_ROOT; }; + 4B43A8C91014605000E52943 /* JackLoopbackDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackLoopbackDriver.h; path = ../common/JackLoopbackDriver.h; sourceTree = SOURCE_ROOT; }; + 4B43A8E71014615800E52943 /* jack_dummy.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = jack_dummy.so; sourceTree = BUILT_PRODUCTS_DIR; }; 4B464301076CAC7700E5077C /* Jack-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "Jack-Info.plist"; sourceTree = SOURCE_ROOT; }; 4B4CA9730E02CF9600F4BFDA /* JackRestartThreadedDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackRestartThreadedDriver.h; path = ../common/JackRestartThreadedDriver.h; sourceTree = SOURCE_ROOT; }; 4B4CA9740E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackRestartThreadedDriver.cpp; path = ../common/JackRestartThreadedDriver.cpp; sourceTree = SOURCE_ROOT; }; @@ -1252,7 +1258,7 @@ 4B5A1BBD0CD1CC110005BF74 /* midiseq.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = midiseq.c; path = "../example-clients/midiseq.c"; sourceTree = SOURCE_ROOT; }; 4B5A1BDA0CD1CCE10005BF74 /* jack_midisine */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midisine; sourceTree = BUILT_PRODUCTS_DIR; }; 4B5A1BDC0CD1CD420005BF74 /* midisine.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = midisine.c; path = "../example-clients/midisine.c"; sourceTree = SOURCE_ROOT; }; - 4B5E08D50E5B66EE00BEE4E0 /* netadapter.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = netadapter.so; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B5E08D50E5B66EE00BEE4E0 /* netmanager.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = netmanager.so; sourceTree = BUILT_PRODUCTS_DIR; }; 4B5E08DF0E5B676C00BEE4E0 /* JackNetAdapter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackNetAdapter.cpp; path = ../common/JackNetAdapter.cpp; sourceTree = SOURCE_ROOT; }; 4B5E08E00E5B676C00BEE4E0 /* JackNetAdapter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackNetAdapter.h; path = ../common/JackNetAdapter.h; sourceTree = SOURCE_ROOT; }; 4B5F253D0DEE9B8F0041E486 /* JackLockedEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackLockedEngine.h; path = ../common/JackLockedEngine.h; sourceTree = SOURCE_ROOT; }; @@ -1309,8 +1315,7 @@ 4BA692B20CBE4C2D00EAD520 /* ipload.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ipload.c; path = "../example-clients/ipload.c"; sourceTree = SOURCE_ROOT; }; 4BA692D40CBE4C9000EAD520 /* jack_unload */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_unload; sourceTree = BUILT_PRODUCTS_DIR; }; 4BA692D60CBE4CC600EAD520 /* ipunload.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ipunload.c; path = "../example-clients/ipunload.c"; sourceTree = SOURCE_ROOT; }; - 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Jackservermp.framework; path = build/Development/Jackservermp.framework; sourceTree = SOURCE_ROOT; }; - 4BA7FEC30D8E76270017FF73 /* jack_server_control */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_server_control; sourceTree = BUILT_PRODUCTS_DIR; }; + 4BA7FEC30D8E76270017FF73 /* jack_lsp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_lsp; sourceTree = BUILT_PRODUCTS_DIR; }; 4BA7FEC80D8E76650017FF73 /* control.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = control.c; path = "../example-clients/control.c"; sourceTree = SOURCE_ROOT; }; 4BAB95B60B9E20B800A0C723 /* JackPortType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackPortType.cpp; path = ../common/JackPortType.cpp; sourceTree = SOURCE_ROOT; }; 4BAB95B70B9E20B800A0C723 /* JackPortType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackPortType.h; path = ../common/JackPortType.h; sourceTree = SOURCE_ROOT; }; @@ -1352,6 +1357,11 @@ 4BD561C708EEB910006BBC2A /* JackSynchro.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackSynchro.h; path = ../common/JackSynchro.h; sourceTree = SOURCE_ROOT; }; 4BD623F70CBCF0F000DE782F /* inprocess.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = inprocess.so; sourceTree = BUILT_PRODUCTS_DIR; }; 4BD6240C0CBCF16600DE782F /* inprocess.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = inprocess.c; path = "../example-clients/inprocess.c"; sourceTree = SOURCE_ROOT; }; + 4BDCDB9D1001FB9C00B15929 /* jack_coremidi.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = jack_coremidi.so; sourceTree = BUILT_PRODUCTS_DIR; }; + 4BDCDBC51001FCC000B15929 /* jack_net.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = jack_net.so; sourceTree = BUILT_PRODUCTS_DIR; }; + 4BDCDBE81001FD2D00B15929 /* netmanager.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = netmanager.so; sourceTree = BUILT_PRODUCTS_DIR; }; + 4BDCDBFF1001FD7300B15929 /* netmanager.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = netmanager.so; sourceTree = BUILT_PRODUCTS_DIR; }; + 4BDCDC251001FDE300B15929 /* netmanager.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = netmanager.so; sourceTree = BUILT_PRODUCTS_DIR; }; 4BE4CBFF0CDA153400CCF5BB /* JackTools.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackTools.cpp; path = ../common/JackTools.cpp; sourceTree = SOURCE_ROOT; }; 4BE4CC000CDA153400CCF5BB /* JackTools.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackTools.h; path = ../common/JackTools.h; sourceTree = SOURCE_ROOT; }; 4BE5FECB0E725C090020B576 /* JackCoreAudioDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackCoreAudioDriver.cpp; path = coreaudio/JackCoreAudioDriver.cpp; sourceTree = SOURCE_ROOT; }; @@ -1378,8 +1388,6 @@ 4BF5FBC80E878D24003D2374 /* JackMachTime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = JackMachTime.c; sourceTree = SOURCE_ROOT; }; 4BF6C1D508ACE64C001E2013 /* JackMachSemaphore.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackMachSemaphore.cpp; sourceTree = SOURCE_ROOT; }; 4BF6C1D608ACE64C001E2013 /* JackMachSemaphore.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JackMachSemaphore.h; sourceTree = SOURCE_ROOT; }; - 4BF70ACA0908EE95008B75AD /* JackLoopbackDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackLoopbackDriver.cpp; path = ../common/JackLoopbackDriver.cpp; sourceTree = SOURCE_ROOT; }; - 4BF70ACB0908EE95008B75AD /* JackLoopbackDriver.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackLoopbackDriver.h; path = ../common/JackLoopbackDriver.h; sourceTree = SOURCE_ROOT; }; 4BF772FD08B3330F00149912 /* JackAtomic.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackAtomic.h; path = ../common/JackAtomic.h; sourceTree = SOURCE_ROOT; }; 4BF8D1670834EDD900C94B91 /* zombie.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = zombie.c; path = "../example-clients/zombie.c"; sourceTree = SOURCE_ROOT; }; 4BF8D1690834EDE600C94B91 /* lsp.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lsp.c; path = "..//example-clients/lsp.c"; sourceTree = SOURCE_ROOT; }; @@ -1435,14 +1443,14 @@ 4BF8D2470834F20600C94B91 /* testSem.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = testSem.cpp; path = ../tests/testSem.cpp; sourceTree = SOURCE_ROOT; }; 4BF8FB0D08AC88EF00D1A344 /* JackFrameTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackFrameTimer.cpp; path = ../common/JackFrameTimer.cpp; sourceTree = SOURCE_ROOT; }; 4BF8FB0E08AC88EF00D1A344 /* JackFrameTimer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackFrameTimer.h; path = ../common/JackFrameTimer.h; sourceTree = SOURCE_ROOT; }; - 4BFA5E980DEC4D9C00FA4CDB /* testMutex */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testMutex; sourceTree = BUILT_PRODUCTS_DIR; }; + 4BFA5E980DEC4D9C00FA4CDB /* testSem */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testSem; sourceTree = BUILT_PRODUCTS_DIR; }; 4BFA5E9E0DEC4DD900FA4CDB /* testMutex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testMutex.cpp; path = ../tests/testMutex.cpp; sourceTree = SOURCE_ROOT; }; - 4BFA828C0DF6A9E40087B4E1 /* jack_evmon */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_evmon; sourceTree = BUILT_PRODUCTS_DIR; }; - 4BFA829F0DF6A9E40087B4E1 /* jack_bufsize */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_bufsize; sourceTree = BUILT_PRODUCTS_DIR; }; - 4BFA82AB0DF6A9E40087B4E1 /* jack_rec */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_rec; sourceTree = BUILT_PRODUCTS_DIR; }; - 4BFA82B70DF6A9E40087B4E1 /* jack_monitor_client */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_monitor_client; sourceTree = BUILT_PRODUCTS_DIR; }; - 4BFA82C30DF6A9E40087B4E1 /* jack_showtime */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_showtime; sourceTree = BUILT_PRODUCTS_DIR; }; - 4BFA82CF0DF6A9E40087B4E1 /* jack_impulse_grabber */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_impulse_grabber; sourceTree = BUILT_PRODUCTS_DIR; }; + 4BFA828C0DF6A9E40087B4E1 /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; + 4BFA829F0DF6A9E40087B4E1 /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; + 4BFA82AB0DF6A9E40087B4E1 /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; + 4BFA82B70DF6A9E40087B4E1 /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; + 4BFA82C30DF6A9E40087B4E1 /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; + 4BFA82CF0DF6A9E40087B4E1 /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; 4BFA99A20AAAF3B0009E916C /* jdelay */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jdelay; sourceTree = BUILT_PRODUCTS_DIR; }; 4BFA99A90AAAF40C009E916C /* jdelay.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = jdelay.cpp; path = ../tests/jdelay.cpp; sourceTree = SOURCE_ROOT; }; 4BFB297708AF44ED00D450D4 /* JackMachServerNotifyChannel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackMachServerNotifyChannel.cpp; sourceTree = ""; }; @@ -1580,7 +1588,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4BA7BE0F0DC232A400AA3457 /* Jackservermp.framework in Frameworks */, + 4BA7BE0F0DC232A400AA3457 /* Jackdmp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1588,7 +1596,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4BA7BE1A0DC2347500AA3457 /* Jackservermp.framework in Frameworks */, + 4BA7BE1A0DC2347500AA3457 /* Jackdmp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1631,7 +1639,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4BA7BE200DC234FB00AA3457 /* Jackservermp.framework in Frameworks */, + 4BA7BE200DC234FB00AA3457 /* Jackdmp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1639,7 +1647,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4BA7BE240DC2350D00AA3457 /* Jackservermp.framework in Frameworks */, + 4BA7BE240DC2350D00AA3457 /* Jackdmp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1647,7 +1655,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4BA7BE270DC2352A00AA3457 /* Jackservermp.framework in Frameworks */, + 4BA7BE270DC2352A00AA3457 /* Jackdmp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1728,6 +1736,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 4B43A8B510145F6F00E52943 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4B43A8E21014615800E52943 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 4B5A1BB50CD1CB9E0005BF74 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1818,7 +1840,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4BA7BDCE0DC22F4500AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1826,7 +1847,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4BA7BDCF0DC22F4500AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1841,7 +1861,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4BA7BDD00DC22F4500AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1849,7 +1868,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4BA7BDD10DC22F4500AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1857,7 +1875,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4BA7BDD20DC22F4500AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1910,6 +1927,41 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 4BDCDB981001FB9C00B15929 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BDCDBC01001FCC000B15929 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BDCDBE31001FD2D00B15929 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BDCDBFA1001FD7300B15929 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BDCDC201001FDE300B15929 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 4BE6C69D0A3E096F005A203A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1935,7 +1987,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4BFA5E920DEC4D9C00FA4CDB /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2008,7 +2059,6 @@ 0249A662FF388D9811CA2CEA /* External Frameworks and Libraries */ = { isa = PBXGroup; children = ( - 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */, 4BCC87950D57168300A7FEB1 /* Accelerate.framework */, ); name = "External Frameworks and Libraries"; @@ -2079,7 +2129,7 @@ 4B5A1BDA0CD1CCE10005BF74 /* jack_midisine */, 4B35C4250D4731D1000DE7AE /* jackdmp */, 4B35C4830D4731D1000DE7AE /* Jackmp.framework */, - 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */, + 4B35C4FC0D4731D1000DE7AE /* Jackdmp.framework */, 4B35C5140D4731D1000DE7AE /* jack_midiseq */, 4B35C5200D4731D1000DE7AE /* jack_midisine */, 4B35C52C0D4731D1000DE7AE /* jack_metro */, @@ -2106,27 +2156,34 @@ 4B0A28E60D52073D002EFF74 /* jack_thread_wait */, 4B0A292D0D52108E002EFF74 /* jack_thread_wait */, 4B57F5950D72C27900B4E719 /* jack_thread_wait */, - 4BA7FEC30D8E76270017FF73 /* jack_server_control */, + 4BA7FEC30D8E76270017FF73 /* jack_lsp */, BA222ACF0DC88132001A17F4 /* jack_net.so */, BA222AE90DC882DB001A17F4 /* netmanager.so */, - 4BA7FEC30D8E76270017FF73 /* jack_server_control */, - 4B363DD80DEB02F6001F72D9 /* jack_alias */, - 4B363E1A0DEB03C5001F72D9 /* jack_evmon */, - 4B363E4E0DEB0775001F72D9 /* jack_bufsize */, - 4B363EE90DEB091C001F72D9 /* jack_rec */, - 4B363F1E0DEB0A6A001F72D9 /* jack_monitor_client */, - 4B363F350DEB0BD1001F72D9 /* jack_showtime */, - 4B363F720DEB0D4E001F72D9 /* jack_impulse_grabber */, - 4BFA5E980DEC4D9C00FA4CDB /* testMutex */, - 4BFA828C0DF6A9E40087B4E1 /* jack_evmon */, - 4BFA829F0DF6A9E40087B4E1 /* jack_bufsize */, - 4BFA82AB0DF6A9E40087B4E1 /* jack_rec */, - 4BFA82B70DF6A9E40087B4E1 /* jack_monitor_client */, - 4BFA82C30DF6A9E40087B4E1 /* jack_showtime */, - 4BFA82CF0DF6A9E40087B4E1 /* jack_impulse_grabber */, - 4B19B3000E23620F00DD4A82 /* audioadapter.so */, - 4B5E08D50E5B66EE00BEE4E0 /* netadapter.so */, + 4BA7FEC30D8E76270017FF73 /* jack_lsp */, + 4B363DD80DEB02F6001F72D9 /* jack_midiseq */, + 4B363E1A0DEB03C5001F72D9 /* jack_midiseq */, + 4B363E4E0DEB0775001F72D9 /* jack_midiseq */, + 4B363EE90DEB091C001F72D9 /* jack_midiseq */, + 4B363F1E0DEB0A6A001F72D9 /* jack_midiseq */, + 4B363F350DEB0BD1001F72D9 /* jack_midiseq */, + 4B363F720DEB0D4E001F72D9 /* jack_midiseq */, + 4BFA5E980DEC4D9C00FA4CDB /* testSem */, + 4BFA828C0DF6A9E40087B4E1 /* jack_midiseq */, + 4BFA829F0DF6A9E40087B4E1 /* jack_midiseq */, + 4BFA82AB0DF6A9E40087B4E1 /* jack_midiseq */, + 4BFA82B70DF6A9E40087B4E1 /* jack_midiseq */, + 4BFA82C30DF6A9E40087B4E1 /* jack_midiseq */, + 4BFA82CF0DF6A9E40087B4E1 /* jack_midiseq */, + 4B19B3000E23620F00DD4A82 /* netmanager.so */, + 4B5E08D50E5B66EE00BEE4E0 /* netmanager.so */, 4BF3390C0F8B864B0080FB5B /* jack_coremidi.so */, + 4BDCDB9D1001FB9C00B15929 /* jack_coremidi.so */, + 4BDCDBC51001FCC000B15929 /* jack_net.so */, + 4BDCDBE81001FD2D00B15929 /* netmanager.so */, + 4BDCDBFF1001FD7300B15929 /* netmanager.so */, + 4BDCDC251001FDE300B15929 /* netmanager.so */, + 4B43A8BA10145F6F00E52943 /* jack_dummy.so */, + 4B43A8E71014615800E52943 /* jack_dummy.so */, ); name = Products; sourceTree = ""; @@ -2423,12 +2480,12 @@ isa = PBXGroup; children = ( 4B869B3D08C8D21C001CF041 /* driver_interface.h */, + 4B43A8C91014605000E52943 /* JackLoopbackDriver.h */, + 4B43A8C81014605000E52943 /* JackLoopbackDriver.cpp */, 4B869B4208C8D22F001CF041 /* JackDriverLoader.h */, 4B869D7F08C9CB00001CF041 /* JackDriverLoader.cpp */, 4BF8D1B50834EEE400C94B91 /* JackDriver.h */, 4BF8D1B60834EEE400C94B91 /* JackDriver.cpp */, - 4BF70ACB0908EE95008B75AD /* JackLoopbackDriver.h */, - 4BF70ACA0908EE95008B75AD /* JackLoopbackDriver.cpp */, 4BC3988A08B3CF6C00B6F371 /* JackDummyDriver.h */, 4BC3988908B3CF6C00B6F371 /* JackDummyDriver.cpp */, 4BF3390D0F8B86AF0080FB5B /* MIDI */, @@ -2729,7 +2786,6 @@ 4B4F9C910DC20C0400706CB0 /* JackMessageBuffer.h in Headers */, 4B93F19E0E87998400E4ECCD /* JackPosixThread.h in Headers */, 4BECB2FA0F4451C10091B70A /* JackProcessSync.h in Headers */, - 4BF339160F8B86DC0080FB5B /* JackCoreMidiDriver.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2769,7 +2825,6 @@ 4B35C4AE0D4731D1000DE7AE /* JackMachNotifyChannel.h in Headers */, 4B35C4AF0D4731D1000DE7AE /* JackMachServerChannel.h in Headers */, 4B35C4B00D4731D1000DE7AE /* JackMachServerNotifyChannel.h in Headers */, - 4B35C4B10D4731D1000DE7AE /* JackLoopbackDriver.h in Headers */, 4B35C4B20D4731D1000DE7AE /* JackConstants.h in Headers */, 4B35C4B30D4731D1000DE7AE /* JackTransportEngine.h in Headers */, 4B35C4B40D4731D1000DE7AE /* JackServerGlobals.h in Headers */, @@ -2794,8 +2849,9 @@ 4B93F19A0E87992200E4ECCD /* JackPosixThread.h in Headers */, 4BBAE4120F42FA6100B8BD3F /* JackEngineProfiling.h in Headers */, 4BECB2FC0F4451C10091B70A /* JackProcessSync.h in Headers */, - 4BF339180F8B86DC0080FB5B /* JackCoreMidiDriver.h in Headers */, 4BF339220F8B873E0080FB5B /* JackMidiDriver.h in Headers */, + 4BDCDBD21001FD0200B15929 /* JackWaitThreadedDriver.h in Headers */, + 4BDCDC0A1001FDA800B15929 /* JackArgParser.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3014,6 +3070,22 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 4B43A8B110145F6F00E52943 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B43A8CB1014605000E52943 /* JackLoopbackDriver.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4B43A8DE1014615800E52943 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B43A8DF1014615800E52943 /* JackLoopbackDriver.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 4B5A1BB20CD1CB9E0005BF74 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -3134,7 +3206,6 @@ 4B699C77097D421600A18468 /* JackMachNotifyChannel.h in Headers */, 4B699C78097D421600A18468 /* JackMachServerChannel.h in Headers */, 4B699C79097D421600A18468 /* JackMachServerNotifyChannel.h in Headers */, - 4B699C7A097D421600A18468 /* JackLoopbackDriver.h in Headers */, 4B699C7B097D421600A18468 /* JackConstants.h in Headers */, 4BD4B4D809BACD9600750C0F /* JackTransportEngine.h in Headers */, 4BC2168E0A444BED00BDA09F /* JackServerGlobals.h in Headers */, @@ -3305,6 +3376,61 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 4BDCDB941001FB9C00B15929 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BDCDB951001FB9C00B15929 /* JackCoreMidiDriver.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BDCDBB81001FCC000B15929 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BDCDBB91001FCC000B15929 /* JackNetDriver.h in Headers */, + 4BDCDBBA1001FCC000B15929 /* JackNetInterface.h in Headers */, + 4BDCDBBB1001FCC000B15929 /* JackNetUnixSocket.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BDCDBD81001FD2D00B15929 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BDCDBD91001FD2D00B15929 /* JackNetManager.h in Headers */, + 4BDCDBDA1001FD2D00B15929 /* JackNetInterface.h in Headers */, + 4BDCDBDB1001FD2D00B15929 /* JackNetUnixSocket.h in Headers */, + 4BDCDBDC1001FD2D00B15929 /* JackArgParser.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BDCDBED1001FD7300B15929 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BDCDBEE1001FD7300B15929 /* JackAudioAdapter.h in Headers */, + 4BDCDBEF1001FD7300B15929 /* JackAudioAdapterInterface.h in Headers */, + 4BDCDBF01001FD7300B15929 /* JackException.h in Headers */, + 4BDCDBF11001FD7300B15929 /* JackLibSampleRateResampler.h in Headers */, + 4BDCDBF21001FD7300B15929 /* JackCoreAudioAdapter.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BDCDC101001FDE300B15929 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BDCDC111001FDE300B15929 /* JackAudioAdapterInterface.h in Headers */, + 4BDCDC121001FDE300B15929 /* JackException.h in Headers */, + 4BDCDC131001FDE300B15929 /* JackLibSampleRateResampler.h in Headers */, + 4BDCDC141001FDE300B15929 /* JackNetAdapter.h in Headers */, + 4BDCDC151001FDE300B15929 /* JackNetInterface.h in Headers */, + 4BDCDC161001FDE300B15929 /* JackAudioAdapter.h in Headers */, + 4BDCDC171001FDE300B15929 /* JackNetUnixSocket.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 4BE6C6920A3E096F005A203A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -3445,9 +3571,9 @@ productReference = 4B0A292D0D52108E002EFF74 /* jack_thread_wait */; productType = "com.apple.product-type.tool"; }; - 4B19B2F60E23620F00DD4A82 /* audioadapter */ = { + 4B19B2F60E23620F00DD4A82 /* audioadapter Universal */ = { isa = PBXNativeTarget; - buildConfigurationList = 4B19B2FC0E23620F00DD4A82 /* Build configuration list for PBXNativeTarget "audioadapter" */; + buildConfigurationList = 4B19B2FC0E23620F00DD4A82 /* Build configuration list for PBXNativeTarget "audioadapter Universal" */; buildPhases = ( 4B19B2F70E23620F00DD4A82 /* Headers */, 4B19B2F90E23620F00DD4A82 /* Sources */, @@ -3457,9 +3583,9 @@ ); dependencies = ( ); - name = audioadapter; + name = "audioadapter Universal"; productName = jack_coreaudio; - productReference = 4B19B3000E23620F00DD4A82 /* audioadapter.so */; + productReference = 4B19B3000E23620F00DD4A82 /* netmanager.so */; productType = "com.apple.product-type.library.dynamic"; }; 4B35C41B0D4731D1000DE7AE /* jackdmp framework 64bits */ = { @@ -3516,7 +3642,7 @@ ); name = "Jackservermp.framework 64 bits"; productName = Jack; - productReference = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; + productReference = 4B35C4FC0D4731D1000DE7AE /* Jackdmp.framework */; productType = "com.apple.product-type.framework"; }; 4B35C50A0D4731D1000DE7AE /* jack_midiseq 64 bits */ = { @@ -3965,7 +4091,7 @@ name = "jack_alias Universal"; productInstallPath = /usr/local/bin; productName = jack_metro; - productReference = 4B363DD80DEB02F6001F72D9 /* jack_alias */; + productReference = 4B363DD80DEB02F6001F72D9 /* jack_midiseq */; productType = "com.apple.product-type.tool"; }; 4B363E100DEB03C5001F72D9 /* jack_evmon Universal */ = { @@ -3984,7 +4110,7 @@ name = "jack_evmon Universal"; productInstallPath = /usr/local/bin; productName = jack_metro; - productReference = 4B363E1A0DEB03C5001F72D9 /* jack_evmon */; + productReference = 4B363E1A0DEB03C5001F72D9 /* jack_midiseq */; productType = "com.apple.product-type.tool"; }; 4B363E440DEB0775001F72D9 /* jack_bufsize Universal */ = { @@ -4003,7 +4129,7 @@ name = "jack_bufsize Universal"; productInstallPath = /usr/local/bin; productName = jack_metro; - productReference = 4B363E4E0DEB0775001F72D9 /* jack_bufsize */; + productReference = 4B363E4E0DEB0775001F72D9 /* jack_midiseq */; productType = "com.apple.product-type.tool"; }; 4B363EDF0DEB091C001F72D9 /* jack_rec Universal */ = { @@ -4022,7 +4148,7 @@ name = "jack_rec Universal"; productInstallPath = /usr/local/bin; productName = jack_metro; - productReference = 4B363EE90DEB091C001F72D9 /* jack_rec */; + productReference = 4B363EE90DEB091C001F72D9 /* jack_midiseq */; productType = "com.apple.product-type.tool"; }; 4B363F140DEB0A6A001F72D9 /* jack_monitor_client Universal */ = { @@ -4041,7 +4167,7 @@ name = "jack_monitor_client Universal"; productInstallPath = /usr/local/bin; productName = jack_metro; - productReference = 4B363F1E0DEB0A6A001F72D9 /* jack_monitor_client */; + productReference = 4B363F1E0DEB0A6A001F72D9 /* jack_midiseq */; productType = "com.apple.product-type.tool"; }; 4B363F2B0DEB0BD1001F72D9 /* jack_showtime Universal */ = { @@ -4060,7 +4186,7 @@ name = "jack_showtime Universal"; productInstallPath = /usr/local/bin; productName = jack_metro; - productReference = 4B363F350DEB0BD1001F72D9 /* jack_showtime */; + productReference = 4B363F350DEB0BD1001F72D9 /* jack_midiseq */; productType = "com.apple.product-type.tool"; }; 4B363F680DEB0D4E001F72D9 /* jack_impulse_grabber Universal */ = { @@ -4079,9 +4205,43 @@ name = "jack_impulse_grabber Universal"; productInstallPath = /usr/local/bin; productName = jack_metro; - productReference = 4B363F720DEB0D4E001F72D9 /* jack_impulse_grabber */; + productReference = 4B363F720DEB0D4E001F72D9 /* jack_midiseq */; productType = "com.apple.product-type.tool"; }; + 4B43A8B010145F6F00E52943 /* jack_loopback Universal */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4B43A8B610145F6F00E52943 /* Build configuration list for PBXNativeTarget "jack_loopback Universal" */; + buildPhases = ( + 4B43A8B110145F6F00E52943 /* Headers */, + 4B43A8B310145F6F00E52943 /* Sources */, + 4B43A8B510145F6F00E52943 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "jack_loopback Universal"; + productName = jack_coreaudio; + productReference = 4B43A8BA10145F6F00E52943 /* jack_dummy.so */; + productType = "com.apple.product-type.library.dynamic"; + }; + 4B43A8DD1014615800E52943 /* jack_loopback 64 bits */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4B43A8E31014615800E52943 /* Build configuration list for PBXNativeTarget "jack_loopback 64 bits" */; + buildPhases = ( + 4B43A8DE1014615800E52943 /* Headers */, + 4B43A8E01014615800E52943 /* Sources */, + 4B43A8E21014615800E52943 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "jack_loopback 64 bits"; + productName = jack_coreaudio; + productReference = 4B43A8E71014615800E52943 /* jack_dummy.so */; + productType = "com.apple.product-type.library.dynamic"; + }; 4B5A1BB10CD1CB9E0005BF74 /* jack_midiseq Universal */ = { isa = PBXNativeTarget; buildConfigurationList = 4B5A1BB70CD1CB9E0005BF74 /* Build configuration list for PBXNativeTarget "jack_midiseq Universal" */; @@ -4120,9 +4280,9 @@ productReference = 4B5A1BDA0CD1CCE10005BF74 /* jack_midisine */; productType = "com.apple.product-type.tool"; }; - 4B5E08BF0E5B66EE00BEE4E0 /* netadapter */ = { + 4B5E08BF0E5B66EE00BEE4E0 /* netadapter Universal */ = { isa = PBXNativeTarget; - buildConfigurationList = 4B5E08D10E5B66EE00BEE4E0 /* Build configuration list for PBXNativeTarget "netadapter" */; + buildConfigurationList = 4B5E08D10E5B66EE00BEE4E0 /* Build configuration list for PBXNativeTarget "netadapter Universal" */; buildPhases = ( 4B5E08C00E5B66EE00BEE4E0 /* Headers */, 4B5E08C90E5B66EE00BEE4E0 /* Sources */, @@ -4132,9 +4292,9 @@ ); dependencies = ( ); - name = netadapter; + name = "netadapter Universal"; productName = jack_coreaudio; - productReference = 4B5E08D50E5B66EE00BEE4E0 /* netadapter.so */; + productReference = 4B5E08D50E5B66EE00BEE4E0 /* netmanager.so */; productType = "com.apple.product-type.library.dynamic"; }; 4B699BA7097D421600A18468 /* jackdmp framework Universal */ = { @@ -4528,12 +4688,12 @@ name = "jack_server_control Universal"; productInstallPath = /usr/local/bin; productName = jack_lsp; - productReference = 4BA7FEC30D8E76270017FF73 /* jack_server_control */; + productReference = 4BA7FEC30D8E76270017FF73 /* jack_lsp */; productType = "com.apple.product-type.tool"; }; - 4BD623ED0CBCF0F000DE782F /* inprocess */ = { + 4BD623ED0CBCF0F000DE782F /* inprocess Universal */ = { isa = PBXNativeTarget; - buildConfigurationList = 4BD623F30CBCF0F000DE782F /* Build configuration list for PBXNativeTarget "inprocess" */; + buildConfigurationList = 4BD623F30CBCF0F000DE782F /* Build configuration list for PBXNativeTarget "inprocess Universal" */; buildPhases = ( 4BD623EE0CBCF0F000DE782F /* Headers */, 4BD623F00CBCF0F000DE782F /* Sources */, @@ -4543,11 +4703,96 @@ ); dependencies = ( ); - name = inprocess; + name = "inprocess Universal"; productName = jack_coreaudio; productReference = 4BD623F70CBCF0F000DE782F /* inprocess.so */; productType = "com.apple.product-type.library.dynamic"; }; + 4BDCDB931001FB9C00B15929 /* jack_coremidi 64 bits */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4BDCDB991001FB9C00B15929 /* Build configuration list for PBXNativeTarget "jack_coremidi 64 bits" */; + buildPhases = ( + 4BDCDB941001FB9C00B15929 /* Headers */, + 4BDCDB961001FB9C00B15929 /* Sources */, + 4BDCDB981001FB9C00B15929 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "jack_coremidi 64 bits"; + productName = jack_coreaudio; + productReference = 4BDCDB9D1001FB9C00B15929 /* jack_coremidi.so */; + productType = "com.apple.product-type.library.dynamic"; + }; + 4BDCDBB71001FCC000B15929 /* jack_net 64 bits */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4BDCDBC11001FCC000B15929 /* Build configuration list for PBXNativeTarget "jack_net 64 bits" */; + buildPhases = ( + 4BDCDBB81001FCC000B15929 /* Headers */, + 4BDCDBBC1001FCC000B15929 /* Sources */, + 4BDCDBC01001FCC000B15929 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "jack_net 64 bits"; + productName = jack_coreaudio; + productReference = 4BDCDBC51001FCC000B15929 /* jack_net.so */; + productType = "com.apple.product-type.library.dynamic"; + }; + 4BDCDBD71001FD2D00B15929 /* netmanager 64 bits */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4BDCDBE41001FD2D00B15929 /* Build configuration list for PBXNativeTarget "netmanager 64 bits" */; + buildPhases = ( + 4BDCDBD81001FD2D00B15929 /* Headers */, + 4BDCDBDD1001FD2D00B15929 /* Sources */, + 4BDCDBE31001FD2D00B15929 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "netmanager 64 bits"; + productName = jack_coreaudio; + productReference = 4BDCDBE81001FD2D00B15929 /* netmanager.so */; + productType = "com.apple.product-type.library.dynamic"; + }; + 4BDCDBEC1001FD7300B15929 /* audioadapter 64 bits */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4BDCDBFB1001FD7300B15929 /* Build configuration list for PBXNativeTarget "audioadapter 64 bits" */; + buildPhases = ( + 4BDCDBED1001FD7300B15929 /* Headers */, + 4BDCDBF31001FD7300B15929 /* Sources */, + 4BDCDBFA1001FD7300B15929 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "audioadapter 64 bits"; + productName = jack_coreaudio; + productReference = 4BDCDBFF1001FD7300B15929 /* netmanager.so */; + productType = "com.apple.product-type.library.dynamic"; + }; + 4BDCDC0F1001FDE300B15929 /* netadapter 64 bits */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4BDCDC211001FDE300B15929 /* Build configuration list for PBXNativeTarget "netadapter 64 bits" */; + buildPhases = ( + 4BDCDC101001FDE300B15929 /* Headers */, + 4BDCDC181001FDE300B15929 /* Sources */, + 4BDCDC201001FDE300B15929 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "netadapter 64 bits"; + productName = jack_coreaudio; + productReference = 4BDCDC251001FDE300B15929 /* netmanager.so */; + productType = "com.apple.product-type.library.dynamic"; + }; 4BE6C6910A3E096F005A203A /* jack_test Universal */ = { isa = PBXNativeTarget; buildConfigurationList = 4BE6C69F0A3E096F005A203A /* Build configuration list for PBXNativeTarget "jack_test Universal" */; @@ -4619,7 +4864,7 @@ name = "testMutex Universal"; productInstallPath = /usr/local/bin; productName = testSem; - productReference = 4BFA5E980DEC4D9C00FA4CDB /* testMutex */; + productReference = 4BFA5E980DEC4D9C00FA4CDB /* testSem */; productType = "com.apple.product-type.tool"; }; 4BFA82820DF6A9E40087B4E1 /* jack_evmon 64 bits */ = { @@ -4638,7 +4883,7 @@ name = "jack_evmon 64 bits"; productInstallPath = /usr/local/bin; productName = jack_metro; - productReference = 4BFA828C0DF6A9E40087B4E1 /* jack_evmon */; + productReference = 4BFA828C0DF6A9E40087B4E1 /* jack_midiseq */; productType = "com.apple.product-type.tool"; }; 4BFA82950DF6A9E40087B4E1 /* jack_bufsize 64 bits */ = { @@ -4657,7 +4902,7 @@ name = "jack_bufsize 64 bits"; productInstallPath = /usr/local/bin; productName = jack_metro; - productReference = 4BFA829F0DF6A9E40087B4E1 /* jack_bufsize */; + productReference = 4BFA829F0DF6A9E40087B4E1 /* jack_midiseq */; productType = "com.apple.product-type.tool"; }; 4BFA82A10DF6A9E40087B4E1 /* jack_rec 64 bits */ = { @@ -4676,7 +4921,7 @@ name = "jack_rec 64 bits"; productInstallPath = /usr/local/bin; productName = jack_metro; - productReference = 4BFA82AB0DF6A9E40087B4E1 /* jack_rec */; + productReference = 4BFA82AB0DF6A9E40087B4E1 /* jack_midiseq */; productType = "com.apple.product-type.tool"; }; 4BFA82AD0DF6A9E40087B4E1 /* jack_monitor_client 64 bits */ = { @@ -4695,7 +4940,7 @@ name = "jack_monitor_client 64 bits"; productInstallPath = /usr/local/bin; productName = jack_metro; - productReference = 4BFA82B70DF6A9E40087B4E1 /* jack_monitor_client */; + productReference = 4BFA82B70DF6A9E40087B4E1 /* jack_midiseq */; productType = "com.apple.product-type.tool"; }; 4BFA82B90DF6A9E40087B4E1 /* jack_showtime 64 bits */ = { @@ -4714,7 +4959,7 @@ name = "jack_showtime 64 bits"; productInstallPath = /usr/local/bin; productName = jack_metro; - productReference = 4BFA82C30DF6A9E40087B4E1 /* jack_showtime */; + productReference = 4BFA82C30DF6A9E40087B4E1 /* jack_midiseq */; productType = "com.apple.product-type.tool"; }; 4BFA82C50DF6A9E40087B4E1 /* jack_impulse_grabber 64 bits */ = { @@ -4733,7 +4978,7 @@ name = "jack_impulse_grabber 64 bits"; productInstallPath = /usr/local/bin; productName = jack_metro; - productReference = 4BFA82CF0DF6A9E40087B4E1 /* jack_impulse_grabber */; + productReference = 4BFA82CF0DF6A9E40087B4E1 /* jack_midiseq */; productType = "com.apple.product-type.tool"; }; 4BFA99980AAAF3B0009E916C /* jdelay Universal */ = { @@ -4772,9 +5017,9 @@ productReference = BA222ACF0DC88132001A17F4 /* jack_net.so */; productType = "com.apple.product-type.library.dynamic"; }; - BA222AE00DC882DB001A17F4 /* netmanager */ = { + BA222AE00DC882DB001A17F4 /* netmanager Universal */ = { isa = PBXNativeTarget; - buildConfigurationList = BA222AE50DC882DB001A17F4 /* Build configuration list for PBXNativeTarget "netmanager" */; + buildConfigurationList = BA222AE50DC882DB001A17F4 /* Build configuration list for PBXNativeTarget "netmanager Universal" */; buildPhases = ( BA222AE10DC882DB001A17F4 /* Headers */, BA222AE20DC882DB001A17F4 /* Sources */, @@ -4784,7 +5029,7 @@ ); dependencies = ( ); - name = netmanager; + name = "netmanager Universal"; productName = jack_coreaudio; productReference = BA222AE90DC882DB001A17F4 /* netmanager.so */; productType = "com.apple.product-type.library.dynamic"; @@ -4838,12 +5083,13 @@ 4B699D97097D421700A18468 /* jack_coreaudio Universal */, 4B978DB10A31CF4A009E2DD1 /* jack_portaudio Universal */, 4BF339020F8B864B0080FB5B /* jack_coremidi Universal */, + 4B43A8B010145F6F00E52943 /* jack_loopback Universal */, 4B699DA6097D421700A18468 /* jack_dummy Universal */, BA222AC50DC88132001A17F4 /* jack_net Universal */, - 4BD623ED0CBCF0F000DE782F /* inprocess */, - BA222AE00DC882DB001A17F4 /* netmanager */, - 4B19B2F60E23620F00DD4A82 /* audioadapter */, - 4B5E08BF0E5B66EE00BEE4E0 /* netadapter */, + 4BD623ED0CBCF0F000DE782F /* inprocess Universal */, + BA222AE00DC882DB001A17F4 /* netmanager Universal */, + 4B19B2F60E23620F00DD4A82 /* audioadapter Universal */, + 4B5E08BF0E5B66EE00BEE4E0 /* netadapter Universal */, 4B35C41B0D4731D1000DE7AE /* jackdmp framework 64bits */, 4B35C4270D4731D1000DE7AE /* Jackmp.framework 64 bits */, 4B35C4850D4731D1000DE7AE /* Jackservermp.framework 64 bits */, @@ -4876,6 +5122,12 @@ 4B35C6140D4731D2000DE7AE /* jack_coreaudio 64 bits */, 4B35C61F0D4731D2000DE7AE /* jack_portaudio 64 bits */, 4B35C62A0D4731D2000DE7AE /* jack_dummy 64 bits */, + 4B43A8DD1014615800E52943 /* jack_loopback 64 bits */, + 4BDCDB931001FB9C00B15929 /* jack_coremidi 64 bits */, + 4BDCDBB71001FCC000B15929 /* jack_net 64 bits */, + 4BDCDBD71001FD2D00B15929 /* netmanager 64 bits */, + 4BDCDBEC1001FD7300B15929 /* audioadapter 64 bits */, + 4BDCDC0F1001FDE300B15929 /* netadapter 64 bits */, 4B35C6350D4731D3000DE7AE /* inprocess 64 bits */, ); }; @@ -5418,7 +5670,6 @@ 4B93F19D0E87998400E4ECCD /* JackPosixThread.cpp in Sources */, 4B93F1C00E87A35400E4ECCD /* JackMachTime.c in Sources */, 4BECB2F90F4451C10091B70A /* JackProcessSync.cpp in Sources */, - 4BF339170F8B86DC0080FB5B /* JackCoreMidiDriver.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5454,7 +5705,6 @@ 4B35C4E70D4731D1000DE7AE /* JackMachNotifyChannel.cpp in Sources */, 4B35C4E80D4731D1000DE7AE /* JackMachServerChannel.cpp in Sources */, 4B35C4E90D4731D1000DE7AE /* JackMachServerNotifyChannel.cpp in Sources */, - 4B35C4EA0D4731D1000DE7AE /* JackLoopbackDriver.cpp in Sources */, 4B35C4EB0D4731D1000DE7AE /* JackTransportEngine.cpp in Sources */, 4B35C4EC0D4731D1000DE7AE /* JackServerAPI.cpp in Sources */, 4B35C4ED0D4731D1000DE7AE /* JackServerGlobals.cpp in Sources */, @@ -5475,9 +5725,9 @@ 4B93F22B0E87A72500E4ECCD /* JackMachTime.c in Sources */, 4BBAE4130F42FA6100B8BD3F /* JackEngineProfiling.cpp in Sources */, 4BECB2FB0F4451C10091B70A /* JackProcessSync.cpp in Sources */, - 4BF339190F8B86DC0080FB5B /* JackCoreMidiDriver.cpp in Sources */, 4BF339210F8B873E0080FB5B /* JackMidiDriver.cpp in Sources */, - 4BF2F4220F9F4DA700B3FFAD /* JackDummyDriver.cpp in Sources */, + 4BDCDBD11001FD0100B15929 /* JackWaitThreadedDriver.cpp in Sources */, + 4BDCDC091001FDA800B15929 /* JackArgParser.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5723,6 +5973,22 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 4B43A8B310145F6F00E52943 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B43A8CA1014605000E52943 /* JackLoopbackDriver.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4B43A8E01014615800E52943 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B43A8E11014615800E52943 /* JackLoopbackDriver.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 4B5A1BB30CD1CB9E0005BF74 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -5834,7 +6100,6 @@ 4B699CA2097D421600A18468 /* JackMachNotifyChannel.cpp in Sources */, 4B699CA3097D421600A18468 /* JackMachServerChannel.cpp in Sources */, 4B699CA4097D421600A18468 /* JackMachServerNotifyChannel.cpp in Sources */, - 4B699CA5097D421600A18468 /* JackLoopbackDriver.cpp in Sources */, 4BD4B4D909BACD9600750C0F /* JackTransportEngine.cpp in Sources */, 4BC216850A444BAD00BDA09F /* JackServerAPI.cpp in Sources */, 4BC216890A444BDE00BDA09F /* JackServerGlobals.cpp in Sources */, @@ -5858,7 +6123,6 @@ 4BBAE4110F42FA6100B8BD3F /* JackEngineProfiling.cpp in Sources */, 4BECB2F50F4451C10091B70A /* JackProcessSync.cpp in Sources */, 4BF339230F8B873E0080FB5B /* JackMidiDriver.cpp in Sources */, - 4BF2F4210F9F4DA300B3FFAD /* JackDummyDriver.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6014,59 +6278,116 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 4BE6C6950A3E096F005A203A /* Sources */ = { + 4BDCDB961001FB9C00B15929 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4BE6C6AD0A3E0A65005A203A /* test.cpp in Sources */, + 4BDCDB971001FB9C00B15929 /* JackCoreMidiDriver.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4BE99D280AD7A04800C59091 /* Sources */ = { + 4BDCDBBC1001FCC000B15929 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4B3F49080AD8503300491C6E /* cpu.c in Sources */, + 4BDCDBBD1001FCC000B15929 /* JackNetDriver.cpp in Sources */, + 4BDCDBBE1001FCC000B15929 /* JackNetInterface.cpp in Sources */, + 4BDCDBBF1001FCC000B15929 /* JackNetUnixSocket.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4BF339050F8B864B0080FB5B /* Sources */ = { + 4BDCDBDD1001FD2D00B15929 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4BF3391B0F8B86DC0080FB5B /* JackCoreMidiDriver.cpp in Sources */, + 4BDCDBDE1001FD2D00B15929 /* JackNetManager.cpp in Sources */, + 4BDCDBDF1001FD2D00B15929 /* JackNetInterface.cpp in Sources */, + 4BDCDBE01001FD2D00B15929 /* JackNetUnixSocket.cpp in Sources */, + 4BDCDBE11001FD2D00B15929 /* JackMachTime.c in Sources */, + 4BDCDBE21001FD2D00B15929 /* JackArgParser.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4BFA5E8D0DEC4D9C00FA4CDB /* Sources */ = { + 4BDCDBF31001FD7300B15929 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4BFA5E9F0DEC4DD900FA4CDB /* testMutex.cpp in Sources */, + 4BDCDBF41001FD7300B15929 /* JackAudioAdapter.cpp in Sources */, + 4BDCDBF51001FD7300B15929 /* JackAudioAdapterInterface.cpp in Sources */, + 4BDCDBF61001FD7300B15929 /* JackLibSampleRateResampler.cpp in Sources */, + 4BDCDBF71001FD7300B15929 /* JackResampler.cpp in Sources */, + 4BDCDBF81001FD7300B15929 /* JackAudioAdapterFactory.cpp in Sources */, + 4BDCDBF91001FD7300B15929 /* JackCoreAudioAdapter.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4BFA82840DF6A9E40087B4E1 /* Sources */ = { + 4BDCDC181001FDE300B15929 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4BFA82850DF6A9E40087B4E1 /* evmon.c in Sources */, + 4BDCDC191001FDE300B15929 /* JackAudioAdapterInterface.cpp in Sources */, + 4BDCDC1A1001FDE300B15929 /* JackLibSampleRateResampler.cpp in Sources */, + 4BDCDC1B1001FDE300B15929 /* JackResampler.cpp in Sources */, + 4BDCDC1C1001FDE300B15929 /* JackNetAdapter.cpp in Sources */, + 4BDCDC1D1001FDE300B15929 /* JackNetInterface.cpp in Sources */, + 4BDCDC1E1001FDE300B15929 /* JackAudioAdapter.cpp in Sources */, + 4BDCDC1F1001FDE300B15929 /* JackNetUnixSocket.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4BFA82970DF6A9E40087B4E1 /* Sources */ = { + 4BE6C6950A3E096F005A203A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4BFA82980DF6A9E40087B4E1 /* bufsize.c in Sources */, + 4BE6C6AD0A3E0A65005A203A /* test.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4BFA82A30DF6A9E40087B4E1 /* Sources */ = { + 4BE99D280AD7A04800C59091 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4BFA82A40DF6A9E40087B4E1 /* capture_client.c in Sources */, + 4B3F49080AD8503300491C6E /* cpu.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BF339050F8B864B0080FB5B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BF3391B0F8B86DC0080FB5B /* JackCoreMidiDriver.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BFA5E8D0DEC4D9C00FA4CDB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BFA5E9F0DEC4DD900FA4CDB /* testMutex.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BFA82840DF6A9E40087B4E1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BFA82850DF6A9E40087B4E1 /* evmon.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BFA82970DF6A9E40087B4E1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BFA82980DF6A9E40087B4E1 /* bufsize.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BFA82A30DF6A9E40087B4E1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BFA82A40DF6A9E40087B4E1 /* capture_client.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6139,12 +6460,12 @@ }; 4B19B32C0E23636E00DD4A82 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 4B19B2F60E23620F00DD4A82 /* audioadapter */; + target = 4B19B2F60E23620F00DD4A82 /* audioadapter Universal */; targetProxy = 4B19B32B0E23636E00DD4A82 /* PBXContainerItemProxy */; }; 4B224B340E65BA330066BE5B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 4B5E08BF0E5B66EE00BEE4E0 /* netadapter */; + target = 4B5E08BF0E5B66EE00BEE4E0 /* netadapter Universal */; targetProxy = 4B224B330E65BA330066BE5B /* PBXContainerItemProxy */; }; 4B35C5530D4731D2000DE7AE /* PBXTargetDependency */ = { @@ -6212,16 +6533,6 @@ target = 4B35C56C0D4731D2000DE7AE /* jack_external_metro 64 bits */; targetProxy = 4B35C6950D4733B9000DE7AE /* PBXContainerItemProxy */; }; - 4B35C6980D4733B9000DE7AE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4B35C5780D4731D2000DE7AE /* testAtomic 64 bits */; - targetProxy = 4B35C6970D4733B9000DE7AE /* PBXContainerItemProxy */; - }; - 4B35C69A0D4733B9000DE7AE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4B35C5880D4731D2000DE7AE /* testSem 64 bits */; - targetProxy = 4B35C6990D4733B9000DE7AE /* PBXContainerItemProxy */; - }; 4B35C69C0D4733B9000DE7AE /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 4B35C59C0D4731D2000DE7AE /* zombie 64 bits */; @@ -6247,21 +6558,6 @@ target = 4B35C5CC0D4731D2000DE7AE /* jack_unload 64 bits */; targetProxy = 4B35C6A30D4733B9000DE7AE /* PBXContainerItemProxy */; }; - 4B35C6A60D4733B9000DE7AE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4B35C5D80D4731D2000DE7AE /* synchroServer 64 bits */; - targetProxy = 4B35C6A50D4733B9000DE7AE /* PBXContainerItemProxy */; - }; - 4B35C6A80D4733B9000DE7AE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4B35C5EC0D4731D2000DE7AE /* synchroClient 64 bits */; - targetProxy = 4B35C6A70D4733B9000DE7AE /* PBXContainerItemProxy */; - }; - 4B35C6AA0D4733B9000DE7AE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4B35C6000D4731D2000DE7AE /* synchroServerClient 64 bits */; - targetProxy = 4B35C6A90D4733B9000DE7AE /* PBXContainerItemProxy */; - }; 4B35C6AC0D4733B9000DE7AE /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 4B35C6140D4731D2000DE7AE /* jack_coreaudio 64 bits */; @@ -6312,6 +6608,16 @@ target = 4B363F680DEB0D4E001F72D9 /* jack_impulse_grabber Universal */; targetProxy = 4B363F770DEB0D85001F72D9 /* PBXContainerItemProxy */; }; + 4B43A8CD1014607100E52943 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4B43A8B010145F6F00E52943 /* jack_loopback Universal */; + targetProxy = 4B43A8CC1014607100E52943 /* PBXContainerItemProxy */; + }; + 4B43A8E91014618D00E52943 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4B43A8DD1014615800E52943 /* jack_loopback 64 bits */; + targetProxy = 4B43A8E81014618D00E52943 /* PBXContainerItemProxy */; + }; 4B5A1BCF0CD1CCC80005BF74 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 4B5A1BB10CD1CB9E0005BF74 /* jack_midiseq Universal */; @@ -6322,11 +6628,6 @@ target = 4B5A1BD00CD1CCE10005BF74 /* jack_midisine Universal */; targetProxy = 4B5A1BE10CD1CD730005BF74 /* PBXContainerItemProxy */; }; - 4B5F25B30DEEA2430041E486 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4BFA5E8B0DEC4D9C00FA4CDB /* testMutex Universal */; - targetProxy = 4B5F25B20DEEA2430041E486 /* PBXContainerItemProxy */; - }; 4B699DB4097D421700A18468 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 4B699C4C097D421600A18468 /* Jackservermp.framework Universal */; @@ -6374,9 +6675,34 @@ }; 4BD624D30CBCF55700DE782F /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 4BD623ED0CBCF0F000DE782F /* inprocess */; + target = 4BD623ED0CBCF0F000DE782F /* inprocess Universal */; targetProxy = 4BD624D20CBCF55700DE782F /* PBXContainerItemProxy */; }; + 4BDCDC2C1002036100B15929 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4BDCDB931001FB9C00B15929 /* jack_coremidi 64 bits */; + targetProxy = 4BDCDC2B1002036100B15929 /* PBXContainerItemProxy */; + }; + 4BDCDC2E1002036100B15929 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4BDCDBB71001FCC000B15929 /* jack_net 64 bits */; + targetProxy = 4BDCDC2D1002036100B15929 /* PBXContainerItemProxy */; + }; + 4BDCDC301002036100B15929 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4BDCDBD71001FD2D00B15929 /* netmanager 64 bits */; + targetProxy = 4BDCDC2F1002036100B15929 /* PBXContainerItemProxy */; + }; + 4BDCDC39100203D500B15929 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4BDCDBEC1001FD7300B15929 /* audioadapter 64 bits */; + targetProxy = 4BDCDC38100203D500B15929 /* PBXContainerItemProxy */; + }; + 4BDCDC3B100203D500B15929 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4BDCDC0F1001FDE300B15929 /* netadapter 64 bits */; + targetProxy = 4BDCDC3A100203D500B15929 /* PBXContainerItemProxy */; + }; 4BE99D630AD7A19100C59091 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 4BE99D260AD7A04800C59091 /* jack_cpu Universal */; @@ -6442,16 +6768,6 @@ target = 4B699D03097D421600A18468 /* jack_external_metro Universal */; targetProxy = 4BFA994D0AAAED90009E916C /* PBXContainerItemProxy */; }; - 4BFA99500AAAED90009E916C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4B699D13097D421600A18468 /* testAtomic Universal */; - targetProxy = 4BFA994F0AAAED90009E916C /* PBXContainerItemProxy */; - }; - 4BFA99520AAAED90009E916C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4B699D27097D421600A18468 /* testSem Universal */; - targetProxy = 4BFA99510AAAED90009E916C /* PBXContainerItemProxy */; - }; 4BFA99540AAAED90009E916C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 4B699D3F097D421600A18468 /* zombie Universal */; @@ -6462,21 +6778,6 @@ target = 4BE6C6910A3E096F005A203A /* jack_test Universal */; targetProxy = 4BFA99550AAAED90009E916C /* PBXContainerItemProxy */; }; - 4BFA99580AAAED90009E916C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4B699D4F097D421600A18468 /* synchroServer Universal */; - targetProxy = 4BFA99570AAAED90009E916C /* PBXContainerItemProxy */; - }; - 4BFA995A0AAAED90009E916C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4B699D67097D421600A18468 /* synchroClient Universal */; - targetProxy = 4BFA99590AAAED90009E916C /* PBXContainerItemProxy */; - }; - 4BFA995C0AAAED90009E916C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4B699D7F097D421700A18468 /* synchroServerClient Universal */; - targetProxy = 4BFA995B0AAAED90009E916C /* PBXContainerItemProxy */; - }; 4BFA99AC0AAAF41D009E916C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 4BFA99980AAAF3B0009E916C /* jdelay Universal */; @@ -6484,7 +6785,7 @@ }; BA222AF00DC883EF001A17F4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = BA222AE00DC882DB001A17F4 /* netmanager */; + target = BA222AE00DC882DB001A17F4 /* netmanager Universal */; targetProxy = BA222AEF0DC883EF001A17F4 /* PBXContainerItemProxy */; }; BA222AF20DC883F3001A17F4 /* PBXTargetDependency */ = { @@ -6856,10 +7157,12 @@ OTHER_CFLAGS = ( "-DUSE_POSIX_SHM", "-D__SMP__", + "-DJACK_32_64", ); OTHER_CPLUSPLUSFLAGS = ( "-DMACH_RPC_MACH_SEMA", "-D__SMP__", + "-DJACK_32_64", ); OTHER_LDFLAGS = ( "-framework", @@ -6914,10 +7217,12 @@ OTHER_CFLAGS = ( "-DUSE_POSIX_SHM", "-D__SMP__", + "-DJACK_32_64", ); OTHER_CPLUSPLUSFLAGS = ( "-DMACH_RPC_MACH_SEMA", "-D__SMP__", + "-DJACK_32_64", ); OTHER_LDFLAGS = ( "-framework", @@ -6967,10 +7272,12 @@ OTHER_CFLAGS = ( "-DUSE_POSIX_SHM", "-D__SMP__", + "-DJACK_32_64", ); OTHER_CPLUSPLUSFLAGS = ( "-DMACH_RPC_MACH_SEMA", "-D__SMP__", + "-DJACK_32_64", ); OTHER_LDFLAGS = ( "-framework", @@ -7037,16 +7344,18 @@ LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/3.3; OTHER_CFLAGS = ( "-DUSE_POSIX_SHM", + "-DJACK_32_64", "-D__SMP__", ); OTHER_CPLUSPLUSFLAGS = ( "-DMACH_RPC_MACH_SEMA", "-D__SMP__", + "-DJACK_32_64", "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1)", "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2)", ); OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1 = "-DJACK_LOCATION=\\\"/usr/local/bin\\\""; - OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\"\n"; + OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; OTHER_LDFLAGS = ( "-framework", Carbon, @@ -7105,16 +7414,18 @@ MACOSX_DEPLOYMENT_TARGET = 10.4; OTHER_CFLAGS = ( "-DUSE_POSIX_SHM", + "-DJACK_32_64", "-D__SMP__", ); OTHER_CPLUSPLUSFLAGS = ( "-DMACH_RPC_MACH_SEMA", + "-DJACK_32_64", "-D__SMP__", - "$(OTHER_CPLUSPLUSFLAGS_QUOTED_1)", "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1)", + "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2)", ); - OTHER_CPLUSPLUSFLAGS_QUOTED_1 = "-DJACK_LOCATION=\\\"/usr/local/bin\\\""; OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; + OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2 = "-DJACK_LOCATION=\\\"/usr/local/bin\\\""; OTHER_LDFLAGS = ( "-framework", Carbon, @@ -7163,16 +7474,18 @@ LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/3.3; OTHER_CFLAGS = ( "-DUSE_POSIX_SHM", + "-DJACK_32_64", "-D__SMP__", ); OTHER_CPLUSPLUSFLAGS = ( "-DMACH_RPC_MACH_SEMA", + "-DJACK_32_64", "-D__SMP__", - "$(OTHER_CPLUSPLUSFLAGS_QUOTED_1)", "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1)", + "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2)", ); - OTHER_CPLUSPLUSFLAGS_QUOTED_1 = "-DJACK_LOCATION=\\\"/usr/local/bin\\\""; - OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; + OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1 = "-DJACK_LOCATION=\\\"/usr/local/bin\\\""; + OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; OTHER_LDFLAGS = ( "-framework", Carbon, @@ -7230,11 +7543,13 @@ LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/3.3; OTHER_CFLAGS = ( "-DSERVER_SIDE", + "-DJACK_32_64", "-D__SMP__", "-DUSE_POSIX_SHM", ); OTHER_CPLUSPLUSFLAGS = ( "-DSERVER_SIDE", + "-DJACK_32_64", "-D__SMP__", "-DMACH_RPC_MACH_SEMA", "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1)", @@ -7298,19 +7613,20 @@ MACOSX_DEPLOYMENT_TARGET = 10.4; OTHER_CFLAGS = ( "-DSERVER_SIDE", + "-DJACK_32_64", "-D__SMP__", "-DUSE_POSIX_SHM", ); OTHER_CPLUSPLUSFLAGS = ( "-DSERVER_SIDE", + "-DJACK_32_64", "-D__SMP__", "-DMACH_RPC_MACH_SEMA", - "$(OTHER_CPLUSPLUSFLAGS_QUOTED_2)", - "$(OTHER_CPLUSPLUSFLAGS_QUOTED_3)", + "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1)", + "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2)", ); - OTHER_CPLUSPLUSFLAGS_QUOTED_1 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; - OTHER_CPLUSPLUSFLAGS_QUOTED_2 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; - OTHER_CPLUSPLUSFLAGS_QUOTED_3 = "-DLIB_DIR=\\\"lib\\\""; + OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; + OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2 = "-DLIB_DIR=\\\"lib\\\""; OTHER_LDFLAGS = ( "-framework", Carbon, @@ -7359,17 +7675,18 @@ LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/3.3; OTHER_CFLAGS = ( "-D__SMP__", + "-DJACK_32_64", "-DUSE_POSIX_SHM", ); OTHER_CPLUSPLUSFLAGS = ( "-D__SMP__", + "-DJACK_32_64", "-DMACH_RPC_MACH_SEMA", - "$(OTHER_CPLUSPLUSFLAGS_QUOTED_2)", - "$(OTHER_CPLUSPLUSFLAGS_QUOTED_3)", + "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1)", + "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2)", ); - OTHER_CPLUSPLUSFLAGS_QUOTED_1 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; - OTHER_CPLUSPLUSFLAGS_QUOTED_2 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; - OTHER_CPLUSPLUSFLAGS_QUOTED_3 = "-DLIB_DIR=\\\"lib\\\""; + OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; + OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2 = "-DLIB_DIR=\\\"lib\\\""; OTHER_LDFLAGS = ( "-framework", Carbon, @@ -9431,8 +9748,11 @@ LIBRARY_STYLE = DYNAMIC; MACH_O_TYPE = mh_dylib; MACOSX_DEPLOYMENT_TARGET = 10.4; - OTHER_CFLAGS = ""; - OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; + OTHER_CFLAGS = "-DJACK_32_64"; + OTHER_CPLUSPLUSFLAGS = ( + "-DMACH_RPC_MACH_SEMA", + "-DJACK_32_64", + ); OTHER_LDFLAGS = ( "-framework", Jackservermp, @@ -9578,8 +9898,11 @@ LIBRARY_STYLE = DYNAMIC; MACH_O_TYPE = mh_dylib; MACOSX_DEPLOYMENT_TARGET = 10.4; - OTHER_CFLAGS = ""; - OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; + OTHER_CFLAGS = "-DJACK_32_64"; + OTHER_CPLUSPLUSFLAGS = ( + "-DMACH_RPC_MACH_SEMA", + "-DJACK_32_64", + ); OTHER_LDFLAGS = ( libportaudio.a, "-framework", @@ -9734,17 +10057,16 @@ LIBRARY_STYLE = DYNAMIC; MACH_O_TYPE = mh_dylib; MACOSX_DEPLOYMENT_TARGET = 10.4; - OTHER_CFLAGS = ""; - OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; + OTHER_CFLAGS = "-DJACK_32_64"; + OTHER_CPLUSPLUSFLAGS = ( + "-DMACH_RPC_MACH_SEMA", + "-DJACK_32_64", + ); OTHER_LDFLAGS = ( "-framework", Jackservermp, "-framework", - CoreAudio, - "-framework", CoreServices, - "-framework", - AudioUnit, ); OTHER_REZFLAGS = ""; PREBINDING = NO; @@ -9876,7 +10198,7 @@ LIBRARY_STYLE = DYNAMIC; MACH_O_TYPE = mh_dylib; MACOSX_DEPLOYMENT_TARGET = 10.4; - OTHER_CFLAGS = ""; + OTHER_CFLAGS = "-DJACK_32_64"; OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; OTHER_LDFLAGS = ( "-framework", @@ -9976,7 +10298,7 @@ buildSettings = { COPY_PHASE_STRIP = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; - OTHER_CFLAGS = ""; + OTHER_CFLAGS = "-DJACK_32_64"; OTHER_LDFLAGS = ""; OTHER_REZFLAGS = ""; PRODUCT_NAME = All; @@ -10698,7 +11020,7 @@ }; name = Default; }; - 4B5A1BB80CD1CB9E0005BF74 /* Development */ = { + 4B43A8B710145F6F00E52943 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( @@ -10706,22 +11028,39 @@ ppc, ); COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ""; + DEBUGGING_SYMBOLS = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G4; GCC_OPTIMIZATION_LEVEL = 0; - HEADER_SEARCH_PATHS = ../common; + HEADER_SEARCH_PATHS = ( + ../common, + ../common/jack, + ., + ../posix, + ); + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; OTHER_LDFLAGS = ( "-framework", - Jackmp, + Jackservermp, "-framework", - CoreFoundation, + CoreAudio, + "-framework", + CoreServices, + "-framework", + AudioUnit, ); OTHER_REZFLAGS = ""; - PRODUCT_NAME = jack_midiseq; - REZ_EXECUTABLE = YES; + PREBINDING = NO; + PRODUCT_NAME = jack_dummy; SDKROOT = ""; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( @@ -10733,7 +11072,7 @@ }; name = Development; }; - 4B5A1BB90CD1CB9E0005BF74 /* Deployment */ = { + 4B43A8B810145F6F00E52943 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( @@ -10741,20 +11080,33 @@ ppc, ); COPY_PHASE_STRIP = YES; - FRAMEWORK_SEARCH_PATHS = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; GCC_ENABLE_FIX_AND_CONTINUE = NO; - HEADER_SEARCH_PATHS = ../common; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G4; + HEADER_SEARCH_PATHS = ( + ../common, + ../common/jack, + ., + ../posix, + ); + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; MACOSX_DEPLOYMENT_TARGET = 10.4; OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; OTHER_LDFLAGS = ( "-framework", - Jackmp, + Jackservermp, "-framework", - CoreFoundation, + CoreServices, ); OTHER_REZFLAGS = ""; - PRODUCT_NAME = jack_midiseq; - REZ_EXECUTABLE = YES; + PREBINDING = NO; + PRODUCT_NAME = jack_loopback; SDKROOT = ""; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( @@ -10766,25 +11118,38 @@ }; name = Deployment; }; - 4B5A1BBA0CD1CB9E0005BF74 /* Default */ = { + 4B43A8B910145F6F00E52943 /* Default */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( i386, ppc, ); - FRAMEWORK_SEARCH_PATHS = ""; - HEADER_SEARCH_PATHS = ../common; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G4; + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; OTHER_LDFLAGS = ( "-framework", - Jackmp, + Jackdmp, "-framework", - CoreFoundation, + AudioToolBox, + "-framework", + CoreAudio, + "-framework", + CoreServices, + "-framework", + AudioUnit, ); OTHER_REZFLAGS = ""; - PRODUCT_NAME = jack_midiseq; - REZ_EXECUTABLE = YES; + PREBINDING = NO; + PRODUCT_NAME = jack_dummy; SDKROOT = ""; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( @@ -10795,7 +11160,7 @@ }; name = Default; }; - 4B5A1BD70CD1CCE10005BF74 /* Development */ = { + 4B43A8E41014615800E52943 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( @@ -10803,22 +11168,39 @@ ppc, ); COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ""; + DEBUGGING_SYMBOLS = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G4; GCC_OPTIMIZATION_LEVEL = 0; - HEADER_SEARCH_PATHS = ../common; + HEADER_SEARCH_PATHS = ( + ../common, + ../common/jack, + ., + ../posix, + ); + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; OTHER_LDFLAGS = ( "-framework", - Jackmp, + Jackservermp, "-framework", - CoreFoundation, + CoreAudio, + "-framework", + CoreServices, + "-framework", + AudioUnit, ); OTHER_REZFLAGS = ""; - PRODUCT_NAME = jack_midisine; - REZ_EXECUTABLE = YES; + PREBINDING = NO; + PRODUCT_NAME = jack_dummy; SDKROOT = ""; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( @@ -10830,28 +11212,42 @@ }; name = Development; }; - 4B5A1BD80CD1CCE10005BF74 /* Deployment */ = { + 4B43A8E51014615800E52943 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = ( - i386, - ppc, - ); + ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "ppc i386 ppc64 x86_64"; COPY_PHASE_STRIP = YES; - FRAMEWORK_SEARCH_PATHS = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; GCC_ENABLE_FIX_AND_CONTINUE = NO; - HEADER_SEARCH_PATHS = ../common; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G4; + HEADER_SEARCH_PATHS = ( + ../common, + ../common/jack, + ., + ../posix, + ); + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; MACOSX_DEPLOYMENT_TARGET = 10.4; - OTHER_CFLAGS = ""; + OTHER_CFLAGS = "-DJACK_32_64"; + OTHER_CPLUSPLUSFLAGS = ( + "-DMACH_RPC_MACH_SEMA", + "-DJACK_32_64", + ); OTHER_LDFLAGS = ( "-framework", - Jackmp, + Jackservermp, "-framework", - CoreFoundation, + CoreServices, ); OTHER_REZFLAGS = ""; - PRODUCT_NAME = jack_midisine; - REZ_EXECUTABLE = YES; + PREBINDING = NO; + PRODUCT_NAME = jack_loopback; SDKROOT = ""; SECTORDER_FLAGS = ""; WARNING_CFLAGS = ( @@ -10863,16 +11259,223 @@ }; name = Deployment; }; - 4B5A1BD90CD1CCE10005BF74 /* Default */ = { + 4B43A8E61014615800E52943 /* Default */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( i386, ppc, ); - FRAMEWORK_SEARCH_PATHS = ""; - HEADER_SEARCH_PATHS = ../common; - OTHER_CFLAGS = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G4; + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; + OTHER_LDFLAGS = ( + "-framework", + Jackdmp, + "-framework", + AudioToolBox, + "-framework", + CoreAudio, + "-framework", + CoreServices, + "-framework", + AudioUnit, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = jack_dummy; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + }; + name = Default; + }; + 4B5A1BB80CD1CB9E0005BF74 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + i386, + ppc, + ); + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + HEADER_SEARCH_PATHS = ../common; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-framework", + Jackmp, + "-framework", + CoreFoundation, + ); + OTHER_REZFLAGS = ""; + PRODUCT_NAME = jack_midiseq; + REZ_EXECUTABLE = YES; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + ZERO_LINK = YES; + }; + name = Development; + }; + 4B5A1BB90CD1CB9E0005BF74 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + i386, + ppc, + ); + COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + HEADER_SEARCH_PATHS = ../common; + MACOSX_DEPLOYMENT_TARGET = 10.4; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-framework", + Jackmp, + "-framework", + CoreFoundation, + ); + OTHER_REZFLAGS = ""; + PRODUCT_NAME = jack_midiseq; + REZ_EXECUTABLE = YES; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + ZERO_LINK = NO; + }; + name = Deployment; + }; + 4B5A1BBA0CD1CB9E0005BF74 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + i386, + ppc, + ); + FRAMEWORK_SEARCH_PATHS = ""; + HEADER_SEARCH_PATHS = ../common; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-framework", + Jackmp, + "-framework", + CoreFoundation, + ); + OTHER_REZFLAGS = ""; + PRODUCT_NAME = jack_midiseq; + REZ_EXECUTABLE = YES; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + }; + name = Default; + }; + 4B5A1BD70CD1CCE10005BF74 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + i386, + ppc, + ); + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + HEADER_SEARCH_PATHS = ../common; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-framework", + Jackmp, + "-framework", + CoreFoundation, + ); + OTHER_REZFLAGS = ""; + PRODUCT_NAME = jack_midisine; + REZ_EXECUTABLE = YES; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + ZERO_LINK = YES; + }; + name = Development; + }; + 4B5A1BD80CD1CCE10005BF74 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + i386, + ppc, + ); + COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + HEADER_SEARCH_PATHS = ../common; + MACOSX_DEPLOYMENT_TARGET = 10.4; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-framework", + Jackmp, + "-framework", + CoreFoundation, + ); + OTHER_REZFLAGS = ""; + PRODUCT_NAME = jack_midisine; + REZ_EXECUTABLE = YES; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + ZERO_LINK = NO; + }; + name = Deployment; + }; + 4B5A1BD90CD1CCE10005BF74 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + i386, + ppc, + ); + FRAMEWORK_SEARCH_PATHS = ""; + HEADER_SEARCH_PATHS = ../common; + OTHER_CFLAGS = ""; OTHER_LDFLAGS = ( "-framework", Jackmp, @@ -11361,11 +11964,11 @@ "-DSERVER_SIDE", "-DMACH_RPC_MACH_SEMA", "-D__SMP__", - "$(OTHER_CPLUSPLUSFLAGS_QUOTED_1)", "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1)", + "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2)", ); - OTHER_CPLUSPLUSFLAGS_QUOTED_1 = "-DJACK_LOCATION=\\\"/usr/local/bin\\\""; - OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; + OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1 = "-DJACK_LOCATION=\\\"/usr/local/bin\\\""; + OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; OTHER_LDFLAGS = ( "-framework", Carbon, @@ -11412,11 +12015,11 @@ OTHER_CPLUSPLUSFLAGS = ( "-DMACH_RPC_MACH_SEMA", "-D__SMP__", - "$(OTHER_CPLUSPLUSFLAGS_QUOTED_1)", "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1)", + "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2)", ); - OTHER_CPLUSPLUSFLAGS_QUOTED_1 = "-DJACK_LOCATION=\\\"/usr/local/bin\\\""; - OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; + OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1 = "-DJACK_LOCATION=\\\"/usr/local/bin\\\""; + OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; OTHER_LDFLAGS = ( "-framework", Carbon, @@ -11536,12 +12139,11 @@ "-DSERVER_SIDE", "-D__SMP__", "-DMACH_RPC_MACH_SEMA", - "$(OTHER_CPLUSPLUSFLAGS_QUOTED_2)", - "$(OTHER_CPLUSPLUSFLAGS_QUOTED_3)", + "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1)", + "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2)", ); - OTHER_CPLUSPLUSFLAGS_QUOTED_1 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; - OTHER_CPLUSPLUSFLAGS_QUOTED_2 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; - OTHER_CPLUSPLUSFLAGS_QUOTED_3 = "-DLIB_DIR=\\\"lib\\\""; + OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; + OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2 = "-DLIB_DIR=\\\"lib\\\""; OTHER_LDFLAGS = ( "-framework", Carbon, @@ -11588,12 +12190,11 @@ OTHER_CPLUSPLUSFLAGS = ( "-D__SMP__", "-DMACH_RPC_MACH_SEMA", - "$(OTHER_CPLUSPLUSFLAGS_QUOTED_2)", - "$(OTHER_CPLUSPLUSFLAGS_QUOTED_3)", + "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1)", + "$(OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2)", ); - OTHER_CPLUSPLUSFLAGS_QUOTED_1 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; - OTHER_CPLUSPLUSFLAGS_QUOTED_2 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; - OTHER_CPLUSPLUSFLAGS_QUOTED_3 = "-DLIB_DIR=\\\"lib\\\""; + OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_1 = "-DADDON_DIR=\\\"/usr/local/lib/jackmp\\\""; + OTHER_CPLUSPLUSFLAGS_QUOTED_FOR_TARGET_2 = "-DLIB_DIR=\\\"lib\\\""; OTHER_LDFLAGS = ( "-framework", Carbon, @@ -13131,11 +13732,7 @@ "-framework", Jackservermp, "-framework", - CoreAudio, - "-framework", CoreServices, - "-framework", - AudioUnit, ); OTHER_REZFLAGS = ""; PREBINDING = NO; @@ -13766,26 +14363,754 @@ }; name = Default; }; - 4BE6C6A00A3E096F005A203A /* Development */ = { + 4BDCDB9A1001FB9C00B15929 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( - ppc, i386, + ppc, ); COPY_PHASE_STRIP = NO; + DEBUGGING_SYMBOLS = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + FRAMEWORK_SEARCH_PATHS = ""; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G4; GCC_OPTIMIZATION_LEVEL = 0; - HEADER_SEARCH_PATHS = ../common; + GCC_PREPROCESSOR_DEFINITIONS = ""; + HEADER_SEARCH_PATHS = ( + ., + ../common/jack, + ../posix, + ../common, + ); + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; OTHER_LDFLAGS = ( "-framework", - Jackmp, + Jackservermp, + "-framework", + CoreMIDI, + "-framework", + CoreServices, ); OTHER_REZFLAGS = ""; - PRODUCT_NAME = jack_test; + PREBINDING = NO; + PRODUCT_NAME = jack_coremidi; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + ZERO_LINK = YES; + }; + name = Development; + }; + 4BDCDB9B1001FB9C00B15929 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "ppc i386 ppc64 x86_64"; + COPY_PHASE_STRIP = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G4; + GCC_PREPROCESSOR_DEFINITIONS = ""; + HEADER_SEARCH_PATHS = ( + ., + ../common/jack, + ../posix, + ../common, + ); + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + MACOSX_DEPLOYMENT_TARGET = 10.4; + OTHER_CFLAGS = "-DJACK_32_64"; + OTHER_CPLUSPLUSFLAGS = ( + "-DMACH_RPC_MACH_SEMA", + "-DJACK_32_64", + ); + OTHER_LDFLAGS = ( + "-framework", + Jackservermp, + "-framework", + CoreMIDI, + "-framework", + CoreServices, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = jack_coremidi; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + ZERO_LINK = NO; + }; + name = Deployment; + }; + 4BDCDB9C1001FB9C00B15929 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + i386, + ppc, + ); + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G4; + GCC_PREPROCESSOR_DEFINITIONS = ""; + HEADER_SEARCH_PATHS = ../common; + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; + OTHER_LDFLAGS = ( + "-framework", + Jackdmp, + "-framework", + AudioToolBox, + "-framework", + CoreAudio, + "-framework", + CoreServices, + "-framework", + AudioUnit, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = jack_coreaudio; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + }; + name = Default; + }; + 4BDCDBC21001FCC000B15929 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + i386, + ppc, + ); + COPY_PHASE_STRIP = NO; + DEBUGGING_SYMBOLS = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G4; + GCC_OPTIMIZATION_LEVEL = 0; + HEADER_SEARCH_PATHS = ( + ../common, + ., + ../common/jack, + ../posix, + ); + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; + OTHER_LDFLAGS = ( + "-framework", + Jackservermp, + "-framework", + CoreAudio, + "-framework", + CoreServices, + "-framework", + AudioUnit, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = jack_net; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + ZERO_LINK = YES; + }; + name = Development; + }; + 4BDCDBC31001FCC000B15929 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "ppc i386 ppc64 x86_64"; + COPY_PHASE_STRIP = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G4; + HEADER_SEARCH_PATHS = ( + ../common, + ., + ../common/jack, + ../posix, + ); + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + MACOSX_DEPLOYMENT_TARGET = 10.4; + OTHER_CFLAGS = "-DJACK_32_64"; + OTHER_CPLUSPLUSFLAGS = ( + "-DMACH_RPC_MACH_SEMA", + "-DJACK_32_64", + ); + OTHER_LDFLAGS = ( + "-framework", + Jackservermp, + "-framework", + CoreServices, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = jack_net; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + ZERO_LINK = NO; + }; + name = Deployment; + }; + 4BDCDBC41001FCC000B15929 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + i386, + ppc, + ); + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G4; + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; + OTHER_LDFLAGS = ( + "-framework", + Jackdmp, + "-framework", + AudioToolBox, + "-framework", + CoreAudio, + "-framework", + CoreServices, + "-framework", + AudioUnit, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = jack_dummy; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + }; + name = Default; + }; + 4BDCDBE51001FD2D00B15929 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + i386, + ppc, + ); + COPY_PHASE_STRIP = NO; + DEBUGGING_SYMBOLS = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G4; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ""; + HEADER_SEARCH_PATHS = ( + ., + ../posix, + ../common/jack, + ../common, + ); + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; + OTHER_LDFLAGS = ( + "-framework", + Jackservermp, + "-framework", + CoreAudio, + "-framework", + CoreServices, + "-framework", + AudioUnit, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = netmanager; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + ZERO_LINK = YES; + }; + name = Development; + }; + 4BDCDBE61001FD2D00B15929 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "ppc i386 ppc64 x86_64"; + COPY_PHASE_STRIP = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G4; + GCC_PREPROCESSOR_DEFINITIONS = ""; + HEADER_SEARCH_PATHS = ( + ., + ../posix, + ../common/jack, + ../common, + ); + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + MACOSX_DEPLOYMENT_TARGET = 10.4; + OTHER_CFLAGS = "-DJACK_32_64"; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; + OTHER_LDFLAGS = ( + "-framework", + Jackservermp, + "-framework", + CoreAudio, + "-framework", + CoreServices, + "-framework", + AudioUnit, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = netmanager; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + ZERO_LINK = NO; + }; + name = Deployment; + }; + 4BDCDBE71001FD2D00B15929 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + i386, + ppc, + ); + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G4; + GCC_PREPROCESSOR_DEFINITIONS = ""; + HEADER_SEARCH_PATHS = ../common; + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; + OTHER_LDFLAGS = ( + "-framework", + Jackdmp, + "-framework", + AudioToolBox, + "-framework", + CoreAudio, + "-framework", + CoreServices, + "-framework", + AudioUnit, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = inprocess; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + }; + name = Default; + }; + 4BDCDBFC1001FD7300B15929 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = i386; + COPY_PHASE_STRIP = NO; + DEBUGGING_SYMBOLS = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G4; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ""; + HEADER_SEARCH_PATHS = ( + ., + ../posix, + ../common/jack, + ../common, + ); + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; + OTHER_LDFLAGS = ( + /usr/local/lib/libsamplerate.a, + "-framework", + Jackservermp, + "-framework", + CoreAudio, + "-framework", + CoreServices, + "-framework", + AudioUnit, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = netmanager; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + ZERO_LINK = YES; + }; + name = Development; + }; + 4BDCDBFD1001FD7300B15929 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386"; + COPY_PHASE_STRIP = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G4; + GCC_PREPROCESSOR_DEFINITIONS = ""; + HEADER_SEARCH_PATHS = ( + ., + ../posix, + ../common/jack, + ../common, + ); + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + MACOSX_DEPLOYMENT_TARGET = 10.4; + OTHER_CFLAGS = "-DJACK_32_64"; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; + OTHER_LDFLAGS = ( + /opt/local/lib/libsamplerate.a, + "-framework", + Jackservermp, + "-framework", + CoreAudio, + "-framework", + CoreServices, + "-framework", + AudioUnit, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = audioadapter; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + ZERO_LINK = NO; + }; + name = Deployment; + }; + 4BDCDBFE1001FD7300B15929 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + i386, + ppc, + ); + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G4; + GCC_PREPROCESSOR_DEFINITIONS = ""; + HEADER_SEARCH_PATHS = ../common; + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; + OTHER_LDFLAGS = ( + "-framework", + Jackdmp, + "-framework", + AudioToolBox, + "-framework", + CoreAudio, + "-framework", + CoreServices, + "-framework", + AudioUnit, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = inprocess; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + }; + name = Default; + }; + 4BDCDC221001FDE300B15929 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = i386; + COPY_PHASE_STRIP = NO; + DEBUGGING_SYMBOLS = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G4; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ""; + HEADER_SEARCH_PATHS = ( + ., + ../posix, + ../common/jack, + ../common, + ); + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA"; + OTHER_LDFLAGS = ( + /usr/local/lib/libsamplerate.a, + "-framework", + Jackservermp, + "-framework", + CoreAudio, + "-framework", + CoreServices, + "-framework", + AudioUnit, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = netmanager; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + ZERO_LINK = YES; + }; + name = Development; + }; + 4BDCDC231001FDE300B15929 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386"; + COPY_PHASE_STRIP = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G4; + GCC_PREPROCESSOR_DEFINITIONS = ""; + HEADER_SEARCH_PATHS = ( + ., + ../posix, + ../common, + ../common/jack, + ); + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + MACOSX_DEPLOYMENT_TARGET = 10.4; + OTHER_CFLAGS = "-DJACK_32_64"; + OTHER_CPLUSPLUSFLAGS = ( + "-DMACH_RPC_MACH_SEMA", + "-DJACK_32_64", + ); + OTHER_LDFLAGS = ( + /opt/local/lib/libsamplerate.a, + "-framework", + Jackservermp, + "-framework", + CoreAudio, + "-framework", + CoreServices, + "-framework", + AudioUnit, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = netadapter; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + ZERO_LINK = NO; + }; + name = Deployment; + }; + 4BDCDC241001FDE300B15929 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + i386, + ppc, + ); + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + EXECUTABLE_EXTENSION = so; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G4; + GCC_PREPROCESSOR_DEFINITIONS = ""; + HEADER_SEARCH_PATHS = ../common; + INSTALL_PATH = /usr/local/lib; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; + OTHER_LDFLAGS = ( + "-framework", + Jackdmp, + "-framework", + AudioToolBox, + "-framework", + CoreAudio, + "-framework", + CoreServices, + "-framework", + AudioUnit, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = inprocess; + SDKROOT = ""; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + }; + name = Default; + }; + 4BE6C6A00A3E096F005A203A /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + HEADER_SEARCH_PATHS = ../common; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-framework", + Jackmp, + ); + OTHER_REZFLAGS = ""; + PRODUCT_NAME = jack_test; REZ_EXECUTABLE = YES; SDKROOT = ""; SECTORDER_FLAGS = ""; @@ -15003,11 +16328,7 @@ "-framework", Jackservermp, "-framework", - CoreAudio, - "-framework", CoreServices, - "-framework", - AudioUnit, ); OTHER_REZFLAGS = ""; PREBINDING = NO; @@ -15236,7 +16557,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Default; }; - 4B19B2FC0E23620F00DD4A82 /* Build configuration list for PBXNativeTarget "audioadapter" */ = { + 4B19B2FC0E23620F00DD4A82 /* Build configuration list for PBXNativeTarget "audioadapter Universal" */ = { isa = XCConfigurationList; buildConfigurations = ( 4B19B2FD0E23620F00DD4A82 /* Development */, @@ -15586,6 +16907,26 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Default; }; + 4B43A8B610145F6F00E52943 /* Build configuration list for PBXNativeTarget "jack_loopback Universal" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4B43A8B710145F6F00E52943 /* Development */, + 4B43A8B810145F6F00E52943 /* Deployment */, + 4B43A8B910145F6F00E52943 /* Default */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; + 4B43A8E31014615800E52943 /* Build configuration list for PBXNativeTarget "jack_loopback 64 bits" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4B43A8E41014615800E52943 /* Development */, + 4B43A8E51014615800E52943 /* Deployment */, + 4B43A8E61014615800E52943 /* Default */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; 4B5A1BB70CD1CB9E0005BF74 /* Build configuration list for PBXNativeTarget "jack_midiseq Universal" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -15606,7 +16947,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Default; }; - 4B5E08D10E5B66EE00BEE4E0 /* Build configuration list for PBXNativeTarget "netadapter" */ = { + 4B5E08D10E5B66EE00BEE4E0 /* Build configuration list for PBXNativeTarget "netadapter Universal" */ = { isa = XCConfigurationList; buildConfigurations = ( 4B5E08D20E5B66EE00BEE4E0 /* Development */, @@ -15846,7 +17187,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Default; }; - 4BD623F30CBCF0F000DE782F /* Build configuration list for PBXNativeTarget "inprocess" */ = { + 4BD623F30CBCF0F000DE782F /* Build configuration list for PBXNativeTarget "inprocess Universal" */ = { isa = XCConfigurationList; buildConfigurations = ( 4BD623F40CBCF0F000DE782F /* Development */, @@ -15856,6 +17197,56 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Default; }; + 4BDCDB991001FB9C00B15929 /* Build configuration list for PBXNativeTarget "jack_coremidi 64 bits" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4BDCDB9A1001FB9C00B15929 /* Development */, + 4BDCDB9B1001FB9C00B15929 /* Deployment */, + 4BDCDB9C1001FB9C00B15929 /* Default */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; + 4BDCDBC11001FCC000B15929 /* Build configuration list for PBXNativeTarget "jack_net 64 bits" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4BDCDBC21001FCC000B15929 /* Development */, + 4BDCDBC31001FCC000B15929 /* Deployment */, + 4BDCDBC41001FCC000B15929 /* Default */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; + 4BDCDBE41001FD2D00B15929 /* Build configuration list for PBXNativeTarget "netmanager 64 bits" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4BDCDBE51001FD2D00B15929 /* Development */, + 4BDCDBE61001FD2D00B15929 /* Deployment */, + 4BDCDBE71001FD2D00B15929 /* Default */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; + 4BDCDBFB1001FD7300B15929 /* Build configuration list for PBXNativeTarget "audioadapter 64 bits" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4BDCDBFC1001FD7300B15929 /* Development */, + 4BDCDBFD1001FD7300B15929 /* Deployment */, + 4BDCDBFE1001FD7300B15929 /* Default */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; + 4BDCDC211001FDE300B15929 /* Build configuration list for PBXNativeTarget "netadapter 64 bits" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4BDCDC221001FDE300B15929 /* Development */, + 4BDCDC231001FDE300B15929 /* Deployment */, + 4BDCDC241001FDE300B15929 /* Default */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Default; + }; 4BE6C69F0A3E096F005A203A /* Build configuration list for PBXNativeTarget "jack_test Universal" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -15976,7 +17367,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Default; }; - BA222AE50DC882DB001A17F4 /* Build configuration list for PBXNativeTarget "netmanager" */ = { + BA222AE50DC882DB001A17F4 /* Build configuration list for PBXNativeTarget "netmanager Universal" */ = { isa = XCConfigurationList; buildConfigurations = ( BA222AE60DC882DB001A17F4 /* Development */, diff --git a/macosx/coreaudio/JackCoreAudioDriver.cpp b/macosx/coreaudio/JackCoreAudioDriver.cpp index 43655ad9..6c2222e7 100644 --- a/macosx/coreaudio/JackCoreAudioDriver.cpp +++ b/macosx/coreaudio/JackCoreAudioDriver.cpp @@ -26,7 +26,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "JackDriverLoader.h" #include "JackGlobals.h" #include "JackCompilerDeps.h" + #include +#include namespace Jack { @@ -255,19 +257,22 @@ OSStatus JackCoreAudioDriver::DeviceNotificationCallback(AudioDeviceID inDevice, switch (inPropertyID) { - case kAudioDeviceProcessorOverload: + case kAudioDeviceProcessorOverload: { jack_error("JackCoreAudioDriver::DeviceNotificationCallback kAudioDeviceProcessorOverload"); jack_time_t cur_time = GetMicroSeconds(); driver->NotifyXRun(cur_time, float(cur_time - driver->fBeginDateUst)); // Better this value than nothing... break; + } - case kAudioDevicePropertyStreamConfiguration: + case kAudioDevicePropertyStreamConfiguration: { jack_error("Cannot handle kAudioDevicePropertyStreamConfiguration : server may not work correctly anymore..."); return kAudioHardwareUnsupportedOperationError; + } - case kAudioDevicePropertyNominalSampleRate: + case kAudioDevicePropertyNominalSampleRate: { jack_error("Cannot handle kAudioDevicePropertyNominalSampleRate : server may not work correctly anymore..."); return kAudioHardwareUnsupportedOperationError; + } /* case kAudioDevicePropertyNominalSampleRate: { diff --git a/macosx/install_jackdmp b/macosx/install_jackdmp index 8ee9dd7c..7e171b76 100755 --- a/macosx/install_jackdmp +++ b/macosx/install_jackdmp @@ -15,7 +15,9 @@ sudo cp jackdmp /usr/local/bin # Copy drivers sudo install -d /usr/local/lib/jackmp sudo cp jack_coreaudio.so /usr/local/lib/jackmp +sudo cp jack_coremidi.so /usr/local/lib/jackmp sudo cp jack_dummy.so /usr/local/lib/jackmp +sudo cp jack_loopback.so /usr/local/lib/jackmp [ -f jack_net.so ] && sudo cp jack_net.so /usr/local/lib/jackmp # Copy tools diff --git a/macosx/wscript b/macosx/wscript index ade18b4a..843874bc 100644 --- a/macosx/wscript +++ b/macosx/wscript @@ -58,6 +58,8 @@ def build(bld): create_jack_driver_obj(bld, 'dummy', '../common/JackDummyDriver.cpp') + create_jack_driver_obj(bld, 'loopback', '../common/JackLoopbackDriver.cpp') + create_jack_audio_driver_obj(bld, 'coreaudio', 'coreaudio/JackCoreAudioDriver.cpp') create_jack_midi_driver_obj(bld, 'coremidi', 'coremidi/JackCoreMidiDriver.cpp') diff --git a/posix/JackFifo.h b/posix/JackFifo.h index be7d9b8a..8ac72591 100644 --- a/posix/JackFifo.h +++ b/posix/JackFifo.h @@ -48,7 +48,7 @@ class SERVER_EXPORT JackFifo : public detail::JackSynchro public: - JackFifo(): fFifo( -1) + JackFifo():JackSynchro(), fFifo(-1) {} bool Signal(); diff --git a/posix/JackPosixSemaphore.h b/posix/JackPosixSemaphore.h index 2052ff1c..226db2a1 100644 --- a/posix/JackPosixSemaphore.h +++ b/posix/JackPosixSemaphore.h @@ -46,7 +46,7 @@ class SERVER_EXPORT JackPosixSemaphore : public detail::JackSynchro public: - JackPosixSemaphore(): fSemaphore(NULL) + JackPosixSemaphore():JackSynchro(), fSemaphore(NULL) {} bool Signal(); diff --git a/posix/JackPosixServerLaunch.cpp b/posix/JackPosixServerLaunch.cpp index 1931474d..855a2c59 100644 --- a/posix/JackPosixServerLaunch.cpp +++ b/posix/JackPosixServerLaunch.cpp @@ -26,7 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. using namespace Jack; -#if defined(JACK_DBUS) +#if defined(USE_LIBDBUS_AUTOLAUNCH) #include @@ -73,7 +73,7 @@ static int start_server_dbus(const char* server_name) return 0; } -#endif +#else /* Exec the JACK server in this process. Does not return. */ static void start_server_classic_aux(const char* server_name) @@ -189,13 +189,15 @@ static int start_server_classic(const char* server_name) return 0; /* (probably) successful */ } +#endif + static int start_server(const char* server_name, jack_options_t options) { if ((options & JackNoStartServer) || getenv("JACK_NO_START_SERVER")) { return 1; } -#if defined(JACK_DBUS) +#if defined(USE_LIBDBUS_AUTOLAUNCH) return start_server_dbus(server_name); #else return start_server_classic(server_name); diff --git a/solaris/oss/JackBoomerDriver.cpp b/solaris/oss/JackBoomerDriver.cpp index b77e7747..96dc0a6a 100644 --- a/solaris/oss/JackBoomerDriver.cpp +++ b/solaris/oss/JackBoomerDriver.cpp @@ -61,7 +61,8 @@ struct OSSCycleTable { }; OSSCycleTable gCycleTable; -int gCycleCount = 0; +int gCycleReadCount = 0; +int gCycleWriteCount = 0; #endif @@ -229,6 +230,26 @@ void JackBoomerDriver::DisplayDeviceInfo() } } +JackBoomerDriver::JackBoomerDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table) + : JackAudioDriver(name, alias, engine, table), + fInFD(-1), fOutFD(-1), fBits(0), + fSampleFormat(0), fNperiods(0), fRWMode(0), fExcl(false), fIgnoreHW(true), + fInputBufferSize(0), fOutputBufferSize(0), + fInputBuffer(NULL), fOutputBuffer(NULL), + fInputThread(&fInputHandler), fOutputThread(&fOutputHandler), + fInputHandler(this), fOutputHandler(this) + +{ + sem_init(&fReadSema, 0, 0); + sem_init(&fWriteSema, 0, 0); +} + +JackBoomerDriver::~JackBoomerDriver() +{ + sem_destroy(&fReadSema); + sem_destroy(&fWriteSema); +} + int JackBoomerDriver::OpenInput() { int flags = 0; @@ -395,11 +416,11 @@ int JackBoomerDriver::Open(jack_nframes_t nframes, return -1; } else { - if (fEngineControl->fSyncMode) { - jack_error("Cannot run in synchronous mode, remove the -S parameter for jackd"); + if (!fEngineControl->fSyncMode) { + jack_error("Cannot run in asynchronous mode, use the -S parameter for jackd"); return -1; } - + fRWMode |= ((capturing) ? kRead : 0); fRWMode |= ((playing) ? kWrite : 0); fBits = bits; @@ -428,7 +449,7 @@ int JackBoomerDriver::Close() if (file) { jack_info("Writing OSS driver timing data...."); - for (int i = 1; i < gCycleCount; i++) { + for (int i = 1; i < std::min(gCycleReadCount, gCycleWriteCount); i++) { int d1 = gCycleTable.fTable[i].fAfterRead - gCycleTable.fTable[i].fBeforeRead; int d2 = gCycleTable.fTable[i].fAfterReadConvert - gCycleTable.fTable[i].fAfterRead; int d3 = gCycleTable.fTable[i].fAfterWrite - gCycleTable.fTable[i].fBeforeWrite; @@ -487,15 +508,6 @@ int JackBoomerDriver::OpenAux() return -1; } - // Prepare ringbuffers used for output - if (fPlaybackChannels > 0) { - fRingBuffer = new jack_ringbuffer_t*[fPlaybackChannels]; - for (int i = 0; i < fPlaybackChannels; i++) { - fRingBuffer[i] = jack_ringbuffer_create(fOutputBufferSize * 2); - jack_ringbuffer_read_advance(fRingBuffer[i], fOutputBufferSize); - } - } - DisplayDeviceInfo(); return 0; } @@ -519,15 +531,6 @@ void JackBoomerDriver::CloseAux() if (fOutputBuffer) free(fOutputBuffer); fOutputBuffer = NULL; - - for (int i = 0; i < fPlaybackChannels; i++) { - if (fRingBuffer[i]) - jack_ringbuffer_free(fRingBuffer[i]); - fRingBuffer[i] = NULL; - } - - delete [] fRingBuffer; - fRingBuffer = NULL; } int JackBoomerDriver::Start() @@ -535,10 +538,18 @@ int JackBoomerDriver::Start() jack_log("JackBoomerDriver::Start"); JackAudioDriver::Start(); + // Start input thread only when needed + if (fInFD > 0) { + if (fInputThread.StartSync() < 0) { + jack_error("Cannot start input thread"); + return -1; + } + } + // Start output thread only when needed if (fOutFD > 0) { - if (fThread.StartSync() < 0) { - jack_error("Cannot start thread"); + if (fOutputThread.StartSync() < 0) { + jack_error("Cannot start output thread"); return -1; } } @@ -548,42 +559,81 @@ int JackBoomerDriver::Start() int JackBoomerDriver::Stop() { + // Stop input thread only when needed + if (fInFD > 0) { + fInputThread.Kill(); + } + // Stop output thread only when needed if (fOutFD > 0) { - return fThread.Kill(); - } else { - return 0; + fOutputThread.Kill(); } + + return 0; } int JackBoomerDriver::Read() { - if (fInFD < 0) { +/* + // Keep begin cycle time + JackDriver::CycleTakeBeginTime(); +*/ + + return 0; +} + +int JackBoomerDriver::Write() +{ +/* + // Keep begin cycle time + JackDriver::CycleTakeEndTime(); +*/ + + return 0; +} + +bool JackBoomerDriver::JackBoomerDriverInput::Init() +{ + if (fDriver->IsRealTime()) { + jack_log("JackBoomerDriverInput::Init IsRealTime"); + if (fDriver->fInputThread.AcquireRealTime(GetEngineControl()->fServerPriority) < 0) { + jack_error("AcquireRealTime error"); + } else { + set_threaded_log_function(); + } + } + + return true; +} + +bool JackBoomerDriver::JackBoomerDriverInput::Execute() +{ + if (fDriver->fInFD < 0) { // Keep begin cycle time - JackDriver::CycleTakeBeginTime(); - return 0; + fDriver->CycleTakeBeginTime(); + return true; } #ifdef JACK_MONITOR - gCycleTable.fTable[gCycleCount].fBeforeRead = GetMicroSeconds(); + gCycleTable.fTable[gCycleReadCount].fBeforeRead = GetMicroSeconds(); #endif audio_errinfo ei_in; - ssize_t count = ::read(fInFD, fInputBuffer, fInputBufferSize); + ssize_t count = ::read(fDriver->fInFD, fDriver->fInputBuffer, fDriver->fInputBufferSize); #ifdef JACK_MONITOR - if (count > 0 && count != (int)fInputBufferSize) - jack_log("JackBoomerDriver::Read count = %ld", count / (fSampleSize * fCaptureChannels)); - gCycleTable.fTable[gCycleCount].fAfterRead = GetMicroSeconds(); + if (count > 0 && count != (int)fDriver->fInputBufferSize) + jack_log("JackBoomerDriverInput::Execute count = %ld", count / (fDriver->fSampleSize * fDriver->fCaptureChannels)); + gCycleTable.fTable[gCycleReadCount].fAfterRead = GetMicroSeconds(); #endif // XRun detection - if (ioctl(fInFD, SNDCTL_DSP_GETERROR, &ei_in) == 0) { + if (ioctl(fDriver->fInFD, SNDCTL_DSP_GETERROR, &ei_in) == 0) { if (ei_in.rec_overruns > 0 ) { - jack_error("JackBoomerDriver::Read overruns"); + jack_error("JackBoomerDriverInput::Execute overruns"); jack_time_t cur_time = GetMicroSeconds(); - NotifyXRun(cur_time, float(cur_time - fBeginDateUst)); // Better this value than nothing... + fDriver->NotifyXRun(cur_time, float(cur_time - fDriver->fBeginDateUst)); // Better this value than nothing... } if (ei_in.rec_errorcount > 0 && ei_in.rec_lasterror != 0) { @@ -592,47 +642,34 @@ int JackBoomerDriver::Read() } if (count < 0) { - jack_log("JackBoomerDriver::Read error = %s", strerror(errno)); - return -1; - } else if (count < (int)fInputBufferSize) { - jack_error("JackBoomerDriver::Read error bytes read = %ld", count); - return -1; + jack_log("JackBoomerDriverInput::Execute error = %s", strerror(errno)); + } else if (count < (int)fDriver->fInputBufferSize) { + jack_error("JackBoomerDriverInput::Execute error bytes read = %ld", count); } else { // Keep begin cycle time - JackDriver::CycleTakeBeginTime(); - for (int i = 0; i < fCaptureChannels; i++) { - if (fGraphManager->GetConnectionsNum(fCapturePortList[i]) > 0) { - CopyAndConvertIn(GetInputBuffer(i), fInputBuffer, fEngineControl->fBufferSize, i, fCaptureChannels, fBits); + fDriver->CycleTakeBeginTime(); + for (int i = 0; i < fDriver->fCaptureChannels; i++) { + if (fDriver->fGraphManager->GetConnectionsNum(fDriver->fCapturePortList[i]) > 0) { + CopyAndConvertIn(fDriver->GetInputBuffer(i), fDriver->fInputBuffer, fDriver->fEngineControl->fBufferSize, i, fDriver->fCaptureChannels, fDriver->fBits); } } #ifdef JACK_MONITOR - gCycleTable.fTable[gCycleCount].fAfterReadConvert = GetMicroSeconds(); + gCycleTable.fTable[gCycleReadCount].fAfterReadConvert = GetMicroSeconds(); + gCycleReadCount = (gCycleReadCount == CYCLE_POINTS - 1) ? gCycleReadCount: gCycleReadCount + 1; #endif - - return 0; } -} -int JackBoomerDriver::Write() -{ - for (int i = 0; i < fPlaybackChannels; i++) { - if (fGraphManager->GetConnectionsNum(fPlaybackPortList[i]) > 0) { - if (jack_ringbuffer_write(fRingBuffer[i], (char*)GetOutputBuffer(i), fOutputBufferSize) < fOutputBufferSize) { - jack_log("JackBoomerDriver::Write ringbuffer full"); - } - } - } - - return 0; + fDriver->SynchronizeRead(); + return true; } -bool JackBoomerDriver::Init() +bool JackBoomerDriver::JackBoomerDriverOutput::Init() { - if (IsRealTime()) { - jack_log("JackBoomerDriver::Init IsRealTime"); - if (fThread.AcquireRealTime(GetEngineControl()->fServerPriority) < 0) { + if (fDriver->IsRealTime()) { + jack_log("JackBoomerDriverOutput::Init IsRealTime"); + if (fDriver->fOutputThread.AcquireRealTime(GetEngineControl()->fServerPriority) < 0) { jack_error("AcquireRealTime error"); } else { set_threaded_log_function(); @@ -640,83 +677,64 @@ bool JackBoomerDriver::Init() } // Maybe necessary to write an empty output buffer first time : see http://manuals.opensound.com/developer/fulldup.c.html - memset(fOutputBuffer, 0, fOutputBufferSize); + memset(fDriver->fOutputBuffer, 0, fDriver->fOutputBufferSize); // Prefill ouput buffer - if (fOutFD > 0) { - for (int i = 0; i < fNperiods; i++) { - ssize_t count = ::write(fOutFD, fOutputBuffer, fOutputBufferSize); - if (count < (int)fOutputBufferSize) { + if (fDriver->fOutFD > 0) { + for (int i = 0; i < fDriver->fNperiods; i++) { + ssize_t count = ::write(fDriver->fOutFD, fDriver->fOutputBuffer, fDriver->fOutputBufferSize); + if (count < (int)fDriver->fOutputBufferSize) { jack_error("JackBoomerDriver::Write error bytes written = %ld", count); } } int delay; - if (ioctl(fOutFD, SNDCTL_DSP_GETODELAY, &delay) == -1) { + if (ioctl(fDriver->fOutFD, SNDCTL_DSP_GETODELAY, &delay) == -1) { jack_error("JackBoomerDriver::Write error get out delay : %s@%i, errno = %d", __FILE__, __LINE__, errno); } - delay /= fSampleSize * fPlaybackChannels; + delay /= fDriver->fSampleSize * fDriver->fPlaybackChannels; jack_info("JackBoomerDriver::Write output latency frames = %ld", delay); } return true; } -bool JackBoomerDriver::Execute() +bool JackBoomerDriver::JackBoomerDriverOutput::Execute() { - memset(fOutputBuffer, 0, fOutputBufferSize); - - for (int i = 0; i < fPlaybackChannels; i++) { - if (fGraphManager->GetConnectionsNum(fPlaybackPortList[i]) > 0) { - - jack_ringbuffer_data_t ring_buffer_data[2]; - jack_ringbuffer_get_read_vector(fRingBuffer[i], ring_buffer_data); + memset(fDriver->fOutputBuffer, 0, fDriver->fOutputBufferSize); - unsigned int available_frames = (ring_buffer_data[0].len + ring_buffer_data[1].len) / sizeof(float); - jack_log("Output available = %ld", available_frames); - - unsigned int needed_bytes = fOutputBufferSize; - float* output = (float*)fOutputBuffer; - - for (int j = 0; j < 2; j++) { - unsigned int consumed_bytes = std::min(needed_bytes, ring_buffer_data[j].len); - CopyAndConvertOut(output, (float*)ring_buffer_data[j].buf, consumed_bytes / sizeof(float), i, fPlaybackChannels, fBits); - output += consumed_bytes / sizeof(float); - needed_bytes -= consumed_bytes; - } - - if (needed_bytes > 0) { - jack_error("JackBoomerDriver::Execute missing frames = %ld", needed_bytes / sizeof(float)); - } - - jack_ringbuffer_read_advance(fRingBuffer[i], fOutputBufferSize - needed_bytes); +#ifdef JACK_MONITOR + gCycleTable.fTable[gCycleWriteCount].fBeforeWriteConvert = GetMicroSeconds(); +#endif + + for (int i = 0; i < fDriver->fPlaybackChannels; i++) { + if (fDriver->fGraphManager->GetConnectionsNum(fDriver->fPlaybackPortList[i]) > 0) { + CopyAndConvertOut(fDriver->fOutputBuffer, fDriver->GetOutputBuffer(i), fDriver->fEngineControl->fBufferSize, i, fDriver->fPlaybackChannels, fDriver->fBits); } } #ifdef JACK_MONITOR - gCycleTable.fTable[gCycleCount].fBeforeWrite = GetMicroSeconds(); + gCycleTable.fTable[gCycleWriteCount].fBeforeWrite = GetMicroSeconds(); #endif - // Keep end cycle time - JackDriver::CycleTakeEndTime(); - ssize_t count = ::write(fOutFD, fOutputBuffer, fOutputBufferSize); + ssize_t count = ::write(fDriver->fOutFD, fDriver->fOutputBuffer, fDriver->fOutputBufferSize); #ifdef JACK_MONITOR - if (count > 0 && count != (int)fOutputBufferSize) - jack_log("JackBoomerDriver::Execute count = %ld", count / (fSampleSize * fPlaybackChannels)); - gCycleTable.fTable[gCycleCount].fAfterWrite = GetMicroSeconds(); - gCycleCount = (gCycleCount == CYCLE_POINTS - 1) ? gCycleCount: gCycleCount + 1; + if (count > 0 && count != (int)fDriver->fOutputBufferSize) + jack_log("JackBoomerDriverOutput::Execute count = %ld", count / (fDriver->fSampleSize * fDriver->fPlaybackChannels)); + gCycleTable.fTable[gCycleWriteCount].fAfterWrite = GetMicroSeconds(); + gCycleWriteCount = (gCycleWriteCount == CYCLE_POINTS - 1) ? gCycleWriteCount: gCycleWriteCount + 1; #endif // XRun detection audio_errinfo ei_out; - if (ioctl(fOutFD, SNDCTL_DSP_GETERROR, &ei_out) == 0) { + if (ioctl(fDriver->fOutFD, SNDCTL_DSP_GETERROR, &ei_out) == 0) { if (ei_out.play_underruns > 0) { - jack_error("JackBoomerDriver::Execute underruns"); + jack_error("JackBoomerDriverOutput::Execute underruns"); jack_time_t cur_time = GetMicroSeconds(); - NotifyXRun(cur_time, float(cur_time - fBeginDateUst)); // Better this value than nothing... + fDriver->NotifyXRun(cur_time, float(cur_time - fDriver->fBeginDateUst)); // Better this value than nothing... } if (ei_out.play_errorcount > 0 && ei_out.play_lasterror != 0) { @@ -725,14 +743,28 @@ bool JackBoomerDriver::Execute() } if (count < 0) { - jack_log("JackBoomerDriver::Execute error = %s", strerror(errno)); - } else if (count < (int)fOutputBufferSize) { - jack_error("JackBoomerDriver::Execute error bytes written = %ld", count); + jack_log("JackBoomerDriverOutput::Execute error = %s", strerror(errno)); + } else if (count < (int)fDriver->fOutputBufferSize) { + jack_error("JackBoomerDriverOutput::Execute error bytes written = %ld", count); } + fDriver->SynchronizeWrite(); return true; } +void JackBoomerDriver::SynchronizeRead() +{ + sem_wait(&fWriteSema); + Process(); + sem_post(&fReadSema); +} + +void JackBoomerDriver::SynchronizeWrite() +{ + sem_post(&fWriteSema); + sem_wait(&fReadSema); +} + int JackBoomerDriver::SetBufferSize(jack_nframes_t buffer_size) { CloseAux(); @@ -740,30 +772,6 @@ int JackBoomerDriver::SetBufferSize(jack_nframes_t buffer_size) return OpenAux(); } -int JackBoomerDriver::ProcessAsync() -{ - // Read input buffers for the current cycle - if (Read() < 0) { - jack_error("JackBoomerDriver::ProcessAsync: read error, skip cycle"); - return 0; // Skip cycle, but continue processing... - } - - // Write output buffers from the previous cycle - if (Write() < 0) { - jack_error("JackBoomerDriver::ProcessAsync: write error, skip cycle"); - return 0; // Skip cycle, but continue processing... - } - - if (fIsMaster) { - ProcessGraphAsync(); - } else { - fGraphManager->ResumeRefNum(&fClientControl, fSynchroTable); - } - - // Keep end cycle time - JackDriver::CycleTakeEndTime(); - return 0; -} } // end of namespace @@ -985,14 +993,13 @@ EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine } Jack::JackBoomerDriver* boomer_driver = new Jack::JackBoomerDriver("system", "boomer", engine, table); - Jack::JackDriverClientInterface* threaded_driver = new Jack::JackThreadedDriver(boomer_driver); - // Special open for OSS driver... + // Special open for Boomer driver... if (boomer_driver->Open(frames_per_interrupt, nperiods, srate, capture, playback, chan_in, chan_out, excl, monitor, capture_pcm_name, playback_pcm_name, systemic_input_latency, systemic_output_latency, bits, ignorehwbuf) == 0) { - return threaded_driver; + return boomer_driver; } else { - delete threaded_driver; // Delete the decorated driver + delete boomer_driver; // Delete the driver return NULL; } } diff --git a/solaris/oss/JackBoomerDriver.h b/solaris/oss/JackBoomerDriver.h index 1861e8d8..f688c7e1 100644 --- a/solaris/oss/JackBoomerDriver.h +++ b/solaris/oss/JackBoomerDriver.h @@ -23,7 +23,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "JackAudioDriver.h" #include "JackPlatformPlug.h" #include "ringbuffer.h" -//#include "JackThread.h" +#include namespace Jack { @@ -43,13 +43,47 @@ typedef jack_default_audio_sample_t jack_sample_t; \brief The Boomer driver. */ -class JackBoomerDriver : public JackAudioDriver, public JackRunnableInterface +class JackBoomerDriver : public JackAudioDriver { enum { kRead = 1, kWrite = 2, kReadWrite = 3 }; private: + + class JackBoomerDriverInput : public JackRunnableInterface { + + private: + + JackBoomerDriver* fDriver; + + public: + + JackBoomerDriverInput(JackBoomerDriver* driver): fDriver(driver) + {} + ~JackBoomerDriverInput() + {} + + bool Init(); + bool Execute(); + }; + + class JackBoomerDriverOutput : public JackRunnableInterface { + + private: + JackBoomerDriver* fDriver; + + public: + + JackBoomerDriverOutput(JackBoomerDriver* driver): fDriver(driver) + {} + ~JackBoomerDriverOutput() + {} + + bool Init(); + bool Execute(); + }; + int fInFD; int fOutFD; @@ -66,8 +100,15 @@ class JackBoomerDriver : public JackAudioDriver, public JackRunnableInterface void* fInputBuffer; void* fOutputBuffer; - jack_ringbuffer_t** fRingBuffer; - JackThread fThread; + + sem_t fReadSema; + sem_t fWriteSema; + + JackThread fInputThread; + JackThread fOutputThread; + + JackBoomerDriverInput fInputHandler; + JackBoomerDriverOutput fOutputHandler; int OpenInput(); int OpenOutput(); @@ -75,24 +116,14 @@ class JackBoomerDriver : public JackAudioDriver, public JackRunnableInterface void CloseAux(); void SetSampleFormat(); void DisplayDeviceInfo(); - - // Redefining since timing for CPU load is specific - int ProcessAsync(); + void SynchronizeRead(); + void SynchronizeWrite(); public: - JackBoomerDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table) - : JackAudioDriver(name, alias, engine, table), - fInFD(-1), fOutFD(-1), fBits(0), - fSampleFormat(0), fNperiods(0), fRWMode(0), fExcl(false), fIgnoreHW(true), - fInputBufferSize(0), fOutputBufferSize(0), - fInputBuffer(NULL), fOutputBuffer(NULL), - fRingBuffer(NULL), fThread(this) - {} - - virtual ~JackBoomerDriver() - {} - + JackBoomerDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table); + virtual ~JackBoomerDriver(); + int Open(jack_nframes_t frames_per_cycle, int user_nperiods, jack_nframes_t rate, diff --git a/solaris/oss/JackOSSDriver.cpp b/solaris/oss/JackOSSDriver.cpp index ad44a43c..f4d8507c 100644 --- a/solaris/oss/JackOSSDriver.cpp +++ b/solaris/oss/JackOSSDriver.cpp @@ -558,7 +558,7 @@ int JackOSSDriver::Read() ssize_t count; #ifdef JACK_MONITOR - gCycleTable.fTable[gCycleCount].fBeforeRead = GetMicroSeconds(); + gCycleTable.fTable[gCycleCount].fBeforeRead = GetMicroSeconds(); #endif audio_errinfo ei_in; diff --git a/solaris/wscript b/solaris/wscript index 9e7ce920..77838cf1 100644 --- a/solaris/wscript +++ b/solaris/wscript @@ -34,3 +34,4 @@ def build(bld): create_jack_driver_obj(bld, 'net', '../common/JackNetDriver.cpp') + create_jack_driver_obj(bld, 'loopback', '../common/JackLoopbackDriver.cpp') diff --git a/windows/JackCompilerDeps_os.h b/windows/JackCompilerDeps_os.h index 82fae18e..858cbd8f 100644 --- a/windows/JackCompilerDeps_os.h +++ b/windows/JackCompilerDeps_os.h @@ -18,24 +18,24 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef __JackCompilerDeps_WIN32__ -#define __JackCompilerDeps_WIN32__ +#define __JackCompilerDeps_WIN32__ -#if __GNUC__ - #ifndef POST_PACKED_STRUCTURE - /* POST_PACKED_STRUCTURE needs to be a macro which - expands into a compiler directive. The directive must - tell the compiler to arrange the preceding structure - declaration so that it is packed on byte-boundaries rather - than use the natural alignment of the processor and/or - compiler. - */ - #if (__GNUC__< 4) /* Does not seem to work with GCC 3.XX serie */ - #define POST_PACKED_STRUCTURE - #elif defined(JACK_32_64) - #define POST_PACKED_STRUCTURE __attribute__((__packed__)) - #else - #define POST_PACKED_STRUCTURE - #endif +#if __GNUC__ + #ifndef POST_PACKED_STRUCTURE + /* POST_PACKED_STRUCTURE needs to be a macro which + expands into a compiler directive. The directive must + tell the compiler to arrange the preceding structure + declaration so that it is packed on byte-boundaries rather + than use the natural alignment of the processor and/or + compiler. + */ + #if (__GNUC__< 4) /* Does not seem to work with GCC 3.XX serie */ + #define POST_PACKED_STRUCTURE + #elif defined(JACK_32_64) + #define POST_PACKED_STRUCTURE __attribute__((__packed__)) + #else + #define POST_PACKED_STRUCTURE + #endif #endif #define MEM_ALIGN(x,y) x __attribute__((aligned(y))) #define EXPORT __declspec(dllexport) diff --git a/windows/JackNetWinSocket.cpp b/windows/JackNetWinSocket.cpp index 30420b49..94390b4d 100644 --- a/windows/JackNetWinSocket.cpp +++ b/windows/JackNetWinSocket.cpp @@ -286,12 +286,12 @@ namespace Jack //local loop********************************************************************************************************* int JackNetWinSocket::SetLocalLoop() { - //char disable = 0; - /* - see http://msdn.microsoft.com/en-us/library/aa916098.aspx - Default value is TRUE. When TRUE, data that is sent from the local interface to the multicast group to - which the socket is joined, including data sent from the same socket, will be echoed to its receive buffer. - */ + //char disable = 0; + /* + see http://msdn.microsoft.com/en-us/library/aa916098.aspx + Default value is TRUE. When TRUE, data that is sent from the local interface to the multicast group to + which the socket is joined, including data sent from the same socket, will be echoed to its receive buffer. + */ char disable = 1; return SetOption ( IPPROTO_IP, IP_MULTICAST_LOOP, &disable, sizeof ( disable ) ); } diff --git a/windows/JackTypes_os.h b/windows/JackTypes_os.h index 88a8bd8a..13e67349 100644 --- a/windows/JackTypes_os.h +++ b/windows/JackTypes_os.h @@ -20,7 +20,7 @@ #ifndef __JackTypes_WIN32__ #define __JackTypes_WIN32__ -#include +#include #include "types.h" typedef ULONGLONG UInt64; diff --git a/windows/JackWinProcessSync.cpp b/windows/JackWinProcessSync.cpp index 5dc405b5..56171fba 100644 --- a/windows/JackWinProcessSync.cpp +++ b/windows/JackWinProcessSync.cpp @@ -32,7 +32,7 @@ void JackWinProcessSync::LockedSignal() { WaitForSingleObject(fMutex, INFINITE); SetEvent(fEvent); - ReleaseMutex(fMutex); + ReleaseMutex(fMutex); } void JackWinProcessSync::SignalAll() @@ -44,71 +44,71 @@ void JackWinProcessSync::LockedSignalAll() { WaitForSingleObject(fMutex, INFINITE); SetEvent(fEvent); - ReleaseMutex(fMutex); -} - -void JackWinProcessSync::Wait() -{ - ReleaseMutex(fMutex); - WaitForSingleObject(fEvent, INFINITE); -} - -void JackWinProcessSync::LockedWait() -{ - /* Does it make sense on Windows, use non-locked version for now... */ - Wait(); -} - -bool JackWinProcessSync::TimedWait(long usec) -{ - ReleaseMutex(fMutex); - DWORD res = WaitForSingleObject(fEvent, usec / 1000); - return (res == WAIT_OBJECT_0); -} - -bool JackWinProcessSync::LockedTimedWait(long usec) -{ - /* Does it make sense on Windows, use non-locked version for now...*/ - return TimedWait(usec); -} - -/* -Code from CAGuard.cpp : does ot sees to work as expected.. - -void JackWinProcessSync::Wait() -{ - ReleaseMutex(fMutex); - HANDLE handles[] = { fMutex, fEvent }; - DWORD res = WaitForMultipleObjects(2, handles, true, INFINITE); - if ((res != WAIT_OBJECT_0) && (res != WAIT_TIMEOUT)) - jack_error("Wait error err = %d", GetLastError()); - ResetEvent(fEvent); -} + ReleaseMutex(fMutex); +} + +void JackWinProcessSync::Wait() +{ + ReleaseMutex(fMutex); + WaitForSingleObject(fEvent, INFINITE); +} void JackWinProcessSync::LockedWait() -{ - WaitForSingleObject(fMutex, INFINITE); +{ + /* Does it make sense on Windows, use non-locked version for now... */ + Wait(); +} + +bool JackWinProcessSync::TimedWait(long usec) +{ + ReleaseMutex(fMutex); + DWORD res = WaitForSingleObject(fEvent, usec / 1000); + return (res == WAIT_OBJECT_0); +} + +bool JackWinProcessSync::LockedTimedWait(long usec) +{ + /* Does it make sense on Windows, use non-locked version for now...*/ + return TimedWait(usec); +} + +/* +Code from CAGuard.cpp : does ot sees to work as expected.. + +void JackWinProcessSync::Wait() +{ + ReleaseMutex(fMutex); + HANDLE handles[] = { fMutex, fEvent }; + DWORD res = WaitForMultipleObjects(2, handles, true, INFINITE); + if ((res != WAIT_OBJECT_0) && (res != WAIT_TIMEOUT)) + jack_error("Wait error err = %d", GetLastError()); + ResetEvent(fEvent); +} + +void JackWinProcessSync::LockedWait() +{ + WaitForSingleObject(fMutex, INFINITE); ReleaseMutex(fMutex); HANDLE handles[] = { fMutex, fEvent }; DWORD res = WaitForMultipleObjects(2, handles, true, INFINITE); if ((res != WAIT_OBJECT_0) && (res != WAIT_TIMEOUT)) jack_error("LockedWait error err = %d", GetLastError()); - ResetEvent(fEvent); + ResetEvent(fEvent); } - -bool JackWinProcessSync::TimedWait(long usec) -{ - ReleaseMutex(fMutex); - HANDLE handles[] = { fMutex, fEvent }; - DWORD res = WaitForMultipleObjects(2, handles, true, usec / 1000); - if ((res != WAIT_OBJECT_0) && (res != WAIT_TIMEOUT)) - jack_error("Wait error err = %d", GetLastError()); - ResetEvent(fEvent); + +bool JackWinProcessSync::TimedWait(long usec) +{ + ReleaseMutex(fMutex); + HANDLE handles[] = { fMutex, fEvent }; + DWORD res = WaitForMultipleObjects(2, handles, true, usec / 1000); + if ((res != WAIT_OBJECT_0) && (res != WAIT_TIMEOUT)) + jack_error("Wait error err = %d", GetLastError()); + ResetEvent(fEvent); } bool JackWinProcessSync::LockedTimedWait(long usec) -{ - WaitForSingleObject(fMutex, INFINITE); +{ + WaitForSingleObject(fMutex, INFINITE); ReleaseMutex(fMutex); HANDLE handles[] = { fMutex, fEvent }; DWORD res = WaitForMultipleObjects(2, handles, true, usec / 1000); diff --git a/windows/JackWinSemaphore.h b/windows/JackWinSemaphore.h index 45b84e08..d4330e5f 100644 --- a/windows/JackWinSemaphore.h +++ b/windows/JackWinSemaphore.h @@ -44,7 +44,7 @@ class JackWinSemaphore : public detail::JackSynchro public: - JackWinSemaphore(): fSemaphore(NULL) + JackWinSemaphore():JackSynchro(), fSemaphore(NULL) {} bool Signal(); diff --git a/windows/JackWinServerLaunch.cpp b/windows/JackWinServerLaunch.cpp index eeda81a8..895c9bdf 100644 --- a/windows/JackWinServerLaunch.cpp +++ b/windows/JackWinServerLaunch.cpp @@ -1,26 +1,26 @@ -/* -Copyright (C) 2001-2003 Paul Davis -Copyright (C) 2004-2008 Grame - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ - -#include "JackServerLaunch.h" - -int try_start_server(jack_varargs_t* va, jack_options_t options, jack_status_t* status) -{ - return 0; -} +/* +Copyright (C) 2001-2003 Paul Davis +Copyright (C) 2004-2008 Grame + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +#include "JackServerLaunch.h" + +int try_start_server(jack_varargs_t* va, jack_options_t options, jack_status_t* status) +{ + return 0; +} diff --git a/windows/Setup/JackRouter.dll b/windows/Setup/JackRouter.dll index 92e743e0..df435bed 100644 Binary files a/windows/Setup/JackRouter.dll and b/windows/Setup/JackRouter.dll differ diff --git a/windows/Setup/README b/windows/Setup/README index d7f7eaf4..78588ece 100644 --- a/windows/Setup/README +++ b/windows/Setup/README @@ -1,7 +1,11 @@ This folder contains a script to create an installer for windows. It uses 'CreateInstall Free'(http://www.createinstall.com), a little software allowing to make simple installers. -You can use the 'jack.ci' script to make the installer. For that, you need to build the Code::Blocks workspace in order to have '.exe' and libraries. You also need 'qjackctl' binaries and libraries ('qjackctl.exe', 'mingwm10.dll', 'QtCore4.dll', 'QtGui.dll' and 'QtXml4.dll'). You can recompile qjackctl with qt4 or directly get the binaries. The five files are expected in the 'qjackctl' folder. +You can use the 'jack.ci' script to make the installer. For that, you need to build the Code::Blocks workspace in order to have '.exe' and libraries. +You also need 'qjackctl' binaries and libraries ('qjackctl.exe', 'mingwm10.dll', 'QtCore4.dll', 'QtGui.dll' and 'QtXml4.dll'). +You can recompile qjackctl with qt4 or directly get the binaries. The five files are expected in the 'qjackctl' folder. + +You also need the Microsoft Visual C++ 2008 Redistributable Package (x86) (the vcrdist_x86.exe file) to be in src folder. If you need libjack.lib and libjackserver.lib to link with in MS Visual Studio, you can use the MS Tool lib.exe to create the .lib file from de .def. Just use : 'lib /DEF:libjackserver.def /OUT:libjackserver.lib' and 'lib /DEF:libjack.def /OUT:libjack.lib' to create the lib file. diff --git a/windows/Setup/jack.ci b/windows/Setup/jack.ci index 213bcc82..a0ae1a66 100644 --- a/windows/Setup/jack.ci +++ b/windows/Setup/jack.ci @@ -1,5 +1,5 @@ <*project - version = 4 civer = "Free v4.14.3" winver = "2.6/5.1.2600" > + version = 4 civer = "Free v4.14.5" winver = "2.6/5.1.2600" > . Jack_v1.9.3_setup.exe @@ -38,7 +38,7 @@ over - 0 + 1 1 Uninstall - 2 1 @@ -54,6 +54,7 @@ <_>..\Release\bin\libjack.ainstlibovernewer0 +<_>.\src\vcredist_x86.exeinstovernewer0 <_>..\Release\bin\libjack.libinstlibovernewer0 <_>..\Release\bin\libjack.definstlibovernewer0 <_>..\Release\bin\libjackserver.ainstlibovernewer0 @@ -72,6 +73,8 @@ <_>..\Release\bin\portaudio_x86.dllinstovernewer0 <_>..\Release\bin\jack\jack_net.dllinstjackovernewer0 <_>..\Release\bin\jack\jack_dummy.dllinstjackovernewer0 +<_>..\Release\bin\jack\jack_loopback.dllinstjackovernewer0 +<_>..\Release\bin\jack\jack_winmme.dllinstjackovernewer0 <_>..\Release\bin\jack\jack_portaudio.dllinstjackovernewer0 <_>..\Release\bin\jack\netmanager.dllinstjackovernewer0 <_>..\Release\bin\jack\audioadapter.dllinstjackovernewer0 @@ -99,7 +102,8 @@ - + <_>appinstvcredist_x86.exe1instend + diff --git a/windows/Setup/src/README b/windows/Setup/src/README index 5ba3bc3a..e9424a26 100644 --- a/windows/Setup/src/README +++ b/windows/Setup/src/README @@ -4,11 +4,6 @@ JACK on Windows This installer will install everything to use Jack Audio Connection Kit (JACK) (www.jackaudio.org) on Windows. -============================================= -Microsoft Runtime Libraries -============================================= - -In order to use this software, you will need the Microsoft Visual C++ 2008 redistributable package. This package is freely available on the Microsoft download center. Please be sure you install the correct version (2008). This package is required by portaudio to run windows specific audio drivers (MME, DSound and ASIO). ============================================= QJACKCTL on Windows @@ -38,6 +33,16 @@ Then start jackd with the device you want, by using its name, for example: - jackd -R -S -d portaudio -d "ASIO::MOTU Audio ASIO", then start qjackctl. qjackctl will see the jackd server already running and then can be used normally. +============================================= +Jack MIDI +============================================= + +A first version of a JACK MIDI <==> Windows MIDI bridge (using Windows MME API) is available. +If can be activated using the -X parameter in jackd command line. So add "-X winmme" in QJACKCTL settings (something like "jackd -S -X winmme"). +The WinMME driver will scan MIDI input/output ports, open corresponding JACK MIDI ports and convert MIDI in/out into JACK MIDI messages. +QJACKCTL MIDI connection windows can then be used. + + ============================================= JackRouter JACK/ASIO driver ============================================= @@ -53,7 +58,7 @@ JackRouter is an ASIO driver that allows any ASIO compatible application to beco Known problems ============================================= -- starting/stopping the server several times in QJACKCTL does not work correctly. You'll have to quit qjackctl and launch it again. +- starting/stopping the server several times in QJACKCTL may not work correctly. You may have to quit QJACKCTL and launch it again. ============================================= diff --git a/windows/jack_loopback.cbp b/windows/jack_loopback.cbp new file mode 100644 index 00000000..87edea4f --- /dev/null +++ b/windows/jack_loopback.cbp @@ -0,0 +1,95 @@ + + + + + + diff --git a/windows/jackd.workspace b/windows/jackd.workspace index 35bd3d44..7e09eb88 100644 --- a/windows/jackd.workspace +++ b/windows/jackd.workspace @@ -48,5 +48,6 @@ + diff --git a/windows/portaudio/JackPortAudioDevices.cpp b/windows/portaudio/JackPortAudioDevices.cpp index 2adb35e0..d12cfca3 100644 --- a/windows/portaudio/JackPortAudioDevices.cpp +++ b/windows/portaudio/JackPortAudioDevices.cpp @@ -43,9 +43,9 @@ PortAudioDevices::PortAudioDevices() } PortAudioDevices::~PortAudioDevices() -{ +{ // Desactivate for now: crash the server.. - //Pa_Terminate(); + //Pa_Terminate(); delete[] fDeviceInfo; delete[] fHostName; diff --git a/windows/portaudio/JackPortAudioDevices.h b/windows/portaudio/JackPortAudioDevices.h index 92b8603e..c8ab656b 100644 --- a/windows/portaudio/JackPortAudioDevices.h +++ b/windows/portaudio/JackPortAudioDevices.h @@ -1,59 +1,59 @@ -/* -Copyright (C) 2008 Romain Moret at Grame - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#ifndef __PortAudioDevices__ -#define __PortAudioDevices__ - -#include -#include - -#include "portaudio.h" -#include "pa_asio.h" - -/*! -\brief A PortAudio Devices manager. -*/ - -class PortAudioDevices -{ - private: - PaHostApiIndex fNumHostApi; //number of hosts - PaDeviceIndex fNumDevice; //number of devices - PaDeviceInfo** fDeviceInfo; //array of device info - std::string* fHostName; //array of host names (matched with host id's) - public: - PortAudioDevices(); - ~PortAudioDevices(); - - PaDeviceIndex GetNumDevice(); - PaDeviceInfo* GetDeviceInfo(PaDeviceIndex id); - std::string GetDeviceName(PaDeviceIndex id); - std::string GetHostFromDevice(PaDeviceInfo* device); - std::string GetHostFromDevice(PaDeviceIndex id); - std::string GetFullName(PaDeviceIndex id); - std::string GetFullName(std::string hostname, std::string devicename); - PaDeviceInfo* GetDeviceFromFullName(std::string fullname, PaDeviceIndex& id, bool isInput ); - void PrintSupportedStandardSampleRates(const PaStreamParameters* inputParameters, const PaStreamParameters* outputParameters); - int GetInputDeviceFromName(const char* name, PaDeviceIndex& device, int& in_max); - int GetOutputDeviceFromName(const char* name, PaDeviceIndex& device, int& out_max); - void DisplayDevicesNames(); - bool IsDuplex ( PaDeviceIndex id ); -}; - -#endif +/* +Copyright (C) 2008 Romain Moret at Grame + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef __PortAudioDevices__ +#define __PortAudioDevices__ + +#include +#include + +#include "portaudio.h" +#include "pa_asio.h" + +/*! +\brief A PortAudio Devices manager. +*/ + +class PortAudioDevices +{ + private: + PaHostApiIndex fNumHostApi; //number of hosts + PaDeviceIndex fNumDevice; //number of devices + PaDeviceInfo** fDeviceInfo; //array of device info + std::string* fHostName; //array of host names (matched with host id's) + public: + PortAudioDevices(); + ~PortAudioDevices(); + + PaDeviceIndex GetNumDevice(); + PaDeviceInfo* GetDeviceInfo(PaDeviceIndex id); + std::string GetDeviceName(PaDeviceIndex id); + std::string GetHostFromDevice(PaDeviceInfo* device); + std::string GetHostFromDevice(PaDeviceIndex id); + std::string GetFullName(PaDeviceIndex id); + std::string GetFullName(std::string hostname, std::string devicename); + PaDeviceInfo* GetDeviceFromFullName(std::string fullname, PaDeviceIndex& id, bool isInput ); + void PrintSupportedStandardSampleRates(const PaStreamParameters* inputParameters, const PaStreamParameters* outputParameters); + int GetInputDeviceFromName(const char* name, PaDeviceIndex& device, int& in_max); + int GetOutputDeviceFromName(const char* name, PaDeviceIndex& device, int& out_max); + void DisplayDevicesNames(); + bool IsDuplex ( PaDeviceIndex id ); +}; + +#endif diff --git a/windows/resource_vc.h b/windows/resource_vc.h index 673206e6..9916ed38 100644 --- a/windows/resource_vc.h +++ b/windows/resource_vc.h @@ -1,15 +1,15 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Developer Studio generated include file. -// Used by resource.rc -// - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 102 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1000 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by resource.rc +// + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/windows/winmme/JackWinMMEDriver.cpp b/windows/winmme/JackWinMMEDriver.cpp index 87b1e44e..65a7de65 100644 --- a/windows/winmme/JackWinMMEDriver.cpp +++ b/windows/winmme/JackWinMMEDriver.cpp @@ -1,501 +1,506 @@ -/* -Copyright (C) 2009 Grame - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#include "JackWinMMEDriver.h" -#include "JackGraphManager.h" -#include "JackEngineControl.h" -#include "JackDriverLoader.h" - -#include -#include -#include -#include - -#include -#include -#include - -namespace Jack -{ - -static bool InitHeaders(MidiSlot* slot) -{ - slot->fHeader = (LPMIDIHDR)GlobalAllocPtr(GMEM_MOVEABLE|GMEM_SHARE|GMEM_ZEROINIT, sizeof(MIDIHDR) + kBuffSize); - if (!slot->fHeader) - return false; - - slot->fHeader->lpData = (LPSTR)((LPBYTE)slot->fHeader + sizeof(MIDIHDR)); - slot->fHeader->dwBufferLength = kBuffSize; - slot->fHeader->dwFlags = 0; - slot->fHeader->dwUser = 0; - slot->fHeader->lpNext = 0; - slot->fHeader->dwBytesRecorded = 0; - return true; -} - -void CALLBACK JackWinMMEDriver::MidiInProc(HMIDIIN hMidiIn, UINT wMsg, DWORD userData, DWORD dwParam1, DWORD dwParam2) -{ - jack_ringbuffer_t* ringbuffer = (jack_ringbuffer_t*)userData; - //jack_info("JackWinMMEDriver::MidiInProc 0\n"); - - switch (wMsg) { - case MIM_OPEN: - break; - - case MIM_ERROR: - case MIM_DATA: { - - //jack_info("JackWinMMEDriver::MidiInProc"); - - // One event - unsigned int num_packet = 1; - jack_ringbuffer_write(ringbuffer, (char*)&num_packet, sizeof(unsigned int)); - - // Write event actual data - jack_ringbuffer_write(ringbuffer, (char*)&dwParam1, 3); - break; - } - - case MIM_LONGERROR: - case MIM_LONGDATA: - /* - Nothing for now - */ - break; - } -} - -JackWinMMEDriver::JackWinMMEDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table) - : JackMidiDriver(name, alias, engine, table), - fRealCaptureChannels(0), - fRealPlaybackChannels(0), - fMidiSource(NULL), - fMidiDestination(NULL) -{} - -JackWinMMEDriver::~JackWinMMEDriver() -{} - -int JackWinMMEDriver::Open(bool capturing, - bool playing, - int inchannels, - int outchannels, - bool monitor, - const char* capture_driver_name, - const char* playback_driver_name, - jack_nframes_t capture_latency, - jack_nframes_t playback_latency) -{ - - jack_log("JackWinMMEDriver::Open"); - - fRealCaptureChannels = midiInGetNumDevs(); - fRealPlaybackChannels = midiOutGetNumDevs(); - - // Generic JackMidiDriver Open - if (JackMidiDriver::Open(capturing, playing, fRealCaptureChannels, fRealPlaybackChannels, monitor, capture_driver_name, playback_driver_name, capture_latency, playback_latency) != 0) - return -1; - - fMidiDestination = new MidiSlot[fRealCaptureChannels]; - assert(fMidiDestination); - - // Real input - for (int i = 0; i < fRealCaptureChannels; i++) { - - HMIDIIN handle; - fMidiDestination[i].fIndex = i; - MMRESULT ret = midiInOpen(&handle, fMidiDestination[i].fIndex, (DWORD)MidiInProc, (DWORD)fRingBuffer[i], CALLBACK_FUNCTION); - - if (ret == MMSYSERR_NOERROR) { - fMidiDestination[i].fHandle = handle; - if (!InitHeaders(&fMidiDestination[i])) { - jack_error("memory allocation failed"); - midiInClose(handle); - goto error; - //continue; - } - ret = midiInPrepareHeader(handle, fMidiDestination[i].fHeader, sizeof(MIDIHDR)); - - if (ret == MMSYSERR_NOERROR) { - fMidiDestination[i].fHeader->dwUser = 1; - ret = midiInAddBuffer(handle, fMidiDestination[i].fHeader, sizeof(MIDIHDR)); - if (ret == MMSYSERR_NOERROR) { - ret = midiInStart(handle); - if (ret != MMSYSERR_NOERROR) { - jack_error("midiInStart error"); - CloseInput(&fMidiDestination[i]); - goto error; - } - } else { - jack_error ("midiInAddBuffer error"); - CloseInput(&fMidiDestination[i]); - goto error; - } - } else { - jack_error("midiInPrepareHeader error"); - midiInClose(handle); - goto error; - } - } else { - jack_error ("midiInOpen error"); - goto error; - } - } - - fMidiSource = new MidiSlot[fRealPlaybackChannels]; - assert(fMidiSource); - - // Real output - for (int i = 0; i < fRealPlaybackChannels; i++) { - MMRESULT res; - HMIDIOUT handle; - fMidiSource[i].fIndex = i; - UINT ret = midiOutOpen(&handle, fMidiSource[i].fIndex, 0L, 0L, CALLBACK_NULL); - if (ret == MMSYSERR_NOERROR) { - fMidiSource[i].fHandle = handle; - if (!InitHeaders(&fMidiSource[i])) { - jack_error("memory allocation failed"); - midiOutClose(handle); - //continue; - goto error; - } - res = midiOutPrepareHeader(handle, fMidiSource[i].fHeader, sizeof(MIDIHDR)); - if (res != MMSYSERR_NOERROR) { - jack_error("midiOutPrepareHeader error %d %d %d", i, handle, res); - //continue; - goto error; - } else { - fMidiSource[i].fHeader->dwUser = 1; - } - } else { - jack_error("midiOutOpen error"); - goto error; - } - } - - return 0; - -error: - Close(); - return -1; -} - -void JackWinMMEDriver::CloseInput(MidiSlot* slot) -{ - MMRESULT res; - int retry = 0; - - if (slot->fHandle == 0) - return; - - HMIDIIN handle = (HMIDIIN)slot->fHandle; - slot->fHeader->dwUser = 0; - res = midiInStop(handle); - if (res != MMSYSERR_NOERROR) { - jack_error("midiInStop error"); - } - res = midiInReset(handle); - if (res != MMSYSERR_NOERROR) { - jack_error("midiInReset error"); - } - res = midiInUnprepareHeader(handle, slot->fHeader, sizeof(MIDIHDR)); - if (res != MMSYSERR_NOERROR) { - jack_error("midiInUnprepareHeader error"); - } - do { - res = midiInClose(handle); - if (res != MMSYSERR_NOERROR) { - jack_error("midiInClose error"); - } - if (res == MIDIERR_STILLPLAYING) - midiInReset(handle); - Sleep (10); - retry++; - } while ((res == MIDIERR_STILLPLAYING) && (retry < 10)); - - if (slot->fHeader) { - GlobalFreePtr(slot->fHeader); - } -} - -void JackWinMMEDriver::CloseOutput(MidiSlot* slot) -{ - MMRESULT res; - int retry = 0; - - if (slot->fHandle == 0) - return; - - HMIDIOUT handle = (HMIDIOUT)slot->fHandle; - res = midiOutReset(handle); - if (res != MMSYSERR_NOERROR) - jack_error("midiOutReset error"); - midiOutUnprepareHeader(handle, slot->fHeader, sizeof(MIDIHDR)); - do { - res = midiOutClose(handle); - if (res != MMSYSERR_NOERROR) - jack_error("midiOutClose error"); - Sleep(10); - retry++; - } while ((res == MIDIERR_STILLPLAYING) && (retry < 10)); - - if (slot->fHeader) { - GlobalFreePtr(slot->fHeader); - } -} - -int JackWinMMEDriver::Close() -{ - jack_log("JackWinMMEDriver::Close"); - - // Close input - if (fMidiDestination) { - for (int i = 0; i < fRealCaptureChannels; i++) { - CloseInput(&fMidiDestination[i]); - } - delete[] fMidiDestination; - } - - // Close output - if (fMidiSource) { - for (int i = 0; i < fRealPlaybackChannels; i++) { - CloseOutput(&fMidiSource[i]); - } - delete[] fMidiSource; - } - - return 0; -} - -int JackWinMMEDriver::Attach() -{ - JackPort* port; - jack_port_id_t port_index; - char name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; - char alias[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; - unsigned long port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; - MMRESULT res; - int i; - - jack_log("JackMidiDriver::Attach fBufferSize = %ld fSampleRate = %ld", fEngineControl->fBufferSize, fEngineControl->fSampleRate); - - for (i = 0; i < fCaptureChannels; i++) { - MIDIINCAPS caps; - res = midiInGetDevCaps(i, &caps, sizeof(caps)); - if (res == MMSYSERR_NOERROR) { - snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fAliasName, caps.szPname, i + 1); - } else { - snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fAliasName, fCaptureDriverName, i + 1); - } - snprintf(name, sizeof(name) - 1, "%s:capture_%d", fClientControl.fName, i + 1); - - if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { - jack_error("driver: cannot register port for %s", name); - return -1; - } - port = fGraphManager->GetPort(port_index); - port->SetAlias(alias); - fCapturePortList[i] = port_index; - jack_log("JackMidiDriver::Attach fCapturePortList[i] port_index = %ld", port_index); - } - - port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; - - for (i = 0; i < fPlaybackChannels; i++) { - MIDIOUTCAPS caps; - res = midiOutGetDevCaps(i, &caps, sizeof(caps)); - if (res == MMSYSERR_NOERROR) { - snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fAliasName, caps.szPname, i + 1); - } else { - snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fAliasName, fPlaybackDriverName, i + 1); - } - snprintf(name, sizeof(name) - 1, "%s:playback_%d", fClientControl.fName, i + 1); - - if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { - jack_error("driver: cannot register port for %s", name); - return -1; - } - port = fGraphManager->GetPort(port_index); - port->SetAlias(alias); - fPlaybackPortList[i] = port_index; - jack_log("JackMidiDriver::Attach fPlaybackPortList[i] port_index = %ld", port_index); - } - - return 0; -} - -int JackWinMMEDriver::Read() -{ - size_t size; - - for (int chan = 0; chan < fCaptureChannels; chan++) { - - if (fGraphManager->GetConnectionsNum(fCapturePortList[chan]) > 0) { - - JackMidiBuffer* midi_buffer = GetInputBuffer(chan); - - if (jack_ringbuffer_read_space (fRingBuffer[chan]) == 0) { - // Reset buffer - midi_buffer->Reset(midi_buffer->nframes); - } else { - - while ((size = jack_ringbuffer_read_space (fRingBuffer[chan])) > 0) { - - //jack_info("jack_ringbuffer_read_space %d", size); - int ev_count = 0; - jack_ringbuffer_read(fRingBuffer[chan], (char*)&ev_count, sizeof(int)); - - if (ev_count > 0) { - for (int j = 0; j < ev_count; j++) { - unsigned int event_len = 3; - // Read event actual data - jack_midi_data_t* dest = midi_buffer->ReserveEvent(0, event_len); - jack_ringbuffer_read(fRingBuffer[chan], (char*)dest, event_len); - } - } - } - } - } else { - //jack_info("Consume ring buffer"); - jack_ringbuffer_read_advance(fRingBuffer[chan], jack_ringbuffer_read_space(fRingBuffer[chan])); - } - } - return 0; -} - -int JackWinMMEDriver::Write() -{ - for (int chan = 0; chan < fPlaybackChannels; chan++) { - - if (fGraphManager->GetConnectionsNum(fPlaybackPortList[chan]) > 0) { - - JackMidiBuffer* midi_buffer = GetOutputBuffer(chan); - - // TODO : use timestamp - - for (unsigned int j = 0; j < midi_buffer->event_count; j++) { - JackMidiEvent* ev = &midi_buffer->events[j]; - if (ev->size <= 3) { - MMRESULT res = midiOutShortMsg((HMIDIOUT)fMidiSource[chan].fHandle, *((DWORD*)ev->GetData(midi_buffer))); - if (res != MMSYSERR_NOERROR) - jack_error ("midiOutShortMsg error res %d", res); - } else { - - } - } - } - } - - return 0; -} - -} // end of namespace - -#ifdef __cplusplus -extern "C" -{ -#endif - - SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor() - { - jack_driver_desc_t * desc; - unsigned int i; - - desc = (jack_driver_desc_t*)calloc (1, sizeof (jack_driver_desc_t)); - strcpy(desc->name, "winmme"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 - strcpy(desc->desc, "WinMME API based MIDI backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 - - desc->nparams = 0; - desc->params = (jack_driver_param_desc_t*)calloc (desc->nparams, sizeof (jack_driver_param_desc_t)); - - return desc; - } - - SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params) - { - /* - unsigned int capture_ports = 2; - unsigned int playback_ports = 2; - unsigned long wait_time = 0; - const JSList * node; - const jack_driver_param_t * param; - bool monitor = false; - - for (node = params; node; node = jack_slist_next (node)) { - param = (const jack_driver_param_t *) node->data; - - switch (param->character) { - - case 'C': - capture_ports = param->value.ui; - break; - - case 'P': - playback_ports = param->value.ui; - break; - - case 'r': - sample_rate = param->value.ui; - break; - - case 'p': - period_size = param->value.ui; - break; - - case 'w': - wait_time = param->value.ui; - break; - - case 'm': - monitor = param->value.i; - break; - } - } - */ - - Jack::JackDriverClientInterface* driver = new Jack::JackWinMMEDriver("system_midi", "winmme", engine, table); - if (driver->Open(1, 1, 0, 0, false, "in", "out", 0, 0) == 0) { - return driver; - } else { - delete driver; - return NULL; - } - } - -#ifdef __cplusplus -} -#endif - - -/* -jack_connect system:midi_capture_1 system_midi:playback_1 -jack_connect system:midi_capture_1 system_midi:playback_2 - -jack_connect system:midi_capture_1 system_midi:playback_1 - -jack_connect system:midi_capture_1 system_midi:playback_1 - -jack_connect system:midi_capture_1 system_midi:playback_1 - -jack_connect system_midi:capture_1 system:midi_playback_1 -jack_connect system_midi:capture_2 system:midi_playback_1 - -jack_connect system_midi:capture_1 system_midi:playback_1 - -*/ +/* +Copyright (C) 2009 Grame + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "JackWinMMEDriver.h" +#include "JackGraphManager.h" +#include "JackEngineControl.h" +#include "JackDriverLoader.h" + +#include +#include +#include +#include + +#include +#include +#include + +namespace Jack +{ + +static bool InitHeaders(MidiSlot* slot) +{ + slot->fHeader = (LPMIDIHDR)GlobalAllocPtr(GMEM_MOVEABLE|GMEM_SHARE|GMEM_ZEROINIT, sizeof(MIDIHDR) + kBuffSize); + if (!slot->fHeader) + return false; + + slot->fHeader->lpData = (LPSTR)((LPBYTE)slot->fHeader + sizeof(MIDIHDR)); + slot->fHeader->dwBufferLength = kBuffSize; + slot->fHeader->dwFlags = 0; + slot->fHeader->dwUser = 0; + slot->fHeader->lpNext = 0; + slot->fHeader->dwBytesRecorded = 0; + return true; +} + +void CALLBACK JackWinMMEDriver::MidiInProc(HMIDIIN hMidiIn, UINT wMsg, DWORD userData, DWORD dwParam1, DWORD dwParam2) +{ + jack_ringbuffer_t* ringbuffer = (jack_ringbuffer_t*)userData; + //jack_info("JackWinMMEDriver::MidiInProc 0\n"); + + switch (wMsg) { + case MIM_OPEN: + break; + + case MIM_ERROR: + case MIM_DATA: { + + //jack_info("JackWinMMEDriver::MidiInProc"); + + // One event + unsigned int num_packet = 1; + jack_ringbuffer_write(ringbuffer, (char*)&num_packet, sizeof(unsigned int)); + + // Write event actual data + jack_ringbuffer_write(ringbuffer, (char*)&dwParam1, 3); + break; + } + + case MIM_LONGERROR: + case MIM_LONGDATA: + /* + Nothing for now + */ + break; + } +} + +JackWinMMEDriver::JackWinMMEDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table) + : JackMidiDriver(name, alias, engine, table), + fRealCaptureChannels(0), + fRealPlaybackChannels(0), + fMidiSource(NULL), + fMidiDestination(NULL) +{} + +JackWinMMEDriver::~JackWinMMEDriver() +{} + +int JackWinMMEDriver::Open(bool capturing, + bool playing, + int inchannels, + int outchannels, + bool monitor, + const char* capture_driver_name, + const char* playback_driver_name, + jack_nframes_t capture_latency, + jack_nframes_t playback_latency) +{ + + jack_log("JackWinMMEDriver::Open"); + + fRealCaptureChannels = midiInGetNumDevs(); + fRealPlaybackChannels = midiOutGetNumDevs(); + + // Generic JackMidiDriver Open + if (JackMidiDriver::Open(capturing, playing, fRealCaptureChannels, fRealPlaybackChannels, monitor, capture_driver_name, playback_driver_name, capture_latency, playback_latency) != 0) + return -1; + + fMidiDestination = new MidiSlot[fRealCaptureChannels]; + assert(fMidiDestination); + + // Real input + int devindex = 0; + for (int i = 0; i < fRealCaptureChannels; i++) { + + HMIDIIN handle; + fMidiDestination[devindex].fIndex = i; + MMRESULT ret = midiInOpen(&handle, fMidiDestination[devindex].fIndex, (DWORD)MidiInProc, (DWORD)fRingBuffer[devindex], CALLBACK_FUNCTION); + + if (ret == MMSYSERR_NOERROR) { + fMidiDestination[devindex].fHandle = handle; + if (!InitHeaders(&fMidiDestination[devindex])) { + jack_error("memory allocation failed"); + midiInClose(handle); + continue; + } + ret = midiInPrepareHeader(handle, fMidiDestination[devindex].fHeader, sizeof(MIDIHDR)); + + if (ret == MMSYSERR_NOERROR) { + fMidiDestination[devindex].fHeader->dwUser = 1; + ret = midiInAddBuffer(handle, fMidiDestination[devindex].fHeader, sizeof(MIDIHDR)); + if (ret == MMSYSERR_NOERROR) { + ret = midiInStart(handle); + if (ret != MMSYSERR_NOERROR) { + jack_error("midiInStart error"); + CloseInput(&fMidiDestination[devindex]); + continue; + } + } else { + jack_error ("midiInAddBuffer error"); + CloseInput(&fMidiDestination[devindex]); + continue; + } + } else { + jack_error("midiInPrepareHeader error"); + midiInClose(handle); + continue; + } + } else { + jack_error ("midiInOpen error"); + continue; + } + devindex += 1; + } + fRealCaptureChannels = devindex; + fCaptureChannels = devindex; + + fMidiSource = new MidiSlot[fRealPlaybackChannels]; + assert(fMidiSource); + + // Real output + devindex = 0; + for (int i = 0; i < fRealPlaybackChannels; i++) { + MMRESULT res; + HMIDIOUT handle; + fMidiSource[devindex].fIndex = i; + UINT ret = midiOutOpen(&handle, fMidiSource[devindex].fIndex, 0L, 0L, CALLBACK_NULL); + if (ret == MMSYSERR_NOERROR) { + fMidiSource[devindex].fHandle = handle; + if (!InitHeaders(&fMidiSource[devindex])) { + jack_error("memory allocation failed"); + midiOutClose(handle); + continue; + } + res = midiOutPrepareHeader(handle, fMidiSource[devindex].fHeader, sizeof(MIDIHDR)); + if (res != MMSYSERR_NOERROR) { + jack_error("midiOutPrepareHeader error %d %d %d", i, handle, res); + continue; + } else { + fMidiSource[devindex].fHeader->dwUser = 1; + } + } else { + jack_error("midiOutOpen error"); + continue; + } + devindex += 1; + } + fRealPlaybackChannels = devindex; + fPlaybackChannels = devindex; + return 0; +} + +void JackWinMMEDriver::CloseInput(MidiSlot* slot) +{ + MMRESULT res; + int retry = 0; + + if (slot->fHandle == 0) + return; + + HMIDIIN handle = (HMIDIIN)slot->fHandle; + slot->fHeader->dwUser = 0; + res = midiInStop(handle); + if (res != MMSYSERR_NOERROR) { + jack_error("midiInStop error"); + } + res = midiInReset(handle); + if (res != MMSYSERR_NOERROR) { + jack_error("midiInReset error"); + } + res = midiInUnprepareHeader(handle, slot->fHeader, sizeof(MIDIHDR)); + if (res != MMSYSERR_NOERROR) { + jack_error("midiInUnprepareHeader error"); + } + do { + res = midiInClose(handle); + if (res != MMSYSERR_NOERROR) { + jack_error("midiInClose error"); + } + if (res == MIDIERR_STILLPLAYING) + midiInReset(handle); + Sleep (10); + retry++; + } while ((res == MIDIERR_STILLPLAYING) && (retry < 10)); + + if (slot->fHeader) { + GlobalFreePtr(slot->fHeader); + } +} + +void JackWinMMEDriver::CloseOutput(MidiSlot* slot) +{ + MMRESULT res; + int retry = 0; + + if (slot->fHandle == 0) + return; + + HMIDIOUT handle = (HMIDIOUT)slot->fHandle; + res = midiOutReset(handle); + if (res != MMSYSERR_NOERROR) + jack_error("midiOutReset error"); + midiOutUnprepareHeader(handle, slot->fHeader, sizeof(MIDIHDR)); + do { + res = midiOutClose(handle); + if (res != MMSYSERR_NOERROR) + jack_error("midiOutClose error"); + Sleep(10); + retry++; + } while ((res == MIDIERR_STILLPLAYING) && (retry < 10)); + + if (slot->fHeader) { + GlobalFreePtr(slot->fHeader); + } +} + +int JackWinMMEDriver::Close() +{ + jack_log("JackWinMMEDriver::Close"); + + // Close input + if (fMidiDestination) { + for (int i = 0; i < fRealCaptureChannels; i++) { + CloseInput(&fMidiDestination[i]); + } + delete[] fMidiDestination; + } + + // Close output + if (fMidiSource) { + for (int i = 0; i < fRealPlaybackChannels; i++) { + CloseOutput(&fMidiSource[i]); + } + delete[] fMidiSource; + } + + return 0; +} + +int JackWinMMEDriver::Attach() +{ + JackPort* port; + jack_port_id_t port_index; + char name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; + char alias[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; + unsigned long port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; + MMRESULT res; + int i; + + jack_log("JackMidiDriver::Attach fBufferSize = %ld fSampleRate = %ld", fEngineControl->fBufferSize, fEngineControl->fSampleRate); + + for (i = 0; i < fCaptureChannels; i++) { + MIDIINCAPS caps; + res = midiInGetDevCaps(fMidiDestination[i].fIndex, &caps, sizeof(caps)); + if (res == MMSYSERR_NOERROR) { + snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fAliasName, caps.szPname, i + 1); + } else { + snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fAliasName, fCaptureDriverName, i + 1); + } + snprintf(name, sizeof(name) - 1, "%s:capture_%d", fClientControl.fName, i + 1); + + if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { + jack_error("driver: cannot register port for %s", name); + return -1; + } + port = fGraphManager->GetPort(port_index); + port->SetAlias(alias); + fCapturePortList[i] = port_index; + jack_log("JackMidiDriver::Attach fCapturePortList[i] port_index = %ld", port_index); + } + + port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; + + for (i = 0; i < fPlaybackChannels; i++) { + MIDIOUTCAPS caps; + res = midiOutGetDevCaps(fMidiSource[i].fIndex, &caps, sizeof(caps)); + if (res == MMSYSERR_NOERROR) { + snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fAliasName, caps.szPname, i + 1); + } else { + snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fAliasName, fPlaybackDriverName, i + 1); + } + snprintf(name, sizeof(name) - 1, "%s:playback_%d", fClientControl.fName, i + 1); + + if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_MIDI_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { + jack_error("driver: cannot register port for %s", name); + return -1; + } + port = fGraphManager->GetPort(port_index); + port->SetAlias(alias); + fPlaybackPortList[i] = port_index; + jack_log("JackMidiDriver::Attach fPlaybackPortList[i] port_index = %ld", port_index); + } + + return 0; +} + +int JackWinMMEDriver::Read() +{ + size_t size; + + for (int chan = 0; chan < fCaptureChannels; chan++) { + + if (fGraphManager->GetConnectionsNum(fCapturePortList[chan]) > 0) { + + JackMidiBuffer* midi_buffer = GetInputBuffer(chan); + + if (jack_ringbuffer_read_space (fRingBuffer[chan]) == 0) { + // Reset buffer + midi_buffer->Reset(midi_buffer->nframes); + } else { + + while ((size = jack_ringbuffer_read_space (fRingBuffer[chan])) > 0) { + + //jack_info("jack_ringbuffer_read_space %d", size); + int ev_count = 0; + jack_ringbuffer_read(fRingBuffer[chan], (char*)&ev_count, sizeof(int)); + + if (ev_count > 0) { + for (int j = 0; j < ev_count; j++) { + unsigned int event_len = 3; + // Read event actual data + jack_midi_data_t* dest = midi_buffer->ReserveEvent(0, event_len); + jack_ringbuffer_read(fRingBuffer[chan], (char*)dest, event_len); + } + } + } + } + } else { + //jack_info("Consume ring buffer"); + jack_ringbuffer_read_advance(fRingBuffer[chan], jack_ringbuffer_read_space(fRingBuffer[chan])); + } + } + return 0; +} + +int JackWinMMEDriver::Write() +{ + for (int chan = 0; chan < fPlaybackChannels; chan++) { + + if (fGraphManager->GetConnectionsNum(fPlaybackPortList[chan]) > 0) { + + JackMidiBuffer* midi_buffer = GetOutputBuffer(chan); + + // TODO : use timestamp + + for (unsigned int j = 0; j < midi_buffer->event_count; j++) { + JackMidiEvent* ev = &midi_buffer->events[j]; + if (ev->size <= 3) { + jack_midi_data_t *d = ev->GetData(midi_buffer); + DWORD winev = 0; + if (ev->size > 0) winev |= d[0]; + if (ev->size > 1) winev |= (d[1] << 8); + if (ev->size > 2) winev |= (d[2] << 16); + MMRESULT res = midiOutShortMsg((HMIDIOUT)fMidiSource[chan].fHandle, winev); + if (res != MMSYSERR_NOERROR) + jack_error ("midiOutShortMsg error res %d", res); + } else { + + } + } + } + } + + return 0; +} + +} // end of namespace + +#ifdef __cplusplus +extern "C" +{ +#endif + + SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor() + { + jack_driver_desc_t * desc; + //unsigned int i; + + desc = (jack_driver_desc_t*)calloc (1, sizeof (jack_driver_desc_t)); + strcpy(desc->name, "winmme"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 + strcpy(desc->desc, "WinMME API based MIDI backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 + + desc->nparams = 0; + desc->params = (jack_driver_param_desc_t*)calloc (desc->nparams, sizeof (jack_driver_param_desc_t)); + + return desc; + } + + SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params) + { + /* + unsigned int capture_ports = 2; + unsigned int playback_ports = 2; + unsigned long wait_time = 0; + const JSList * node; + const jack_driver_param_t * param; + bool monitor = false; + + for (node = params; node; node = jack_slist_next (node)) { + param = (const jack_driver_param_t *) node->data; + + switch (param->character) { + + case 'C': + capture_ports = param->value.ui; + break; + + case 'P': + playback_ports = param->value.ui; + break; + + case 'r': + sample_rate = param->value.ui; + break; + + case 'p': + period_size = param->value.ui; + break; + + case 'w': + wait_time = param->value.ui; + break; + + case 'm': + monitor = param->value.i; + break; + } + } + */ + + Jack::JackDriverClientInterface* driver = new Jack::JackWinMMEDriver("system_midi", "winmme", engine, table); + if (driver->Open(1, 1, 0, 0, false, "in", "out", 0, 0) == 0) { + return driver; + } else { + delete driver; + return NULL; + } + } + +#ifdef __cplusplus +} +#endif + + +/* +jack_connect system:midi_capture_1 system_midi:playback_1 +jack_connect system:midi_capture_1 system_midi:playback_2 + +jack_connect system:midi_capture_1 system_midi:playback_1 + +jack_connect system:midi_capture_1 system_midi:playback_1 + +jack_connect system:midi_capture_1 system_midi:playback_1 + +jack_connect system_midi:capture_1 system:midi_playback_1 +jack_connect system_midi:capture_2 system:midi_playback_1 + +jack_connect system_midi:capture_1 system_midi:playback_1 + +*/ diff --git a/wscript b/wscript index c0499682..917208d0 100644 --- a/wscript +++ b/wscript @@ -61,6 +61,7 @@ def set_options(opt): opt.tool_options('compiler_cc') opt.add_option('--libdir', type='string', help="Library directory [Default: /lib]") + opt.add_option('--libdir32', type='string', help="32bit Library directory [Default: /lib32]") opt.add_option('--dbus', action='store_true', default=False, help='Enable D-Bus JACK (jackdbus)') opt.add_option('--classic', action='store_true', default=False, help='Force enable standard JACK (jackd) even if D-Bus JACK (jackdbus) is enabled too') opt.add_option('--doxygen', action='store_true', default=False, help='Enable build of doxygen documentation') @@ -68,6 +69,7 @@ def set_options(opt): opt.add_option('--mixed', action='store_true', default=False, help='Build with 32/64 bits mixed mode') opt.add_option('--clients', default=64, type="int", dest="clients", help='Maximum number of JACK clients') opt.add_option('--ports', default=1024, type="int", dest="ports", help='Maximum number of ports') + opt.add_option('--ports-per-application', default=512, type="int", dest="application_ports", help='Maximum number of ports per application') opt.sub_options('dbus') def configure(conf): @@ -130,12 +132,13 @@ def configure(conf): conf.env['BUILD_JACKD'] = True if Options.options.libdir: - conf.env['LIBDIR'] = Options.options.libdir + conf.env['LIBDIR'] = conf.env['PREFIX'] + Options.options.libdir else: - conf.env['LIBDIR'] = conf.env['PREFIX'] + '/lib/' + conf.env['LIBDIR'] = conf.env['PREFIX'] + '/lib' conf.define('CLIENT_NUM', Options.options.clients) - conf.define('PORT_NUM', Options.options. ports) + conf.define('PORT_NUM', Options.options.ports) + conf.define('PORT_NUM_FOR_CLIENT', Options.options.application_ports) conf.define('ADDON_DIR', os.path.normpath(os.path.join(conf.env['LIBDIR'], 'jack'))) conf.define('JACK_LOCATION', os.path.normpath(os.path.join(conf.env['PREFIX'], 'bin'))) @@ -143,6 +146,8 @@ def configure(conf): conf.define('JACKMP', 1) if conf.env['BUILD_JACKDBUS'] == True: conf.define('JACK_DBUS', 1) + if conf.env['BUILD_JACKD'] == False: + conf.define('USE_LIBDBUS_AUTOLAUNCH', 1) if conf.env['BUILD_WITH_PROFILE'] == True: conf.define('JACK_MONITOR', 1) if conf.env['BUILD_WITH_32_64'] == True: @@ -167,6 +172,7 @@ def configure(conf): print "Build with a maximum of %d JACK clients" % conf.env['CLIENT_NUM'] print "Build with a maximum of %d ports" % conf.env['PORT_NUM'] + print "Build with a maximum of %d ports per application" % conf.env['PORT_NUM_FOR_CLIENT'] display_msg("Install prefix", conf.env['PREFIX'], 'CYAN') display_msg("Library directory", conf.env['LIBDIR'], 'CYAN') @@ -204,7 +210,22 @@ def configure(conf): print Logs.colors.NORMAL, print + if Options.options.mixed == True: + env_variant2 = conf.env.copy() + conf.set_env_name('lib32', env_variant2) + env_variant2.set_variant('lib32') + conf.setenv('lib32') + conf.env.append_unique('CXXFLAGS', '-m32') + conf.env.append_unique('CCFLAGS', '-m32') + conf.env.append_unique('LINKFLAGS', '-m32') + conf.write_config_header('config.h') + if Options.options.libdir32: + conf.env['LIBDIR'] = conf.env['PREFIX'] + Options.options.libdir32 + else: + conf.env['LIBDIR'] = conf.env['PREFIX'] + '/lib32' + def build(bld): + print ("make[1]: Entering directory `" + os.getcwd() + "/" + blddir + "'" ) if not os.access('svnversion.h', os.R_OK): create_svnversion_task(bld)