使用 OpenAL 播放声音
Play sound with OpenAL
我不明白如何使用OpenAL库播放声音。我为VoIP编写程序。我每 10 毫秒获得一次声音缓冲区。
size_t len = socket.read_some(boost::asio::buffer(buf),error);
布夫是
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);
buf.data()
返回一个指针,其大小可能是 32 位或 64 位。
array
的大小是buf.size()
的;alBufferData
请求的大小是缓冲区中的字节数,即数组中的元素数乘以sizeof(buf.front())
或sizeof(char)
的每个元素的大小buf.size()
。
[注意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);
}
相关文章:
- 如何在C++中播放声音?
- 有没有办法毫不拖延地播放声音?
- 在不打开应用程序的情况下在MinGW c++中播放声音(.wav)文件
- 如何在QT中飞溅之前播放声音?
- 计时器达到零时如何播放声音?
- 使用MinGW播放声音
- 如何从McIsendstring()中解决此错误并使其播放声音
- 如何在 c++ 中播放声音
- 视觉 在C++中正确使用播放声音功能
- 切换音频设备时播放声音的SDL问题
- 有没有一种简单的方法可以使用SFML在后台线程中播放声音
- 如何使用7.1音频系统sfml播放声音
- 在做其他事情时,在C 中播放声音
- 当Windows XP(32位,SP3)播放声音时,随机应用程序暂停半秒钟
- 在 DirectX Windows 8 应用中播放声音
- C 确定是否播放声音
- 播放 C/C++ 声音的最简单方法
- 使用OpenAL(流)播放声音
- 使用 OpenAL 播放声音
- OpenAL不播放声音