C ALSA编程:如何立即停止
我正在构建一个具有播放和停止功能的音频应用程序。函数playaudio()用于播放,stopaudio()用于停止。预期的文件格式仅为WAV playaudio()的主要实现如下:C ALSA编程:如何立即停止,c,linux,audio,alsa,C,Linux,Audio,Alsa,我正在构建一个具有播放和停止功能的音频应用程序。函数playaudio()用于播放,stopaudio()用于停止。预期的文件格式仅为WAV playaudio()的主要实现如下: playaudio() { ... ... int err = snd_pcm_open(&handle, "default", SND_PCM_STREAM_PLAYBACK, 0); if ( err < 0 ) { printf("SCM open faile
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 );
}
playaudio()
{
... ...
int err=snd_pcm_open(&handle,“default”,snd_pcm_STREAM_回放,0);
如果(误差<0)
{
printf(“SCM打开失败:%s\n”,snd_strerror(err));
退出(err);
}
而(0
音频播放时,程序在snd_pcm_排水管(手柄)线路上被阻塞;直到播放完成。在此期间,我希望停止音频播放。我的操作是点击UI上的停止按钮,最后调用snd_pcm_drop(m_handle)。语音实际上已停止,但程序运行仍停留在snd_pcm_排水管(句柄)的线路上,直到几秒钟后,即播放音频文件的播放时间
我的问题是:
执行停止操作后,如何使snd_pcm_漏极立即等待?
如果没有,是否有其他方法实现立即停止,并保持playaudio功能等待播放完成
多谢各位 当
snd\u pcm\u drain
处于活动状态时,如何调用另一个函数?用线?你读了吗?JNI从java代码中调用了另一个stopaudio()。在JavaSwingUI中,我有一个用于音频停止的JButton。在JButton的click事件中,C代码stopaudio()最终通过激活snd_pcm_drain的JNI调用。我还没有看过文档。我会继续的。谢谢分享。