Щелчки в очереди буферов OpenAL

Моя программа не работает правильно. Мне нужно воспроизвести звук, который я беру из сети с boost :: asio. Этот звук правильный, потому что, если я передаю его в файл, у меня есть звуковой файл. Но в динамиках я слушаю повторяющиеся щелчки. Это мой код:

while (!ExitKey)
{
boost::system::error_code error;
size_t len = VoiceSocket->read_some(boost::asio::buffer(buf), error);
if (len==0)
{
continue;
}
file.write(buf.data(), 882);
if (firstit++>=3)
{
alSourceUnqueueBuffers(alSource, 1, &alUnqueueBuf);
}
if (iteration <=3)
{
alBufferData(alSampleSet[iteration++], AL_FORMAT_MONO16, buf.data(), buf.size(), 44100);
}
else
{
iteration = 0;
alBufferData(alSampleSet[iteration++], AL_FORMAT_MONO16, buf.data(), buf.size(), 44100);
}
//alSourceQueueBuffers(alSource, 3, alSampleSet);
alSourcei(alSource, AL_BUFFER, alSampleSet[0]);
alSourcei(alSource, AL_BUFFER, alSampleSet[1]);
alSourcei(alSource, AL_BUFFER, alSampleSet[2]);

alSourceQueueBuffers(alSource, 1, alSampleSet);
//
//alSourcei(alSource, AL_LOOPING, alSampleSet);
ALenum alErr0 = AL_NO_ERROR;
ALenum alErr1 = AL_INVALID_NAME;
ALenum alErr2 = AL_INVALID_ENUM;
ALenum alErr3 = AL_INVALID_VALUE;
ALenum alErr4 = AL_INVALID_OPERATION;
ALenum alErr5 = AL_OUT_OF_MEMORY;
ALenum alErr  = alGetError();
//alGetSourcei(alSource, AL_SOURCE_STATE, &alErr);
alSourcePlay(alSource);
alErr = alGetError();
//
}

Пожалуйста, помогите мне. Что мне нужно сделать с этим кодом, чтобы заставить его работать. Я не понимаю, как работать с этими буферами 🙁

1

Решение

Вы должны использовать либо alSourcei(alSource, AL_BUFFER, alSampleSet[0]) или же alSourceQueueBuffers(alSource, 1, alSampleSet), но не оба вместе. Когда вы транслируете, используйте последний.

Проверьте обработанные буферы перед снятием очереди:

alGetSourcei(alSource, AL_BUFFERS_PROCESSED, out p)

Буферизуйте и ставьте в очередь следующий блок, если есть свободный буфер.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]