80 |
// disconnect all current bindings first |
// disconnect all current bindings first |
81 |
for (int i = 0; i < Bindings.size(); i++) { |
for (int i = 0; i < Bindings.size(); i++) { |
82 |
String dst_name = Bindings[i]; |
String dst_name = Bindings[i]; |
83 |
int res = jack_disconnect(pChannel->pDevice->hJackClient, src_name.c_str(), dst_name.c_str()); |
/*int res =*/ jack_disconnect(pChannel->pDevice->hJackClient, src_name.c_str(), dst_name.c_str()); |
84 |
} |
} |
85 |
// connect new bindings |
// connect new bindings |
86 |
for (int i = 0; i < vS.size(); i++) { |
for (int i = 0; i < vS.size(); i++) { |
184 |
* @see AcquireChannels() |
* @see AcquireChannels() |
185 |
*/ |
*/ |
186 |
AudioOutputDeviceJack::AudioOutputDeviceJack(std::map<String,DeviceCreationParameter*> Parameters) : AudioOutputDevice(Parameters) { |
AudioOutputDeviceJack::AudioOutputDeviceJack(std::map<String,DeviceCreationParameter*> Parameters) : AudioOutputDevice(Parameters) { |
187 |
JackClient* pJackClient = JackClient::CreateAudio(((DeviceCreationParameterString*)Parameters["NAME"])->ValueAsString()); |
pJackClient = JackClient::CreateAudio(((DeviceCreationParameterString*)Parameters["NAME"])->ValueAsString()); |
188 |
existingJackDevices++; |
existingJackDevices++; |
189 |
pJackClient->SetAudioOutputDevice(this); |
pJackClient->SetAudioOutputDevice(this); |
190 |
hJackClient = pJackClient->hJackClient; |
hJackClient = pJackClient->hJackClient; |
237 |
const float rate = jack_get_sample_rate(hJackClient); |
const float rate = jack_get_sample_rate(hJackClient); |
238 |
return size / rate; |
return size / rate; |
239 |
} |
} |
240 |
|
|
241 |
|
jack_client_t* AudioOutputDeviceJack::jackClientHandle() { |
242 |
|
return hJackClient; |
243 |
|
} |
244 |
|
|
245 |
void AudioOutputDeviceJack::Play() { |
void AudioOutputDeviceJack::Play() { |
246 |
csIsPlaying.PushAndUnlock(true); |
csIsPlaying.PushAndUnlock(true); |
265 |
uint AudioOutputDeviceJack::SampleRate() { |
uint AudioOutputDeviceJack::SampleRate() { |
266 |
return jack_get_sample_rate(hJackClient); |
return jack_get_sample_rate(hJackClient); |
267 |
} |
} |
268 |
|
|
269 |
|
void AudioOutputDeviceJack::addListener(JackListener* listener) { |
270 |
|
pJackClient->addListener(listener); |
271 |
|
} |
272 |
|
|
273 |
String AudioOutputDeviceJack::Name() { |
String AudioOutputDeviceJack::Name() { |
274 |
return "JACK"; |
return "JACK"; |
298 |
return static_cast<JackClient*>(arg)->Process(nframes); |
return static_cast<JackClient*>(arg)->Process(nframes); |
299 |
} |
} |
300 |
|
|
301 |
void linuxsampler_libjack_shutdown_callback(void* arg) { |
void JackClient::libjackShutdownCallback(void* arg) { |
302 |
static_cast<JackClient*>(arg)->Stop(); |
JackClient* jackClient = static_cast<JackClient*>(arg); |
303 |
|
jackClient->Stop(); |
304 |
fprintf(stderr, "Jack: Jack server shutdown, exiting.\n"); |
fprintf(stderr, "Jack: Jack server shutdown, exiting.\n"); |
305 |
|
for (int i = 0; i < jackClient->jackListeners.size(); ++i) { |
306 |
|
JackListener* listener = jackClient->jackListeners[i]; |
307 |
|
listener->onJackShutdown(); |
308 |
|
} |
309 |
} |
} |
310 |
|
|
311 |
int JackClient::libjackSampleRateCallback(jack_nframes_t nframes, void *arg) { |
int JackClient::libjackSampleRateCallback(jack_nframes_t nframes, void *arg) { |
328 |
client->ConfigReader.Unlock(); |
client->ConfigReader.Unlock(); |
329 |
return 0; |
return 0; |
330 |
} |
} |
331 |
|
|
332 |
|
void JackClient::addListener(JackListener* listener) { |
333 |
|
jackListeners.push_back(listener); |
334 |
|
} |
335 |
|
|
336 |
std::map<String, JackClient*> JackClient::Clients; |
std::map<String, JackClient*> JackClient::Clients; |
337 |
|
|
377 |
if (!hJackClient) |
if (!hJackClient) |
378 |
throw Exception("Seems Jack server is not running."); |
throw Exception("Seems Jack server is not running."); |
379 |
jack_set_process_callback(hJackClient, linuxsampler_libjack_process_callback, this); |
jack_set_process_callback(hJackClient, linuxsampler_libjack_process_callback, this); |
380 |
jack_on_shutdown(hJackClient, linuxsampler_libjack_shutdown_callback, this); |
jack_on_shutdown(hJackClient, libjackShutdownCallback, this); |
381 |
jack_set_buffer_size_callback(hJackClient, libjackBufferSizeCallback, this); |
jack_set_buffer_size_callback(hJackClient, libjackBufferSizeCallback, this); |
382 |
jack_set_sample_rate_callback(hJackClient, libjackSampleRateCallback, this); |
jack_set_sample_rate_callback(hJackClient, libjackSampleRateCallback, this); |
383 |
|
|