Воспроизведение звука с помощью OpenAL

Я не понимаю, как я могу воспроизводить звук с помощью библиотеки OpenAL. Я пишу программу для VoIP. Я получаю каждые 10 мс звукового буфера.

size_t len = socket.read_some(boost::asio::buffer(buf),error);

буф это

boost::array <char, 441> buf;

И что мне нужно делать с этим буфером? Я читал примеры, но не понял :(.
Пожалуйста, помогите мне.
Постскриптум Я использую C ++ на Visual Studio 2010.
После редактирования

    alGenSources(1, &alSource);
alGenBuffers(1, &alSampleSet);
alBufferData(alSampleSet, AL_FORMAT_MONO16, buf.data(), sizeof(buf.data()), 44100);
alSourcei(alSource, AL_BUFFER, alSampleSet);
//
alSourcei(alSource, AL_LOOPING, alSampleSet);
alSourcePlay(alSource);

0

Решение

buf.data() возвращает указатель, его размер вероятно, либо 32 или 64 бит.

размер из array является buf.size() вместо; и размер, запрошенный alBufferData количество байтов в буфере, то есть количество элементов в массиве buf.size() умножается на размер каждого элемента sizeof(buf.front()) или же sizeof(char),
[Заметка sizeof(buf) может работать, по крайней мере, с текущей реализацией Boost, но я не думаю, что это гарантировано]

Вы указываете AL_FORMAT_MONO16 формат канала, но вы используете 8-байтовый буфер нечетного размера. Так что это, вероятно, ошибка либо в объявлении массива, либо в спецификации формата. Основываясь на остальной части вашего вопроса, я бы предположил, что вы имели в виду AL_FORMAT_MONO8 там вместо

0

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

Вы должны сохранить звук, попробуйте эту функцию.

void keepItPlay(unsigned int * source)
{
ALint state;
alGetSourcei(source, AL_SOURCE_STATE, &state);
if(state == AL_STOPPED) CleanUp(source);
}
0

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