diff --git a/common/JackMidiDriver.cpp b/common/JackMidiDriver.cpp index b8993e7a..454f046d 100644 --- a/common/JackMidiDriver.cpp +++ b/common/JackMidiDriver.cpp @@ -74,9 +74,12 @@ int JackMidiDriver::Attach() jack_port_id_t port_index; char name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; char alias[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; + jack_latency_range_t latency_range; + jack_nframes_t latency = fEngineControl->fBufferSize; int i; jack_log("JackMidiDriver::Attach fBufferSize = %ld fSampleRate = %ld", fEngineControl->fBufferSize, fEngineControl->fSampleRate); + latency_range.max = latency_range.min = latency; for (i = 0; i < fCaptureChannels; i++) { snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fAliasName, fCaptureDriverName, i + 1); @@ -87,10 +90,16 @@ int JackMidiDriver::Attach() } port = fGraphManager->GetPort(port_index); port->SetAlias(alias); + port->SetLatencyRange(JackCaptureLatency, &latency_range); fCapturePortList[i] = port_index; jack_log("JackMidiDriver::Attach fCapturePortList[i] port_index = %ld", port_index); } + if (!fEngineControl->fSyncMode) { + latency += fEngineControl->fBufferSize;; + latency_range.max = latency_range.min = latency; + } + for (i = 0; i < fPlaybackChannels; i++) { snprintf(alias, sizeof(alias) - 1, "%s:%s:in%d", fAliasName, fPlaybackDriverName, i + 1); snprintf(name, sizeof(name) - 1, "%s:playback_%d", fClientControl.fName, i + 1); @@ -100,6 +109,7 @@ int JackMidiDriver::Attach() } port = fGraphManager->GetPort(port_index); port->SetAlias(alias); + port->SetLatencyRange(JackPlaybackLatency, &latency_range); fPlaybackPortList[i] = port_index; jack_log("JackMidiDriver::Attach fPlaybackPortList[i] port_index = %ld", port_index); } diff --git a/macosx/coremidi/JackCoreMidiDriver.cpp b/macosx/coremidi/JackCoreMidiDriver.cpp index 1cb7176b..233ac8dd 100644 --- a/macosx/coremidi/JackCoreMidiDriver.cpp +++ b/macosx/coremidi/JackCoreMidiDriver.cpp @@ -227,9 +227,12 @@ int JackCoreMidiDriver::Attach() char name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; char endpoint_name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; char alias[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; + jack_latency_range_t latency_range; + jack_nframes_t latency = fEngineControl->fBufferSize; int i; jack_log("JackCoreMidiDriver::Attach fBufferSize = %ld fSampleRate = %ld", fEngineControl->fBufferSize, fEngineControl->fSampleRate); + latency_range.max = latency_range.min = latency; for (i = 0; i < fCaptureChannels; i++) { @@ -249,10 +252,16 @@ int JackCoreMidiDriver::Attach() } port = fGraphManager->GetPort(port_index); port->SetAlias(alias); + port->SetLatencyRange(JackCaptureLatency, &latency_range); fCapturePortList[i] = port_index; jack_log("JackCoreMidiDriver::Attach fCapturePortList[i] port_index = %ld", port_index); } + if (!fEngineControl->fSyncMode) { + latency += fEngineControl->fBufferSize;; + latency_range.max = latency_range.min = latency; + } + for (i = 0; i < fPlaybackChannels; i++) { err = MIDIObjectGetStringProperty(fMidiSource[i], kMIDIPropertyName, &pname); @@ -271,6 +280,7 @@ int JackCoreMidiDriver::Attach() } port = fGraphManager->GetPort(port_index); port->SetAlias(alias); + port->SetLatencyRange(JackPlaybackLatency, &latency_range); fPlaybackPortList[i] = port_index; jack_log("JackCoreMidiDriver::Attach fPlaybackPortList[i] port_index = %ld", port_index); }