Я пытаюсь создать программу голосового чата с использованием OpenAL. Кажется, что с сетью все в порядке, но я приму совет по этому поводу =]
Проблема, с которой я столкнулся в данный момент, заключается в попытке воспроизвести захваченные аудиоданные с микрофона.
Я следовал найденному коду здесь , чтобы получить микрофонный вход и передать его на динамики.
Это работает нормально, но я не могу воспроизвести полностью захваченный звук после завершения захвата.
Когда какой-то звук захвачен, я сохраняю его в списке, например ...
for (int i = 0; i < CAP_SIZE; i++)
{
playbackBuffer.push_back( buffer[i] );
}
и затем после завершения захвата я попытался (и не смог) использовать следующий код для воспроизведения этого аудио
ALuint playbackSource;
alGenSources(1, &playbackSource);
errorCode = alGetError();
ALuint tempPlayback;
alBufferData(tempPlayback, AL_FORMAT_MONO16, &playbackBuffer.front(), playbackBuffer.size()*sizeof(ALuint), FREQ);
// Attach the playback buffer to the new playback source
alSourcei(playbackSource, AL_BUFFER, tempPlayback);
alSourcePlay(playbackSource);
ALint sState = 0;
do
{
alGetSourcei(playbackSource, AL_SOURCE_STATE, &sState);
}
while ((sState == AL_PLAYING));
При отладке я вижу, что в PlayBuffer содержится много данных, и в этот момент воспроизводится шум в доли секунды, но он не близок к тому, который был захвачен.
РЕДАКТИРОВАТЬ: я добавил строку
alGenBuffers(1, &tempPlayback);
после создания tempPlayback и перед вызовом alBufferData (...), и теперь он воспроизводится в течение правильного промежутка времени, но все, что я слышу, - это высокий шум на протяжении всего пути.