static int oss_driver_attach (oss_driver_t *driver, jack_engine_t *engine) { int port_flags; unsigned int channel; char channel_name[64]; jack_port_t *port; jack_latency_range_t range; driver->engine = engine; set_period_size(driver, driver->period_size); if (engine->set_buffer_size(engine, driver->period_size)) { jack_error ("OSS: cannot set engine buffer size to %d (check MIDI)", driver->period_size); return -1; } engine->set_sample_rate(engine, driver->sample_rate); port_flags = JackPortIsOutput|JackPortIsPhysical|JackPortIsTerminal; for (channel = 0; channel < driver->capture_channels; channel++) { snprintf(channel_name, sizeof(channel_name), "capture_%u", channel + 1); port = jack_port_register(driver->client, channel_name, JACK_DEFAULT_AUDIO_TYPE, port_flags, 0); if (port == NULL) { jack_error("OSS: cannot register port for %s: %s@%i", channel_name, __FILE__, __LINE__); break; } range.min = range.max = driver->period_size + driver->sys_in_latency; jack_port_set_latency_range(port, JackCaptureLatency, &range); driver->capture_ports = jack_slist_append(driver->capture_ports, port); } port_flags = JackPortIsInput|JackPortIsPhysical|JackPortIsTerminal; for (channel = 0; channel < driver->playback_channels; channel++) { snprintf(channel_name, sizeof(channel_name), "playback_%u", channel + 1); port = jack_port_register(driver->client, channel_name, JACK_DEFAULT_AUDIO_TYPE, port_flags, 0); if (port == NULL) { jack_error("OSS: cannot register port for %s: %s@%i", channel_name, __FILE__, __LINE__); break; } range.min = range.max = driver->period_size + driver->sys_out_latency; jack_port_set_latency_range(port, JackPlaybackLatency, &range); driver->playback_ports = jack_slist_append(driver->playback_ports, port); } jack_activate(driver->client); return 0; }
static int iio_driver_attach (iio_driver_t *driver, jack_engine_t *engine) { printf("iio_driver_attach\n"); // create ports jack_port_t * port; char buf[32]; unsigned int chn; int port_flags; if (driver->engine->set_buffer_size (driver->engine, driver->period_size)) { jack_error ("iio: cannot set engine buffer size to %d", driver->period_size); return -1; } driver->engine->set_sample_rate (driver->engine, driver->sample_rate); port_flags = JackPortIsOutput|JackPortIsPhysical|JackPortIsTerminal; for (chn = 0; chn < driver->capture_channels; chn++) { snprintf (buf, sizeof(buf) - 1, "capture_%u", chn+1); port = jack_port_register (driver->client, buf, JACK_DEFAULT_AUDIO_TYPE, port_flags, 0); if (!port) { jack_error ("iio: cannot register port for %s", buf); break; } //cout<<"Registered port "<<buf<<endl; jack_latency_range_t range; range.min = range.max = 1024; //cout<<"fix latencies, range currently set to "<<range.min<<", "<<range.max<<endl; jack_port_set_latency_range (port, JackCaptureLatency, &range); driver->capture_ports = jack_slist_append (driver->capture_ports, port); } port_flags = JackPortIsInput|JackPortIsPhysical|JackPortIsTerminal; for (chn = 0; chn < driver->playback_channels; chn++) { snprintf (buf, sizeof(buf) - 1, "playback_%u", chn+1); port = jack_port_register (driver->client, buf, JACK_DEFAULT_AUDIO_TYPE, port_flags, 0); if (!port) { jack_error ("iio: cannot register port for %s", buf); break; } //cout<<"Registered port "<<buf<<endl; jack_latency_range_t range; range.min = range.max = 1024; //cout<<"fix latencies, range currently set to "<<range.min<<", "<<range.max<<endl; jack_port_set_latency_range (port, JackCaptureLatency, &range); driver->playback_ports = jack_slist_append (driver->playback_ports, port); } return jack_activate (driver->client); }
void latency_cb (jack_latency_callback_mode_t mode, void *arg) { jack_latency_range_t range; if (mode == JackCaptureLatency) { jack_port_get_latency_range (input_port, mode, &range); range.min += latency; range.max += latency; jack_port_set_latency_range (output_port, mode, &range); } else { jack_port_get_latency_range (output_port, mode, &range); range.min += latency; range.max += latency; jack_port_set_latency_range (input_port, mode, &range); } }
static int SetLatencyRange(lua_State *L) { jack_latency_range_t range; pud_t *pud = pud_check(L, 1); jack_latency_callback_mode_t mode = CheckMode(L, 2); range.min = luaL_checkinteger(L, 3); range.max = luaL_checkinteger(L, 4); jack_port_set_latency_range(pud->port, mode, &range); return 0; }
void latency_cb (jack_latency_callback_mode_t mode, void *arg) { jack_latency_range_t range; JSList *node; range.min = range.max = target_delay; if (mode == JackCaptureLatency) { for (node = capture_ports; node; node = jack_slist_next (node)) { jack_port_t *port = node->data; jack_port_set_latency_range (port, mode, &range); } } else { for (node = playback_ports; node; node = jack_slist_next (node)) { jack_port_t *port = node->data; jack_port_set_latency_range (port, mode, &range); } } }
/** inform JACK that port has /frames/ frames of latency */ void Port::set_latency ( direction_e dir, nframes_t min, nframes_t max ) { #ifdef HAVE_JACK_PORT_GET_LATENCY_RANGE jack_latency_range_t range; // DMESSAGE( "Setting port latency!" ); range.max = max; range.min = min; jack_port_set_latency_range( _port, dir == Output ? JackPlaybackLatency : JackCaptureLatency, &range ); #else jack_port_set_latency( _port, max ); #endif }
void latency_cb (jack_latency_callback_mode_t mode, void *arg) { jack_latency_range_t range; range.min = range.max = 0; if (mode == JackCaptureLatency) { jack_port_set_latency_range (jack_play, mode, &range); jack_port_get_latency_range (jack_capt, mode, &range); if ((range.min != capture_latency.min) || (range.max != capture_latency.max)) { capture_latency = range; printf ("new capture latency: [%d, %d]\n", range.min, range.max); } } else { jack_port_set_latency_range (jack_capt, mode, &range); jack_port_get_latency_range (jack_play, mode, &range); if ((range.min != playback_latency.min) || (range.max != playback_latency.max)) { playback_latency = range; printf ("new playback latency: [%d, %d]\n", range.min, range.max); } } }
static int portaudio_driver_attach (portaudio_driver_t *driver, jack_engine_t *engine) { jack_port_t *port; int port_flags; channel_t chn; char buf[JACK_PORT_NAME_SIZE]; jack_latency_range_t range; driver->engine = engine; if (driver->engine->set_buffer_size (engine, driver->frames_per_cycle)) { jack_error ("portaudio: cannot set engine buffer size to %d (check MIDI)", driver->frames_per_cycle); return -1; } driver->engine->set_sample_rate (engine, driver->frame_rate); port_flags = JackPortIsOutput|JackPortIsPhysical|JackPortIsTerminal; /* if (driver->has_hw_monitoring) { port_flags |= JackPortCanMonitor; } */ for (chn = 0; chn < driver->capture_nchannels; chn++) { //snprintf (buf, sizeof(buf) - 1, "%s:capture%lu", driver->driver_name, chn+1); snprintf (buf, sizeof(buf) - 1, "%s:out%lu", driver->driver_name, chn+1); if ((port = jack_port_register (driver->client, buf, JACK_DEFAULT_AUDIO_TYPE, port_flags, 0)) == NULL) { jack_error ("portaudio: cannot register port for %s", buf); break; } /* XXX fix this so that it can handle: systemic (external) latency */ range.min = range.max = driver->frames_per_cycle; jack_port_set_latency_range (port, JackCaptureLatency, &range); driver->capture_ports = jack_slist_append (driver->capture_ports, port); } port_flags = JackPortIsInput|JackPortIsPhysical|JackPortIsTerminal; for (chn = 0; chn < driver->playback_nchannels; chn++) { //snprintf (buf, sizeof(buf) - 1, "%s:playback%lu", driver->driver_name, chn+1); snprintf (buf, sizeof(buf) - 1, "%s:in%lu", driver->driver_name, chn+1); if ((port = jack_port_register (driver->client, buf, JACK_DEFAULT_AUDIO_TYPE, port_flags, 0)) == NULL) { jack_error ("portaudio: cannot register port for %s", buf); break; } /* XXX fix this so that it can handle: systemic (external) latency */ range.min = range.max = driver->frames_per_cycle; jack_port_set_latency_range (port, JackPlaybackLatency, &range); driver->playback_ports = jack_slist_append (driver->playback_ports, port); } jack_activate (driver->client); return 0; }
static int coreaudio_driver_attach(coreaudio_driver_t * driver, jack_engine_t * engine) { jack_port_t *port; JSList *node; int port_flags; channel_t chn; char buf[JACK_PORT_NAME_SIZE]; char channel_name[64]; OSStatus err; UInt32 size; UInt32 value1,value2; Boolean isWritable; jack_latency_range_t range; driver->engine = engine; if (driver->engine->set_buffer_size(engine, driver->frames_per_cycle)) { jack_error ("coreaudio: cannot set engine buffer size to %d (check MIDI)", driver->frames_per_cycle); return -1; } driver->engine->set_sample_rate(engine, driver->frame_rate); port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; /* if (driver->has_hw_monitoring) { port_flags |= JackPortCanMonitor; } */ for (chn = 0; chn < driver->capture_nchannels; chn++) { err = AudioDeviceGetPropertyInfo(driver->device_id, chn + 1, true, kAudioDevicePropertyChannelName, &size, &isWritable); if (err == noErr && size > 0) { err = AudioDeviceGetProperty(driver->device_id, chn + 1, true, kAudioDevicePropertyChannelName, &size, channel_name); if (err != noErr) JCALog("AudioDeviceGetProperty kAudioDevicePropertyChannelName error \n"); snprintf(buf, sizeof(buf) - 1, "%s:out_%s%lu", driver->capture_driver_name, channel_name, chn + 1); } else { snprintf(buf, sizeof(buf) - 1, "%s:out%lu", driver->capture_driver_name, chn + 1); } if ((port = jack_port_register(driver->client, buf, JACK_DEFAULT_AUDIO_TYPE, port_flags, 0)) == NULL) { jack_error("coreaudio: cannot register port for %s", buf); break; } size = sizeof(UInt32); value1 = value2 = 0; err = AudioDeviceGetProperty(driver->device_id, 0, true, kAudioDevicePropertyLatency, &size, &value1); if (err != noErr) JCALog("AudioDeviceGetProperty kAudioDevicePropertyLatency error \n"); err = AudioDeviceGetProperty(driver->device_id, 0, true, kAudioDevicePropertySafetyOffset, &size, &value2); if (err != noErr) JCALog("AudioDeviceGetProperty kAudioDevicePropertySafetyOffset error \n"); range.min = range.max = driver->frames_per_cycle + value1 + value2 + driver->capture_frame_latency; jack_port_set_latency_range(port, JackCaptureLatency, &range); driver->capture_ports = jack_slist_append(driver->capture_ports, port); } port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; for (chn = 0; chn < driver->playback_nchannels; chn++) { err = AudioDeviceGetPropertyInfo(driver->device_id, chn + 1, false, kAudioDevicePropertyChannelName, &size, &isWritable); if (err == noErr && size > 0) { err = AudioDeviceGetProperty(driver->device_id, chn + 1, false, kAudioDevicePropertyChannelName, &size, channel_name); if (err != noErr) JCALog("AudioDeviceGetProperty kAudioDevicePropertyChannelName error \n"); snprintf(buf, sizeof(buf) - 1, "%s:in_%s%lu", driver->playback_driver_name, channel_name, chn + 1); } else { snprintf(buf, sizeof(buf) - 1, "%s:in%lu", driver->playback_driver_name, chn + 1); } if ((port = jack_port_register(driver->client, buf, JACK_DEFAULT_AUDIO_TYPE, port_flags, 0)) == NULL) { jack_error("coreaudio: cannot register port for %s", buf); break; } size = sizeof(UInt32); value1 = value2 = 0; err = AudioDeviceGetProperty(driver->device_id, 0, false, kAudioDevicePropertyLatency, &size, &value1); if (err != noErr) JCALog("AudioDeviceGetProperty kAudioDevicePropertyLatency error \n"); err = AudioDeviceGetProperty(driver->device_id, 0, false, kAudioDevicePropertySafetyOffset, &size, &value2); if (err != noErr) JCALog("AudioDeviceGetProperty kAudioDevicePropertySafetyOffset error \n"); range.min = range.max = driver->frames_per_cycle + value1 + value2 + driver->playback_frame_latency; jack_port_set_latency_range(port, JackCaptureLatency, &range); driver->playback_ports = jack_slist_append(driver->playback_ports, port); } // Input buffers do no change : prepare them only once for (chn = 0, node = driver->capture_ports; chn < driver->capture_nchannels; chn++, node = jack_slist_next(node)) { driver->input_list->mBuffers[chn].mData = (jack_default_audio_sample_t*)jack_port_get_buffer(((jack_port_t *) node->data), driver->frames_per_cycle); } jack_activate(driver->client); return 0; }