我正在构建一个具有播放和停止功能的音频应用。函数playaudio()用于播放,stopaudio()用于播放。预期的文件格式只是WAV。
playaudio()的主要实现如下:
playaudio()
{
... ...
int err = snd_pcm_open(&handle, "default", SND_PCM_STREAM_PLAYBACK, 0);
if ( err < 0 )
{
printf("SCM open failed: %s\n", snd_strerror(err));
exit(err);
}
while ( 0 < numOfFrames) {
... ...
ssize_t frames = snd_pcm_writei(handle, &buffer[0], periodSize);
... ...
}
snd_pcm_drain(handle);
snd_pcm_close(handle);
}
stopaudio()
{
snd_pcm_drop( m_handle );
}
播放音频时,程序在snd_pcm_drain(句柄)行被阻止;直到播放完成。期间,我希望停止音频播放。我的操作是单击UI上的停止按钮并最终调用snd_pcm_drop(m_handle)。语音实际上已停止,但程序运行仍然停留在snd_pcm_drain(句柄)行,直到几秒钟后才播放音频文件的播放时间。
我的问题是: 一旦停止动作,如何让snd_pcm_drain立即等待? 如果没有,是否还有其他方法可以通过保持playaudio功能等待播放完成来实现立即停止?
非常感谢你。