diff --git a/src/audio.cpp b/src/audio.cpp index 10c3c8db..cc80df47 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -130,12 +130,19 @@ void AudioIO::openStream() { RtAudio::StreamOptions options; // options.flags |= RTAUDIO_SCHEDULE_REALTIME; + int closestSampleRate = deviceInfo.preferredSampleRate; + for (int sr : deviceInfo.sampleRates) { + if (abs(sr - sampleRate) < abs(closestSampleRate - sampleRate)) { + closestSampleRate = sr; + } + } + try { debug("Opening audio stream %d", device); stream->openStream( numOutputs == 0 ? NULL : &outParameters, numInputs == 0 ? NULL : &inParameters, - RTAUDIO_FLOAT32, sampleRate, (unsigned int*) &blockSize, &rtCallback, this, &options, NULL); + RTAUDIO_FLOAT32, closestSampleRate, (unsigned int*) &blockSize, &rtCallback, this, &options, NULL); } catch (RtAudioError &e) { warn("Failed to open audio stream: %s", e.what()); diff --git a/src/core/AudioInterface.cpp b/src/core/AudioInterface.cpp index 2cdd81fe..d990f8bb 100644 --- a/src/core/AudioInterface.cpp +++ b/src/core/AudioInterface.cpp @@ -96,8 +96,8 @@ struct AudioInterface : Module { AudioInterfaceIO audioIO; - SampleRateConverter<8> inputSrc; - SampleRateConverter<8> outputSrc; + SampleRateConverter inputSrc; + SampleRateConverter outputSrc; // in rack's sample rate DoubleRingBuffer, 16> inputBuffer; @@ -107,8 +107,6 @@ struct AudioInterface : Module { } void step() override; - void stepStream(const float *input, float *output, int numFrames); - json_t *toJson() override { json_t *rootJ = json_object();