OpenAL如何播放单个buffer
本帖最后由 ibingow 于 2013-01-01 14:04:07 编辑 找到的所有例子都是播放一个文件,弄队列啊循环啊什么的。其实我的要求很简单,就是是把一帧的音频解出来后丢给al,al直接去放那个数据就行。应该怎么操作?感觉很少几行代码就行
还有,openal播放一个buffer时会不会阻塞住线程? OpenAL
[解决办法]
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是你的一帧数据流