| @@ -24,20 +24,73 @@ Peter L Jones | |||
| Devin Anderson | |||
| Josh Green | |||
| Mario Lang | |||
| Arnold Krille | |||
| Arnold Krille | |||
| Jan Engelhardt | |||
| Adrian Knoth | |||
| David Garcia Garzon | |||
| --------------------------- | |||
| Jackdmp changes log | |||
| --------------------------- | |||
| --------------------------- | |||
| 2010-09-08 Stephane Letz <letz@grame.fr> | |||
| 2010-04-016 Stephane Letz <letz@grame.fr> | |||
| * Sync JackAlsaDriver::alsa_driver_check_card_type with JACK1 backend. | |||
| 2010-08-30 Stephane Letz <letz@grame.fr> | |||
| * Make jack_connect/jack_disconnect wait for effective port connection/disconnection. | |||
| * Version 1.9.7 started. | |||
| 2010-08-25 Stephane Letz <letz@grame.fr> | |||
| * In JackCoreAudioDriver, fix an issue when no value is given for input. | |||
| 2010-08-23 Stephane Letz <letz@grame.fr> | |||
| * Adrian Knoth fix for linux cycle.h (ticket 188). | |||
| 2010-07-07 Stephane Letz <letz@grame.fr> | |||
| * Jan Engelhardt patch for get_cycles on SPARC. | |||
| * Adrian Knoth hurd.patch, kfreebsd-fix.patch and alpha_ia64-sigsegv.patch from ticket 177. | |||
| 2010-06-29 Stephane Letz <letz@grame.fr> | |||
| * Arnold Krille firewire snooping patch. | |||
| 2010-06-16 Stephane Letz <letz@grame.fr> | |||
| * David Garcia Garzon unused_pkt_buf_field_jack2 netone patch. | |||
| 2010-06-13 Stephane Letz <letz@grame.fr> | |||
| * Fix JackPosixSemaphore::TimedWait : same behavior as JackPosixSemaphore::Wait regarding EINTR. | |||
| 2010-05-31 Stephane Letz <letz@grame.fr> | |||
| * Fix from Fernando Lopez-Lezcano for compilation on fc13. | |||
| 2010-05-30 Stephane Letz <letz@grame.fr> | |||
| * David Garcia Garzon netone patch. | |||
| 2010-05-27 Stephane Letz <letz@grame.fr> | |||
| * In JackCoreAudioDriver, move code called in MeasureCallback to be called once in IO thread. | |||
| 2010-05-07 Stephane Letz <letz@grame.fr> | |||
| * Add tests to validate intclient.h API. | |||
| * On Linux, inter-process synchronization primitive switched to POSIX semaphore. | |||
| 2010-04-16 Stephane Letz <letz@grame.fr> | |||
| * Make jack_connect/jack_disconnect wait for effective port connection/disconnection. | |||
| 2010-04-07 Stephane Letz <letz@grame.fr> | |||
| * Remove call to exit in library code. | |||
| 2010-03-26 Stephane Letz <letz@grame.fr> | |||
| * ffado-portname-sync.patch from ticket #163 applied. | |||
| @@ -45,7 +98,7 @@ Arnold Krille | |||
| 2010-03-24 Stephane Letz <letz@grame.fr> | |||
| * On Windows, now use TRE library for regexp (BSD license instead of GPL license). | |||
| 2010-03-19 Stephane Letz <letz@grame.fr> | |||
| * Fix some file header to have library side code use LGPL. | |||
| @@ -234,7 +287,7 @@ Arnold Krille | |||
| 2009-10-20 Stephane Letz <letz@grame.fr> | |||
| * Add a string parameter to server ==> client notification, add a new JackInfoShutdownCallback type. | |||
| * CoreAudio backend now issue a JackInfoShutdownCallback when an unrecoverable error is detected (sampling rate change, stream configuration changeÉ) | |||
| * CoreAudio backend now issue a JackInfoShutdownCallback when an unrecoverable error is detected (sampling rate change, stream configuration changed) | |||
| 2009-10-17 Stephane Letz <letz@grame.fr> | |||
| @@ -214,7 +214,8 @@ Note : To experiment with the -S option, jackdmp must be launched in a console. | |||
| 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. | |||
| 1.9.4 : Solaris boomer backend now working in capture or playback only mode. Add a -G parameter in CoreAudio backend (the computation value in RT thread expressed as percent of period). Use SNDCTL_DSP_SYNCGROUP/SNDCTL_DSP_SYNCSTART API to synchronize input and output in Solaris boomer backend. Big endian bug fix in memops.c. Fix issues in JackNetDriver::DecodeTransportData and JackNetDriver::Initialize. Correct CPU timing in JackNetDriver, now take cycle begin time after Read. Simplify transport in NetJack2: master only can control transport. Change CoreAudio notification thread setup for OSX Snow Leopard. Correct server temporary mode : now set a global and quit after server/client message handling is finished. Add a string parameter to server ==> client notification, add a new JackInfoShutdownCallback type. CoreAudio backend now issue a JackInfoShutdownCallback when an unrecoverable error is detected (sampling rate change, stream configuration changeÉ). Correct jackdmp.cpp (failures case were not correct..). Improve JackCoreAudioDriver code. Raise default port number to 2048. Correct JackProcessSync::LockedTimedWait. Correct JACK_MESSAGE_SIZE value, particularly in OSX RPC code. Now start server channel thread only when backend has been started (so in JackServer::Start). Should solve race conditions at start time. jack_verbose moved to JackGlobals class. Improve aggregate device management in JackCoreAudioDriver : now a "private" device only and cleanup properly. Aggregate device code added to JackCoreAudioAdapter. Implement "hog mode" (exclusive access of the audio device) in JackCoreAudioDriver. Fix jack_set_sample_rate_callback to have he same behavior as in JACK1. Dynamic system version detection in JackCoreAudioDriver to either create public or private aggregate device. In JackCoreAudioDriver, force the SR value to the wanted one *before* creating aggregate device (otherwise creation will fail). In JackCoreAudioDriver, better cleanup of AD when intermediate open failure. In JackCoreAudioDriver::Start, wait for the audio driver to effectively start (use the MeasureCallback). In JackCoreAudioDriver, improve management of input/output channels: -1 is now used internally to indicate a wanted max value. In JackCoreAudioDriver::OpenAUHAL, correct stream format setup and cleanup. Correct crash bug in JackAudioAdapterInterface when not input is used in adapter (temporary fixÉ). Sync JackCoreAudioAdapter code on JackCoreAudioDriver one. JACK_SCHED_POLICY switched to SCHED_FIFO. Now can aggregate device that are themselves AD. No reason to make jack_on_shutdown deprecated, so revert the incorrect change. Thread AcquireRealTime and DropRealTime were (incorrectly) using fThread field. Use pthread_self()) (or GetCurrentThread() on Windows) to get the calling thread. Correctly save and restore RT mode state in freewheel mode. Correct freewheel code on client side. Fix AcquireRealTime and DropRealTime: now distinguish when called from another thread (AcquireRealTime/DropRealTime) and from the thread itself (AcquireSelfRealTime/DropSelfRealTime). Correct JackPosixThread::StartImp : thread priority setting now done in the RT case only. Correct JackGraphManager::GetBuffer for the "client loop with one connection" case : buffer must be copied. Correct JackInfoShutdownCallback prototype, two new JackClientProcessFailure and JackClientZombie JackStatus code. Correct JackCoreAudio driver when empty strings are given as -C, -P or -d parameter. Better memory allocation error checking on client (library) side. Better memory allocation error checking in ringbuffer.c, weak import improvements. Memory allocation error checking for jack_client_new and jack_client_open (server and client side). Memory allocation error checking in server for RPC. Simplify server temporary mode : now use a JackTemporaryException. Lock/Unlock shared memory segments (to test...). Sync with JACK1 : -r parameter now used for no-realtime, realtime (-R) is now default, usable backend given vie platform. In JackCoreAudio driver, (possibly) clock drift compensation when needed in aggregated devices. In JackCoreAudio driver, clock drift compensation in aggregated devices working. In JackCoreAudio driver, clock drift compensation semantic changed a bit : when on, does not activate if not needed (same clock domain). Sync JackCoreAudioAdapter code with JackCoreAudioDriver. | |||
| 1.9.5 : Dynamic choice of maximum port number. More robust sample rate change handling code in JackCoreAudioDriver. Devin Anderson patch for Jack FFADO driver issues with lost MIDI bytes between periods (and more). Fix port_rename callback : now both old name and new name are given as parameters. Special code in JackCoreAudio driver to handle completely buggy Digidesign CoreAudio user-land driver. Ensure that client-side message buffer thread calls thread_init callback if/when it is set by the client (backport of JACK1 rev 3838). Check dynamic port-max value. Fix JackCoreMidiDriver::ReadProcAux when ring buffer is full (thanks Devin Anderson). Josh Green ALSA driver capture only patch. When threads are cancelled, the exception has to be rethrown. Use a QUIT notification to properly quit the server channel, the server channel thread can then be 'stopped' instead of 'canceled'. Mario Lang alsa_io time calculation overflow patch. Shared memory manager was calling abort in case of fatal error, now return an error in caller. Change JackEngineProfiling and JackAudioAdapterInterface gnuplot scripts to output SVG instead of PDF. | |||
| 1.9.5 : Dynamic choice of maximum port number. More robust sample rate change handling code in JackCoreAudioDriver. Devin Anderson patch for Jack FFADO driver issues with lost MIDI bytes between periods (and more). Fix port_rename callback : now both old name and new name are given as parameters. Special code in JackCoreAudio driver to handle completely buggy Digidesign CoreAudio user-land driver. Ensure that client-side message buffer thread calls thread_init callback if/when it is set by the client (backport of JACK1 rev 3838). Check dynamic port-max value. Fix JackCoreMidiDriver::ReadProcAux when ring buffer is full (thanks Devin Anderson). Josh Green ALSA driver capture only patch. When threads are cancelled, the exception has to be rethrown. Use a QUIT notification to properly quit the server channel, the server channel thread can then be 'stopped' instead of 'canceled'. Mario Lang alsa_io time calculation overflow patch. Shared memory manager was calling abort in case of fatal error, now return an error in caller. Change JackEngineProfiling and JackAudioAdapterInterface gnuplot scripts to output SVG instead of PDF. | |||
| 1.9.6 : Improve JackCoreAudioDriver and JackCoreAudioAdapter : when no devices are described, takes default input and output and aggregate them.Correct JackGraphManager::DeactivatePort. Correct JackMachServerChannel::Execute : keep running even in error cases. Raise JACK_PROTOCOL_VERSION number. Arnold Krille firewire patch. Raise JACK_DRIVER_PARAM_STRING_MAX and JACK_PARAM_STRING_MAX to 127 otherwise some audio drivers cannot be loaded on OSX. Fix some file header to have library side code use LGPL. On Windows, now use TRE library for regexp (BSD license instead of GPL license). ffado-portname-sync.patch from ticket #163 applied. Remove call to exit in library code. Make jack_connect/jack_disconnect wait for effective port connection/disconnection. Add tests to validate intclient.h API. On Linux, inter-process synchronization primitive switched to POSIX semaphore. In JackCoreAudioDriver, move code called in MeasureCallback to be called once in IO thread. David Garcia Garzon netone patch. Fix from Fernando Lopez-Lezcano for compilation on fc13. Fix JackPosixSemaphore::TimedWait : same behavior as JackPosixSemaphore::Wait regarding EINTR. David Garcia Garzon unused_pkt_buf_field_jack2 netone patch. Arnold Krille firewire snooping patch. Jan Engelhardt patch for get_cycles on SPARC. Adrian Knoth hurd.patch, kfreebsd-fix.patch and alpha_ia64-sigsegv.patch from ticket 177. Adrian Knoth fix for linux cycle.h (ticket 188). In JackCoreAudioDriver, fix an issue when no value is given for input. | |||
| 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... | |||
| @@ -1042,7 +1042,7 @@ int JackClient::InternalClientLoad(const char* client_name, jack_options_t optio | |||
| if (va->load_name && (strlen(va->load_name) >= JACK_PATH_MAX)) { | |||
| jack_error("\"%s\" is too long for a shared object name.\n" | |||
| "Please use %lu characters or less.", | |||
| va->load_name, PATH_MAX); | |||
| va->load_name, JACK_PATH_MAX); | |||
| int my_status1 = *status | (JackFailure | JackInvalidOption); | |||
| *status = (jack_status_t)my_status1; | |||
| return 0; | |||
| @@ -1058,7 +1058,6 @@ int JackClient::InternalClientLoad(const char* client_name, jack_options_t optio | |||
| } | |||
| int int_ref, result = -1; | |||
| // UUID TO CHECK | |||
| fChannel->InternalClientLoad(GetClientControl()->fRefNum, client_name, va->load_name, va->load_init, options, (int*)status, &int_ref, -1, &result); | |||
| return int_ref; | |||
| } | |||
| @@ -24,7 +24,7 @@ | |||
| #include "config.h" | |||
| #endif | |||
| #define VERSION "1.9.6" | |||
| #define VERSION "1.9.7" | |||
| #define BUFFER_SIZE_MAX 8192 | |||
| @@ -406,7 +406,7 @@ int JackEngine::ClientCheck(const char* name, int uuid, char* name_res, int prot | |||
| std::map<int,std::string>::iterator res = fReservationMap.find(uuid); | |||
| if (res != fReservationMap.end()) { | |||
| strncpy( name_res, res->second.c_str(), JACK_CLIENT_NAME_SIZE ); | |||
| strncpy( name_res, res->second.c_str(), JACK_CLIENT_NAME_SIZE ); | |||
| } else if (ClientCheckName(name)) { | |||
| *status |= JackNameNotUnique; | |||
| @@ -27,17 +27,15 @@ | |||
| using namespace Jack; | |||
| void change_thread_log_function(jack_log_function_t log_function) | |||
| static bool change_thread_log_function(jack_log_function_t log_function) | |||
| { | |||
| if (!jack_tls_set(JackGlobals::fKeyLogFunction, (void*)log_function)) | |||
| { | |||
| jack_error("failed to set thread log function"); | |||
| } | |||
| return (jack_tls_get(JackGlobals::fKeyLogFunction) == NULL | |||
| && jack_tls_set(JackGlobals::fKeyLogFunction, (void*)log_function)); | |||
| } | |||
| SERVER_EXPORT void set_threaded_log_function() | |||
| SERVER_EXPORT int set_threaded_log_function() | |||
| { | |||
| change_thread_log_function(JackMessageBufferAdd); | |||
| return change_thread_log_function(JackMessageBufferAdd); | |||
| } | |||
| void jack_log_function(int level, const char *message) | |||
| @@ -53,10 +53,9 @@ extern "C" | |||
| typedef void (* jack_log_function_t)(int level, const char *message); | |||
| void change_thread_log_function(jack_log_function_t log_function); | |||
| void jack_log_function(int level, const char *message); | |||
| SERVER_EXPORT void set_threaded_log_function(); | |||
| SERVER_EXPORT int set_threaded_log_function(); | |||
| #ifdef __cplusplus | |||
| } | |||
| @@ -50,9 +50,9 @@ class JackInternalClientChannel : public detail::JackClientChannelInterface | |||
| return 0; | |||
| } | |||
| void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result) | |||
| void ClientCheck(const char* name, int uuid, char* name_res, int protocol, int options, int* status, int* result) | |||
| { | |||
| *result = fEngine->ClientCheck(name, -1, name_res, protocol, options, status); | |||
| *result = fEngine->ClientCheck(name, uuid, name_res, protocol, options, status); | |||
| } | |||
| void ClientOpen(const char* name, int* ref, JackEngineControl** shared_engine, JackGraphManager** shared_manager, JackClientInterface* client, int* result) | |||
| { | |||
| @@ -120,7 +120,7 @@ namespace Jack { | |||
| public: | |||
| JackPhysicalMidiInput(size_t buffer_size=1024); | |||
| ~JackPhysicalMidiInput(); | |||
| virtual ~JackPhysicalMidiInput(); | |||
| /** | |||
| * Called to process MIDI data during a period. | |||
| @@ -92,7 +92,7 @@ namespace Jack { | |||
| JackPhysicalMidiOutput(size_t non_rt_buffer_size=1024, | |||
| size_t rt_buffer_size=64); | |||
| ~JackPhysicalMidiOutput(); | |||
| virtual ~JackPhysicalMidiOutput(); | |||
| /** | |||
| * Called to process MIDI data during a period. | |||
| @@ -85,7 +85,7 @@ static void copyright(FILE* file) | |||
| { | |||
| fprintf(file, "jackdmp " VERSION "\n" | |||
| "Copyright 2001-2005 Paul Davis and others.\n" | |||
| "Copyright 2004-2009 Grame.\n" | |||
| "Copyright 2004-2010 Grame.\n" | |||
| "jackdmp comes with ABSOLUTELY NO WARRANTY\n" | |||
| "This is free software, and you are welcome to redistribute it\n" | |||
| "under certain conditions; see the file COPYING for details\n"); | |||
| @@ -105,6 +105,10 @@ jack_midi_max_event_size(void* port_buffer) JACK_OPTIONAL_WEAK_EXPORT; | |||
| * messages interspersed with other messages (realtime messages are fine | |||
| * when they occur on their own, like other messages). | |||
| * | |||
| * Events must be written in order, sorted by their sample offsets. | |||
| * JACK will not sort the events for you, and will refuse to store | |||
| * out-of-order events. | |||
| * | |||
| * @param port_buffer Buffer to write event to. | |||
| * @param time Sample offset of event. | |||
| * @param data_size Length of event's raw data in bytes. | |||
| @@ -122,6 +126,16 @@ jack_midi_event_reserve(void *port_buffer, | |||
| * This function is simply a wrapper for @ref jack_midi_event_reserve | |||
| * which writes the event data into the space reserved in the buffer. | |||
| * The same restrictions on the MIDI data apply. | |||
| * | |||
| * Clients must not write more than | |||
| * @a data_size bytes into this buffer. Clients must write normalised | |||
| * MIDI data to the port - no running status and no (1-byte) realtime | |||
| * messages interspersed with other messages (realtime messages are fine | |||
| * when they occur on their own, like other messages). | |||
| * | |||
| * Events must be written in order, sorted by their sample offsets. | |||
| * JACK will not sort the events for you, and will refuse to store | |||
| * out-of-order events. | |||
| * | |||
| * @param port_buffer Buffer to write event to. | |||
| * @param time Sample offset of event. | |||
| @@ -53,7 +53,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
| #endif /* WIN32 */ | |||
| #if defined(__APPLE__) || defined(__linux__) || defined(__sun__) || defined(sun) | |||
| #if defined(__APPLE__) || defined(__linux__) || defined(__sun__) || defined(sun) || defined(__unix__) | |||
| #include <inttypes.h> | |||
| #include <pthread.h> | |||
| #include <sys/types.h> | |||
| @@ -564,6 +564,7 @@ netjack_driver_state_t *netjack_init (netjack_driver_state_t *netj, | |||
| netj->resample_factor = resample_factor; | |||
| netj->resample_factor_up = resample_factor_up; | |||
| netj->jitter_val = jitter_val; | |||
| return netj; | |||
| } | |||
| @@ -734,7 +735,6 @@ netjack_startup( netjack_driver_state_t *netj ) | |||
| } | |||
| netj->rx_bufsize = sizeof (jacknet_packet_header) + netj->net_period_down * netj->capture_channels * get_sample_size (netj->bitdepth); | |||
| netj->pkt_buf = malloc (netj->rx_bufsize); | |||
| global_packcache = packet_cache_new (netj->latency + 50, netj->rx_bufsize, netj->mtu); | |||
| netj->expected_framecnt_valid = 0; | |||
| @@ -85,7 +85,6 @@ struct _netjack_driver_state { | |||
| unsigned int handle_transport_sync; | |||
| unsigned int *rx_buf; | |||
| unsigned int *pkt_buf; | |||
| unsigned int rx_bufsize; | |||
| //unsigned int tx_bufsize; | |||
| unsigned int mtu; | |||
| @@ -512,7 +512,7 @@ jack_register_server (const char *server_name, int new_registry) | |||
| unlock: | |||
| jack_shm_unlock_registry (); | |||
| return 0; | |||
| return res; | |||
| } | |||
| /* release server_name registration */ | |||
| @@ -60,7 +60,7 @@ SERVER_EXPORT int audio_reservation_finish() | |||
| if (gConnection) { | |||
| dbus_connection_unref(gConnection); | |||
| gConnection = NULL; | |||
| jack_info("audio_reservation_finish"); | |||
| jack_info("audio_reservation_finish"); | |||
| } | |||
| return 0; | |||
| } | |||
| @@ -1,6 +1,6 @@ | |||
| /* -*- Mode: C ; c-basic-offset: 4 -*- */ | |||
| /* | |||
| Copyright (C) 2007,2008 Nedko Arnaudov | |||
| Copyright (C) 2007,2008,2010 Nedko Arnaudov | |||
| Copyright (C) 2007-2008 Juuso Alasuutari | |||
| This program is free software; you can redistribute it and/or modify | |||
| @@ -25,6 +25,7 @@ | |||
| #include <stdint.h> | |||
| #include <string.h> | |||
| #include <dbus/dbus.h> | |||
| #include <assert.h> | |||
| #include "controller.h" | |||
| #include "controller_internal.h" | |||
| @@ -142,11 +143,7 @@ jack_controller_start_server( | |||
| jack_info("Starting jack server..."); | |||
| if (controller_ptr->started) | |||
| { | |||
| jack_info("Already started."); | |||
| return TRUE; | |||
| } | |||
| assert(!controller_ptr->started); /* should be ensured by caller */ | |||
| if (controller_ptr->driver == NULL) | |||
| { | |||
| @@ -171,7 +168,6 @@ jack_controller_start_server( | |||
| if (controller_ptr->client == NULL) | |||
| { | |||
| jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "failed to create dbusapi jack client"); | |||
| goto fail_stop_server; | |||
| } | |||
| @@ -179,13 +175,12 @@ jack_controller_start_server( | |||
| if (ret != 0) | |||
| { | |||
| jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "failed to set xrun callback. error is %d", ret); | |||
| goto fail_close_client; | |||
| } | |||
| if (!jack_controller_patchbay_init(controller_ptr)) | |||
| { | |||
| jack_error("Failed to initialize patchbay district"); | |||
| jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "Failed to initialize patchbay district"); | |||
| goto fail_close_client; | |||
| } | |||
| @@ -193,7 +188,6 @@ jack_controller_start_server( | |||
| if (ret != 0) | |||
| { | |||
| jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "failed to activate dbusapi jack client. error is %d", ret); | |||
| goto fail_patchbay_uninit; | |||
| } | |||
| @@ -232,16 +226,12 @@ jack_controller_stop_server( | |||
| jack_info("Stopping jack server..."); | |||
| if (!controller_ptr->started) | |||
| { | |||
| jack_info("Already stopped."); | |||
| return TRUE; | |||
| } | |||
| assert(controller_ptr->started); /* should be ensured by caller */ | |||
| ret = jack_deactivate(controller_ptr->client); | |||
| if (ret != 0) | |||
| { | |||
| jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "failed to deactivate dbusapi jack client. error is %d", ret); | |||
| jack_error("failed to deactivate dbusapi jack client. error is %d", ret); | |||
| } | |||
| jack_controller_patchbay_uninit(controller_ptr); | |||
| @@ -256,6 +246,7 @@ jack_controller_stop_server( | |||
| if (!jackctl_server_stop(controller_ptr->server)) | |||
| { | |||
| jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "Failed to stop server"); | |||
| return FALSE; | |||
| } | |||
| @@ -1,6 +1,6 @@ | |||
| /* -*- Mode: C ; c-basic-offset: 4 -*- */ | |||
| /* | |||
| Copyright (C) 2007,2008 Nedko Arnaudov | |||
| Copyright (C) 2007,2008,2010 Nedko Arnaudov | |||
| Copyright (C) 2007-2008 Juuso Alasuutari | |||
| This program is free software; you can redistribute it and/or modify | |||
| @@ -85,29 +85,46 @@ jack_control_run_method( | |||
| } | |||
| else if (strcmp (call->method_name, "StartServer") == 0) | |||
| { | |||
| if (!jack_controller_start_server(controller_ptr, call)) | |||
| if (controller_ptr->started) | |||
| { | |||
| jack_dbus_error(call, JACK_DBUS_ERROR_GENERIC, "Failed to start server"); | |||
| return true; | |||
| jack_info("Ignoring JACK server start request because server is already started."); | |||
| } | |||
| else | |||
| { | |||
| if (!jack_controller_start_server(controller_ptr, call)) | |||
| { | |||
| /* the reply is set by the failed function */ | |||
| assert(call->reply != NULL); | |||
| return true; | |||
| } | |||
| jack_controller_control_send_signal_server_started(); | |||
| } | |||
| jack_controller_control_send_signal_server_started(); | |||
| } | |||
| else if (strcmp (call->method_name, "StopServer") == 0) | |||
| { | |||
| if (!jack_controller_stop_server(controller_ptr, call)) | |||
| if (!controller_ptr->started) | |||
| { | |||
| jack_dbus_error(call, JACK_DBUS_ERROR_GENERIC, "Failed to stop server"); | |||
| return true; | |||
| jack_info("Ignoring JACK server stop request because server is already stopped."); | |||
| } | |||
| else | |||
| { | |||
| if (!jack_controller_stop_server(controller_ptr, call)) | |||
| { | |||
| /* the reply is set by the failed function */ | |||
| assert(call->reply != NULL); | |||
| return true; | |||
| } | |||
| jack_controller_control_send_signal_server_stopped(); | |||
| } | |||
| jack_controller_control_send_signal_server_stopped(); | |||
| } | |||
| else if (strcmp (call->method_name, "SwitchMaster") == 0) | |||
| { | |||
| if (!jack_controller_switch_master(controller_ptr, call)) | |||
| { | |||
| jack_dbus_error(call, JACK_DBUS_ERROR_GENERIC, "Failed to switch master"); | |||
| /* the reply is set by the failed function */ | |||
| assert(call->reply != NULL); | |||
| return true; | |||
| } | |||
| @@ -323,7 +323,7 @@ jack_controller_patchbay_find_client( | |||
| list_for_each(node_ptr, &patchbay_ptr->graph.clients) | |||
| { | |||
| client_ptr = list_entry(node_ptr, struct jack_graph_client, siblings); | |||
| if (strncmp(client_ptr->name, client_name, client_name_len) == 0) | |||
| if (strlen(client_ptr->name) == client_name_len && strncmp(client_ptr->name, client_name, client_name_len) == 0) | |||
| { | |||
| return client_ptr; | |||
| } | |||
| @@ -1,6 +1,6 @@ | |||
| /* -*- Mode: C ; c-basic-offset: 4 -*- */ | |||
| /* | |||
| Copyright (C) 2007,2008 Nedko Arnaudov | |||
| Copyright (C) 2007,2008,2010 Nedko Arnaudov | |||
| Copyright (C) 2007-2008 Juuso Alasuutari | |||
| Copyright (C) 2008 Marc-Olivier Barre | |||
| @@ -44,6 +44,8 @@ | |||
| #include "sigsegv.h" | |||
| #include "svnversion.h" | |||
| static char * g_log_filename; | |||
| static ino_t g_log_file_ino; | |||
| FILE *g_logfile; | |||
| char *g_jackdbus_config_dir; | |||
| size_t g_jackdbus_config_dir_len; /* without terminating '\0' char */ | |||
| @@ -550,6 +552,49 @@ fail: | |||
| jack_error ("Ran out of memory trying to construct method return"); | |||
| } | |||
| static bool jack_dbus_log_open(void) | |||
| { | |||
| struct stat st; | |||
| int ret; | |||
| int retry; | |||
| if (g_logfile != NULL) | |||
| { | |||
| ret = stat(g_log_filename, &st); | |||
| if (ret != 0 || g_log_file_ino != st.st_ino) | |||
| { | |||
| fclose(g_logfile); | |||
| } | |||
| else | |||
| { | |||
| return true; | |||
| } | |||
| } | |||
| for (retry = 0; retry < 10; retry++) | |||
| { | |||
| g_logfile = fopen(g_log_filename, "a"); | |||
| if (g_logfile == NULL) | |||
| { | |||
| fprintf(stderr, "Cannot open jackdbus log file \"%s\": %d (%s)\n", g_log_filename, errno, strerror(errno)); | |||
| return false; | |||
| } | |||
| ret = stat(g_log_filename, &st); | |||
| if (ret == 0) | |||
| { | |||
| g_log_file_ino = st.st_ino; | |||
| return true; | |||
| } | |||
| fclose(g_logfile); | |||
| g_logfile = NULL; | |||
| } | |||
| fprintf(stderr, "Cannot stat just opened jackdbus log file \"%s\": %d (%s). %d retries\n", g_log_filename, errno, strerror(errno), retry); | |||
| return false; | |||
| } | |||
| void | |||
| jack_dbus_info_callback(const char *msg) | |||
| { | |||
| @@ -560,8 +605,11 @@ jack_dbus_info_callback(const char *msg) | |||
| ctime_r(×tamp, timestamp_str); | |||
| timestamp_str[24] = 0; | |||
| fprintf(g_logfile, "%s: %s\n", timestamp_str, msg); | |||
| fflush(g_logfile); | |||
| if (jack_dbus_log_open()) | |||
| { | |||
| fprintf(g_logfile, "%s: %s\n", timestamp_str, msg); | |||
| fflush(g_logfile); | |||
| } | |||
| } | |||
| #define ANSI_BOLD_ON "\033[1m" | |||
| @@ -579,8 +627,11 @@ jack_dbus_error_callback(const char *msg) | |||
| ctime_r(×tamp, timestamp_str); | |||
| timestamp_str[24] = 0; | |||
| fprintf(g_logfile, "%s: " ANSI_BOLD_ON ANSI_COLOR_RED "ERROR: %s" ANSI_RESET "\n", timestamp_str, msg); | |||
| fflush(g_logfile); | |||
| if (jack_dbus_log_open()) | |||
| { | |||
| fprintf(g_logfile, "%s: " ANSI_BOLD_ON ANSI_COLOR_RED "ERROR: %s" ANSI_RESET "\n", timestamp_str, msg); | |||
| fflush(g_logfile); | |||
| } | |||
| } | |||
| bool | |||
| @@ -695,42 +746,39 @@ paths_uninit() | |||
| free(g_jackdbus_log_dir); | |||
| } | |||
| int | |||
| log_init() | |||
| static bool log_init(void) | |||
| { | |||
| char *log_filename; | |||
| size_t log_len; | |||
| log_len = strlen(JACKDBUS_LOG); | |||
| log_filename = malloc(g_jackdbus_log_dir_len + log_len + 1); | |||
| if (log_filename == NULL) | |||
| g_log_filename = malloc(g_jackdbus_log_dir_len + log_len + 1); | |||
| if (g_log_filename == NULL) | |||
| { | |||
| fprintf(stderr, "Out of memory\n"); | |||
| return FALSE; | |||
| return false; | |||
| } | |||
| memcpy(log_filename, g_jackdbus_log_dir, g_jackdbus_log_dir_len); | |||
| memcpy(log_filename + g_jackdbus_log_dir_len, JACKDBUS_LOG, log_len); | |||
| log_filename[g_jackdbus_log_dir_len + log_len] = 0; | |||
| memcpy(g_log_filename, g_jackdbus_log_dir, g_jackdbus_log_dir_len); | |||
| memcpy(g_log_filename + g_jackdbus_log_dir_len, JACKDBUS_LOG, log_len); | |||
| g_log_filename[g_jackdbus_log_dir_len + log_len] = 0; | |||
| g_logfile = fopen(log_filename, "a"); | |||
| if (g_logfile == NULL) | |||
| if (!jack_dbus_log_open()) | |||
| { | |||
| fprintf(stderr, "Cannot open jackdbus log file \"%s\": %d (%s)\n", log_filename, errno, strerror(errno)); | |||
| free(log_filename); | |||
| return FALSE; | |||
| return false; | |||
| } | |||
| free(log_filename); | |||
| return TRUE; | |||
| return true; | |||
| } | |||
| void | |||
| log_uninit() | |||
| static void log_uninit(void) | |||
| { | |||
| fclose(g_logfile); | |||
| if (g_logfile != NULL) | |||
| { | |||
| fclose(g_logfile); | |||
| } | |||
| free(g_log_filename); | |||
| } | |||
| void | |||
| @@ -98,14 +98,18 @@ static void signal_segv(int signum, siginfo_t* info, void*ptr) { | |||
| jack_error("info.si_errno = %d", info->si_errno); | |||
| jack_error("info.si_code = %d (%s)", info->si_code, si_codes[info->si_code]); | |||
| jack_error("info.si_addr = %p", info->si_addr); | |||
| #if !defined(__alpha__) && !defined(__ia64__) && !defined(__FreeBSD_kernel__) && !defined(__arm__) && !defined(__hppa__) && !defined(__sh__) | |||
| for(i = 0; i < NGREG; i++) | |||
| jack_error("reg[%02d] = 0x" REGFORMAT, i, | |||
| #if defined(__powerpc__) | |||
| ucontext->uc_mcontext.uc_regs[i] | |||
| #elif defined(__sparc__) && defined(__arch64__) | |||
| ucontext->uc_mcontext.mc_gregs[i] | |||
| #else | |||
| ucontext->uc_mcontext.gregs[i] | |||
| #endif | |||
| ); | |||
| #endif /* alpha, ia64, kFreeBSD, arm, hppa */ | |||
| #if defined(SIGSEGV_STACK_X86) || defined(SIGSEGV_STACK_IA64) | |||
| # if defined(SIGSEGV_STACK_IA64) | |||
| @@ -23,7 +23,7 @@ PROJECT_NAME = "Jack2" | |||
| # This could be handy for archiving the generated documentation or | |||
| # if some version control system is used. | |||
| PROJECT_NUMBER = 1.9.6 | |||
| PROJECT_NUMBER = 1.9.7 | |||
| # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) | |||
| # base path where the generated documentation will be put. | |||
| @@ -17,9 +17,9 @@ | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include <signal.h> | |||
| #include <signal.h> | |||
| #ifndef WIN32 | |||
| #include <unistd.h> | |||
| #include <unistd.h> | |||
| #endif | |||
| #include <getopt.h> | |||
| #include <jack/jack.h> | |||
| @@ -126,7 +126,7 @@ parse_args (int argc, char *argv[]) | |||
| int | |||
| main (int argc, char *argv[]) | |||
| { | |||
| jack_status_t status; | |||
| jack_status_t status; | |||
| char* name; | |||
| /* parse and validate command arguments */ | |||
| @@ -157,8 +157,8 @@ main (int argc, char *argv[]) | |||
| (JackLoadName|JackLoadInit), | |||
| &status, load_name, load_init); | |||
| if (status & JackFailure) { | |||
| fprintf (stderr, "could not load %s, status = 0x%2.0x\n", | |||
| load_name, status); | |||
| fprintf (stderr, "could not load %s, intclient = %d status = 0x%2.0x\n", | |||
| load_name, (int)intclient, status); | |||
| return 2; | |||
| } | |||
| if (status & JackNameNotUnique) { | |||
| @@ -178,23 +178,23 @@ main (int argc, char *argv[]) | |||
| if (wait_opt) { | |||
| /* define a signal handler to unload the client, then | |||
| * wait for it to exit */ | |||
| #ifdef WIN32 | |||
| signal(SIGINT, signal_handler); | |||
| signal(SIGABRT, signal_handler); | |||
| signal(SIGTERM, signal_handler); | |||
| #else | |||
| signal(SIGQUIT, signal_handler); | |||
| signal(SIGTERM, signal_handler); | |||
| signal(SIGHUP, signal_handler); | |||
| signal(SIGINT, signal_handler); | |||
| #endif | |||
| while (1) { | |||
| #ifdef WIN32 | |||
| Sleep(1000); | |||
| * wait for it to exit */ | |||
| #ifdef WIN32 | |||
| signal(SIGINT, signal_handler); | |||
| signal(SIGABRT, signal_handler); | |||
| signal(SIGTERM, signal_handler); | |||
| #else | |||
| signal(SIGQUIT, signal_handler); | |||
| signal(SIGTERM, signal_handler); | |||
| signal(SIGHUP, signal_handler); | |||
| signal(SIGINT, signal_handler); | |||
| #endif | |||
| while (1) { | |||
| #ifdef WIN32 | |||
| Sleep(1000); | |||
| #else | |||
| sleep (1); | |||
| sleep (1); | |||
| #endif | |||
| } | |||
| } | |||
| @@ -49,8 +49,13 @@ namespace Jack {typedef JackPosixMutex JackMutex; } | |||
| namespace Jack { typedef JackPosixThread JackThread; } | |||
| /* __JackPlatformSynchro__ client activation */ | |||
| /* | |||
| #include "JackFifo.h" | |||
| namespace Jack { typedef JackFifo JackSynchro; } | |||
| */ | |||
| #include "JackPosixSemaphore.h" | |||
| namespace Jack { typedef JackPosixSemaphore JackSynchro; } | |||
| /* __JackPlatformChannelTransaction__ */ | |||
| #include "JackSocket.h" | |||
| @@ -120,7 +120,7 @@ get_control_device_name (const char * device_name) | |||
| char tmp[5]; | |||
| strncpy(tmp, strstr(device_name, "hw"), 4); | |||
| tmp[4] = '\0'; | |||
| //jack_log("control device %s", tmp); | |||
| jack_info("control device %s",tmp); | |||
| ctl_name = strdup(tmp); | |||
| } else { | |||
| ctl_name = strdup(device_name); | |||
| @@ -151,21 +151,16 @@ JackAlsaDriver::alsa_driver_check_card_type (alsa_driver_t *driver) | |||
| if ((err = snd_ctl_open (&driver->ctl_handle, ctl_name, 0)) < 0) { | |||
| jack_error ("control open \"%s\" (%s)", ctl_name, | |||
| snd_strerror(err)); | |||
| return -1; | |||
| } | |||
| if ((err = snd_ctl_card_info(driver->ctl_handle, card_info)) < 0) { | |||
| } else if ((err = snd_ctl_card_info(driver->ctl_handle, card_info)) < 0) { | |||
| jack_error ("control hardware info \"%s\" (%s)", | |||
| driver->alsa_name_playback, snd_strerror (err)); | |||
| snd_ctl_close (driver->ctl_handle); | |||
| return -1; | |||
| } | |||
| driver->alsa_driver = strdup(snd_ctl_card_info_get_driver (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)); | |||
| free(ctl_name); | |||
| return alsa_driver_check_capabilities (driver); | |||
| } | |||
| @@ -1371,7 +1366,7 @@ JackAlsaDriver::alsa_driver_wait (alsa_driver_t *driver, int extra_fd, int *stat | |||
| /* if POLLIN was the only bit set, we're OK */ | |||
| *status = 0; | |||
| if (driver->pfd[nfds-1].revents == POLLIN) { | |||
| if (driver->pfd[nfds-1].revents != POLLIN) { | |||
| jack_error("driver->pfd[nfds-1].revents == POLLIN"); | |||
| } | |||
| return (driver->pfd[nfds-1].revents == POLLIN) ? 0 : -1; | |||
| @@ -1585,7 +1580,6 @@ JackAlsaDriver::alsa_driver_read (alsa_driver_t *driver, jack_nframes_t nframes) | |||
| jack_error ("ALSA: could not complete read of %" | |||
| PRIu32 " frames: error = %d\n", contiguous, err); | |||
| jack_error ("ALSA: could not complete read of %d frames: error = %d", contiguous, err); | |||
| return -1; | |||
| } | |||
| @@ -1725,7 +1719,6 @@ JackAlsaDriver::alsa_driver_write (alsa_driver_t* driver, jack_nframes_t nframes | |||
| offset, contiguous)) < 0) { | |||
| jack_error ("ALSA: could not complete playback of %" | |||
| PRIu32 " frames: error = %d", contiguous, err); | |||
| jack_error ("ALSA: could not complete playback of %d frames: error = %d", contiguous, err); | |||
| if (err != EPIPE && err != ESTRPIPE) | |||
| return -1; | |||
| } | |||
| @@ -1750,11 +1743,6 @@ JackAlsaDriver::alsa_driver_delete (alsa_driver_t *driver) | |||
| } | |||
| jack_slist_free (driver->clock_sync_listeners); | |||
| if (driver->ctl_handle) { | |||
| snd_ctl_close (driver->ctl_handle); | |||
| driver->ctl_handle = 0; | |||
| } | |||
| if (driver->ctl_handle) { | |||
| snd_ctl_close (driver->ctl_handle); | |||
| driver->ctl_handle = 0; | |||
| @@ -2343,7 +2331,7 @@ int JackAlsaDriver::Read() | |||
| } | |||
| if (nframes != fEngineControl->fBufferSize) | |||
| jack_log("JackAlsaDriver::Read error nframes = %ld", nframes); | |||
| jack_log("JackAlsaDriver::Read warning nframes = %ld", nframes); | |||
| // Has to be done before read | |||
| JackDriver::CycleIncTime(); | |||
| @@ -2631,352 +2619,352 @@ get_dither_constraint() | |||
| return constraint_ptr; | |||
| } | |||
| static int | |||
| dither_opt (char c, DitherAlgorithm* dither) | |||
| { | |||
| switch (c) { | |||
| case '-': | |||
| case 'n': | |||
| *dither = None; | |||
| break; | |||
| case 'r': | |||
| *dither = Rectangular; | |||
| break; | |||
| case 's': | |||
| *dither = Shaped; | |||
| break; | |||
| case 't': | |||
| *dither = Triangular; | |||
| break; | |||
| default: | |||
| fprintf (stderr, "ALSA driver: illegal dithering mode %c\n", c); | |||
| return -1; | |||
| } | |||
| return 0; | |||
| static int | |||
| dither_opt (char c, DitherAlgorithm* dither) | |||
| { | |||
| switch (c) { | |||
| case '-': | |||
| case 'n': | |||
| *dither = None; | |||
| break; | |||
| case 'r': | |||
| *dither = Rectangular; | |||
| break; | |||
| case 's': | |||
| *dither = Shaped; | |||
| break; | |||
| case 't': | |||
| *dither = Triangular; | |||
| break; | |||
| default: | |||
| fprintf (stderr, "ALSA driver: illegal dithering mode %c\n", c); | |||
| return -1; | |||
| } | |||
| return 0; | |||
| } | |||
| SERVER_EXPORT const jack_driver_desc_t* driver_get_descriptor () | |||
| { | |||
| jack_driver_desc_t * desc; | |||
| jack_driver_param_desc_t * params; | |||
| unsigned int i; | |||
| desc = (jack_driver_desc_t*)calloc (1, sizeof (jack_driver_desc_t)); | |||
| strcpy(desc->name, "alsa"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||
| strcpy(desc->desc, "Linux ALSA API based audio backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||
| desc->nparams = 18; | |||
| params = (jack_driver_param_desc_t*)calloc (desc->nparams, sizeof (jack_driver_param_desc_t)); | |||
| i = 0; | |||
| strcpy (params[i].name, "capture"); | |||
| params[i].character = 'C'; | |||
| params[i].type = JackDriverParamString; | |||
| strcpy (params[i].value.str, "none"); | |||
| strcpy (params[i].short_desc, | |||
| "Provide capture ports. Optionally set device"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "playback"); | |||
| params[i].character = 'P'; | |||
| params[i].type = JackDriverParamString; | |||
| strcpy (params[i].value.str, "none"); | |||
| strcpy (params[i].short_desc, | |||
| "Provide playback ports. Optionally set device"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "device"); | |||
| params[i].character = 'd'; | |||
| params[i].type = JackDriverParamString; | |||
| strcpy (params[i].value.str, "hw:0"); | |||
| strcpy (params[i].short_desc, "ALSA device name"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| params[i].constraint = enum_alsa_devices(); | |||
| i++; | |||
| strcpy (params[i].name, "rate"); | |||
| params[i].character = 'r'; | |||
| params[i].type = JackDriverParamUInt; | |||
| params[i].value.ui = 48000U; | |||
| strcpy (params[i].short_desc, "Sample rate"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "period"); | |||
| params[i].character = 'p'; | |||
| params[i].type = JackDriverParamUInt; | |||
| params[i].value.ui = 1024U; | |||
| strcpy (params[i].short_desc, "Frames per period"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "nperiods"); | |||
| params[i].character = 'n'; | |||
| params[i].type = JackDriverParamUInt; | |||
| params[i].value.ui = 2U; | |||
| strcpy (params[i].short_desc, "Number of periods of playback latency"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "hwmon"); | |||
| params[i].character = 'H'; | |||
| params[i].type = JackDriverParamBool; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, "Hardware monitoring, if available"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "hwmeter"); | |||
| params[i].character = 'M'; | |||
| params[i].type = JackDriverParamBool; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, "Hardware metering, if available"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "duplex"); | |||
| params[i].character = 'D'; | |||
| params[i].type = JackDriverParamBool; | |||
| params[i].value.i = 1; | |||
| strcpy (params[i].short_desc, | |||
| "Provide both capture and playback ports"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "softmode"); | |||
| params[i].character = 's'; | |||
| params[i].type = JackDriverParamBool; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, "Soft-mode, no xrun handling"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "monitor"); | |||
| params[i].character = 'm'; | |||
| params[i].type = JackDriverParamBool; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, "Provide monitor ports for the output"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "dither"); | |||
| params[i].character = 'z'; | |||
| params[i].type = JackDriverParamChar; | |||
| params[i].value.c = 'n'; | |||
| strcpy (params[i].short_desc, "Dithering mode"); | |||
| strcpy (params[i].long_desc, | |||
| "Dithering mode:\n" | |||
| " n - none\n" | |||
| " r - rectangular\n" | |||
| " s - shaped\n" | |||
| " t - triangular"); | |||
| params[i].constraint = get_dither_constraint(); | |||
| i++; | |||
| strcpy (params[i].name, "inchannels"); | |||
| params[i].character = 'i'; | |||
| params[i].type = JackDriverParamUInt; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, | |||
| "Number of capture channels (defaults to hardware max)"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "outchannels"); | |||
| params[i].character = 'o'; | |||
| params[i].type = JackDriverParamUInt; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, | |||
| "Number of playback channels (defaults to hardware max)"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "shorts"); | |||
| params[i].character = 'S'; | |||
| params[i].type = JackDriverParamBool; | |||
| params[i].value.i = FALSE; | |||
| strcpy (params[i].short_desc, "Try 16-bit samples before 32-bit"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "input-latency"); | |||
| params[i].character = 'I'; | |||
| params[i].type = JackDriverParamUInt; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, "Extra input latency (frames)"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "output-latency"); | |||
| params[i].character = 'O'; | |||
| params[i].type = JackDriverParamUInt; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, "Extra output latency (frames)"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "midi-driver"); | |||
| params[i].character = 'X'; | |||
| params[i].type = JackDriverParamString; | |||
| strcpy (params[i].value.str, "none"); | |||
| strcpy (params[i].short_desc, "ALSA MIDI driver name (seq|raw)"); | |||
| strcpy (params[i].long_desc, | |||
| "ALSA MIDI driver:\n" | |||
| " none - no MIDI driver\n" | |||
| " seq - ALSA Sequencer driver\n" | |||
| " raw - ALSA RawMIDI driver\n"); | |||
| params[i].constraint = get_midi_driver_constraint(); | |||
| desc->params = params; | |||
| return desc; | |||
| } | |||
| SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params) | |||
| { | |||
| jack_nframes_t srate = 48000; | |||
| jack_nframes_t frames_per_interrupt = 1024; | |||
| unsigned long user_nperiods = 2; | |||
| const char *playback_pcm_name = "hw:0"; | |||
| const char *capture_pcm_name = "hw:0"; | |||
| int hw_monitoring = FALSE; | |||
| int hw_metering = FALSE; | |||
| int capture = FALSE; | |||
| int playback = FALSE; | |||
| int soft_mode = FALSE; | |||
| int monitor = FALSE; | |||
| DitherAlgorithm dither = None; | |||
| int user_capture_nchnls = 0; | |||
| int user_playback_nchnls = 0; | |||
| int shorts_first = FALSE; | |||
| jack_nframes_t systemic_input_latency = 0; | |||
| jack_nframes_t systemic_output_latency = 0; | |||
| const JSList * node; | |||
| const jack_driver_param_t * param; | |||
| const char *midi_driver = "none"; | |||
| for (node = params; node; node = jack_slist_next (node)) { | |||
| param = (const jack_driver_param_t *) node->data; | |||
| switch (param->character) { | |||
| case 'C': | |||
| capture = TRUE; | |||
| if (strcmp (param->value.str, "none") != 0) { | |||
| capture_pcm_name = strdup (param->value.str); | |||
| jack_log("capture device %s", capture_pcm_name); | |||
| } | |||
| break; | |||
| SERVER_EXPORT const jack_driver_desc_t* driver_get_descriptor () | |||
| { | |||
| jack_driver_desc_t * desc; | |||
| jack_driver_param_desc_t * params; | |||
| unsigned int i; | |||
| case 'P': | |||
| playback = TRUE; | |||
| if (strcmp (param->value.str, "none") != 0) { | |||
| playback_pcm_name = strdup (param->value.str); | |||
| jack_log("playback device %s", playback_pcm_name); | |||
| } | |||
| break; | |||
| desc = (jack_driver_desc_t*)calloc (1, sizeof (jack_driver_desc_t)); | |||
| strcpy(desc->name, "alsa"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||
| strcpy(desc->desc, "Linux ALSA API based audio backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||
| desc->nparams = 18; | |||
| params = (jack_driver_param_desc_t*)calloc (desc->nparams, sizeof (jack_driver_param_desc_t)); | |||
| i = 0; | |||
| strcpy (params[i].name, "capture"); | |||
| params[i].character = 'C'; | |||
| params[i].type = JackDriverParamString; | |||
| strcpy (params[i].value.str, "none"); | |||
| strcpy (params[i].short_desc, | |||
| "Provide capture ports. Optionally set device"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "playback"); | |||
| params[i].character = 'P'; | |||
| params[i].type = JackDriverParamString; | |||
| strcpy (params[i].value.str, "none"); | |||
| strcpy (params[i].short_desc, | |||
| "Provide playback ports. Optionally set device"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "device"); | |||
| params[i].character = 'd'; | |||
| params[i].type = JackDriverParamString; | |||
| strcpy (params[i].value.str, "hw:0"); | |||
| strcpy (params[i].short_desc, "ALSA device name"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| params[i].constraint = enum_alsa_devices(); | |||
| i++; | |||
| strcpy (params[i].name, "rate"); | |||
| params[i].character = 'r'; | |||
| params[i].type = JackDriverParamUInt; | |||
| params[i].value.ui = 48000U; | |||
| strcpy (params[i].short_desc, "Sample rate"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "period"); | |||
| params[i].character = 'p'; | |||
| params[i].type = JackDriverParamUInt; | |||
| params[i].value.ui = 1024U; | |||
| strcpy (params[i].short_desc, "Frames per period"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "nperiods"); | |||
| params[i].character = 'n'; | |||
| params[i].type = JackDriverParamUInt; | |||
| params[i].value.ui = 2U; | |||
| strcpy (params[i].short_desc, "Number of periods of playback latency"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "hwmon"); | |||
| params[i].character = 'H'; | |||
| params[i].type = JackDriverParamBool; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, "Hardware monitoring, if available"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "hwmeter"); | |||
| params[i].character = 'M'; | |||
| params[i].type = JackDriverParamBool; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, "Hardware metering, if available"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "duplex"); | |||
| params[i].character = 'D'; | |||
| params[i].type = JackDriverParamBool; | |||
| params[i].value.i = 1; | |||
| strcpy (params[i].short_desc, | |||
| "Provide both capture and playback ports"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "softmode"); | |||
| params[i].character = 's'; | |||
| params[i].type = JackDriverParamBool; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, "Soft-mode, no xrun handling"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "monitor"); | |||
| params[i].character = 'm'; | |||
| params[i].type = JackDriverParamBool; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, "Provide monitor ports for the output"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "dither"); | |||
| params[i].character = 'z'; | |||
| params[i].type = JackDriverParamChar; | |||
| params[i].value.c = 'n'; | |||
| strcpy (params[i].short_desc, "Dithering mode"); | |||
| strcpy (params[i].long_desc, | |||
| "Dithering mode:\n" | |||
| " n - none\n" | |||
| " r - rectangular\n" | |||
| " s - shaped\n" | |||
| " t - triangular"); | |||
| params[i].constraint = get_dither_constraint(); | |||
| i++; | |||
| strcpy (params[i].name, "inchannels"); | |||
| params[i].character = 'i'; | |||
| params[i].type = JackDriverParamUInt; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, | |||
| "Number of capture channels (defaults to hardware max)"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "outchannels"); | |||
| params[i].character = 'o'; | |||
| params[i].type = JackDriverParamUInt; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, | |||
| "Number of playback channels (defaults to hardware max)"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "shorts"); | |||
| params[i].character = 'S'; | |||
| params[i].type = JackDriverParamBool; | |||
| params[i].value.i = FALSE; | |||
| strcpy (params[i].short_desc, "Try 16-bit samples before 32-bit"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "input-latency"); | |||
| params[i].character = 'I'; | |||
| params[i].type = JackDriverParamUInt; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, "Extra input latency (frames)"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "output-latency"); | |||
| params[i].character = 'O'; | |||
| params[i].type = JackDriverParamUInt; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, "Extra output latency (frames)"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "midi-driver"); | |||
| params[i].character = 'X'; | |||
| params[i].type = JackDriverParamString; | |||
| strcpy (params[i].value.str, "none"); | |||
| strcpy (params[i].short_desc, "ALSA MIDI driver name (seq|raw)"); | |||
| strcpy (params[i].long_desc, | |||
| "ALSA MIDI driver:\n" | |||
| " none - no MIDI driver\n" | |||
| " seq - ALSA Sequencer driver\n" | |||
| " raw - ALSA RawMIDI driver\n"); | |||
| params[i].constraint = get_midi_driver_constraint(); | |||
| desc->params = params; | |||
| return desc; | |||
| } | |||
| case 'D': | |||
| playback = TRUE; | |||
| capture = TRUE; | |||
| break; | |||
| SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params) | |||
| { | |||
| jack_nframes_t srate = 48000; | |||
| jack_nframes_t frames_per_interrupt = 1024; | |||
| unsigned long user_nperiods = 2; | |||
| const char *playback_pcm_name = "hw:0"; | |||
| const char *capture_pcm_name = "hw:0"; | |||
| int hw_monitoring = FALSE; | |||
| int hw_metering = FALSE; | |||
| int capture = FALSE; | |||
| int playback = FALSE; | |||
| int soft_mode = FALSE; | |||
| int monitor = FALSE; | |||
| DitherAlgorithm dither = None; | |||
| int user_capture_nchnls = 0; | |||
| int user_playback_nchnls = 0; | |||
| int shorts_first = FALSE; | |||
| jack_nframes_t systemic_input_latency = 0; | |||
| jack_nframes_t systemic_output_latency = 0; | |||
| const JSList * node; | |||
| const jack_driver_param_t * param; | |||
| const char *midi_driver = "none"; | |||
| for (node = params; node; node = jack_slist_next (node)) { | |||
| param = (const jack_driver_param_t *) node->data; | |||
| switch (param->character) { | |||
| case 'C': | |||
| capture = TRUE; | |||
| if (strcmp (param->value.str, "none") != 0) { | |||
| capture_pcm_name = strdup (param->value.str); | |||
| jack_log("capture device %s", capture_pcm_name); | |||
| } | |||
| break; | |||
| case 'd': | |||
| case 'P': | |||
| playback = TRUE; | |||
| if (strcmp (param->value.str, "none") != 0) { | |||
| playback_pcm_name = strdup (param->value.str); | |||
| capture_pcm_name = strdup (param->value.str); | |||
| jack_log("playback device %s", playback_pcm_name); | |||
| jack_log("capture device %s", capture_pcm_name); | |||
| break; | |||
| } | |||
| break; | |||
| case 'H': | |||
| hw_monitoring = param->value.i; | |||
| break; | |||
| case 'D': | |||
| playback = TRUE; | |||
| capture = TRUE; | |||
| break; | |||
| case 'm': | |||
| monitor = param->value.i; | |||
| break; | |||
| case 'd': | |||
| playback_pcm_name = strdup (param->value.str); | |||
| capture_pcm_name = strdup (param->value.str); | |||
| jack_log("playback device %s", playback_pcm_name); | |||
| jack_log("capture device %s", capture_pcm_name); | |||
| break; | |||
| case 'M': | |||
| hw_metering = param->value.i; | |||
| break; | |||
| case 'H': | |||
| hw_monitoring = param->value.i; | |||
| break; | |||
| case 'r': | |||
| srate = param->value.ui; | |||
| jack_log("apparent rate = %d", srate); | |||
| break; | |||
| case 'm': | |||
| monitor = param->value.i; | |||
| break; | |||
| case 'p': | |||
| frames_per_interrupt = param->value.ui; | |||
| jack_log("frames per period = %d", frames_per_interrupt); | |||
| break; | |||
| case 'M': | |||
| hw_metering = param->value.i; | |||
| break; | |||
| case 'n': | |||
| user_nperiods = param->value.ui; | |||
| if (user_nperiods < 2) /* enforce minimum value */ | |||
| user_nperiods = 2; | |||
| break; | |||
| case 'r': | |||
| srate = param->value.ui; | |||
| jack_log("apparent rate = %d", srate); | |||
| break; | |||
| case 's': | |||
| soft_mode = param->value.i; | |||
| break; | |||
| case 'p': | |||
| frames_per_interrupt = param->value.ui; | |||
| jack_log("frames per period = %d", frames_per_interrupt); | |||
| break; | |||
| case 'z': | |||
| if (dither_opt (param->value.c, &dither)) { | |||
| return NULL; | |||
| } | |||
| break; | |||
| case 'n': | |||
| user_nperiods = param->value.ui; | |||
| if (user_nperiods < 2) /* enforce minimum value */ | |||
| user_nperiods = 2; | |||
| break; | |||
| case 'i': | |||
| user_capture_nchnls = param->value.ui; | |||
| break; | |||
| case 's': | |||
| soft_mode = param->value.i; | |||
| break; | |||
| case 'o': | |||
| user_playback_nchnls = param->value.ui; | |||
| break; | |||
| case 'z': | |||
| if (dither_opt (param->value.c, &dither)) { | |||
| return NULL; | |||
| } | |||
| break; | |||
| case 'S': | |||
| shorts_first = param->value.i; | |||
| break; | |||
| case 'i': | |||
| user_capture_nchnls = param->value.ui; | |||
| break; | |||
| case 'I': | |||
| systemic_input_latency = param->value.ui; | |||
| break; | |||
| case 'o': | |||
| user_playback_nchnls = param->value.ui; | |||
| break; | |||
| case 'O': | |||
| systemic_output_latency = param->value.ui; | |||
| break; | |||
| case 'S': | |||
| shorts_first = param->value.i; | |||
| break; | |||
| case 'X': | |||
| midi_driver = strdup(param->value.str); | |||
| break; | |||
| } | |||
| } | |||
| case 'I': | |||
| systemic_input_latency = param->value.ui; | |||
| break; | |||
| /* duplex is the default */ | |||
| if (!capture && !playback) { | |||
| capture = TRUE; | |||
| playback = TRUE; | |||
| } | |||
| case 'O': | |||
| systemic_output_latency = param->value.ui; | |||
| break; | |||
| Jack::JackAlsaDriver* alsa_driver = new Jack::JackAlsaDriver("system", "alsa_pcm", engine, table); | |||
| Jack::JackDriverClientInterface* threaded_driver = new Jack::JackThreadedDriver(alsa_driver); | |||
| // Special open for ALSA driver... | |||
| if (alsa_driver->Open(frames_per_interrupt, user_nperiods, srate, hw_monitoring, hw_metering, capture, playback, dither, soft_mode, monitor, | |||
| user_capture_nchnls, user_playback_nchnls, shorts_first, capture_pcm_name, playback_pcm_name, | |||
| systemic_input_latency, systemic_output_latency, midi_driver) == 0) { | |||
| return threaded_driver; | |||
| } else { | |||
| delete threaded_driver; // Delete the decorated driver | |||
| return NULL; | |||
| case 'X': | |||
| midi_driver = strdup(param->value.str); | |||
| break; | |||
| } | |||
| } | |||
| /* duplex is the default */ | |||
| if (!capture && !playback) { | |||
| capture = TRUE; | |||
| playback = TRUE; | |||
| } | |||
| Jack::JackAlsaDriver* alsa_driver = new Jack::JackAlsaDriver("system", "alsa_pcm", engine, table); | |||
| Jack::JackDriverClientInterface* threaded_driver = new Jack::JackThreadedDriver(alsa_driver); | |||
| // Special open for ALSA driver... | |||
| if (alsa_driver->Open(frames_per_interrupt, user_nperiods, srate, hw_monitoring, hw_metering, capture, playback, dither, soft_mode, monitor, | |||
| user_capture_nchnls, user_playback_nchnls, shorts_first, capture_pcm_name, playback_pcm_name, | |||
| systemic_input_latency, systemic_output_latency, midi_driver) == 0) { | |||
| return threaded_driver; | |||
| } else { | |||
| delete threaded_driver; // Delete the decorated driver | |||
| return NULL; | |||
| } | |||
| } | |||
| #ifdef __cplusplus | |||
| } | |||
| #endif | |||
| @@ -51,7 +51,17 @@ static inline unsigned long get_cycles(void) | |||
| return (((unsigned long)hi)<<32) | ((unsigned long)lo); | |||
| } | |||
| #endif | |||
| #endif /* __x86_64__ */ | |||
| #ifdef __sparc_v9__ | |||
| /* rd is V9 only */ | |||
| static inline unsigned long long get_cycles(void) | |||
| { | |||
| unsigned long long res; | |||
| __asm__ __volatile__("rd %%tick, %0" : "=r"(res)); | |||
| return res; | |||
| } | |||
| #endif /* __sparc_v9__ */ | |||
| #ifdef __PPC__ | |||
| @@ -82,7 +92,7 @@ static inline cycles_t get_cycles(void) | |||
| return ret; | |||
| } | |||
| #endif | |||
| #endif /* __PPC__ */ | |||
| #ifdef __i386__ | |||
| @@ -101,10 +111,26 @@ static inline cycles_t get_cycles (void) | |||
| return ret; | |||
| } | |||
| #endif | |||
| #endif /* __i386__ */ | |||
| /* everything else but x86, amd64, sparcv9 or ppc */ | |||
| #if !defined (__PPC__) && !defined (__x86_64__) && !defined (__i386__) && !defined (__sparc_v9__) | |||
| #warning No suitable get_cycles() implementation. Returning 0 instead | |||
| typedef unsigned long long cycles_t; | |||
| static inline cycles_t get_cycles(void) | |||
| { | |||
| return 0; | |||
| } | |||
| #endif /* everything else but x86, amd64, sparcv9 or ppc */ | |||
| #endif /* __linux__ */ | |||
| /* everything else but x86, amd64 or ppc */ | |||
| #if !defined (__PPC__) && !defined (__x86_64__) && !defined (__i386__) | |||
| #if defined(__FreeBSD_kernel__) | |||
| #warning No suitable get_cycles() implementation. Returning 0 instead | |||
| @@ -115,8 +141,7 @@ static inline cycles_t get_cycles(void) | |||
| return 0; | |||
| } | |||
| #endif | |||
| #endif /* __FreeBSD_kernel__ */ | |||
| #endif | |||
| #endif /* __jack_cycles_h__ */ | |||
| @@ -338,6 +338,7 @@ JackFFADODriver::ffado_driver_new (const char *name, | |||
| driver->device_options.verbose = params->verbose_level; | |||
| driver->capture_frame_latency = params->capture_frame_latency; | |||
| driver->playback_frame_latency = params->playback_frame_latency; | |||
| driver->device_options.snoop_mode = params->snoop_mode; | |||
| debugPrint(DEBUG_LEVEL_STARTUP, " Driver compiled on %s %s", __DATE__, __TIME__); | |||
| debugPrint(DEBUG_LEVEL_STARTUP, " Created driver %s", name); | |||
| @@ -681,7 +682,7 @@ int JackFFADODriver::Read() | |||
| } | |||
| if (nframes != fEngineControl->fBufferSize) | |||
| jack_log("JackFFADODriver::Read nframes = %ld", nframes); | |||
| jack_log("JackFFADODriver::Read warning nframes = %ld", nframes); | |||
| // Has to be done before read | |||
| JackDriver::CycleIncTime(); | |||
| @@ -753,7 +754,7 @@ extern "C" | |||
| strcpy (desc->name, "firewire"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 | |||
| strcpy(desc->desc, "Linux FFADO API based audio backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 | |||
| desc->nparams = 12; | |||
| desc->nparams = 13; | |||
| params = (jack_driver_param_desc_t *)calloc (desc->nparams, sizeof (jack_driver_param_desc_t)); | |||
| desc->params = params; | |||
| @@ -854,6 +855,14 @@ extern "C" | |||
| strcpy (params[i].short_desc, "libffado verbose level"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| i++; | |||
| strcpy (params[i].name, "snoop"); | |||
| params[i].character = 'X'; | |||
| params[i].type = JackDriverParamBool; | |||
| params[i].value.i = 0; | |||
| strcpy (params[i].short_desc, "Snoop firewire traffic"); | |||
| strcpy (params[i].long_desc, params[i].short_desc); | |||
| return desc; | |||
| } | |||
| @@ -863,7 +872,7 @@ extern "C" | |||
| ffado_jack_settings_t cmlparams; | |||
| char *device_name="hw:0"; | |||
| char *device_name=(char*)"hw:0"; | |||
| cmlparams.period_size_set = 0; | |||
| cmlparams.sample_rate_set = 0; | |||
| @@ -919,7 +928,7 @@ extern "C" | |||
| cmlparams.slave_mode = param->value.ui; | |||
| break; | |||
| case 'X': | |||
| cmlparams.snoop_mode = param->value.ui; | |||
| cmlparams.snoop_mode = param->value.i; | |||
| break; | |||
| case 'v': | |||
| cmlparams.verbose_level = param->value.ui; | |||
| @@ -872,7 +872,7 @@ int JackFreebobDriver::Read() | |||
| } | |||
| if (nframes != fEngineControl->fBufferSize) | |||
| jack_log("JackFreebobDriver::Read nframes = %ld", nframes); | |||
| jack_log("JackFreebobDriver::Read warning nframes = %ld", nframes); | |||
| // Has to be done before read | |||
| JackDriver::CycleIncTime(); | |||
| @@ -7,7 +7,7 @@ | |||
| <key>CFBundleExecutable</key> | |||
| <string>Jackservermp</string> | |||
| <key>CFBundleGetInfoString</key> | |||
| <string>Jackdmp 1.9.6, @03-10 Paul Davis, Grame</string> | |||
| <string>Jackdmp 1.9.7, @03-10 Paul Davis, Grame</string> | |||
| <key>CFBundleIdentifier</key> | |||
| <string>com.grame.Jackmp</string> | |||
| <key>CFBundleInfoDictionaryVersion</key> | |||
| @@ -19,6 +19,6 @@ | |||
| <key>CFBundleSignature</key> | |||
| <string>????</string> | |||
| <key>CFBundleVersion</key> | |||
| <string>1.9.6</string> | |||
| <string>1.9.7</string> | |||
| </dict> | |||
| </plist> | |||
| @@ -194,6 +194,22 @@ OSStatus JackCoreAudioDriver::Render(void *inRefCon, | |||
| driver->fActionFags = ioActionFlags; | |||
| driver->fCurrentTime = (AudioTimeStamp *)inTimeStamp; | |||
| driver->fDriverOutputData = ioData; | |||
| // Setup threadded based log function once... | |||
| if (set_threaded_log_function()) { | |||
| jack_log("set_threaded_log_function"); | |||
| JackMachThread::GetParams(pthread_self(), &driver->fEngineControl->fPeriod, &driver->fEngineControl->fComputation, &driver->fEngineControl->fConstraint); | |||
| if (driver->fComputationGrain > 0) { | |||
| jack_log("JackCoreAudioDriver::Render : RT thread computation setup to %d percent of period", int(driver->fComputationGrain * 100)); | |||
| driver->fEngineControl->fComputation = driver->fEngineControl->fPeriod * driver->fComputationGrain; | |||
| } | |||
| // Signal waiting start function... | |||
| driver->fState = true; | |||
| } | |||
| driver->CycleTakeBeginTime(); | |||
| return driver->Process(); | |||
| } | |||
| @@ -221,33 +237,6 @@ int JackCoreAudioDriver::Write() | |||
| return 0; | |||
| } | |||
| // Will run only once | |||
| OSStatus JackCoreAudioDriver::MeasureCallback(AudioDeviceID inDevice, | |||
| const AudioTimeStamp* inNow, | |||
| const AudioBufferList* inInputData, | |||
| const AudioTimeStamp* inInputTime, | |||
| AudioBufferList* outOutputData, | |||
| const AudioTimeStamp* inOutputTime, | |||
| void* inClientData) | |||
| { | |||
| JackCoreAudioDriver* driver = (JackCoreAudioDriver*)inClientData; | |||
| AudioDeviceStop(driver->fDeviceID, MeasureCallback); | |||
| jack_log("JackCoreAudioDriver::MeasureCallback called"); | |||
| JackMachThread::GetParams(pthread_self(), &driver->fEngineControl->fPeriod, &driver->fEngineControl->fComputation, &driver->fEngineControl->fConstraint); | |||
| if (driver->fComputationGrain > 0) { | |||
| jack_log("JackCoreAudioDriver::MeasureCallback : RT thread computation setup to %d percent of period", int(driver->fComputationGrain * 100)); | |||
| driver->fEngineControl->fComputation = driver->fEngineControl->fPeriod * driver->fComputationGrain; | |||
| } | |||
| // Signal waiting start function... | |||
| driver->fState = true; | |||
| // Setup threadded based log function | |||
| set_threaded_log_function(); | |||
| return noErr; | |||
| } | |||
| OSStatus JackCoreAudioDriver::SRNotificationCallback(AudioDeviceID inDevice, | |||
| UInt32 inChannel, | |||
| @@ -1377,7 +1366,7 @@ int JackCoreAudioDriver::SetupBuffers(int inchannels) | |||
| // Prepare buffers | |||
| fJackInputData = (AudioBufferList*)malloc(sizeof(UInt32) + inchannels * sizeof(AudioBuffer)); | |||
| fJackInputData->mNumberBuffers = inchannels; | |||
| for (int i = 0; i < fCaptureChannels; i++) { | |||
| for (int i = 0; i < inchannels; i++) { | |||
| fJackInputData->mBuffers[i].mNumberChannels = 1; | |||
| fJackInputData->mBuffers[i].mDataByteSize = fEngineControl->fBufferSize * sizeof(float); | |||
| } | |||
| @@ -1489,11 +1478,6 @@ int JackCoreAudioDriver::Open(jack_nframes_t buffer_size, | |||
| char playback_driver_name[256]; | |||
| // Keep initial state | |||
| fCapturing = capturing; | |||
| fPlaying = playing; | |||
| fInChannels = inchannels; | |||
| fOutChannels = outchannels; | |||
| fMonitor = monitor; | |||
| strcpy(fCaptureUID, capture_driver_uid); | |||
| strcpy(fPlaybackUID, playback_driver_uid); | |||
| fCaptureLatency = capture_latency; | |||
| @@ -1682,27 +1666,10 @@ int JackCoreAudioDriver::Start() | |||
| { | |||
| jack_log("JackCoreAudioDriver::Start"); | |||
| JackAudioDriver::Start(); | |||
| /* | |||
| #ifdef MAC_OS_X_VERSION_10_5 | |||
| OSStatus err = AudioDeviceCreateIOProcID(fDeviceID, MeasureCallback, this, &fMesureCallbackID); | |||
| #else | |||
| OSStatus err = AudioDeviceAddIOProc(fDeviceID, MeasureCallback, this); | |||
| #endif | |||
| */ | |||
| OSStatus err = AudioDeviceAddIOProc(fDeviceID, MeasureCallback, this); | |||
| if (err != noErr) | |||
| return -1; | |||
| err = AudioOutputUnitStart(fAUHAL); | |||
| OSStatus err = AudioOutputUnitStart(fAUHAL); | |||
| if (err != noErr) | |||
| return -1; | |||
| if ((err = AudioDeviceStart(fDeviceID, MeasureCallback)) != noErr) { | |||
| jack_error("Cannot start MeasureCallback"); | |||
| printError(err); | |||
| return -1; | |||
| } | |||
| // Waiting for Measure callback to be called (= driver has started) | |||
| fState = false; | |||
| @@ -1724,15 +1691,6 @@ int JackCoreAudioDriver::Start() | |||
| int JackCoreAudioDriver::Stop() | |||
| { | |||
| jack_log("JackCoreAudioDriver::Stop"); | |||
| AudioDeviceStop(fDeviceID, MeasureCallback); | |||
| /* | |||
| #ifdef MAC_OS_X_VERSION_10_5 | |||
| AudioDeviceDestroyIOProcID(fDeviceID, fMesureCallbackID); | |||
| #else | |||
| AudioDeviceRemoveIOProc(fDeviceID, MeasureCallback); | |||
| #endif | |||
| */ | |||
| AudioDeviceRemoveIOProc(fDeviceID, MeasureCallback); | |||
| return (AudioOutputUnitStop(fAUHAL) == noErr) ? 0 : -1; | |||
| } | |||
| @@ -1983,7 +1941,7 @@ extern "C" | |||
| bool capture = false; | |||
| bool playback = false; | |||
| int chan_in = -1; // Default: if not explicitely set, then max possible will be used... | |||
| int chan_out = -1; // Default: ifà not explicitely set, then max possible will be used... | |||
| int chan_out = -1; // Default: if not explicitely set, then max possible will be used... | |||
| bool monitor = false; | |||
| const char* capture_driver_uid = ""; | |||
| const char* playback_driver_uid = ""; | |||
| @@ -68,17 +68,9 @@ class JackCoreAudioDriver : public JackAudioDriver | |||
| bool fState; | |||
| bool fHogged; | |||
| // Initial state | |||
| bool fCapturing; | |||
| bool fPlaying; | |||
| int fInChannels; | |||
| int fOutChannels; | |||
| char fCaptureUID[256]; | |||
| char fPlaybackUID[256]; | |||
| bool fMonitor; | |||
| float fIOUsage; | |||
| float fComputationGrain; | |||
| bool fClockDriftCompensate; | |||
| @@ -96,14 +88,6 @@ class JackCoreAudioDriver : public JackAudioDriver | |||
| UInt32 inNumberFrames, | |||
| AudioBufferList *ioData); | |||
| static OSStatus MeasureCallback(AudioDeviceID inDevice, | |||
| const AudioTimeStamp* inNow, | |||
| const AudioBufferList* inInputData, | |||
| const AudioTimeStamp* inInputTime, | |||
| AudioBufferList* outOutputData, | |||
| const AudioTimeStamp* inOutputTime, | |||
| void* inClientData); | |||
| static OSStatus DeviceNotificationCallback(AudioDeviceID inDevice, | |||
| UInt32 inChannel, | |||
| Boolean isInput, | |||
| @@ -0,0 +1,97 @@ | |||
| .TH ALSA_IO "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| \fBalsa_in\fR, \fBalsa_out\fR \- Jack clients that perform I/O with an alternate audio interface | |||
| .SH SYNOPSIS | |||
| \fBalsa_in\fR [\fIoptions\fR] | |||
| .br | |||
| \fBalsa_out\fR [\fIoptions\fR] | |||
| .SH DESCRIPTION | |||
| A JACK client that opens a specified audio interface (different to the | |||
| one used by the JACK server, if any) and moves audio data between its | |||
| JACK ports and the interface. alsa_in will provide data from the | |||
| interface (potentially for capture); alsa_out will deliver data to it | |||
| (for playback). | |||
| The audio interface used by alsa_in/alsa_out does not need to be | |||
| synchronized with JACK backend (or the hardware it might be using). | |||
| alsa_in/alsa_out tries to resample the output stream in an attempt to | |||
| compensate for drift between the two clocks. | |||
| As of jack-0.116.3 this works almost perfectly. It takes some time, to reach | |||
| absolute resample-rate stability. So give it some minutes (its intended to be | |||
| running permanently anyways) | |||
| .SH OPTIONS | |||
| .TP | |||
| \fB\-j \fI jack_client_name\fR | |||
| .br | |||
| Set Client Name. | |||
| .TP | |||
| \fB\-d \fI alsa_device\fR | |||
| .br | |||
| Use this Soundcard. | |||
| .TP | |||
| \fB\-v\fR | |||
| .br | |||
| Verbose, prints out resample coefficient and other parameters useful for debugging, every 500ms. | |||
| also reports soft xruns. | |||
| .TP | |||
| \fB\-i\fR | |||
| .br | |||
| Instrumentation. This logs the 4 important parameters of the samplerate control algorithm every 1ms. | |||
| You can pipe this into a file, and plot it. Should only be necessary, if it does not work as | |||
| expected, and we need to adjust some of the obscure parameters, to make it work. | |||
| Find me on irc.freenode.org #jack in order to set this up correctly. | |||
| .TP | |||
| \fB\-c \fI channels\fR | |||
| .br | |||
| Set Number of channels. | |||
| .TP | |||
| \fB\-r \fI sample_rate\fR | |||
| .br | |||
| Set sample_rate. The program resamples as necessary. | |||
| So you can connect a 44k1 jackd to a soundcard only supporting | |||
| 48k. (default is jack sample_rate) | |||
| .TP | |||
| \fB\-p \fI period_size\fR | |||
| .br | |||
| Set the period size. It is not related to the jackd period_size. | |||
| Sometimes it affects the quality of the delay measurements. | |||
| Setting this lower than the jackd period_size will only work, if you | |||
| use a higher number of periods. | |||
| .TP | |||
| \fB\-n \fI num_period\fR | |||
| .br | |||
| Set number of periods. See note for period_size. | |||
| .TP | |||
| \fB\-q \fI quality\fR | |||
| .br | |||
| Set the quality of the resampler from 0 to 4. can significanly reduce cpu usage. | |||
| .TP | |||
| \fB\-m \fI max_diff\fR | |||
| .br | |||
| The value when a soft xrun occurs. Basically the window, in which | |||
| the dma pointer may jitter. I don't think its necessary to play with this anymore. | |||
| .TP | |||
| \fB\-t \fI target_delay\fR | |||
| .br | |||
| The delay alsa_io should try to approach. Same as for max_diff. It will be setup based on \-p and \-n | |||
| which is generally sufficient. | |||
| .TP | |||
| \fB\-s \fI smooth_array_size\fR | |||
| .br | |||
| This parameter controls the size of the array used for smoothing the delay measurement. Its default is 256. | |||
| If you use a pretty low period size, you can lower the CPU usage a bit by decreasing this parameter. | |||
| However most CPU time is spent in the resampling so this will not be much. | |||
| .TP | |||
| \fB\-C \fI P Control Clamp\fR | |||
| .br | |||
| If you have a PCI card, then the default value (15) of this parameter is too high for \-p64 \-n2... Setting it to 5 should fix that. | |||
| Be aware that setting this parameter too low, lets the hf noise on the delay measurement come through onto the resamplerate, so this | |||
| might degrade the quality of the output. (but its a threshold value, and it has been chosen, to mask the noise of a USB card, | |||
| which has an amplitude which is 50 times higher than that of a PCI card, so 5 wont loose you any quality on a PCI card) | |||
| .SH AUTHOR | |||
| Torben Hohn | |||
| @@ -0,0 +1 @@ | |||
| .so man1/alsa_in.1 | |||
| @@ -0,0 +1,5 @@ | |||
| #!/bin/sh | |||
| for i in *.0 ; do | |||
| sed -e "s/!VERSION!/${1}/g" -e "s/!DATE!/`date '+%B %Y'`/g" < ${i} > ${i%%0}1 | |||
| done | |||
| @@ -0,0 +1,14 @@ | |||
| .TH JACK_BUFSIZE "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| jack_bufsize \- JACK toolkit client to change the JACK buffer size | |||
| .SH SYNOPSIS | |||
| .B jack_bufsize bufsize | |||
| .SH DESCRIPTION | |||
| .B jack_bufsize | |||
| jack_bufsize sets the size of the buffer (frames per period) used in JACK. | |||
| This change happens on-line (the JACK server and its clients do not need to be | |||
| restarted). | |||
| .br | |||
| When invoked without arguments, it prints the current bufsize, and exits. | |||
| @@ -0,0 +1,11 @@ | |||
| .TH JACK_CONNECT "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| \fBjack_connect\fR, \fBjack_disconnect\fR \- JACK toolkit clients for connecting & disconnecting ports | |||
| .SH SYNOPSIS | |||
| \fB jack_connect\fR [ \fI-s\fR | \fI--server servername\fR ] [\fI-h\fR | \fI--help\fR ] port1 port2 | |||
| \fB jack_disconnect\fR [ \fI-s\fR | \fI--server servername\fR ] [\fI-h\fR | \fI--help\fR ] port1 port2 | |||
| .SH DESCRIPTION | |||
| \fBjack_connect\fR connects the two named ports. \fBjack_connect\fR disconnects the two named ports. | |||
| .SH RETURNS | |||
| The exit status is zero if successful, 1 otherwise | |||
| @@ -0,0 +1 @@ | |||
| .so man1/jack_connect.1 | |||
| @@ -0,0 +1,16 @@ | |||
| .TH JACK_FREEWHEEL "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| jack_freewheel \- JACK toolkit client to control freewheeling mode | |||
| .SH SYNOPSIS | |||
| .B jack_freewheel [y|n] | |||
| .SH DESCRIPTION | |||
| .B jack_freewheel | |||
| Turns freewheeling mode on (y) or off (n). While in freewheeling mode, | |||
| the JACK server does not wait in between process() calls, and does not | |||
| read or write data from/to any audio interface. That results in the JACK graph | |||
| processing data as fast as possible. Freewheeling makes fast exports to | |||
| files possible. | |||
| .PP | |||
| There is no useful reason to use this tool other than testing. JACK | |||
| clients that use freewheeling will turn it on and off themselves. | |||
| @@ -0,0 +1,11 @@ | |||
| .TH JACK_IMPULSE_GRABBER "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| jack_impulse_grabber \- JACK toolkit client to grab an impulse (response) | |||
| .SH SYNOPSIS | |||
| \fBjack_impulse_grabber\fR \fB-d\fR \fIduration\fR [\fI-f\fR (C|gnuplot)] | |||
| .SH DESCRIPTION | |||
| \fBjack_impulse_grabber\fR is a JACK example client for collecting | |||
| impulses recordings from JACK ports. | |||
| @@ -0,0 +1,28 @@ | |||
| .TH JACK_LOAD "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| jack_load \- JACK toolkit client for loading in-process clients | |||
| .SH SYNOPSIS | |||
| \fBjack_load\fR [ \fI-i\fR initstring ] [ \fI-s\fR servername ] [\fI-w\fR ] client-name so-name [ initstring ] | |||
| .SH DESCRIPTION | |||
| \fBjack_load\fR is a JACK toolkit client. It loads the specified plugin and creates an in-process client. | |||
| .SH ARGUMENTS | |||
| .PP | |||
| The client-name must be a currently unused client name. | |||
| .PP | |||
| The so-name is the name of file that client code is stored in (typically, \fIclientname.so\fR) | |||
| .SH OPTIONS | |||
| .TP | |||
| \fB-i\fR, \fB--init\fR init-string | |||
| .br | |||
| initialization string passed to the in-process client. Note that this can also be specified as the last argument on the command line. | |||
| .TP | |||
| \fB-s\fR, \fB--server\fR servername | |||
| .br | |||
| Name of JACK server to connect to | |||
| .TP | |||
| \fB-w\fR, \fB--wait\fR | |||
| Wait for a signal (eg. from Ctrl-c) and then unload the client. | |||
| .SH AUTHOR | |||
| Jeremy Hall | |||
| @@ -0,0 +1,47 @@ | |||
| .TH JACK_LSP "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| jack_lsp \- JACK toolkit client to list informtion on ports | |||
| .SH SYNOPSIS | |||
| \fBjack_lsp\fR [ \fI-s\fR | \fI--server\fR servername ] [ \fI-AclLptvh\fR ] | |||
| .SH DESCRIPTION | |||
| \fBjack_lsp\fR lists all known ports associated with a JACK | |||
| server. It can also optionally list various kinds of information about each port. | |||
| .SH OPTIONS | |||
| .TP | |||
| \fB-s\fR, \fB--server\fR \fIservername\fR | |||
| .br | |||
| Connect to the jack server named \fIservername\fR | |||
| .TP | |||
| \fB-A\fR, \fB--aliases\fR | |||
| .br | |||
| List aliases for each port | |||
| .TP | |||
| \fB-c\fR, \fB--connections\fR | |||
| .br | |||
| List connections to/from each port | |||
| .TP | |||
| \fB-l\fR, \fB--latency\fR | |||
| .br | |||
| Display per-port latency in frames at each port | |||
| .TP | |||
| \fB-L\fR, \fI--latency\fR | |||
| .br | |||
| Display total latency in frames at each port | |||
| .TP | |||
| \fB-p\fR, \fB--properties\fR | |||
| .br | |||
| Display port properties. Output may include input|output, can-monitor, physical, terminal | |||
| .TP | |||
| \fB-t\fR, \fB--type\fR | |||
| .br | |||
| Display port type | |||
| .TP | |||
| \fB-h\fR, \fB--help\fR | |||
| .br | |||
| Display help/usage message | |||
| .TP | |||
| \fB-v\fR, \fB--version\fR | |||
| .br | |||
| Output version information and exit | |||
| @@ -0,0 +1,40 @@ | |||
| .TH JACK_METRO "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| jack_metro \- JACK toolkit metronome | |||
| .SH SYNOPSIS | |||
| \fBjack_metro\fR [ \fI-n\fR name ] [ \fI-f\fR hz ] [ \fI-D\fR msecs ] [\fI-a\fR % ] [ \fI-d\fR % ] \fI-b\fR bpm | |||
| .SH DESCRIPTION | |||
| \fBjack_metro\fR is a simple metronome for JACK. It generates a | |||
| synthetic "tick" sound for every beat. Note that is does \fBnot\fR | |||
| connect its output port by default - to hear the sound it makes you must | |||
| connect them using some other tool. | |||
| .SH OPTIONS | |||
| .TP | |||
| \fB-n\fR, \fB--name\fR | |||
| .br | |||
| Specify a name for this instance of the metronome. | |||
| .TP | |||
| \fB-f\fR, \fB--frequency\fR Hz | |||
| .br | |||
| Define the frequency of the "tick" in Hz. | |||
| .TP | |||
| \fB-D\fR, \fB--duration\fR msecs | |||
| .br | |||
| Define the duration of the "tick" in milliseconds. | |||
| .TP | |||
| \fB-a\fR, \fB--attack\fR %-age | |||
| .br | |||
| Define the duration of the attack phase of the "tick" as a percentage | |||
| of the duration. | |||
| .TP | |||
| \fB-d\fR, \fB--decay\fR %-age | |||
| .br | |||
| Define the duration of the decay phase of the "tick" as a percentage | |||
| of the duration. | |||
| .TP | |||
| \fB--b\fR, \fB--bpm\fR bpm | |||
| .br | |||
| Define the number of beats per minute. | |||
| .SH AUTHOR | |||
| Anthony Van Groningen | |||
| @@ -0,0 +1,18 @@ | |||
| .TH JACK_CONNECT "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| jack_monitor_client \- The JACK Audio Connection Kit example client | |||
| .SH SYNOPSIS | |||
| .B jack_monitor_client | |||
| client-name | |||
| .PP | |||
| The client-name must be the name of a existing client that monitoring is | |||
| to be enabled for. | |||
| .SH DESCRIPTION | |||
| .B jack_monitor_client | |||
| is an example client for the JACK Audio Connection Kit. It enables | |||
| monitoring for the specified client. | |||
| .SH AUTHOR | |||
| Jeremy Hall | |||
| .PP | |||
| This manpage was written by Robert Jordens <jordens@debian.org> for Debian. | |||
| @@ -0,0 +1,109 @@ | |||
| .TH JACK_NETSOURCE "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| jack_netsource \- Netjack Master client for one slave | |||
| .SH SYNOPSIS | |||
| \fBjack_netsource\fR [ \fI-H\fR hostname ] [ \fIoptions\fR ] | |||
| .SH DESCRIPTION | |||
| \fBjack_netsource\fR The Master side of a netjack connection. Represents the slave jackd -dnet in the master jack graph. | |||
| Most connection parameters are configured via the netsource, and the slave will set itself up according to the commandline | |||
| option given to jack_netsource. | |||
| .br | |||
| Netjack allows low latency audio connections over general IP networks. When using celt for compression, it is even possible | |||
| to establish transatlantic links, with latencies not much over the actual ping time. | |||
| .br | |||
| But the main usecase is of course a LAN, where it can achieve one jack period of latency. | |||
| .SH OPTIONS | |||
| .TP | |||
| \fB-h\fR this help text | |||
| .TP | |||
| \fB-H\fR \fIslave host\fR | |||
| .br | |||
| Host name of the slave JACK | |||
| .TP | |||
| \fB-o\fR \fInum channels\fR | |||
| .br | |||
| Number of audio playback channels | |||
| .TP | |||
| \fB-i\fR \fInum channels\fR | |||
| .br | |||
| Number of audio capture channels | |||
| .TP | |||
| \fB-O\fR \fInum channels\fR | |||
| .br | |||
| Number of midi playback channels | |||
| .TP | |||
| \fB-I\fR \fInum channels\fR | |||
| .br | |||
| Number of midi capture channels | |||
| .TP | |||
| \fB-n\fR \fIperiods\fR | |||
| .br | |||
| Network latency in JACK periods | |||
| .TP | |||
| \fB-p\fR \fIport\fR | |||
| .br | |||
| UDP port that the slave is listening on | |||
| .TP | |||
| \fB-r\fR \fIreply port\fR | |||
| .br | |||
| UDP port that we are listening on | |||
| .TP | |||
| \fB-B\fR \fIbind port\fR | |||
| .br | |||
| reply port, for use in NAT environments | |||
| .TP | |||
| \fB-b\fR \fIbitdepth\fR | |||
| .br | |||
| Set transport to use 16bit or 8bit | |||
| .TP | |||
| \fB-c\fR \fIbytes\fR | |||
| .br | |||
| Use CELT encoding with <bytes> per period and channel | |||
| .TP | |||
| \fB-m\fR \fImtu\fR | |||
| .br | |||
| Assume this mtu for the link | |||
| .TP | |||
| \fB-R\fR \fIN\fR | |||
| .br | |||
| Redundancy: send out packets N times. | |||
| .TP | |||
| \fB-e\fR | |||
| .br | |||
| skip host-to-network endianness conversion | |||
| .TP | |||
| \fB-N\fR \fIjack name\fR | |||
| .br | |||
| Reports a different client name to jack | |||
| .TP | |||
| .TP | |||
| \fB-s\fR, \fB--server\fR \fIservername\fR | |||
| .br | |||
| Connect to the jack server named \fIservername\fR | |||
| .TP | |||
| \fB-h\fR, \fB--help\fR | |||
| .br | |||
| Display help/usage message | |||
| .TP | |||
| \fB-v\fR, \fB--version\fR | |||
| .br | |||
| Output version information and exit | |||
| .SH EXAMPLES | |||
| .PP | |||
| run a 4 audio channel bidirectional link with one period of latency and no midi channels. Audio data is flowing uncompressed over the wire: | |||
| .br | |||
| On \fIhostA\fR: | |||
| .IP | |||
| \fBjackd \-d alsa \fR | |||
| .br | |||
| \fBjack_netsource \-H hostB -n1 -i4 -o4 -I0 -O0 \fR | |||
| .PP | |||
| On \fIhostB\fR: | |||
| .IP | |||
| \fBjackd \-d net \fR | |||
| @@ -0,0 +1,9 @@ | |||
| .TH JACK_SAMPLERATE "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| jack_samplerate \- JACK toolkit client to print current samplerate | |||
| .SH SYNOPSIS | |||
| .B jack_samplerate | |||
| .SH DESCRIPTION | |||
| .B jack_samplerate prints the current samplerate, and exits. | |||
| @@ -0,0 +1,13 @@ | |||
| .TH JACK_SHOWTIME "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| jack_showtime \- The JACK Audio Connection Kit example client | |||
| .SH SYNOPSIS | |||
| .B jack_showtime | |||
| .SH DESCRIPTION | |||
| .B jack_showtime | |||
| prints the current timebase information to stdout | |||
| .SH AUTHOR | |||
| Paul Davis | |||
| .PP | |||
| This manpage was written by Stefan Schwandter <swan@debian.org> | |||
| @@ -0,0 +1,20 @@ | |||
| .TH JACK_CONNECT "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| jack_simple_client \- The JACK Audio Connection Kit example client | |||
| .SH SYNOPSYS | |||
| .B jack_simple_client | |||
| client-name | |||
| .PP | |||
| The client-name must be a yet unused client name. | |||
| .SH DESCRIPTION | |||
| .B jack_simple_client | |||
| is an example client for the JACK Audio Connection Kit. It creates two | |||
| ports (client-name:input and client-name:output) that pass the data | |||
| unmodified. | |||
| .SH EXAMPLE | |||
| jack_simple_client in_process_test | |||
| .SH AUTHOR | |||
| Jeremy Hall | |||
| .PP | |||
| This manpage was written by Robert Jordens <jordens@debian.org> for Debian. | |||
| @@ -0,0 +1,13 @@ | |||
| .TH JACK_TRANSPORT "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| jack_transport \- JACK toolkit client for transport control | |||
| .SH SYNOPSIS | |||
| .B jack_transport | |||
| .SH DESCRIPTION | |||
| .B jack_transport | |||
| is a toolkit client for the JACK Audio Connection Kit. It provides command-line | |||
| control over the JACK transport system. Type help at jack_transport's | |||
| command prompt to see the available commands. | |||
| .SH AUTHOR | |||
| Jeremy Hall | |||
| @@ -0,0 +1,19 @@ | |||
| .TH JACK_UNLOAD "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| jack_unload \- The JACK Audio Connection Kit example client | |||
| .SH SYNOPSIS | |||
| .B jack_unload | |||
| client-name | |||
| .PP | |||
| The client-name must be the name of a loaded client that can be unloaded. | |||
| .SH DESCRIPTION | |||
| .B jack_unload | |||
| is the counterpart to | |||
| .B jack_load | |||
| and unloads the specified client. | |||
| .SH EXAMPLE | |||
| .B jack_unload in_process_test | |||
| .SH AUTHOR | |||
| Jeremy Hall | |||
| .PP | |||
| This manpage was written by Robert Jordens <jordens@debian.org> for Debian. | |||
| @@ -0,0 +1,41 @@ | |||
| .TH JACK_WAIT "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| jack_wait \- JACK toolkit client to check and wait for existence/exit of jackd. | |||
| .SH SYNOPSIS | |||
| \fBjack_wait\fR [ \fI-s\fR | \fI--server\fR servername ] [ \fI-t\fR | \fI--timeout\fR timeout_seconds [ \fI-cqwhv\fR ] | |||
| .SH DESCRIPTION | |||
| \fBjack_wait\fR When invoked with \fI-c\fR it only checks for the existence of a jack server. When invoked with \fI-w\fR the | |||
| program will wait for a jackd to be available. | |||
| The \fI-q\fR makes it wait for the jackd to exit. | |||
| .SH OPTIONS | |||
| .TP | |||
| \fB-w\fR, \fB--wait\fR | |||
| .br | |||
| Wait for jackd to be available. | |||
| .TP | |||
| \fB-q\fR, \fB--quit\fR | |||
| .br | |||
| Wait for jackd quit. | |||
| .TP | |||
| \fB-c\fR, \fB--check\fR | |||
| .br | |||
| Only check for existence of jackd, and exit. | |||
| .TP | |||
| \fB-s\fR, \fB--server\fR \fIservername\fR | |||
| .br | |||
| Connect to the jack server named \fIservername\fR | |||
| .TP | |||
| \fB-t\fR, \fB--timeout\fR \fItimeout_seconds\fR | |||
| .br | |||
| Only wait \fItimeout_seconds\fR. | |||
| .TP | |||
| \fB-h\fR, \fB--help\fR | |||
| .br | |||
| Display help/usage message | |||
| .TP | |||
| \fB-v\fR, \fB--version\fR | |||
| .br | |||
| Output version information and exit | |||
| @@ -0,0 +1,547 @@ | |||
| .TH "JACKD" "1" "!VERSION!" "!DATE!" "" | |||
| .SH "NAME" | |||
| jackd \- JACK Audio Connection Kit sound server | |||
| .SH "SYNOPSIS" | |||
| \fBjackd\fR [\fIoptions\fR] \fB\-d\fI backend \fR | |||
| [\fIbackend\-parameters\fR] | |||
| .br | |||
| \fBjackd \-\-help\fR | |||
| .SH "DESCRIPTION" | |||
| \fBjackd\fR is the JACK audio server daemon, a low\-latency audio | |||
| server. Originally written for the | |||
| GNU/Linux operating system, it also supports Mac OS X and various Unix | |||
| platforms. JACK can connect a number of different client applications | |||
| to an audio device and also to each other. Most clients are external, | |||
| running in their own processes as normal applications. JACK also | |||
| supports internal clients, which run within the \fBjackd\fR process | |||
| using a loadable "plugin" interface. | |||
| JACK differs from other audio servers in being designed from the | |||
| ground up for professional audio work. It focuses on two key areas: | |||
| synchronous execution of all clients, and low latency operation. | |||
| For the latest JACK information, please consult the web site, | |||
| <\fBhttp://www.jackaudio.org\fR>. | |||
| .SH "OPTIONS" | |||
| .TP | |||
| \fB\-d, \-\-driver \fIbackend\fR [\fIbackend\-parameters\fR ] | |||
| .br | |||
| Select the audio interface backend. The current list of supported | |||
| backends is: \fBalsa\fR, \fBcoreaudio\fR, \fBdummy\fR, \fBfreebob\fR, | |||
| \fBoss\fR \fBsun\fR and \fBportaudio\fR. They are not all available | |||
| on all platforms. All \fIbackend\-parameters\fR are optional. | |||
| .TP | |||
| \fB\-h, \-\-help\fR | |||
| .br | |||
| Print a brief usage message describing the main \fBjackd\fR options. | |||
| These do not include \fIbackend\-parameters\fR, which are listed using | |||
| the \fB\-\-help\fR option for each specific backend. Examples below | |||
| show how to list them. | |||
| .TP | |||
| \fB\-m, \-\-no\-mlock\fR | |||
| Do not attempt to lock memory, even if \fB\-\-realtime\fR. | |||
| .TP | |||
| \fB\-n, \-\-name\fR \fIserver\-name\fR | |||
| Name this \fBjackd\fR instance \fIserver\-name\fR. If unspecified, | |||
| this name comes from the \fB$JACK_DEFAULT_SERVER\fR environment | |||
| variable. It will be "default" if that is not defined. | |||
| .TP | |||
| \fB\-p, \-\-port\-max \fI n\fR | |||
| Set the maximum number of ports the JACK server can manage. | |||
| The default value is 256. | |||
| .TP | |||
| \fB\-\-replace-registry\fR | |||
| .br | |||
| Remove the shared memory registry used by all JACK server instances | |||
| before startup. This should rarely be used, and is intended only | |||
| for occasions when the structure of this registry changes in ways | |||
| that are incompatible across JACK versions (which is rare). | |||
| .TP | |||
| \fB\-R, \-\-realtime\fR | |||
| .br | |||
| Use realtime scheduling (default = true). This is needed for reliable low\-latency | |||
| performance. On many systems, it requires \fBjackd\fR to run with | |||
| special scheduler and memory allocation privileges, which may be | |||
| obtained in several ways. | |||
| .TP | |||
| \fB\-r, \-\-no-realtime\fR | |||
| .br | |||
| Do not use realtime scheduling. | |||
| .TP | |||
| \fB\-P, \-\-realtime\-priority \fIint\fR | |||
| When running \fB\-\-realtime\fR, set the scheduler priority to | |||
| \fIint\fR. | |||
| .TP | |||
| \fB\-\-silent\fR | |||
| Silence any output during operation. | |||
| .TP | |||
| \fB\-T, \-\-temporary\fR | |||
| Exit once all clients have closed their connections. | |||
| .TP | |||
| \fB\-t, \-\-timeout \fIint\fR | |||
| .br | |||
| Set client timeout limit in milliseconds. The default is 500 msec. | |||
| In realtime mode the client timeout must be smaller than the watchdog timeout (5000 msec). | |||
| .TP | |||
| \fB\-Z, \-\-nozombies\fR | |||
| .br | |||
| Prevent JACK from ever kicking out clients because they were too slow. | |||
| This cancels the effect any specified timeout value, but JACK and its clients are | |||
| still subject to the supervision of the watchdog thread or its equivalent. | |||
| .TP | |||
| \fB\-u, \-\-unlock\fR | |||
| .br | |||
| Unlock libraries GTK+, QT, FLTK, Wine. | |||
| .TP | |||
| \fB\-v, \-\-verbose\fR | |||
| Give verbose output. | |||
| .TP | |||
| \fB\-c, \-\-clocksource\fR (\fI c(ycle)\fR | \fI h(pet) \fR | \fI s(ystem) \fR) | |||
| Select a specific wall clock (Cycle Counter, HPET timer, System timer). | |||
| .TP | |||
| \fB\-V, \-\-version\fR | |||
| Print the current JACK version number and exit. | |||
| .SS ALSA BACKEND OPTIONS | |||
| .TP | |||
| \fB\-C, \-\-capture\fR [ \fIname\fR ] | |||
| Provide only capture ports, unless combined with \-D or \-P. Parameterally set | |||
| capture device name. | |||
| .TP | |||
| \fB\-d, \-\-device \fIname\fR | |||
| .br | |||
| The ALSA pcm device \fIname\fR to use. If none is specified, JACK will | |||
| use "hw:0", the first hardware card defined in \fB/etc/modules.conf\fR. | |||
| .TP | |||
| \fB\-z, \-\-dither [rectangular,triangular,shaped,none] | |||
| Set dithering mode. If \fBnone\fR or unspecified, dithering is off. | |||
| Only the first letter of the mode name is required. | |||
| .TP | |||
| \fB\-D, \-\-duplex\fR | |||
| Provide both capture and playback ports. Defaults to on unless only one | |||
| of \-P or \-C is specified. | |||
| .TP | |||
| \fB\-h, \-\-help\fR Print a brief usage message describing only the | |||
| \fBalsa\fR backend parameters. | |||
| .TP | |||
| \fB\-M, \-\-hwmeter\fR | |||
| .br | |||
| Enable hardware metering for devices that support it. Otherwise, use | |||
| software metering. | |||
| .TP | |||
| \fB\-H, \-\-hwmon\fR | |||
| .br | |||
| Enable hardware monitoring of capture ports. This is a method for | |||
| obtaining "zero latency" monitoring of audio input. It requires | |||
| support in hardware and from the underlying ALSA device driver. | |||
| When enabled, requests to monitor capture ports will be satisfied by | |||
| creating a direct signal path between audio interface input and output | |||
| connectors, with no processing by the host computer at all. This | |||
| offers the lowest possible latency for the monitored signal. | |||
| Presently (March 2003), only the RME Hammerfall series and cards based | |||
| on the ICE1712 chipset (M\-Audio Delta series, Terratec, and others) | |||
| support \fB\-\-hwmon\fR. In the future, some consumer cards may also | |||
| be supported by modifying their mixer settings. | |||
| Without \fB\-\-hwmon\fR, port monitoring requires JACK to read audio | |||
| into system memory, then copy it back out to the hardware again, | |||
| imposing the basic JACK system latency determined by the | |||
| \fB\-\-period\fR and \fB\-\-nperiods\fR parameters. | |||
| .TP | |||
| \fB\-i, \-\-inchannels \fIint\fR | |||
| .br | |||
| Number of capture channels. Default is maximum supported by hardware. | |||
| .TP | |||
| \fB\-n, \-\-nperiods \fIint\fR | |||
| .br | |||
| Specify the number of periods of playback latency. In seconds, this | |||
| corresponds to \fB\-\-nperiods\fR times \fB\-\-period\fR divided by | |||
| \fB\-\-rate\fR. The default is 2, the minimum allowable. For most | |||
| devices, there is no need for any other value with the | |||
| \fB\-\-realtime\fR option. Without realtime privileges or with boards | |||
| providing unreliable interrupts (like ymfpci), a larger value may | |||
| yield fewer xruns. This can also help if the system is not tuned for | |||
| reliable realtime scheduling. | |||
| For most ALSA devices, the hardware buffer has exactly | |||
| \fB\-\-period\fR times \fB\-\-nperiods\fR frames. Some devices demand | |||
| a larger buffer. If so, JACK will use the smallest possible buffer | |||
| containing at least \fB\-\-nperiods\fR, but the playback latency does | |||
| not increase. | |||
| For USB audio devices it is recommended to use \fB\-n 3\fR. Firewire | |||
| devices supported by FFADO (formerly Freebob) are configured with | |||
| \fB\-n 3\fR by default. | |||
| .TP | |||
| \fB\-o, \-\-outchannels \fIint\fR | |||
| .br | |||
| Number of playback channels. Default is maximum supported by hardware. | |||
| .TP | |||
| \fB\-P, \-\-playback\fR [ \fIname\fR ] | |||
| Provide only playback ports, unless combined with \-D or \-C. Optionally set | |||
| playback device name. | |||
| .TP | |||
| \fB\-p, \-\-period \fIint\fR | |||
| .br | |||
| Specify the number of frames between JACK \fBprocess()\fR calls. This | |||
| value must be a power of 2, and the default is 1024. If you need low | |||
| latency, set \fB\-p\fR as low as you can go without seeing xruns. A larger | |||
| period size yields higher latency, but makes xruns less likely. The JACK | |||
| capture latency in seconds is \fB\-\-period\fR divided by \fB\-\-rate\fR. | |||
| .TP | |||
| \fB\-r, \-\-rate \fIint\fR | |||
| Specify the sample rate. The default is 48000. | |||
| .TP | |||
| \fB\-S, \-\-shorts | |||
| .br | |||
| Try to configure card for 16\-bit samples first, only trying 32\-bits if | |||
| unsuccessful. Default is to prefer 32\-bit samples. | |||
| .TP | |||
| \fB\-s, \-\-softmode\fR | |||
| .br | |||
| Ignore xruns reported by the ALSA driver. This makes JACK less likely | |||
| to disconnect unresponsive ports when running without \fB\-\-realtime\fR. | |||
| .TP | |||
| \fB\-X, \-\-midi \fR[\fIseq\fR|\fIraw\fR] | |||
| .br | |||
| Specify which ALSA MIDI system to provide access to. Using \fBraw\fR | |||
| will provide a set of JACK MIDI ports that correspond to each raw ALSA | |||
| device on the machine. Using \fBseq\fR will provide a set of JACK MIDI | |||
| ports that correspond to each ALSA "sequencer" client (which includes | |||
| each hardware MIDI port on the machine). \fBraw\fR provides slightly | |||
| better performance but does not permit JACK MIDI communication with | |||
| software written to use the ALSA "sequencer" API. | |||
| .SS COREAUDIO BACKEND PARAMETERS | |||
| .TP | |||
| \fB\-c \-\-channel\fR | |||
| Maximum number of channels (default: 2) | |||
| .TP | |||
| \fB\-i \-\-channelin\fR | |||
| Maximum number of input channels (default: 2) | |||
| .TP | |||
| \fB\-o \-\-channelout\fR | |||
| Maximum number of output channels (default: 2) | |||
| .TP | |||
| \fB\-C \-\-capture\fR | |||
| Whether or not to capture (default: true) | |||
| .TP | |||
| \fB\-P \-\-playback\fR | |||
| Whether or not to playback (default: true) | |||
| .TP | |||
| \fB\-D \-\-duplex\fR | |||
| Capture and playback (default: true) | |||
| .TP | |||
| \fB\-r \-\-rate\fR | |||
| Sample rate (default: 44100) | |||
| .TP | |||
| \fB\-p \-\-period\fR | |||
| Frames per period (default: 128). Must be a power of 2. | |||
| .TP | |||
| \fB\-n \-\-name\fR | |||
| Driver name (default: none) | |||
| .TP | |||
| \fB\-I \-\-id\fR | |||
| Audio Device ID (default: 0) | |||
| .SS DUMMY BACKEND PARAMETERS | |||
| .TP | |||
| \fB\-C, \-\-capture \fIint\fR | |||
| Specify number of capture ports. The default value is 2. | |||
| .TP | |||
| \fB\-P, \-\-playback \fIint\fR | |||
| Specify number of playback ports. The default value is 2. | |||
| .TP | |||
| \fB\-r, \-\-rate \fIint\fR | |||
| Specify sample rate. The default value is 48000. | |||
| .TP | |||
| \fB\-p, \-\-period \fIint\fR | |||
| Specify the number of frames between JACK \fBprocess()\fR calls. This | |||
| value must be a power of 2, and the default is 1024. If you need low | |||
| latency, set \fB\-p\fR as low as you can go without seeing xruns. A larger | |||
| period size yields higher latency, but makes xruns less likely. The JACK | |||
| capture latency in seconds is \fB\-\-period\fR divided by \fB\-\-rate\fR. | |||
| .TP | |||
| \fB\-w, \-\-wait \fIint\fR | |||
| Specify number of usecs to wait between engine processes. | |||
| The default value is 21333. | |||
| .SS NET BACKEND PARAMETERS | |||
| .TP | |||
| \fB\-i, \-\-audio\-ins \fIint\fR | |||
| Number of capture channels (default: 2) | |||
| .TP | |||
| \fB\-o, \-\-audio\-outs \fIint\fR | |||
| Number of playback channels (default: 2) | |||
| .TP | |||
| \fB\-I, \-\-midi\-ins \fIint\fR | |||
| Number of midi capture channels (default: 1) | |||
| .TP | |||
| \fB\-O, \-\-midi\-outs \fIint\fR | |||
| Number of midi playback channels (default: 1) | |||
| .TP | |||
| \fB\-r, \-\-rate \fIint\fR | |||
| Sample rate (default: 48000) | |||
| .TP | |||
| \fB\-p, \-\-period \fIint\fR | |||
| Frames per period (default: 1024) | |||
| .TP | |||
| \fB\-n, \-\-num\-periods \fIint\fR | |||
| Network latency setting in no. of periods (default: 5) | |||
| .TP | |||
| \fB\-l, \-\-listen\-port \fIint\fR | |||
| The socket port we are listening on for sync packets (default: 3000) | |||
| .TP | |||
| \fB\-f, \-\-factor \fIint\fR | |||
| Factor for sample rate reduction (default: 1) | |||
| .TP | |||
| \fB\-u, \-\-upstream\-factor \fIint\fR | |||
| Factor for sample rate reduction on the upstream (default: 0) | |||
| .TP | |||
| \fB\-c, \-\-celt \fIint\fR | |||
| sets celt encoding and number of kbits per channel (default: 0) | |||
| .TP | |||
| \fB\-b, \-\-bit\-depth \fIint\fR | |||
| Sample bit\-depth (0 for float, 8 for 8bit and 16 for 16bit) (default: 0) | |||
| .TP | |||
| \fB\-t, \-\-transport\-sync \fIint\fR | |||
| Whether to slave the transport to the master transport (default: true) | |||
| .TP | |||
| \fB\-a, \-\-autoconf \fIint\fR | |||
| Whether to use Autoconfig, or just start. (default: true) | |||
| .TP | |||
| \fB\-R, \-\-redundancy \fIint\fR | |||
| Send packets N times (default: 1) | |||
| .TP | |||
| \fB\-e, \-\-native\-endian \fIint\fR | |||
| Dont convert samples to network byte order. (default: false) | |||
| .TP | |||
| \fB\-J, \-\-jitterval \fIint\fR | |||
| attempted jitterbuffer microseconds on master (default: 0) | |||
| .TP | |||
| \fB\-D, \-\-always\-deadline \fIint\fR | |||
| always use deadline (default: false) | |||
| .SS OSS BACKEND PARAMETERS | |||
| .TP | |||
| \fB\-r, \-\-rate \fIint\fR | |||
| Specify the sample rate. The default is 48000. | |||
| .TP | |||
| \fB\-p, \-\-period \fIint\fR | |||
| Specify the number of frames between JACK \fBprocess()\fR calls. This | |||
| value must be a power of 2, and the default is 1024. If you need low | |||
| latency, set \fB\-p\fR as low as you can go without seeing xruns. A larger | |||
| period size yields higher latency, but makes xruns less likely. The JACK | |||
| capture latency in seconds is \fB\-\-period\fR divided by \fB\-\-rate\fR. | |||
| .TP | |||
| \fB\-n, \-\-nperiods \fIint\fR | |||
| Specify the number of periods in the hardware buffer. The default is | |||
| 2. The period size (\fB\-p\fR) times \fB\-\-nperiods\fR times four is | |||
| the JACK buffer size in bytes. The JACK output latency in seconds is | |||
| \fB\-\-nperiods\fR times \fB\-\-period\fR divided by \fB\-\-rate\fR. | |||
| .TP | |||
| \fB\-w, \-\-wordlength \fIint\fR | |||
| Specify the sample size in bits. The default is 16. | |||
| .TP | |||
| \fB\-i, \-\-inchannels \fIint\fR | |||
| Specify how many channels to capture (default: 2) | |||
| .TP | |||
| \fB\-o, \-\-outchannels \fIint\fR | |||
| Specify number of playback channels (default: 2) | |||
| .TP | |||
| \fB\-C, \-\-capture \fIdevice_file\fR | |||
| Specify input device for capture (default: /dev/dsp) | |||
| .TP | |||
| \fB\-P, \-\-playback \fIdevice_file\fR | |||
| Specify output device for playback (default: /dev/dsp) | |||
| .TP | |||
| \fB\-b, \-\-ignorehwbuf \fIboolean\fR | |||
| Specify, whether to ignore hardware period size (default: false) | |||
| .SS SUN BACKEND PARAMETERS | |||
| .TP | |||
| \fB\-r, \-\-rate \fIint\fR | |||
| Specify the sample rate. The default is 48000. | |||
| .TP | |||
| \fB\-p, \-\-period \fIint\fR | |||
| Specify the number of frames between JACK \fBprocess()\fR calls. This | |||
| value must be a power of 2, and the default is 1024. If you need low | |||
| latency, set \fB\-p\fR as low as you can go without seeing xruns. A larger | |||
| period size yields higher latency, but makes xruns less likely. The JACK | |||
| capture latency in seconds is \fB\-\-period\fR divided by \fB\-\-rate\fR. | |||
| .TP | |||
| \fB\-n, \-\-nperiods \fIint\fR | |||
| Specify the number of periods in the hardware buffer. The default is | |||
| 2. The period size (\fB\-p\fR) times \fB\-\-nperiods\fR times four | |||
| (assuming 2 channels 16-bit samples) is the JACK buffer size in bytes. | |||
| The JACK output latency in seconds is \fB\-\-nperiods\fR times | |||
| \fB\-\-period\fR divided by \fB\-\-rate\fR. | |||
| .TP | |||
| \fB\-w, \-\-wordlength \fIint\fR | |||
| Specify the sample size in bits. The default is 16. | |||
| .TP | |||
| \fB\-i, \-\-inchannels \fIint\fR | |||
| Specify how many channels to capture (default: 2) | |||
| .TP | |||
| \fB\-o, \-\-outchannels \fIint\fR | |||
| Specify number of playback channels (default: 2) | |||
| .TP | |||
| \fB\-C, \-\-capture \fIdevice_file\fR | |||
| Specify input device for capture (default: /dev/audio) | |||
| .TP | |||
| \fB\-P, \-\-playback \fIdevice_file\fR | |||
| Specify output device for playback (default: /dev/audio) | |||
| .TP | |||
| \fB\-b, \-\-ignorehwbuf \fIboolean\fR | |||
| Specify, whether to ignore hardware period size (default: false) | |||
| .SS PORTAUDIO BACKEND PARAMETERS | |||
| .TP | |||
| \fB\-c \-\-channel\fR | |||
| Maximum number of channels (default: all available hardware channels) | |||
| .TP | |||
| \fB\-i \-\-channelin\fR | |||
| Maximum number of input channels (default: all available hardware channels) | |||
| .TP | |||
| \fB\-o \-\-channelout\fR | |||
| Maximum number of output channels (default: all available hardware channels) | |||
| .TP | |||
| \fB\-C \-\-capture\fR | |||
| Whether or not to capture (default: true) | |||
| .TP | |||
| \fB\-P \-\-playback\fR | |||
| Whether or not to playback (default: true) | |||
| .TP | |||
| \fB\-D \-\-duplex\fR | |||
| Capture and playback (default: true) | |||
| .TP | |||
| \fB\-r \-\-rate\fR | |||
| Sample rate (default: 48000) | |||
| .TP | |||
| \fB\-p \-\-period\fR | |||
| Frames per period (default: 1024). Must be a power of 2. | |||
| .TP | |||
| \fB\-n \-\-name\fR | |||
| Driver name (default: none) | |||
| .TP | |||
| \fB\-z \-\-dither\fR | |||
| Dithering mode (default: none) | |||
| .SH "EXAMPLES" | |||
| .PP | |||
| Print usage message for the parameters specific to each backend. | |||
| .IP | |||
| \fBjackd \-d alsa \-\-help\fR | |||
| .br | |||
| \fBjackd \-d coreaudio \-\-help\fR | |||
| .br | |||
| \fBjackd \-d net \-\-help\fR | |||
| .br | |||
| \fBjackd \-d dummy \-\-help\fR | |||
| .br | |||
| \fBjackd \-d firewire \-\-help\fR | |||
| .br | |||
| \fBjackd \-d freebob \-\-help\fR | |||
| .br | |||
| \fBjackd \-d oss \-\-help\fR | |||
| .br | |||
| \fBjackd \-d sun \-\-help\fR | |||
| .br | |||
| \fBjackd \-d portaudio \-\-help\fR | |||
| .PP | |||
| Run the JACK daemon with realtime priority using the first ALSA | |||
| hardware card defined in \fB/etc/modules.conf\fR. | |||
| .IP | |||
| \fBjackstart \-\-realtime \-\-driver=alsa\fR | |||
| .PP | |||
| Run the JACK daemon with low latency giving verbose output, which can | |||
| be helpful for trouble\-shooting system latency problems. A | |||
| reasonably well\-tuned system with a good sound card and a | |||
| low\-latency kernel can handle these values reliably. Some can do | |||
| better. If you get xrun messages, try a larger buffer. Tuning a | |||
| system for low latency can be challenging. The JACK FAQ, | |||
| .I http://jackit.sourceforge.net/docs/faq.php\fR | |||
| has some useful suggestions. | |||
| .IP | |||
| \fBjackstart \-Rv \-d alsa \-p 128 \-n 2 \-r 44100\fR | |||
| .PP | |||
| Run \fBjackd\fR with realtime priority using the "sblive" ALSA device | |||
| defined in ~/.asoundrc. Apply shaped dithering to playback audio. | |||
| .IP | |||
| \fBjackd \-R \-d alsa \-d sblive \-\-dither=shaped\fR | |||
| .PP | |||
| Run \fBjackd\fR with no special privileges using the second ALSA | |||
| hardware card defined in \fB/etc/modules.conf\fR. Any xruns reported | |||
| by the ALSA backend will be ignored. The larger buffer helps reduce | |||
| data loss. Rectangular dithering will be used for playback. | |||
| .IP | |||
| \fBjackd \-d alsa \-d hw:1 \-p2048 \-n3 \-\-softmode \-zr\fR | |||
| .PP | |||
| Run \fBjackd\fR in full\-duplex mode using the ALSA hw:0,0 device for | |||
| playback and the hw:0,2 device for capture. | |||
| .IP | |||
| \fBjackd \-d alsa \-P hw:0,0 \-C hw:0,2\fR | |||
| .PP | |||
| Run \fBjackd\fR in playback\-only mode using the ALSA hw:0,0 device. | |||
| .IP | |||
| \fBjackd \-d alsa \-P hw:0,0\fR | |||
| .SH "ENVIRONMENT" | |||
| .br | |||
| JACK is evolving a mechanism for automatically starting the server | |||
| when needed. Any client started without a running JACK server will | |||
| attempt to start one itself using the command line found in the first | |||
| line of \fB$HOME/.jackdrc\fR if it exists, or \fB/etc/jackdrc\fR if it | |||
| does not. If neither file exists, a built\-in default command will be | |||
| used, including the \fB\-T\fR flag, which causes the server to shut | |||
| down when all clients have exited. | |||
| As a transition, this only happens when \fB$JACK_START_SERVER\fR is | |||
| defined in the environment of the calling process. In the future this | |||
| will become normal behavior. In either case, defining | |||
| \fB$JACK_NO_START_SERVER\fR disables this feature. | |||
| To change where JACK looks for the backend drivers, set | |||
| \fB$JACK_DRIVER_DIR\fR. | |||
| \fB$JACK_DEFAULT_SERVER\fR specifies the default server name. If not | |||
| defined, the string "default" is used. If set in their respective | |||
| environments, this affects \fBjackd\fR unless its \fB\-\-name\fR | |||
| parameter is set, and all JACK clients unless they pass an explicit | |||
| name to \fBjack_client_open()\fR. | |||
| .SH "SEE ALSO:" | |||
| .PP | |||
| .I http://www.jackaudio.org | |||
| .br | |||
| The official JACK website with news, docs and a list of JACK clients. | |||
| .PP | |||
| .I http://jackaudio.org/email | |||
| .br | |||
| The JACK developers' mailing list. Subscribe, to take part in | |||
| development of JACK or JACK clients. User questions are also welcome, | |||
| there is no user-specific mailing list. | |||
| .PP | |||
| .I http://www.jackosx.com/ | |||
| .br | |||
| Tools specific to the Mac OS X version of JACK. | |||
| .PP | |||
| .I http://www.alsa\-project.org | |||
| .br | |||
| The Advanced Linux Sound Architecture. | |||
| .SH "BUGS" | |||
| Please report bugs to | |||
| .br | |||
| .I http://trac.jackaudio.org/ | |||
| .SH "AUTHORS" | |||
| Architect and original implementor: Paul Davis | |||
| .PP | |||
| Original design Group: Paul Davis, David Olofson, Kai Vehmanen, Benno Sennoner, | |||
| Richard Guenther, and other members of the Linux Audio Developers group. | |||
| .PP | |||
| Programming: Paul Davis, Jack O'Quin, Taybin Rutkin, Stephane Letz, Fernando | |||
| Pablo Lopez-Lezcano, Steve Harris, Jeremy Hall, Andy Wingo, Kai | |||
| Vehmanen, Melanie Thielker, Jussi Laako, Tilman Linneweh, Johnny | |||
| Petrantoni, Torben Hohn. | |||
| .PP | |||
| Manpage written by Stefan Schwandter, Jack O'Quin and Alexandre | |||
| Prokoudine. | |||
| @@ -0,0 +1,23 @@ | |||
| .TH JACKREC "1" "!DATE!" "!VERSION!" | |||
| .SH NAME | |||
| jackrec \- JACK toolkit client for recording audio | |||
| .SH SYNOPSIS | |||
| .B jackrec | |||
| \-f filename \-d seconds [ \-b bitdepth ] port1 [ port2 ... ] | |||
| .SH DESCRIPTION | |||
| .B jackrec is a basic, but useful, audio recorder that will record | |||
| audio from 1 or more JACK ports to a file on disk. The file format is | |||
| always RIFF/WAV, with samples stored as signed integers. The sample | |||
| bit depth can be selected using the \fI-b\fR option. The file will | |||
| have as many channels as there are ports specified on the command line | |||
| - each channel will contain the data recorded from one port. The user | |||
| should generally specify the duration (in seconds) using the \fI-d\fR | |||
| option. If not specified, jackrec will record until terminated by a | |||
| signal (eg. from Ctrl-c). | |||
| .PP | |||
| This application is not intended to be a heavy duty audio recorder, | |||
| and originated as an example client to show how to handle threading | |||
| and disk I/O in a JACK client. However, it is a useful, simple | |||
| recorder and is included in the JACK toolkit as a result. | |||
| @@ -0,0 +1,13 @@ | |||
| #! /usr/bin/env python | |||
| # encoding: utf-8 | |||
| import Build | |||
| import re | |||
| import os | |||
| import misc | |||
| def build(bld): | |||
| bld.exec_command("cd man ; sh fill_template %s" % bld.env['JACK_VERSION']) | |||
| bld.install_files(bld.env['MANDIR'], '*.1') | |||
| @@ -118,10 +118,12 @@ bool JackPosixSemaphore::TimedWait(long usec) | |||
| time.tv_sec += tv_usec / 1000000; | |||
| time.tv_nsec = (tv_usec % 1000000) * 1000; | |||
| if ((res = sem_timedwait(fSemaphore, &time)) != 0) { | |||
| while ((res = sem_timedwait(fSemaphore, &time)) < 0) { | |||
| jack_error("JackPosixSemaphore::TimedWait err = %s", strerror(errno)); | |||
| jack_log("now %ld %ld ", now.tv_sec, now.tv_usec); | |||
| jack_log("next %ld %ld ", time.tv_sec, time.tv_nsec/1000); | |||
| if (errno != EINTR) | |||
| break; | |||
| } | |||
| return (res == 0); | |||
| } | |||
| @@ -184,9 +186,8 @@ bool JackPosixSemaphore::ConnectOutput(const char* name, const char* server_name | |||
| bool JackPosixSemaphore::Disconnect() | |||
| { | |||
| jack_log("JackPosixSemaphore::Disconnect %s", fName); | |||
| if (fSemaphore) { | |||
| jack_log("JackPosixSemaphore::Disconnect %s", fName); | |||
| if (sem_close(fSemaphore) != 0) { | |||
| jack_error("Disconnect: can't disconnect named semaphore name = %s err = %s", fName, strerror(errno)); | |||
| return false; | |||
| @@ -35,6 +35,7 @@ | |||
| #include <assert.h> | |||
| #include <stdarg.h> | |||
| #include <jack/jack.h> | |||
| #include <jack/intclient.h> | |||
| #include <jack/transport.h> | |||
| @@ -632,7 +633,57 @@ int main (int argc, char *argv[]) | |||
| if (status & JackServerStarted) { | |||
| fprintf(stderr, "JACK server started\n"); | |||
| } | |||
| /** | |||
| * Internal client tests... | |||
| * | |||
| */ | |||
| jack_intclient_t intclient; | |||
| Log("trying to load the \"inprocess\" server internal client \n"); | |||
| intclient = jack_internal_client_load (client1, "inprocess", | |||
| (jack_options_t)(JackLoadName|JackLoadInit), | |||
| &status, "inprocess", ""); | |||
| if (intclient == 0 || status & JackFailure) { | |||
| printf("!!! ERROR !!! cannot load internal client \"inprocess\" intclient %d status 0x%2.0x !\n", intclient, status); | |||
| } else { | |||
| Log("\"inprocess\" server internal client loaded\n"); | |||
| char* internal_name = jack_get_internal_client_name(client1, intclient); | |||
| if (strcmp(internal_name, "inprocess") == 0) { | |||
| Log("jack_get_internal_client_name returns %s\n", internal_name); | |||
| } else { | |||
| printf("!!! ERROR !!! jack_get_internal_client_name returns incorrect name %s\n", internal_name); | |||
| } | |||
| jack_intclient_t intclient1 = jack_internal_client_handle(client1, "inprocess", &status); | |||
| if (intclient1 == intclient) { | |||
| Log("jack_internal_client_handle returns correct handle\n"); | |||
| } else { | |||
| printf("!!! ERROR !!! jack_internal_client_handle returns incorrect handle %d\n", intclient1); | |||
| } | |||
| // Unload internal client | |||
| status = jack_internal_client_unload (client1, intclient); | |||
| if (status == 0) { | |||
| Log("jack_internal_client_unload done first time returns correct value\n"); | |||
| } else { | |||
| printf("!!! ERROR !!! jack_internal_client_unload returns incorrect value 0x%2.0x\n", status); | |||
| } | |||
| // Unload internal client second time | |||
| status = jack_internal_client_unload (client1, intclient); | |||
| if (status & JackFailure && status & JackNoSuchClient) { | |||
| Log("jack_internal_client_unload done second time returns correct value\n"); | |||
| } else { | |||
| printf("!!! ERROR !!! jack_internal_client_unload returns incorrect value 0x%2.0x\n", status); | |||
| } | |||
| } | |||
| /** | |||
| * try to register another one with the same name... | |||
| * | |||
| @@ -48,7 +48,7 @@ int JackWinNamedPipeClientChannel::ServerCheck(const char* server_name) | |||
| } | |||
| } | |||
| int JackWinNamedPipeClientChannel::Open(const char* server_name, const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status) | |||
| int JackWinNamedPipeClientChannel::Open(const char* server_name, const char* name, int uuid, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status) | |||
| { | |||
| int result = 0; | |||
| jack_log("JackWinNamedPipeClientChannel::Open name = %s", name); | |||
| @@ -67,7 +67,7 @@ int JackWinNamedPipeClientChannel::Open(const char* server_name, const char* nam | |||
| } | |||
| // Check name in server | |||
| ClientCheck(name, name_res, JACK_PROTOCOL_VERSION, (int)options, (int*)status, &result); | |||
| ClientCheck(name, uuid, name_res, JACK_PROTOCOL_VERSION, (int)options, (int*)status, &result); | |||
| if (result < 0) { | |||
| jack_error("Client name = %s conflits with another running client", name); | |||
| goto error; | |||
| @@ -142,9 +142,9 @@ void JackWinNamedPipeClientChannel::ServerAsyncCall(JackRequest* req, JackResult | |||
| } | |||
| } | |||
| void JackWinNamedPipeClientChannel::ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result) | |||
| void JackWinNamedPipeClientChannel::ClientCheck(const char* name, int uuid, char* name_res, int protocol, int options, int* status, int* result) | |||
| { | |||
| JackClientCheckRequest req(name, protocol, options); | |||
| JackClientCheckRequest req(name, protocol, options, uuid); | |||
| JackClientCheckResult res; | |||
| ServerSyncCall(&req, &res, result); | |||
| *status = res.fStatus; | |||
| @@ -51,7 +51,7 @@ class JackWinNamedPipeClientChannel : public detail::JackClientChannelInterface, | |||
| JackWinNamedPipeClientChannel(); | |||
| virtual ~JackWinNamedPipeClientChannel(); | |||
| int Open(const char* server_name, const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status); | |||
| int Open(const char* server_name, const char* name, int uuid, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status); | |||
| void Close(); | |||
| int Start(); | |||
| @@ -59,7 +59,7 @@ class JackWinNamedPipeClientChannel : public detail::JackClientChannelInterface, | |||
| int ServerCheck(const char* server_name); | |||
| void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result); | |||
| void ClientCheck(const char* name, int uuid, char* name_res, int protocol, int options, int* status, int* result); | |||
| void ClientOpen(const char* name, int pid, int uuid, int* shared_engine, int* shared_client, int* shared_graph, int* result); | |||
| void ClientOpen(const char* name, int* ref, JackEngineControl** shared_engine, JackGraphManager** shared_manager, JackClientInterface* client, int* result) | |||
| {} | |||
| @@ -115,7 +115,7 @@ bool JackClientPipeThread::HandleRequest() | |||
| JackClientCheckRequest req; | |||
| JackClientCheckResult res; | |||
| if (req.Read(fPipe) == 0) | |||
| res.fResult = fServer->GetEngine()->ClientCheck(req.fName, res.fName, req.fProtocol, req.fOptions, &res.fStatus); | |||
| res.fResult = fServer->GetEngine()->ClientCheck(req.fName, req.fUUID, res.fName, req.fProtocol, req.fOptions, &res.fStatus); | |||
| res.Write(fPipe); | |||
| break; | |||
| } | |||
| @@ -1,9 +1,9 @@ | |||
| <*project | |||
| version = 4 civer = "Free v4.14.5" winver = "2.6/5.1.2600" > | |||
| <output> .</> | |||
| <exename> Jack_v1.9.6_setup.exe</> | |||
| <exename> Jack_v1.9.7_setup.exe</> | |||
| <digitsign> </> | |||
| <appname> Jack v1.9.6</> | |||
| <appname> Jack v1.9.7</> | |||
| <password> </> | |||
| <addlang> </> | |||
| <icon> Default - 2</> | |||
| @@ -1,95 +1,98 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> | |||
| <CodeBlocks_project_file> | |||
| <FileVersion major="1" minor="6" /> | |||
| <Project> | |||
| <Option title="jack_dummy" /> | |||
| <Option pch_mode="2" /> | |||
| <Option compiler="gcc" /> | |||
| <Build> | |||
| <Target title="Win32 Release"> | |||
| <Option output="Release\bin\jack\jack_dummy" prefix_auto="1" extension_auto="1" /> | |||
| <Option object_output="Release\" /> | |||
| <Option type="3" /> | |||
| <Option compiler="gcc" /> | |||
| <Compiler> | |||
| <Add option="-O2" /> | |||
| <Add option="-Wall" /> | |||
| <Add option="-DBUILD_DLL" /> | |||
| <Add option="-DSERVER_SIDE" /> | |||
| <Add directory="..\windows" /> | |||
| <Add directory="..\common\jack" /> | |||
| <Add directory="..\common" /> | |||
| </Compiler> | |||
| <Linker> | |||
| <Add directory="Release\bin" /> | |||
| </Linker> | |||
| </Target> | |||
| <Target title="Win32 Debug"> | |||
| <Option output="Debug\bin\jack\jack_dummy" prefix_auto="1" extension_auto="1" /> | |||
| <Option object_output="Debug\" /> | |||
| <Option type="3" /> | |||
| <Option compiler="gcc" /> | |||
| <Compiler> | |||
| <Add option="-Wall" /> | |||
| <Add option="-g" /> | |||
| <Add option="-DBUILD_DLL" /> | |||
| <Add option="-DSERVER_SIDE" /> | |||
| <Add directory="..\windows" /> | |||
| <Add directory="..\common\jack" /> | |||
| <Add directory="..\common" /> | |||
| </Compiler> | |||
| <Linker> | |||
| <Add directory="Debug\bin" /> | |||
| </Linker> | |||
| </Target> | |||
| <Target title="Win32 Profiling"> | |||
| <Option output="Release\bin\jack\jack_dummy" prefix_auto="1" extension_auto="1" /> | |||
| <Option object_output="Release\" /> | |||
| <Option type="3" /> | |||
| <Option compiler="gcc" /> | |||
| <Compiler> | |||
| <Add option="-O2" /> | |||
| <Add option="-Wall" /> | |||
| <Add option="-DBUILD_DLL" /> | |||
| <Add option="-DJACK_MONITOR" /> | |||
| <Add option="-DSERVER_SIDE" /> | |||
| <Add directory="..\windows" /> | |||
| <Add directory="..\common\jack" /> | |||
| <Add directory="..\common" /> | |||
| </Compiler> | |||
| <Linker> | |||
| <Add directory="Release\bin" /> | |||
| </Linker> | |||
| </Target> | |||
| </Build> | |||
| <Compiler> | |||
| <Add option="-Wall" /> | |||
| </Compiler> | |||
| <Linker> | |||
| <Add library="kernel32" /> | |||
| <Add library="user32" /> | |||
| <Add library="gdi32" /> | |||
| <Add library="winspool" /> | |||
| <Add library="comdlg32" /> | |||
| <Add library="advapi32" /> | |||
| <Add library="shell32" /> | |||
| <Add library="ole32" /> | |||
| <Add library="oleaut32" /> | |||
| <Add library="uuid" /> | |||
| <Add library="odbc32" /> | |||
| <Add library="odbccp32" /> | |||
| <Add library="libjackserver" /> | |||
| </Linker> | |||
| <Unit filename="..\common\JackDummyDriver.cpp" /> | |||
| <Extensions> | |||
| <AutoVersioning> | |||
| <Scheme minor_max="10" build_max="0" rev_max="0" rev_rand_max="10" build_times_to_increment_minor="100" /> | |||
| <Settings autoincrement="1" date_declarations="1" do_auto_increment="0" ask_to_increment="0" language="C++" svn="0" svn_directory="" header_path="version.h" /> | |||
| <Changes_Log show_changes_editor="0" app_title="released version %M.%m.%b of %p" changeslog_path="ChangesLog.txt" /> | |||
| </AutoVersioning> | |||
| <code_completion /> | |||
| <envvars /> | |||
| <debugger /> | |||
| </Extensions> | |||
| </Project> | |||
| </CodeBlocks_project_file> | |||
| <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> | |||
| <CodeBlocks_project_file> | |||
| <FileVersion major="1" minor="6" /> | |||
| <Project> | |||
| <Option title="jack_dummy" /> | |||
| <Option pch_mode="2" /> | |||
| <Option compiler="gcc" /> | |||
| <Build> | |||
| <Target title="Win32 Release"> | |||
| <Option output="Release\bin\jack\jack_dummy" prefix_auto="1" extension_auto="1" /> | |||
| <Option object_output="Release\" /> | |||
| <Option type="3" /> | |||
| <Option compiler="gcc" /> | |||
| <Compiler> | |||
| <Add option="-O2" /> | |||
| <Add option="-Wall" /> | |||
| <Add option="-DBUILD_DLL" /> | |||
| <Add option="-DSERVER_SIDE" /> | |||
| <Add directory="..\windows" /> | |||
| <Add directory="..\common\jack" /> | |||
| <Add directory="..\common" /> | |||
| </Compiler> | |||
| <Linker> | |||
| <Add directory="Release\bin" /> | |||
| </Linker> | |||
| </Target> | |||
| <Target title="Win32 Debug"> | |||
| <Option output="Debug\bin\jack\jack_dummy" prefix_auto="1" extension_auto="1" /> | |||
| <Option object_output="Debug\" /> | |||
| <Option type="3" /> | |||
| <Option compiler="gcc" /> | |||
| <Compiler> | |||
| <Add option="-Wall" /> | |||
| <Add option="-g" /> | |||
| <Add option="-DBUILD_DLL" /> | |||
| <Add option="-DSERVER_SIDE" /> | |||
| <Add directory="..\windows" /> | |||
| <Add directory="..\common\jack" /> | |||
| <Add directory="..\common" /> | |||
| </Compiler> | |||
| <Linker> | |||
| <Add directory="Debug\bin" /> | |||
| </Linker> | |||
| </Target> | |||
| <Target title="Win32 Profiling"> | |||
| <Option output="Release\bin\jack\jack_dummy" prefix_auto="1" extension_auto="1" /> | |||
| <Option object_output="Release\" /> | |||
| <Option type="3" /> | |||
| <Option compiler="gcc" /> | |||
| <Compiler> | |||
| <Add option="-O2" /> | |||
| <Add option="-Wall" /> | |||
| <Add option="-DBUILD_DLL" /> | |||
| <Add option="-DJACK_MONITOR" /> | |||
| <Add option="-DSERVER_SIDE" /> | |||
| <Add directory="..\windows" /> | |||
| <Add directory="..\common\jack" /> | |||
| <Add directory="..\common" /> | |||
| </Compiler> | |||
| <Linker> | |||
| <Add directory="Release\bin" /> | |||
| </Linker> | |||
| </Target> | |||
| </Build> | |||
| <Compiler> | |||
| <Add option="-Wall" /> | |||
| </Compiler> | |||
| <Linker> | |||
| <Add library="kernel32" /> | |||
| <Add library="user32" /> | |||
| <Add library="gdi32" /> | |||
| <Add library="winspool" /> | |||
| <Add library="comdlg32" /> | |||
| <Add library="advapi32" /> | |||
| <Add library="shell32" /> | |||
| <Add library="ole32" /> | |||
| <Add library="oleaut32" /> | |||
| <Add library="uuid" /> | |||
| <Add library="odbc32" /> | |||
| <Add library="odbccp32" /> | |||
| <Add library="libjackserver" /> | |||
| </Linker> | |||
| <Unit filename="jackdummydriver.rc"> | |||
| <Option compilerVar="WINDRES" /> | |||
| </Unit> | |||
| <Unit filename="..\common\JackDummyDriver.cpp" /> | |||
| <Extensions> | |||
| <AutoVersioning> | |||
| <Scheme minor_max="10" build_max="0" rev_max="0" rev_rand_max="10" build_times_to_increment_minor="100" /> | |||
| <Settings autoincrement="1" date_declarations="1" do_auto_increment="0" ask_to_increment="0" language="C++" svn="0" svn_directory="" header_path="version.h" /> | |||
| <Changes_Log show_changes_editor="0" app_title="released version %M.%m.%b of %p" changeslog_path="ChangesLog.txt" /> | |||
| </AutoVersioning> | |||
| <code_completion /> | |||
| <envvars /> | |||
| <debugger /> | |||
| </Extensions> | |||
| </Project> | |||
| </CodeBlocks_project_file> | |||
| @@ -80,6 +80,9 @@ | |||
| <Add library="odbccp32" /> | |||
| <Add library="libjackserver" /> | |||
| </Linker> | |||
| <Unit filename="jackloopbackdriver.rc"> | |||
| <Option compilerVar="WINDRES" /> | |||
| </Unit> | |||
| <Unit filename="..\common\JackLoopbackDriver.cpp" /> | |||
| <Extensions> | |||
| <AutoVersioning> | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 1 VERSIONINFO | |||
| FILEVERSION 1,9,6,0 | |||
| PRODUCTVERSION 1,9,6,0 | |||
| FILEVERSION 1,9,7,0 | |||
| PRODUCTVERSION 1,9,7,0 | |||
| FILEOS VOS_UNKNOWN | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp Audio Adapter for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 6, 0\0" | |||
| VALUE "FileVersion", "1, 9, 7, 0\0" | |||
| VALUE "InternalName", "audioadapter\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "audioadapter.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "audioadapter\0" | |||
| VALUE "ProductVersion", "1, 9, 6, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 7, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 1 VERSIONINFO | |||
| FILEVERSION 1,9,6,0 | |||
| PRODUCTVERSION 1,9,6,0 | |||
| FILEVERSION 1,9,7,0 | |||
| PRODUCTVERSION 1,9,7,0 | |||
| FILEOS VOS_UNKNOWN | |||
| FILETYPE VFT_APP | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jack server for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 6, 0\0" | |||
| VALUE "FileVersion", "1, 9, 7, 0\0" | |||
| VALUE "InternalName", "jackd\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "jackd.exe\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "jackd\0" | |||
| VALUE "ProductVersion", "1, 9, 6, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 7, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -0,0 +1,41 @@ | |||
| // Generated by ResEdit 1.4.3 | |||
| // Copyright (C) 2006-2008 | |||
| // http://www.resedit.net | |||
| #include "resource.h" | |||
| #include "afxres.h" | |||
| // | |||
| // Version Information resources | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 1 VERSIONINFO | |||
| FILEVERSION 1,9,7,0 | |||
| PRODUCTVERSION 1,9,7,0 | |||
| FILEOS VOS_UNKNOWN | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| BLOCK "StringFileInfo" | |||
| BEGIN | |||
| BLOCK "040c04b0" | |||
| BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp Dummy Driver for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 7, 0\0" | |||
| VALUE "InternalName", "jack_dummy\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "jack_dummy.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "jack_dummy\0" | |||
| VALUE "ProductVersion", "1, 9, 7, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| BLOCK "VarFileInfo" | |||
| BEGIN | |||
| VALUE "Translation", 1036, 1200 | |||
| END | |||
| END | |||
| @@ -0,0 +1,41 @@ | |||
| // Generated by ResEdit 1.4.3 | |||
| // Copyright (C) 2006-2008 | |||
| // http://www.resedit.net | |||
| #include "resource.h" | |||
| #include "afxres.h" | |||
| // | |||
| // Version Information resources | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 1 VERSIONINFO | |||
| FILEVERSION 1,9,7,0 | |||
| PRODUCTVERSION 1,9,7,0 | |||
| FILEOS VOS_UNKNOWN | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| BLOCK "StringFileInfo" | |||
| BEGIN | |||
| BLOCK "040c04b0" | |||
| BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp Loopback Driver for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 7, 0\0" | |||
| VALUE "InternalName", "jack_loopback\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "jack_loopback.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "jack_loopback\0" | |||
| VALUE "ProductVersion", "1, 9, 7, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| BLOCK "VarFileInfo" | |||
| BEGIN | |||
| VALUE "Translation", 1036, 1200 | |||
| END | |||
| END | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 1 VERSIONINFO | |||
| FILEVERSION 1,9,6,0 | |||
| PRODUCTVERSION 1,9,6,0 | |||
| FILEVERSION 1,9,7,0 | |||
| PRODUCTVERSION 1,9,7,0 | |||
| FILEOS VOS_UNKNOWN | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp Net Adapter for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 6, 0\0" | |||
| VALUE "FileVersion", "1, 9, 7, 0\0" | |||
| VALUE "InternalName", "netadapter\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "netadapter.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "netadapter\0" | |||
| VALUE "ProductVersion", "1, 9, 6, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 7, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 1 VERSIONINFO | |||
| FILEVERSION 1,9,6,0 | |||
| PRODUCTVERSION 1,9,6,0 | |||
| FILEVERSION 1,9,7,0 | |||
| PRODUCTVERSION 1,9,7,0 | |||
| FILEOS VOS_UNKNOWN | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp Net Driver for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 6, 0\0" | |||
| VALUE "FileVersion", "1, 9, 7, 0\0" | |||
| VALUE "InternalName", "jack_netdriver\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "jack_netdriver.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "jack_netdriver\0" | |||
| VALUE "ProductVersion", "1, 9, 6, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 7, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 1 VERSIONINFO | |||
| FILEVERSION 1,9,6,0 | |||
| PRODUCTVERSION 1,9,6,0 | |||
| FILEVERSION 1,9,7,0 | |||
| PRODUCTVERSION 1,9,7,0 | |||
| FILEOS VOS_UNKNOWN | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp Net Manager for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 6, 0\0" | |||
| VALUE "FileVersion", "1, 9, 7, 0\0" | |||
| VALUE "InternalName", "netmanager\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "netmanager.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "netmanager\0" | |||
| VALUE "ProductVersion", "1, 9, 6, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 7, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -1,41 +1,41 @@ | |||
| // Generated by ResEdit 1.4.3 | |||
| // Copyright (C) 2006-2008 | |||
| // http://www.resedit.net | |||
| #include "resource.h" | |||
| #include "afxres.h" | |||
| // | |||
| // Version Information resources | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 1 VERSIONINFO | |||
| FILEVERSION 1,9,5,0 | |||
| PRODUCTVERSION 1,9,5,0 | |||
| FILEOS VOS_UNKNOWN | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| BLOCK "StringFileInfo" | |||
| BEGIN | |||
| BLOCK "040c04b0" | |||
| BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp NetOne Driver for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 5, 0\0" | |||
| VALUE "InternalName", "jack_netonedriver\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "jack_netonedriver.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "jack_netonedriver\0" | |||
| VALUE "ProductVersion", "1, 9, 5, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| BLOCK "VarFileInfo" | |||
| BEGIN | |||
| VALUE "Translation", 1036, 1200 | |||
| END | |||
| END | |||
| // Generated by ResEdit 1.4.3 | |||
| // Copyright (C) 2006-2008 | |||
| // http://www.resedit.net | |||
| #include "resource.h" | |||
| #include "afxres.h" | |||
| // | |||
| // Version Information resources | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 1 VERSIONINFO | |||
| FILEVERSION 1,9,7,0 | |||
| PRODUCTVERSION 1,9,7,0 | |||
| FILEOS VOS_UNKNOWN | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| BLOCK "StringFileInfo" | |||
| BEGIN | |||
| BLOCK "040c04b0" | |||
| BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp NetOne Driver for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 7, 0\0" | |||
| VALUE "InternalName", "jack_netonedriver\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "jack_netonedriver.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "jack_netonedriver\0" | |||
| VALUE "ProductVersion", "1, 9, 7, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| BLOCK "VarFileInfo" | |||
| BEGIN | |||
| VALUE "Translation", 1036, 1200 | |||
| END | |||
| END | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 1 VERSIONINFO | |||
| FILEVERSION 1,9,6,0 | |||
| PRODUCTVERSION 1,9,6,0 | |||
| FILEVERSION 1,9,7,0 | |||
| PRODUCTVERSION 1,9,7,0 | |||
| FILEOS VOS_UNKNOWN | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp PortAudio Driver for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 6, 0\0" | |||
| VALUE "FileVersion", "1, 9, 7, 0\0" | |||
| VALUE "InternalName", "jack_portaudio\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "jack_portaudio.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "jack_portaudio\0" | |||
| VALUE "ProductVersion", "1, 9, 6, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 7, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 1 VERSIONINFO | |||
| FILEVERSION 1,9,6,0 | |||
| PRODUCTVERSION 1,9,6,0 | |||
| FILEVERSION 1,9,7,0 | |||
| PRODUCTVERSION 1,9,7,0 | |||
| FILEOS VOS_UNKNOWN | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| @@ -22,15 +22,15 @@ BEGIN | |||
| BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp WinMMEo Driver for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 6, 0\0" | |||
| VALUE "FileDescription", "Jackmp WinMME Driver for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 7, 0\0" | |||
| VALUE "InternalName", "jack_portaudio\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "jack_winmme.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "jack_winmme\0" | |||
| VALUE "ProductVersion", "1, 9, 6, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 7, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 1 VERSIONINFO | |||
| FILEVERSION 1,9,6,0 | |||
| PRODUCTVERSION 1,9,6,0 | |||
| FILEVERSION 1,9,7,0 | |||
| PRODUCTVERSION 1,9,7,0 | |||
| FILEOS VOS_UNKNOWN | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jack client library for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 6, 0\0" | |||
| VALUE "FileVersion", "1, 9, 7, 0\0" | |||
| VALUE "InternalName", "libjack\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "libjack.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "libjack\0" | |||
| VALUE "ProductVersion", "1, 9, 6, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 7, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 1 VERSIONINFO | |||
| FILEVERSION 1,9,6,0 | |||
| PRODUCTVERSION 1,9,6,0 | |||
| FILEVERSION 1,9,7,0 | |||
| PRODUCTVERSION 1,9,7,0 | |||
| FILEOS VOS_UNKNOWN | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jack server library for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 56, 0\0" | |||
| VALUE "FileVersion", "1, 9, 7, 0\0" | |||
| VALUE "InternalName", "libjackserver\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "libjackserver.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "libjackserver\0" | |||
| VALUE "ProductVersion", "1, 9, 6, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 7, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -14,8 +14,8 @@ LANGUAGE LANG_FRENCH, SUBLANG_FRENCH | |||
| #ifndef _MAC | |||
| VS_VERSION_INFO VERSIONINFO | |||
| FILEVERSION 1,9,6,0 | |||
| PRODUCTVERSION 1,9,6,0 | |||
| FILEVERSION 1,9,7,0 | |||
| PRODUCTVERSION 1,9,7,0 | |||
| FILEFLAGSMASK 0x3fL | |||
| #ifdef _DEBUG | |||
| FILEFLAGS 0x1L | |||
| @@ -33,14 +33,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 6, 0\0" | |||
| VALUE "FileVersion", "1, 9, 7, 0\0" | |||
| VALUE "InternalName", "libjackmp\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "libjackmp.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "libjackmp\0" | |||
| VALUE "ProductVersion", "1, 9, 6, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 7, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -11,7 +11,7 @@ import Task | |||
| import re | |||
| import Logs | |||
| VERSION='1.9.6' | |||
| VERSION='1.9.7' | |||
| APPNAME='jack' | |||
| JACK_API_VERSION = '0.1.0' | |||
| @@ -62,6 +62,7 @@ def set_options(opt): | |||
| opt.add_option('--libdir', type='string', help="Library directory [Default: <prefix>/lib]") | |||
| opt.add_option('--libdir32', type='string', help="32bit Library directory [Default: <prefix>/lib32]") | |||
| opt.add_option('--mandir', type='string', help="Manpage directory [Default: <prefix>/share/man/man1]") | |||
| 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') | |||
| @@ -78,7 +79,7 @@ def set_options(opt): | |||
| def configure(conf): | |||
| platform = Utils.detect_platform() | |||
| conf.env['IS_MACOSX'] = platform == 'darwin' | |||
| conf.env['IS_LINUX'] = platform == 'linux' | |||
| conf.env['IS_LINUX'] = platform == 'linux' or platform == 'posix' | |||
| conf.env['IS_SUN'] = platform == 'sunos' | |||
| if conf.env['IS_LINUX']: | |||
| @@ -163,6 +164,11 @@ def configure(conf): | |||
| else: | |||
| conf.env['LIBDIR'] = conf.env['PREFIX'] + '/lib' | |||
| if Options.options.libdir: | |||
| conf.env['MANDIR'] = conf.env['PREFIX'] + Options.options.mandir | |||
| else: | |||
| conf.env['MANDIR'] = conf.env['PREFIX'] + '/share/man/man1' | |||
| if conf.env['BUILD_DEBUG']: | |||
| conf.env.append_unique('CXXFLAGS', '-g') | |||
| conf.env.append_unique('CCFLAGS', '-g') | |||
| @@ -242,6 +248,8 @@ def configure(conf): | |||
| print Logs.colors.NORMAL, | |||
| conf.env.append_unique('LINKFLAGS', '-lm -lstdc++') | |||
| if Options.options.mixed == True: | |||
| env_variant2 = conf.env.copy() | |||
| conf.set_env_name('lib32', env_variant2) | |||
| @@ -267,6 +275,7 @@ def build(bld): | |||
| bld.add_subdirs('linux') | |||
| bld.add_subdirs('example-clients') | |||
| bld.add_subdirs('tests') | |||
| bld.add_subdirs('man') | |||
| if bld.env['BUILD_JACKDBUS'] == True: | |||
| bld.add_subdirs('dbus') | |||