Converting audio provider didn't know about channel count during bitdepth and samplerate conversion and intermixed samples from channels and more, resulting in garbage output. Fixes #726.

Originally committed to SVN as r2933.
This commit is contained in:
Niels Martin Hansen 2009-05-15 00:48:43 +00:00
parent 863d89ba4f
commit 44e17e9e11
1 changed files with 6 additions and 6 deletions

View File

@ -135,17 +135,17 @@ void ConvertAudioProvider::GetAudio(void *destination, int64_t start, int64_t co
short *last = NULL;
// Read audio
buffer1 = new short[fullSize];
buffer1 = new short[fullSize * channels];
source->GetAudio(buffer1,start/sampleMult,srcCount);
// Convert from 8-bit to 16-bit
if (srcBps == 1) {
if (sampleMult == 1) {
Make16Bit((const char*)buffer1,(short*)destination,srcCount);
Make16Bit((const char*)buffer1,(short*)destination,srcCount * channels);
}
else {
buffer2 = new short[fullSize];
Make16Bit((const char*)buffer1,buffer2,srcCount);
buffer2 = new short[fullSize * channels];
Make16Bit((const char*)buffer1,buffer2,srcCount * channels);
last = buffer2;
}
}
@ -155,7 +155,7 @@ void ConvertAudioProvider::GetAudio(void *destination, int64_t start, int64_t co
// Convert sample rate
if (sampleMult != 1) {
ChangeSampleRate(last,(short*)destination,count);
ChangeSampleRate(last,(short*)destination,count * channels);
}
delete [] buffer1;
@ -167,7 +167,7 @@ void ConvertAudioProvider::GetAudio(void *destination, int64_t start, int64_t co
AudioProvider *CreateConvertAudioProvider(AudioProvider *source_provider) {
AudioProvider *provider = source_provider;
if (provider->GetBytesPerSample() != 2 || provider->GetSampleRate() < 32000)
provider = new ConvertAudioProvider(source_provider);
provider = new ConvertAudioProvider(provider);
if (provider->GetChannels() != 1)
provider = new DownmixingAudioProvider(provider);