From 26713c3fd80b512494ec6033c23c1c674085f94a Mon Sep 17 00:00:00 2001 From: Dimitri Diakopoulos Date: Mon, 25 Jul 2016 09:05:07 -0700 Subject: [PATCH] add rtaudio params for audio device input --- include/libnyquist/AudioDevice.h | 24 +++++++++++------------- src/AudioDevice.cpp | 15 ++++++++++----- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/include/libnyquist/AudioDevice.h b/include/libnyquist/AudioDevice.h index b3b2922..c6500e4 100644 --- a/include/libnyquist/AudioDevice.h +++ b/include/libnyquist/AudioDevice.h @@ -43,32 +43,27 @@ const uint32_t FRAME_SIZE = 512; const int32_t CHANNELS = 2; const int32_t BUFFER_LENGTH = FRAME_SIZE * CHANNELS; -struct DeviceInfo +struct AudioDeviceInfo { - int id; - int numChannels; - int sampleRate; - unsigned int frameSize; + uint32_t id; + uint32_t numChannels; + uint32_t sampleRate; + uint32_t frameSize; bool isPlaying = false; }; class AudioDevice { - NO_MOVE(AudioDevice); - std::unique_ptr rtaudio; - public: - DeviceInfo info; - - static void ListAudioDevices(); + AudioDeviceInfo info; AudioDevice(int numChannels, int sampleRate, int deviceId = -1) { rtaudio = std::unique_ptr(new RtAudio); - info.id = deviceId != -1 ? deviceId : rtaudio->getDefaultOutputDevice(); + info.id = (deviceId != -1) ? deviceId : rtaudio->getDefaultOutputDevice(); info.numChannels = numChannels; info.sampleRate = sampleRate; info.frameSize = FRAME_SIZE; @@ -80,14 +75,17 @@ public: { rtaudio->stopStream(); if (rtaudio->isStreamOpen()) + { rtaudio->closeStream(); + } } } bool Open(const int deviceId); bool Play(const std::vector & data); - + + static void ListAudioDevices(); }; } // end namespace nqr diff --git a/src/AudioDevice.cpp b/src/AudioDevice.cpp index f37cd82..9632908 100644 --- a/src/AudioDevice.cpp +++ b/src/AudioDevice.cpp @@ -53,12 +53,17 @@ bool AudioDevice::Open(const int deviceId) { if (!rtaudio) throw std::runtime_error("rtaudio not created yet"); - RtAudio::StreamParameters parameters; - parameters.deviceId = info.id; - parameters.nChannels = info.numChannels; - parameters.firstChannel = 0; + RtAudio::StreamParameters outputParams; + outputParams.deviceId = info.id; + outputParams.nChannels = info.numChannels; + outputParams.firstChannel = 0; - rtaudio->openStream(¶meters, NULL, RTAUDIO_FLOAT32, info.sampleRate, &info.frameSize, &rt_callback, (void*) & buffer); + RtAudio::StreamParameters inputParams; + inputParams.deviceId = info.id; + inputParams.nChannels = info.numChannels; + inputParams.firstChannel = 0; + + rtaudio->openStream(&outputParams, &inputParams, RTAUDIO_FLOAT32, info.sampleRate, &info.frameSize, &rt_callback, (void*) & buffer); if (rtaudio->isStreamOpen()) {