Итак, я создаю поточный декодер IMA ADPCM для потоковой передачи аудиоданных в OpenAL (см. Ниже для краткого описания), но я столкнулся с некоторыми проблемами.OpenAL: alBufferData возвращает AL_INVALID_VALUE, хотя входные переменные * выглядят * ОК?
Одна из моих проблем является то, что иногда мой призыв к alBufferData:
alBufferData(*bufferID, format, pcmData, sizeInBytes, bitRate);
возвращает AL_INVALID_VALUE
даже хотя при проверке параметров они выглядят, например, так:
bufferID='109770616', format='AL_FORMAT_STEREO16', dataPtr='109754188', sizeInBytes='8164'
Любые подсказки, кто-нибудь? Фактический звук воспроизводится в виде заикания, когда это происходит, и ошибка обычно происходит ~ 10 раз подряд (на одном и том же звуке). Кроме того, как правило, происходит, когда я неоднократно начать тот же звук (например, при съемке коротких очередей с LMG ...;))
Быстрых упрощенного туром потоковой-декодер модуля-вещь
Как воспроизводится звук:
- Звук запускается для воспроизведения.
- Звучит один звук с буфером, а остальные помещаются в очередь для дальнейшего декодирования.
- OpenAL запускается, чтобы начать воспроизведение звука.
декодирование/потокового цикл
- Для каждого звука в очереди для декодирования, декодирования BufferSize ценности аудио.
- Декодированный звук добавляется в альбуффер (см. Вызов выше) с соответствующим идентификатором буфера.
Имеет ли целое число, для которого указывает буферный идентификатор, действительный идентификатор буфера? Если бы он был создан с помощью alGenBuffers? –
Значение bufferID похоже на значение dataPtr. Скорее это указатель. Вы печатаете bufferID или * bufferID? Меня больше интересует * bufferID. –
Игнорировать выше комментарий, я слишком медленно редактировал его: Hiya @ Mārtiņš! Значение 'bufferID' - это значение, показанное выше (' '109770616''). БуферID генерируется и используется следующим образом: 'alGenBuffers' ->' alBufferData' -> 'alSourceQueueBuffers'. Я постоянно проверяю обработанные буферы с помощью 'alGetSourcei (sID, AL_BUFFERS_PROCESSED и обработанных буферов)' и повторно использую обработанный буферный идентификатор, отменяя его с помощью 'alSourceUnqueueBuffers' и снова заполняя его' alBufferData'. – happytrooper