block_alignment for AL_SOFT_block_alignment is in samples, not in bytes
This commit is contained in:
@@ -570,24 +570,39 @@ unsigned int SGSoundMgr::request_buffer(SGSoundSample *sample)
|
|||||||
sample_data = sample->get_data();
|
sample_data = sample->get_data();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ALenum format = AL_NONE;
|
||||||
|
switch( sample->get_format() )
|
||||||
|
{
|
||||||
|
case SG_SAMPLE_MONO16:
|
||||||
|
format = AL_FORMAT_MONO16;
|
||||||
|
break;
|
||||||
|
case SG_SAMPLE_MONO8:
|
||||||
|
format = AL_FORMAT_MONO8;
|
||||||
|
break;
|
||||||
|
case SG_SAMPLE_MULAW:
|
||||||
|
format = AL_FORMAT_MONO_MULAW_EXT;
|
||||||
|
break;
|
||||||
|
case SG_SAMPLE_ADPCM:
|
||||||
|
format = AL_FORMAT_MONO_IMA4;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
SG_LOG(SG_SOUND, SG_ALERT, "unsupported audio format");
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
// create an OpenAL buffer handle
|
// create an OpenAL buffer handle
|
||||||
alGenBuffers(1, &buffer);
|
alGenBuffers(1, &buffer);
|
||||||
if ( !testForError("generate buffer") ) {
|
if ( !testForError("generate buffer") ) {
|
||||||
// Copy data to the internal OpenAL buffer
|
// Copy data to the internal OpenAL buffer
|
||||||
|
|
||||||
ALenum format = AL_NONE;
|
|
||||||
unsigned int fmt = sample->get_format();
|
|
||||||
if (fmt == SG_SAMPLE_MONO16) format = AL_FORMAT_MONO16;
|
|
||||||
else if (fmt == SG_SAMPLE_MONO8) format = AL_FORMAT_MONO8;
|
|
||||||
else if (fmt == SG_SAMPLE_MULAW) format = AL_FORMAT_MONO_MULAW_EXT;
|
|
||||||
else if (fmt == SG_SAMPLE_ADPCM) format = AL_FORMAT_MONO_IMA4;
|
|
||||||
|
|
||||||
ALsizei size = sample->get_size();
|
ALsizei size = sample->get_size();
|
||||||
ALsizei freq = sample->get_frequency();
|
ALsizei freq = sample->get_frequency();
|
||||||
alBufferData( buffer, format, sample_data, size, freq );
|
alBufferData( buffer, format, sample_data, size, freq );
|
||||||
|
|
||||||
if (_block_support) {
|
if (format == AL_FORMAT_MONO_IMA4 && _block_support) {
|
||||||
ALsizei block_align = sample->get_block_align();
|
ALsizei block_align = sample->get_block_align();
|
||||||
|
|
||||||
|
block_align *= 2; // convert from bytes to samples
|
||||||
alBufferi (buffer, AL_UNPACK_BLOCK_ALIGNMENT_SOFT, block_align);
|
alBufferi (buffer, AL_UNPACK_BLOCK_ALIGNMENT_SOFT, block_align);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user