|
@@ -149,7 +149,7 @@ class ALSADevice |
|
|
{
|
|
|
{
|
|
|
public:
|
|
|
public:
|
|
|
ALSADevice (const String& devID, bool forInput)
|
|
|
ALSADevice (const String& devID, bool forInput)
|
|
|
: handle (0),
|
|
|
|
|
|
|
|
|
: handle (nullptr),
|
|
|
bitDepth (16),
|
|
|
bitDepth (16),
|
|
|
numChannelsRunning (0),
|
|
|
numChannelsRunning (0),
|
|
|
latency (0),
|
|
|
latency (0),
|
|
@@ -183,16 +183,16 @@ public: |
|
|
|
|
|
|
|
|
void closeNow()
|
|
|
void closeNow()
|
|
|
{
|
|
|
{
|
|
|
if (handle != 0)
|
|
|
|
|
|
|
|
|
if (handle != nullptr)
|
|
|
{
|
|
|
{
|
|
|
snd_pcm_close (handle);
|
|
|
snd_pcm_close (handle);
|
|
|
handle = 0;
|
|
|
|
|
|
|
|
|
handle = nullptr;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
bool setParameters (unsigned int sampleRate, int numChannels, int bufferSize)
|
|
|
bool setParameters (unsigned int sampleRate, int numChannels, int bufferSize)
|
|
|
{
|
|
|
{
|
|
|
if (handle == 0)
|
|
|
|
|
|
|
|
|
if (handle == nullptr)
|
|
|
return false;
|
|
|
return false;
|
|
|
|
|
|
|
|
|
JUCE_ALSA_LOG ("ALSADevice::setParameters(" << deviceID << ", "
|
|
|
JUCE_ALSA_LOG ("ALSADevice::setParameters(" << deviceID << ", "
|
|
@@ -644,8 +644,21 @@ public: |
|
|
{
|
|
|
{
|
|
|
while (! threadShouldExit())
|
|
|
while (! threadShouldExit())
|
|
|
{
|
|
|
{
|
|
|
if (inputDevice != nullptr && inputDevice->handle)
|
|
|
|
|
|
|
|
|
if (inputDevice != nullptr && inputDevice->handle != nullptr)
|
|
|
{
|
|
|
{
|
|
|
|
|
|
if (outputDevice == nullptr || outputDevice->handle == nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
JUCE_ALSA_FAILED (snd_pcm_wait (inputDevice->handle, 2000));
|
|
|
|
|
|
|
|
|
|
|
|
if (threadShouldExit())
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
snd_pcm_sframes_t avail = snd_pcm_avail_update (inputDevice->handle);
|
|
|
|
|
|
|
|
|
|
|
|
if (avail < 0)
|
|
|
|
|
|
JUCE_ALSA_FAILED (snd_pcm_recover (inputDevice->handle, avail, 0));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
audioIoInProgress = true;
|
|
|
audioIoInProgress = true;
|
|
|
|
|
|
|
|
|
if (! inputDevice->readFromInputDevice (inputChannelBuffer, bufferSize))
|
|
|
if (! inputDevice->readFromInputDevice (inputChannelBuffer, bufferSize))
|
|
@@ -679,7 +692,7 @@ public: |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
if (outputDevice != nullptr && outputDevice->handle)
|
|
|
|
|
|
|
|
|
if (outputDevice != nullptr && outputDevice->handle != nullptr)
|
|
|
{
|
|
|
{
|
|
|
JUCE_ALSA_FAILED (snd_pcm_wait (outputDevice->handle, 2000));
|
|
|
JUCE_ALSA_FAILED (snd_pcm_wait (outputDevice->handle, 2000));
|
|
|
|
|
|
|
|
@@ -702,6 +715,7 @@ public: |
|
|
audioIoInProgress = false;
|
|
|
audioIoInProgress = false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
audioIoInProgress = false;
|
|
|
audioIoInProgress = false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|