最近要用到 voice note 功能,把之前寫的錄音程式拿出來。
測試之後發現了2個問題,一個是聲音之間會有中斷,如 1 2 3 4 5 6 7 8 會變成 1 3 5 6 8
第二個問題是錄音的尾段部份消失。
聲音之間有中斷是因為 buffer 只有allocate 一個,
使用 double buffer or multiple buffer 就可以解決
( waveInPrepareHeader 對每個buffer 只需call 一次)
錄音尾部消失是因為最後一個chunk的data沒有寫入。
當呼叫 waveInStop() 停止錄音,並不會call waveInProc = ="
waveInProc 是只有當buffer 滿的時候才會被呼叫。
所以要改用別的方法...
If there are any buffers in the queue, the current buffer will be marked as done (the dwBytesRecorded member in the header will contain the length of data)
判斷buffer done , 由 WAVEHDR 中的 dwFlags
是否為WHDR_DONE
再來從The code project 看到他人所寫的code,
要寫成wave檔,可用mmioWrite函式
但是WINCE下沒有,所以... 要自己寫檔頭,
以及結尾時 寫在檔頭部份的長度。
第三個問題是
如果沒有正確的 waveInClose() (傳回值為WAVERR_STILLPLAYING 0x21)
則下一次無法正常打開device waveInOpen()
必須要重開機。
沒有留言:
張貼留言