OpenAL如何播放单个buffer

ibingow 2013-01-01 11:35:26
找到的所有例子都是播放一个文件,弄队列啊循环啊什么的。其实我的要求很简单,就是是把一帧的音频解出来后丢给al,al直接去放那个数据就行。应该怎么操作?感觉很少几行代码就行
还有,openal播放一个buffer时会不会阻塞住线程?
...全文
253 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ibingow 2014-01-04
  • 打赏
  • 举报
回复
引用 1 楼 s20111945 的回复:
while(1) { alGetSourcei(s_Wavfile.source, AL_BUFFERS_PROCESSED, &s_Wavfile.val);//val值为排队的buffer个数 if(s_Wavfile.val > 0) break; j++; } while(s_Wavfile.val--) { alSourceUnqueueBuffers(s_Wavfile.source, 1, &s_Wavfile.buffer); alBufferData(s_Wavfile.buffer, s_Wavfile.format, out, frame_shift * 2 * 2, s_Wavfile.frequency); alSourceQueueBuffers(s_Wavfile.source, 1, &s_Wavfile.buffer); } alGetSourcei(s_Wavfile.source, AL_SOURCE_STATE, &s_Wavfile.val); if(s_Wavfile.val != AL_PLAYING) { Write_Log(LOG_TYPE_ERROR, "state not playing...\n"); alSourcePlay(s_Wavfile.source); } out是你的一帧数据流
结合这个看懂了http://kcat.strangesoft.net/openal-tutorial.html
s20111945 2013-07-19
  • 打赏
  • 举报
回复
while(1) { alGetSourcei(s_Wavfile.source, AL_BUFFERS_PROCESSED, &s_Wavfile.val);//val值为排队的buffer个数 if(s_Wavfile.val > 0) break; j++; } while(s_Wavfile.val--) { alSourceUnqueueBuffers(s_Wavfile.source, 1, &s_Wavfile.buffer); alBufferData(s_Wavfile.buffer, s_Wavfile.format, out, frame_shift * 2 * 2, s_Wavfile.frequency); alSourceQueueBuffers(s_Wavfile.source, 1, &s_Wavfile.buffer); } alGetSourcei(s_Wavfile.source, AL_SOURCE_STATE, &s_Wavfile.val); if(s_Wavfile.val != AL_PLAYING) { Write_Log(LOG_TYPE_ERROR, "state not playing...\n"); alSourcePlay(s_Wavfile.source); } out是你的一帧数据流

2,542

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧