Я не понимаю, как я могу воспроизводить звук с помощью библиотеки 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);
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);
}