(二)錄音流程
Waveform APIs,流程如下:
a.打開錄音設備waveInOpen;
b.準備wave數據頭waveInPrepareHeader;
c.準備數據塊waveInAddBuffer;
d.開始錄音waveInStart;
e.停止錄音(waveInStop);
f.關閉錄音設備(waveInClose);
g.當開始錄音后當buffer已滿時,將收到MM_WIM_DATA消息,處理該消息可以保存已錄好數據.
注意:
1.waveInPerpareHeader,此函數功能就是定位緩沖區的數據區地址和數據大小,以便為系統所用;
2.當通過 waveInAddBuffer送入的緩沖區被錄滿后,Windows就會通過你在waveInOpen中指定的方式進行回調,在回調中把錄好的語音數據取出來;并且,如果還想繼續錄音的話,得將下一個緩沖區添加進去,考慮到這個處理是有時間延遲的,而且音頻對時間很敏感,一般都要先預加入若干個緩沖區,比如,一共定義了8個緩沖區,而為了保險起見,最好保證任一時刻至少有3個緩沖區可被錄音使用,那么在開始錄音時,則先加入4個緩沖區,然后在回調中,如果當前錄好的緩沖區第n個,則對第(n+4)%8調用waveInAddBuffer,這時,還有第(n+1)%8,(n+2)%8, (n+3)%8這三個緩沖區可用,即基本上就可以保證所錄得音頻中不會有斷開的間隔;
3.想結束錄音時,最好在waveInClose之前調用一下waveInReset,這樣可以清掉尚在等待錄音的緩沖區,這里常見的問題是等待的緩沖區清理了,可是正在用的緩沖區怎么辦;如果這個時候就用waveInClose,那么系統會出錯;解決方法一:在回調函數中注意,一個緩沖區滿后,不要再用waveInAddBuffer增加緩存,當緩沖區用到1的時候調用waveInReset清掉尚在等待錄音的緩沖區繼續waveInClose。
浙公網安備 33010602011771號