Skip to content

Commit

Permalink
Merge pull request #36 from spmp/feature/spmp-rtaudio-deviceid
Browse files Browse the repository at this point in the history
Select device ID when using rtaudio
  • Loading branch information
jcacerec committed Aug 27, 2018
2 parents 0507560 + 331d154 commit 2596fc2
Show file tree
Hide file tree
Showing 8 changed files with 40 additions and 7 deletions.
5 changes: 5 additions & 0 deletions src/AudioInterface.h
Expand Up @@ -151,6 +151,8 @@ class AudioInterface
{ mNumOutChans = nchannels; }
virtual void setSampleRate(uint32_t sample_rate)
{ mSampleRate = sample_rate; }
virtual void setDeviceID(uint32_t device_id)
{ mDeviceID = device_id; }
virtual void setBufferSizeInSamples(uint32_t buf_size)
{ mBufferSizeInSamples = buf_size; }
/// \brief Set Client Name to something different that the default (JackTrip)
Expand All @@ -164,6 +166,8 @@ class AudioInterface
virtual int getNumOutputChannels() const { return mNumOutChans; }
virtual uint32_t getBufferSizeInSamples() const
{ return mBufferSizeInSamples; }
virtual uint32_t getDeviceID() const
{ return mDeviceID; }
virtual size_t getSizeInBytesPerChannel() const;
/// \brief Get the Jack Server Sampling Rate, in samples/second
virtual uint32_t getSampleRate() const
Expand Down Expand Up @@ -200,6 +204,7 @@ class AudioInterface
int mAudioBitResolution; ///< Bit resolution in audio samples
AudioInterface::audioBitResolutionT mBitResolutionMode; ///< Bit resolution (audioBitResolutionT) mode
uint32_t mSampleRate; ///< Sampling Rate
uint32_t mDeviceID; ///< RTAudio DeviceID
uint32_t mBufferSizeInSamples; ///< Buffer size in samples
size_t mSizeInBytesPerChannel; ///< Size in bytes per audio channel
QVector<ProcessPlugin*> mProcessPlugins; ///< Vector of ProcesPlugin<EM>s</EM>
Expand Down
6 changes: 6 additions & 0 deletions src/JackTrip.cpp
Expand Up @@ -82,6 +82,7 @@ JackTrip::JackTrip(jacktripModeT JacktripMode,
mNumChans(NumChans),
mBufferQueueLength(BufferQueueLength),
mSampleRate(gDefaultSampleRate),
mDeviceID(gDefaultDeviceID),
mAudioBufferSize(gDefaultBufferSizeInSamples),
mAudioBitResolution(AudioBitResolution),
mDataProtocolSender(NULL),
Expand Down Expand Up @@ -139,13 +140,15 @@ void JackTrip::setupAudio()
mAudioInterface->setClientName(mJackClientName);
mAudioInterface->setup();
mSampleRate = mAudioInterface->getSampleRate();
mDeviceID = mAudioInterface->getDeviceID();
mAudioBufferSize = mAudioInterface->getBufferSizeInSamples();
#endif //__NON_JACK__
#ifdef __NO_JACK__ /// \todo FIX THIS REPETITION OF CODE
#ifdef __RT_AUDIO__
cout << "Warning: using non jack version, RtAudio will be used instead" << endl;
mAudioInterface = new RtAudioInterface(this, mNumChans, mNumChans, mAudioBitResolution);
mAudioInterface->setSampleRate(mSampleRate);
mAudioInterface->setDeviceID(mDeviceID);
mAudioInterface->setBufferSizeInSamples(mAudioBufferSize);
mAudioInterface->setup();
#endif
Expand All @@ -155,6 +158,7 @@ void JackTrip::setupAudio()
#ifdef __RT_AUDIO__
mAudioInterface = new RtAudioInterface(this, mNumChans, mNumChans, mAudioBitResolution);
mAudioInterface->setSampleRate(mSampleRate);
mAudioInterface->setDeviceID(mDeviceID);
mAudioInterface->setBufferSizeInSamples(mAudioBufferSize);
mAudioInterface->setup();
#endif
Expand All @@ -169,6 +173,8 @@ void JackTrip::setupAudio()
std::cout << gPrintSeparator << std::endl;
cout << "The Number of Channels is: " << mAudioInterface->getNumInputChannels() << endl;
std::cout << gPrintSeparator << std::endl;
cout << "The RTAudio device ID is: " << mAudioInterface->getDeviceID() << endl;
std::cout << gPrintSeparator << std::endl;
QThread::usleep(100);
}

Expand Down
6 changes: 6 additions & 0 deletions src/JackTrip.h
Expand Up @@ -259,8 +259,11 @@ class JackTrip : public QThread

void setSampleRate(uint32_t sample_rate)
{ mSampleRate = sample_rate; }
void setDeviceID(uint32_t device_id)
{ mDeviceID = device_id; }
void setAudioBufferSizeInSamples(uint32_t buf_size)
{ mAudioBufferSize = buf_size; }


JackTrip::connectionModeT getConnectionMode() const
{ return mConnectionMode; }
Expand Down Expand Up @@ -300,6 +303,8 @@ class JackTrip : public QThread
{ mReceiveRingBuffer->insertSlotNonBlocking(ptrToSlot); }
uint32_t getBufferSizeInSamples() const
{ return mAudioBufferSize; /*return mAudioInterface->getBufferSizeInSamples();*/ }
uint32_t getDeviceID() const
{ return mDeviceID; /*return mAudioInterface->mDeviceID();*/ }

AudioInterface::samplingRateT getSampleRateType() const
{ return mAudioInterface->getSampleRateType(); }
Expand Down Expand Up @@ -431,6 +436,7 @@ public slots:
int mNumChans; ///< Number of Channels (inputs = outputs)
int mBufferQueueLength; ///< Audio Buffer from network queue length
uint32_t mSampleRate; ///< Sample Rate
uint32_t mDeviceID; ///< RTAudio DeviceID
uint32_t mAudioBufferSize; ///< Audio buffer size to process on each callback
AudioInterface::audioBitResolutionT mAudioBitResolution; ///< Audio Bit Resolutions
QString mPeerAddress; ///< Peer Address to use in jacktripModeT::CLIENT Mode
Expand Down
10 changes: 5 additions & 5 deletions src/RtAudioInterface.cpp
Expand Up @@ -85,10 +85,10 @@ void RtAudioInterface::setup()
RtAudio::DeviceInfo info_input;
RtAudio::DeviceInfo info_output;

int deviceId_input; int deviceId_output;
uint32_t deviceId_input; uint32_t deviceId_output;
// use default devices
deviceId_input = mRtAudio->getDefaultInputDevice();
deviceId_output = mRtAudio->getDefaultOutputDevice();
deviceId_input = mJackTrip->getDeviceID();
deviceId_output = mJackTrip->getDeviceID();

cout << "DEFAULT INPUT DEVICE : " << endl;
printDeviceInfo(deviceId_input);
Expand All @@ -98,8 +98,8 @@ void RtAudioInterface::setup()
cout << gPrintSeparator << endl;

RtAudio::StreamParameters in_params, out_params;
in_params.deviceId = mRtAudio->getDefaultInputDevice();
out_params.deviceId = mRtAudio->getDefaultOutputDevice();
in_params.deviceId = deviceId_input;
out_params.deviceId = deviceId_output;
in_params.nChannels = getNumInputChannels();
out_params.nChannels = getNumOutputChannels();

Expand Down
2 changes: 1 addition & 1 deletion src/RtAudioInterface.h
Expand Up @@ -38,7 +38,7 @@
#ifndef __RTAUDIOINTERFACE_H__
#define __RTAUDIOINTERFACE_H__

#include "RtAudio.h"
#include "rtaudio/RtAudio.h"

#include "AudioInterface.h"
#include "jacktrip_globals.h"
Expand Down
15 changes: 14 additions & 1 deletion src/Settings.cpp
Expand Up @@ -72,6 +72,7 @@ Settings::Settings() :
mRedundancy(1),
mUseJack(true),
mChanfeDefaultSR(false),
mChanfeDefaultID(0),
mChanfeDefaultBS(false),
mConnectDefaultAudioPorts(true)
{}
Expand Down Expand Up @@ -119,6 +120,7 @@ void Settings::parseInput(int argc, char** argv)
{ "clientname", required_argument, NULL, 'J' }, // Run in JamLink mode
{ "rtaudio", no_argument, NULL, 'R' }, // Run in JamLink mode
{ "srate", required_argument, NULL, 'T' }, // Set Sample Rate
{ "deviceid", required_argument, NULL, 'd' }, // Set RTAudio device id to use
{ "bufsize", required_argument, NULL, 'F' }, // Set buffer Size
{ "nojackportsconnect" , no_argument, NULL, 'D'}, // Don't connect default Audio Ports
{ "version", no_argument, NULL, 'v' }, // Version Number
Expand All @@ -131,7 +133,7 @@ void Settings::parseInput(int argc, char** argv)
/// \todo Specify mandatory arguments
int ch;
while ( (ch = getopt_long(argc, argv,
"n:sc:SC:o:B:P:q:r:b:zljeJ:RT:F:Dvh", longopts, NULL)) != -1 )
"n:sc:SC:o:B:P:q:r:b:zljeJ:RTd:F:Dvh", longopts, NULL)) != -1 )
switch (ch) {

case 'n': // Number of input and output channels
Expand Down Expand Up @@ -238,6 +240,11 @@ void Settings::parseInput(int argc, char** argv)
mChanfeDefaultSR = true;
mSampleRate = atoi(optarg);
break;
case 'd': // RTAudio device id
//-------------------------------------------------------
mChanfeDefaultID = true;
mDeviceID = atoi(optarg);
break;
case 'F': // Buffer Size
//-------------------------------------------------------
mChanfeDefaultBS = true;
Expand Down Expand Up @@ -321,6 +328,7 @@ void Settings::printUsage()
cout << " --rtaudio Use system's default sound system instead of Jack" << endl;
cout << " --srate # Set the sampling rate, works on --rtaudio mode only (default: 48000)" << endl;
cout << " --bufsize # Set the buffer size, works on --rtaudio mode only (default: 128)" << endl;
cout << " --deviceid # The rtaudio device id --rtaudio mode only (default: 0)" << endl;
cout << endl;
cout << "HELP ARGUMENTS: " << endl;
cout << " -v, --version Prints Version Number" << endl;
Expand Down Expand Up @@ -418,6 +426,11 @@ void Settings::startJackTrip()
if (mChanfeDefaultSR) {
mJackTrip->setSampleRate(mSampleRate);
}

// Chanfe defualt device ID
if (mChanfeDefaultID) {
mJackTrip->setDeviceID(mDeviceID);
}

// Chanfe default Buffer Size
if (mChanfeDefaultBS) {
Expand Down
2 changes: 2 additions & 0 deletions src/Settings.h
Expand Up @@ -99,8 +99,10 @@ public slots:
unsigned int mRedundancy; ///< Redundancy factor for data in the network
bool mUseJack; ///< Use or not JackAduio
bool mChanfeDefaultSR; ///< Change Default Sampling Rate
bool mChanfeDefaultID; ///< Change Default device ID
bool mChanfeDefaultBS; ///< Change Default Buffer Size
unsigned int mSampleRate;
unsigned int mDeviceID;
unsigned int mAudioBufferSize;
bool mConnectDefaultAudioPorts; ///< Connect or not jack audio ports
};
Expand Down
1 change: 1 addition & 0 deletions src/jacktrip_globals.h
Expand Up @@ -58,6 +58,7 @@ const AudioInterface::audioBitResolutionT gDefaultBitResolutionMode =
const int gDefaultQueueLength = 4;
const int gDefaultOutputQueueLength = 4;
const uint32_t gDefaultSampleRate = 48000;
const uint32_t gDefaultDeviceID = 0;
const uint32_t gDefaultBufferSizeInSamples = 128;
const QString gDefaultLocalAddress = QString();
const int gDefaultRedundancy = 1;
Expand Down

0 comments on commit 2596fc2

Please sign in to comment.