20 #include "JackPortAudioAdapter.h"    21 #include "JackError.h"    26     int JackPortAudioAdapter::Render(
const void* inputBuffer,
    28                                     unsigned long framesPerBuffer,
    33         static_cast<JackPortAudioAdapter*>(userData)->PushAndPull((jack_default_audio_sample_t**)inputBuffer, (jack_default_audio_sample_t**)outputBuffer, framesPerBuffer);
    37     JackPortAudioAdapter::JackPortAudioAdapter(jack_nframes_t buffer_size, jack_nframes_t sample_rate, 
const JSList* params)
    38             : JackAudioAdapterInterface(buffer_size, sample_rate)
    40         jack_log(
"JackPortAudioAdapter::JackPortAudioAdapter buffer_size = %d, sample_rate = %d", buffer_size, sample_rate);
    50         for (node = params; node; node = jack_slist_next(node)) {
    53             switch (param->character)
    56                 fCaptureChannels = param->value.ui;
    59                 fPlaybackChannels = param->value.ui;
    62                 if (fPaDevices.GetInputDeviceFromName(param->value.str, fInputDevice, in_max) < 0) {
    63                     jack_error(
"Can't use %s, taking default input device", param->value.str);
    68                 if (fPaDevices.GetOutputDeviceFromName(param->value.str, fOutputDevice, out_max) < 0) {
    69                     jack_error(
"Can't use %s, taking default output device", param->value.str);
    74                 SetAdaptedSampleRate(param->value.ui);
    77                 SetAdaptedBufferSize(param->value.ui);
    80                 if (fPaDevices.GetInputDeviceFromName(param->value.str, fInputDevice, in_max) < 0)
    81                     jack_error(
"Can't use %s, taking default input device", param->value.str);
    82                 if (fPaDevices.GetOutputDeviceFromName(param->value.str, fOutputDevice, out_max) < 0)
    83                     jack_error(
"Can't use %s, taking default output device", param->value.str);
    86                 fPaDevices.DisplayDevicesNames();
    89                 fQuality = param->value.ui;
    92                 fRingbufferCurSize = param->value.ui;
   100             in_max = fPaDevices.GetDeviceInfo(fInputDevice)->maxInputChannels;
   101         if (out_max == 0 && fOutputDevice != 
paNoDevice)
   102             out_max = fPaDevices.GetDeviceInfo(fOutputDevice)->maxOutputChannels;
   105         if ((fCaptureChannels == 0) || (fCaptureChannels > in_max))
   106             fCaptureChannels = in_max;
   107         if ((fPlaybackChannels == 0) || (fPlaybackChannels > out_max))
   108             fPlaybackChannels = out_max;
   111         SetInputs(fCaptureChannels);
   112         SetOutputs(fPlaybackChannels);
   115     int JackPortAudioAdapter::Open()
   126         jack_log(
"JackPortAudioAdapter::Open fInputDevice = %d DeviceName %s", fInputDevice, fPaDevices.GetFullName(fInputDevice).c_str());
   127         jack_log(
"JackPortAudioAdapter::Open fOutputDevice = %d DeviceName %s", fOutputDevice, fPaDevices.GetFullName(fOutputDevice).c_str());
   128         jack_log(
"JackPortAudioAdapter::Open fAdaptedBufferSize = %u fAdaptedSampleRate %u", fAdaptedBufferSize, fAdaptedSampleRate);
   130         inputParameters.
device = fInputDevice;
   134                                            ? fPaDevices.GetDeviceInfo(fInputDevice)->defaultLowInputLatency
   138         outputParameters.
device = fOutputDevice;
   142                                             ? fPaDevices.GetDeviceInfo(fOutputDevice)->defaultLowOutputLatency
   147                            (fInputDevice == 
paNoDevice) ? 0 : &inputParameters,
   148                            (fOutputDevice == 
paNoDevice) ? 0 : &outputParameters,
   155         if (err != paNoError) {
   162         if (err != paNoError) {
   167         jack_log(
"JackPortAudioAdapter::Open OK");
   171     int JackPortAudioAdapter::Close()
   174         fTable.Save(fHostBufferSize, fHostSampleRate, fAdaptedSampleRate, fAdaptedBufferSize);
   176         jack_log(
"JackPortAudioAdapter::Close");
   178         jack_log(
"JackPortAudioAdapter:: Pa_StopStream");
   180         jack_log(
"JackPortAudioAdapter:: Pa_CloseStream");
   184     int JackPortAudioAdapter::SetSampleRate(jack_nframes_t sample_rate)
   186         JackAudioAdapterInterface::SetHostSampleRate(sample_rate);
   191     int JackPortAudioAdapter::SetBufferSize(jack_nframes_t buffer_size)
   193         JackAudioAdapterInterface::SetHostBufferSize(buffer_size);
   211         desc = jack_driver_descriptor_construct(
"audioadapter", JackDriverNone, 
"netjack audio <==> net backend adapter", &filler);
   214         jack_driver_descriptor_add_parameter(desc, &filler, 
"in-channels", 
'i', JackDriverParamInt, &value, NULL, 
"Maximum number of input channels", NULL);
   215         jack_driver_descriptor_add_parameter(desc, &filler, 
"out-channels", 
'o', JackDriverParamInt, &value, NULL, 
"Maximum number of output channels", NULL);
   217         jack_driver_descriptor_add_parameter(desc, &filler, 
"capture", 
'C', JackDriverParamString, &value, NULL, 
"Provide capture ports. Optionally set PortAudio device name", NULL);
   219         jack_driver_descriptor_add_parameter(desc, &filler, 
"playback", 
'P', JackDriverParamString, &value, NULL, 
"Provide playback ports. Optionally set PortAudio device name", NULL);
   222         jack_driver_descriptor_add_parameter(desc, &filler, 
"rate", 
'r', JackDriverParamUInt, &value, NULL, 
"Sample rate", NULL);
   225         jack_driver_descriptor_add_parameter(desc, &filler, 
"periodsize", 
'p', JackDriverParamUInt, &value, NULL, 
"Period size", NULL);
   227         jack_driver_descriptor_add_parameter(desc, &filler, 
"device", 
'd', JackDriverParamString, &value, NULL, 
"PortAudio device name", NULL);
   230         jack_driver_descriptor_add_parameter(desc, &filler, 
"list-devices", 
'l', JackDriverParamBool, &value, NULL, 
"Display available PortAudio devices", NULL);
   233         jack_driver_descriptor_add_parameter(desc, &filler, 
"quality", 
'q', JackDriverParamInt, &value, NULL, 
"Resample algorithm quality (0 - 4)", NULL);
   236         jack_driver_descriptor_add_parameter(desc, &filler, 
"ring-buffer", 
'g', JackDriverParamInt, &value, NULL, 
"Fixed ringbuffer size", 
"Fixed ringbuffer size (if not set => automatic adaptative)");
 PaDeviceIndex Pa_GetDefaultInputDevice(void)
PaError Pa_StopStream(PaStream *stream)
SERVER_EXPORT void jack_error(const char *fmt,...)
PaError Pa_OpenStream(PaStream **stream, const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters, double sampleRate, unsigned long framesPerBuffer, PaStreamFlags streamFlags, PaStreamCallback *streamCallback, void *userData)
PaError Pa_StartStream(PaStream *stream)
void * hostApiSpecificStreamInfo
PaSampleFormat sampleFormat
unsigned long PaStreamCallbackFlags
PaDeviceIndex Pa_GetDefaultOutputDevice(void)
const char * Pa_GetErrorText(PaError errorCode)
SERVER_EXPORT void jack_log(const char *fmt,...)
PaError Pa_CloseStream(PaStream *stream)