Browse Source

Audio Interface: Check if stream is running directly instead of using

boolean variable
tags/v0.5.0
Andrew Belt 7 years ago
parent
commit
ef8f00be91
1 changed files with 3 additions and 7 deletions
  1. +3
    -7
      src/core/AudioInterface.cpp

+ 3
- 7
src/core/AudioInterface.cpp View File

@@ -38,7 +38,6 @@ struct AudioInterface : Module {


// Used because the GUI thread and Rack thread can both interact with this class // Used because the GUI thread and Rack thread can both interact with this class
std::mutex bufferMutex; std::mutex bufferMutex;
bool streamRunning;


SampleRateConverter<8> inputSrc; SampleRateConverter<8> inputSrc;
SampleRateConverter<8> outputSrc; SampleRateConverter<8> outputSrc;
@@ -116,12 +115,12 @@ struct AudioInterface : Module {
void AudioInterface::step() { void AudioInterface::step() {
// Read/write stream if we have enough input, OR the output buffer is empty if we have no input // Read/write stream if we have enough input, OR the output buffer is empty if we have no input
if (numOutputs > 0) { if (numOutputs > 0) {
while (inputSrcBuffer.size() >= blockSize && streamRunning) {
while (inputSrcBuffer.size() >= blockSize && stream.isStreamRunning()) {
std::this_thread::sleep_for(std::chrono::duration<float>(100e-6)); std::this_thread::sleep_for(std::chrono::duration<float>(100e-6));
} }
} }
else if (numInputs > 0) { else if (numInputs > 0) {
while (outputBuffer.empty() && streamRunning) {
while (outputBuffer.empty() && stream.isStreamRunning()) {
std::this_thread::sleep_for(std::chrono::duration<float>(100e-6)); std::this_thread::sleep_for(std::chrono::duration<float>(100e-6));
} }
} }
@@ -163,7 +162,7 @@ void AudioInterface::stepStream(const float *input, float *output, int numFrames
if (numOutputs > 0) { if (numOutputs > 0) {
// Wait for enough input before proceeding // Wait for enough input before proceeding
while (inputSrcBuffer.size() < numFrames) { while (inputSrcBuffer.size() < numFrames) {
if (!streamRunning)
if (!stream.isStreamRunning())
return; return;
std::this_thread::sleep_for(std::chrono::duration<float>(100e-6)); std::this_thread::sleep_for(std::chrono::duration<float>(100e-6));
} }
@@ -277,8 +276,6 @@ void AudioInterface::openDevice(int deviceId, float sampleRate, int blockSize) {
return; return;
} }


streamRunning = true;

this->sampleRate = stream.getStreamSampleRate(); this->sampleRate = stream.getStreamSampleRate();
this->deviceId = deviceId; this->deviceId = deviceId;
} }
@@ -288,7 +285,6 @@ void AudioInterface::closeDevice() {
std::lock_guard<std::mutex> lock(bufferMutex); std::lock_guard<std::mutex> lock(bufferMutex);


if (stream.isStreamOpen()) { if (stream.isStreamOpen()) {
streamRunning = false;
try { try {
stream.abortStream(); stream.abortStream();
stream.closeStream(); stream.closeStream();


Loading…
Cancel
Save