c - ALSA programming: how to stop immediately -


i building audio app playback , stop features. function playaudio() playback, stopaudio() stop. expected file format wav.

the main implementation of playaudio() below:

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 ); } 

while audio playing back, program blocked @ line of snd_pcm_drain(handle); until playback completion. during period, expect stop audio play. action click stop button on ui , call snd_pcm_drop( m_handle ) finally. voice stopped, programm running still staying @ line of snd_pcm_drain(handle) untils several seconds later play time of played audio file.

my question is: how make snd_pcm_drain's waiting on immmediately once stop action performed? if not, there other way implement immediate stop keeping playaudio function waiting playback completion?

thank much.


Comments

Popular posts from this blog

How to access named pipes using JavaScript in Firefox add-on? -

multithreading - OPAL (Open Phone Abstraction Library) Transport not terminated when reattaching thread? -

node.js - req param returns an empty array -