使用OpenAL播放声音

时间:2013-01-31 16:32:49

标签: c++ boost openal playsound

我不明白我如何用OpenAL库播放声音。我为VoIP编写程序。我得到每10毫秒的声音缓冲区。

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

buf是

boost::array <char, 441> buf;

我需要使用此缓冲区吗?我正在阅读例子,但不明白:(。 请帮我。 附:我在Visual Studio 2010上使用C ++。 编辑后

    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 个答案:

答案 0 :(得分:0)

buf.data()返回一个指针,其 size 可能是32位或64位。

array尺寸代替buf.size();并且alBufferData请求的大小是缓冲区中的字节数,即数组buf.size()中元素的数量乘以每个元素sizeof(buf.front())或{{1}的大小}。
[注意sizeof(char)可能会起作用,至少在目前的Boost实施中是如此,但我不认为这是保证的]

您正在指定sizeof(buf)频道格式,但您使用的是奇数大小的8字节缓冲区。所以这可能是数组声明或格式规范中的错误。根据你提出的其他问题,我认为你的意思是AL_FORMAT_MONO16

答案 1 :(得分:0)

你必须让声音保持活力,试试这个功能。

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