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

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

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

буф это

boost::array <char, 441> buf;

И что мне нужно делать с этим буфером? Я читал примеры, но не понял:(. Пожалуйста, помогите мне. PS Я использую 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);

2 ответа

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 там вместо

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

void keepItPlay(unsigned int * source)
{
    ALint state;
    alGetSourcei(source, AL_SOURCE_STATE, &state);
    if(state == AL_STOPPED) CleanUp(source);
}
Другие вопросы по тегам