Fix querying the default audio recording device, some Source code style cleanups.

This commit is contained in:
Alex Szpakowski
2018-03-11 18:47:44 -03:00
parent 3a2ffc5e07
commit 3949fde802
2 changed files with 92 additions and 92 deletions
+1 -1
View File
@@ -408,7 +408,7 @@ const std::vector<love::audio::RecordingDevice*> &Audio::getRecordingDevices()
if (defaultname.length() == 0)
{
//use some safe basic parameters - 8 kHz, 8 bits, 1 channel
ALCdevice *defaultdevice = alcCaptureOpenDevice(NULL, 8000, 8, 1);
ALCdevice *defaultdevice = alcCaptureOpenDevice(NULL, 8000, AL_FORMAT_MONO8, 1024);
if (alGetError() == AL_NO_ERROR)
{
defaultname = alcGetString(defaultdevice, ALC_CAPTURE_DEVICE_SPECIFIER);
+91 -91
View File
@@ -610,36 +610,36 @@ double Source::getDuration(Unit unit)
switch (sourceType)
{
case TYPE_STATIC:
{
ALsizei size = staticBuffer->getSize();
ALsizei samples = (size / channels) / (bitDepth / 8);
case TYPE_STATIC:
{
ALsizei size = staticBuffer->getSize();
ALsizei samples = (size / channels) / (bitDepth / 8);
if (unit == UNIT_SAMPLES)
return (double) samples;
else
return (double) samples / (double) sampleRate;
}
case TYPE_STREAM:
{
double seconds = decoder->getDuration();
if (unit == UNIT_SAMPLES)
return (double) samples;
else
return (double) samples / (double) sampleRate;
}
case TYPE_STREAM:
{
double seconds = decoder->getDuration();
if (unit == UNIT_SECONDS)
return seconds;
else
return seconds * decoder->getSampleRate();
}
case TYPE_QUEUE:
{
ALsizei samples = (bufferedBytes / channels) / (bitDepth / 8);
if (unit == UNIT_SECONDS)
return seconds;
else
return seconds * decoder->getSampleRate();
}
case TYPE_QUEUE:
{
ALsizei samples = (bufferedBytes / channels) / (bitDepth / 8);
if (unit == UNIT_SAMPLES)
return (double)samples;
else
return (double)samples / (double)sampleRate;
}
case TYPE_MAX_ENUM:
return 0.0;
if (unit == UNIT_SAMPLES)
return (double)samples;
else
return (double)samples / (double)sampleRate;
}
case TYPE_MAX_ENUM:
return 0.0;
}
return 0.0;
}
@@ -813,14 +813,14 @@ int Source::getFreeBufferCount() const
{
switch (sourceType) //why not :^)
{
case TYPE_STATIC:
return 0;
case TYPE_STREAM:
return unusedBuffers.size();
case TYPE_QUEUE:
return unusedBuffers.size();
case TYPE_MAX_ENUM:
return 0;
case TYPE_STATIC:
return 0;
case TYPE_STREAM:
return unusedBuffers.size();
case TYPE_QUEUE:
return unusedBuffers.size();
case TYPE_MAX_ENUM:
return 0;
}
return 0;
}
@@ -834,34 +834,34 @@ void Source::prepareAtomic()
switch (sourceType)
{
case TYPE_STATIC:
alSourcei(source, AL_BUFFER, staticBuffer->getBuffer());
break;
case TYPE_STREAM:
while (!unusedBuffers.empty())
{
auto b = unusedBuffers.top();
if (streamAtomic(b, decoder.get()) == 0)
break;
alSourceQueueBuffers(source, 1, &b);
unusedBuffers.pop();
if (decoder->isFinished())
break;
}
break;
case TYPE_QUEUE:
case TYPE_STATIC:
alSourcei(source, AL_BUFFER, staticBuffer->getBuffer());
break;
case TYPE_STREAM:
while (!unusedBuffers.empty())
{
while (!streamBuffers.empty())
{
alSourceQueueBuffers(source, 1, &streamBuffers.front());
streamBuffers.pop();
}
break;
auto b = unusedBuffers.top();
if (streamAtomic(b, decoder.get()) == 0)
break;
alSourceQueueBuffers(source, 1, &b);
unusedBuffers.pop();
if (decoder->isFinished())
break;
}
case TYPE_MAX_ENUM:
break;
break;
case TYPE_QUEUE:
{
while (!streamBuffers.empty())
{
alSourceQueueBuffers(source, 1, &streamBuffers.front());
streamBuffers.pop();
}
break;
}
case TYPE_MAX_ENUM:
break;
}
}
@@ -869,39 +869,39 @@ void Source::teardownAtomic()
{
switch (sourceType)
{
case TYPE_STATIC:
break;
case TYPE_STREAM:
{
ALint queued;
ALuint buffer;
case TYPE_STATIC:
break;
case TYPE_STREAM:
{
ALint queued;
ALuint buffer;
decoder->seek(0);
// drain buffers
//since we only unqueue 1 buffer, it's OK to use singular variable pointer instead of array
alGetSourcei(source, AL_BUFFERS_QUEUED, &queued);
for (unsigned int i = 0; i < (unsigned int)queued; i++)
{
alSourceUnqueueBuffers(source, 1, &buffer);
unusedBuffers.push(buffer);
}
break;
}
case TYPE_QUEUE:
decoder->seek(0);
// drain buffers
//since we only unqueue 1 buffer, it's OK to use singular variable pointer instead of array
alGetSourcei(source, AL_BUFFERS_QUEUED, &queued);
for (unsigned int i = 0; i < (unsigned int)queued; i++)
{
ALint queued;
ALuint buffer;
alGetSourcei(source, AL_BUFFERS_QUEUED, &queued);
for (unsigned int i = (unsigned int)queued; i > 0; i--)
{
alSourceUnqueueBuffers(source, 1, &buffer);
unusedBuffers.push(buffer);
}
break;
alSourceUnqueueBuffers(source, 1, &buffer);
unusedBuffers.push(buffer);
}
case TYPE_MAX_ENUM:
break;
break;
}
case TYPE_QUEUE:
{
ALint queued;
ALuint buffer;
alGetSourcei(source, AL_BUFFERS_QUEUED, &queued);
for (unsigned int i = (unsigned int)queued; i > 0; i--)
{
alSourceUnqueueBuffers(source, 1, &buffer);
unusedBuffers.push(buffer);
}
break;
}
case TYPE_MAX_ENUM:
break;
}
alSourcei(source, AL_BUFFER, AL_NONE);