OPENAL的播放速度
我的流式播放器程序中, 收到服务端送来的数据流:
如果是视频帧, 就解码显示视频;
如果是音频帧, 就解码播放声音;
结果最后停止流数据后, 总会发现声音还能播放一段时间, 我每次播放声音的时候, 调用的是下面这个函数, 播放与解码是在一个线程中进行.
long openal_fill(uint8_t* data, int size, int format, int freq)
{
if (data == 0 || size <= 0)
return -1;
// 填充缓冲器
@autoreleasepool {
NSCondition* condition = [[NSCondition alloc] init];
[condition lock];
ALuint bufferId;
// 创建缓冲器
alGenBuffers(1, &bufferId);
// 将PCM数据填充到缓冲器
alBufferData(bufferId, format, data, size, freq);
// 把一个缓冲器或多个缓冲器附加在一个声源上
alSourceQueueBuffers(mOA->mSourceID, 1, &bufferId);
[condition unlock];
}
// 播放声音
ALint stateVaue;
alGetSourcei(mOA->mSourceID, AL_SOURCE_STATE, &stateVaue);
if (stateVaue != AL_PLAYING)
{
alSourcePlay(mOA->mSourceID);
return -2;
}
// 清理缓冲器
ALint processed;
alGetSourcei(mOA->mSourceID, AL_BUFFERS_PROCESSED, &processed);
for (; processed > 0; processed--)
{
ALuint bufferId;
alSourceUnqueueBuffers(mOA->mSourceID, 1, &bufferId);
alDeleteBuffers(1, &bufferId);
}
return 0;
}
求教一下, 可能是什么问题? 能不能加快openal从缓冲区播放声音的速度?
如果是视频帧, 就解码显示视频;
如果是音频帧, 就解码播放声音;
结果最后停止流数据后, 总会发现声音还能播放一段时间, 我每次播放声音的时候, 调用的是下面这个函数, 播放与解码是在一个线程中进行.
long openal_fill(uint8_t* data, int size, int format, int freq)
{
if (data == 0 || size <= 0)
return -1;
// 填充缓冲器
@autoreleasepool {
NSCondition* condition = [[NSCondition alloc] init];
[condition lock];
ALuint bufferId;
// 创建缓冲器
alGenBuffers(1, &bufferId);
// 将PCM数据填充到缓冲器
alBufferData(bufferId, format, data, size, freq);
// 把一个缓冲器或多个缓冲器附加在一个声源上
alSourceQueueBuffers(mOA->mSourceID, 1, &bufferId);
[condition unlock];
}
// 播放声音
ALint stateVaue;
alGetSourcei(mOA->mSourceID, AL_SOURCE_STATE, &stateVaue);
if (stateVaue != AL_PLAYING)
{
alSourcePlay(mOA->mSourceID);
return -2;
}
// 清理缓冲器
ALint processed;
alGetSourcei(mOA->mSourceID, AL_BUFFERS_PROCESSED, &processed);
for (; processed > 0; processed--)
{
ALuint bufferId;
alSourceUnqueueBuffers(mOA->mSourceID, 1, &bufferId);
alDeleteBuffers(1, &bufferId);
}
return 0;
}
求教一下, 可能是什么问题? 能不能加快openal从缓冲区播放声音的速度?
...全文
相关推荐
声音播放类 openal
同时,还需要注意错误处理,比如通过`alGetError`检查OpenAL的操作是否成功。此外,`SoundPlay`类还可能包含其他功能,比如设置音量、改变播放速度、实现3D音效等。
OpenAL流畅播放封装类
5. **3D音效**:OpenAL支持3D音效,可以通过设置源和监听器的位置、方向和速度来实现空间化音频。这使得声音可以根据物体在虚拟空间中的移动而改变,增强游戏体验。
openal:OpenAL 包装器
OpenAL支持多种音频格式,如WAV、AIFF、RAW等。5. **3D音频**: OpenAL支持3D音频定位,可以设置源和监听器的位置、方向和速度,模拟真实世界的声音传播效果。
openal_test
由于OpenAL允许动态改变源的位置、速度和方向,所以它特别适合用于实现3D音频效果,如声音的空间定位和衰减,这些都是游戏和虚拟现实应用中常见的需求。
openal教程 3d音效
- 设置源的属性,如位置、速度等。4. **设置监听器(Listener)** - 设置监听器的位置、速度和方向等属性。5. **播放音频** - 使用`alSourcePlay()`播放音频。6.


