線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:842
推到 Plurk!
推到 Facebook!

waveInClose 異常

尚未結案
dadai
一般會員


發表:29
回覆:31
積分:12
註冊:2009-01-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-12-22 19:23:45 IP:124.9.xxx.xxx 未訂閱
小弟試著從麥克風擷取聲音
接收的部份一切正常
本來以為一且都是那麼的美好
但限量....喔,是現實是殘酷的
有一定的機率會出現無法正常關閉麥克風裝置
在這個情況下
也無法再開啟麥克風了
除非把程式關掉重開....Orz

小弟試著瞭解發生什麼原因
每次呼叫 waveInClose 失敗的時候
error code 都是 WAVERR_STILLPLAYING
在這個情況下 WAVEHDR 的 dwFlags 的值是 18
也就是說 WHDR_INQUEUE 被設起來
(可正常關閉時 dwFlags 的值是 1)

有試著在網路上找了一些資料
可是結果依然悲劇
不知道各位前輩們是否有遇過這個問題
可以提供一些建議嗎
dadai
一般會員


發表:29
回覆:31
積分:12
註冊:2009-01-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-12-23 08:27:18 IP:124.9.xxx.xxx 未訂閱
 自問自答一下

看到 MSDN 這個網頁最下方的文字 (為什麼藏的這麼下面阿 Orz)
http://msdn.microsoft.com/en-us/library/aa908147.aspx
5. To finish capture:
waveInReset()
Wait for WIM_DATA notification of all queued buffers.
waveInUnprepareHeader()
waveInClose()    我把 code 改成如下的方式,目前看起來就正常了

[code cpp]
case WIM_DATA:
    {
    LPWAVEHDR pWaveHdr = (LPWAVEHDR)dwParam1;
    waveInUnprepareHeader( hWaveIn, pWaveHdr, sizeof(WAVEHDR);)
    if( pWaveHdr->dwBytesRecorded == 0 )  // 加了這個判斷在這邊
        return;
    /* 聲音處理... */
    waveInPrepareHeader(...);
    waveInAddBuffer(...);
    }
    break;
[/code]
編輯記錄
dadai 重新編輯於 2011-12-23 16:32:33, 註解 不知道為什麼亂掉了,重新排版‧
dadai 重新編輯於 2011-12-23 16:35:24, 註解 還不是不正常,再排一次版‧
dadai 重新編輯於 2011-12-23 16:41:50, 註解 再排一次....‧
系統時間:2017-10-23 10:20:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!