JackAlsaAdapter::JackAlsaAdapter ( jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params ) : JackAudioAdapterInterface ( buffer_size, sample_rate ), fThread ( this ), fAudioInterface ( buffer_size, sample_rate ) { const JSList* node; const jack_driver_param_t* param; fCaptureChannels = 2; fPlaybackChannels = 2; fAudioInterface.fPeriod = 2; for ( node = params; node; node = jack_slist_next ( node ) ) { param = ( const jack_driver_param_t* ) node->data; switch ( param->character ) { case 'i': fCaptureChannels = param->value.ui; break; case 'o': fPlaybackChannels = param->value.ui; break; case 'C': break; case 'P': break; case 'D': break; case 'n': fAudioInterface.fPeriod = param->value.ui; break; case 'd': fAudioInterface.fCardName = strdup ( param->value.str ); break; case 'r': fAudioInterface.fFrequency = param->value.ui; SetAdaptedSampleRate ( param->value.ui ); break; case 'p': fAudioInterface.fBuffering = param->value.ui; SetAdaptedBufferSize ( param->value.ui ); break; case 'q': fQuality = param->value.ui; break; case 'g': fRingbufferCurSize = param->value.ui; fAdaptative = false; break; } } fAudioInterface.setInputs ( fCaptureChannels ); fAudioInterface.setOutputs ( fPlaybackChannels ); }
bool JackNetAdapter::Init() { jack_log("JackNetAdapter::Init"); //init network connection if (!JackNetSlaveInterface::Init()) { jack_error("JackNetSlaveInterface::Init() error..."); return false; } //then set global parameters if (!SetParams()) { jack_error("SetParams error..."); return false; } //set buffers if (fCaptureChannels > 0) { fSoftCaptureBuffer = new sample_t*[fCaptureChannels]; for (int port_index = 0; port_index < fCaptureChannels; port_index++) { fSoftCaptureBuffer[port_index] = new sample_t[fParams.fPeriodSize]; fNetAudioCaptureBuffer->SetBuffer(port_index, fSoftCaptureBuffer[port_index]); } } if (fPlaybackChannels > 0) { fSoftPlaybackBuffer = new sample_t*[fPlaybackChannels]; for (int port_index = 0; port_index < fPlaybackChannels; port_index++) { fSoftPlaybackBuffer[port_index] = new sample_t[fParams.fPeriodSize]; fNetAudioPlaybackBuffer->SetBuffer(port_index, fSoftPlaybackBuffer[port_index]); } } //set audio adapter parameters SetAdaptedBufferSize(fParams.fPeriodSize); SetAdaptedSampleRate(fParams.fSampleRate); // Will do "something" on OSX only... fThread.SetParams(GetEngineControl()->fPeriod, GetEngineControl()->fComputation, GetEngineControl()->fConstraint); if (fThread.AcquireSelfRealTime(GetEngineControl()->fClientPriority) < 0) { jack_error("AcquireSelfRealTime error"); } else { set_threaded_log_function(); } //init done, display parameters SessionParamsDisplay(&fParams); return true; }
JackPortAudioAdapter::JackPortAudioAdapter ( jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params ) : JackAudioAdapterInterface ( buffer_size, sample_rate ) { jack_log ( "JackPortAudioAdapter::JackPortAudioAdapter buffer_size = %d, sample_rate = %d", buffer_size, sample_rate ); const JSList* node; const jack_driver_param_t* param; int in_max = 0; int out_max = 0; fInputDevice = Pa_GetDefaultInputDevice(); fOutputDevice = Pa_GetDefaultOutputDevice(); for (node = params; node; node = jack_slist_next(node)) { param = (const jack_driver_param_t*) node->data; switch (param->character) { case 'i' : fCaptureChannels = param->value.ui; break; case 'o' : fPlaybackChannels = param->value.ui; break; case 'C' : if ( fPaDevices.GetInputDeviceFromName(param->value.str, fInputDevice, in_max) < 0 ) { jack_error ( "Can't use %s, taking default input device", param->value.str ); fInputDevice = Pa_GetDefaultInputDevice(); } break; case 'P' : if ( fPaDevices.GetOutputDeviceFromName(param->value.str, fOutputDevice, out_max) < 0 ) { jack_error ( "Can't use %s, taking default output device", param->value.str ); fOutputDevice = Pa_GetDefaultOutputDevice(); } break; case 'r' : SetAdaptedSampleRate ( param->value.ui ); break; case 'p' : SetAdaptedBufferSize ( param->value.ui ); break; case 'd' : if ( fPaDevices.GetInputDeviceFromName ( param->value.str, fInputDevice, in_max ) < 0 ) jack_error ( "Can't use %s, taking default input device", param->value.str ); if ( fPaDevices.GetOutputDeviceFromName ( param->value.str, fOutputDevice, out_max ) < 0 ) jack_error ( "Can't use %s, taking default output device", param->value.str ); break; case 'l' : fPaDevices.DisplayDevicesNames(); break; case 'q': fQuality = param->value.ui; break; case 'g': fRingbufferCurSize = param->value.ui; fAdaptative = false; break; } } //max channels if ( in_max == 0 ) in_max = fPaDevices.GetDeviceInfo ( fInputDevice )->maxInputChannels; if ( out_max == 0 ) out_max = fPaDevices.GetDeviceInfo ( fOutputDevice )->maxOutputChannels; //effective channels if ( ( fCaptureChannels == 0 ) || ( fCaptureChannels > in_max ) ) fCaptureChannels = in_max; if ( ( fPlaybackChannels == 0 ) || ( fPlaybackChannels > out_max ) ) fPlaybackChannels = out_max; //set adapter interface channels SetInputs ( fCaptureChannels ); SetOutputs ( fPlaybackChannels ); }