2013-02-10 67 views
3

我正在嘗試使用WASAPI捕獲音頻。我的代碼主要基於ChatterBox VoIP sample app。我收到音頻緩衝區,但它們都是無聲的(標記爲AUDCLNT_BUFFERFLAGS_SILENT)。捕獲的音頻緩衝區都在Windows Phone 8上保持沉默

我正在使用Windows Phone的Visual Studio Express 2012。在模擬器上運行。

+0

您確定您的麥克風實際上在模擬器中可用嗎?但我必須推薦使用設備在Windows Phone上測試VoIP! – 2013-03-13 21:42:42

+0

由於我在手機上試過它。問題也發生在那裏。 麥克風在模擬器上工作。我設法錄製音頻使用XNA API。 有一次,我也嘗試了[AudioVideoCaptureDevice](http://msdn.microsoft.com/en-us/library/windowsphone/develop/windows.phone.media.capture.audiovideocapturedevice.openforaudioonlyasync(v = vs.105) .aspx)API並得到相同的問題 - 緩衝區都是零。 – oferei 2013-03-15 10:59:34

回答

3

我有完全相同的問題,並設法在ChatterBox示例應用程序中重現它,如果我將Visual Studio設置爲本機調試,並且在任何時候都通過代碼。

此外,關閉應用程序而無需通過「停止」過程並停止AudioClient將需要重新啓動模擬器/設備才能夠再次捕獲音頻數據。

在我想出前面提到的問題之前,這幾乎讓我瘋狂,但我終於找到了工作。

所以.. 1.請務必不要進行本地調試 2.始終調用IAudioClient-> Stop();在終止應用程序之前。 3.確保將正確的參數傳遞給IAudioClient-> Initialize();

我已經包含了一段代碼,它對我來說是100%的時間。我省略了錯誤檢查的清晰度..

LPCWSTR pwstrDefaultCaptureDeviceId = 
    GetDefaultAudioCaptureId(AudioDeviceRole::Communications); 
HRESULT hr = ActivateAudioInterface(pwstrDefaultCaptureDeviceId, 
    __uuidof(IAudioClient2), (void**)&m_pAudioClient); 
hr = m_pAudioClient->GetMixFormat(&m_pwfx); 
m_frameSizeInBytes = (m_pwfx->wBitsPerSample/8) * m_pwfx->nChannels; 
hr = m_pAudioClient->Initialize(AUDCLNT_SHAREMODE_SHARED, 
    AUDCLNT_STREAMFLAGS_NOPERSIST | AUDCLNT_STREAMFLAGS_EVENTCALLBACK, 
    latency * 10000, 0, m_pwfx, NULL); 
hr = m_pAudioClient->SetEventHandle(m_hCaptureEvent); 
hr = m_pAudioClient->GetService(__uuidof(IAudioCaptureClient), 
    (void**)&m_pCaptureClient); 

就是這樣..調用這個代碼,我已經開始了一個工作線程會聽m_hCaptureEvent並調用IAudioCaptureClient->的GetBuffer()之前;每當捕獲事件被觸發。使用Microsoft.XNA.Audio.Microphone工作正常,但它並不總是引用XNA框架中的選項

當然.. :)

+0

嘿,謝謝你的回覆!我希望這有助於人們,但這不是我的情況。我確實停止了音頻,無論如何,即使重新啓動設備後,我仍然可以重現我的問題。我也嘗試運行而不進行調試。換句話說,我的問題是一致的 - 它永遠不會起作用,而不是在任何情況下。 – oferei 2013-08-28 18:37:27

1

這是其浪費約2天完成一個非常惱人的問題我的問題是通過將AudioClientProperties.eCatagory設置爲AudioCategory_Communications而不是AudioCategory_Other來解決的。

經過這段漫長的嘗試和錯誤期後,我不確定問題將來不會重複,因爲API不會非常穩定,每次運行都可能會返回不同的結果。

編輯:是我的猜測是true.Restarting的WP模擬器使緩衝無聲again.But改變AudioClientProperties.eCatagoryAudioCategory_Other再解決它。我仍然不知道什麼是錯的,什麼是最終的解決方案。

我再次遇到同樣的問題,並且此時評論(刪除)解決問題的 properties.eCategory = AudioCategory_Communications;

0

我遇到了同樣的問題。您似乎可以只使用AudioCategory_Other或創建VoipPhoneCall的實例並僅使用AudioCategory_Communications

所以我的解決方案是使用AudioCategory_Communications並創建一個即將離任的VoipPhoneCall。您應該執行後臺代理,如Chatterbox VoIP sample app中的VoipCallCoordinator一樣工作。

1

我可以添加我對Windows Phone 8.1的建議。 我做了以下的實驗。

  1. 開放的捕獲設備。緩衝區不安靜。
  2. 使用AudioDeviceRole :: Communications打開渲染設備。緩衝區立即靜音。
  3. 關閉渲染設備。緩衝區不安靜。

然後我打開捕獲設備與AudioDeviceRole ::通信和捕獲設備工作正常。

對於Windows 10捕獲設備始終工作,無論您是否使用AudioDeviceRole :: Communications打開它。

+0

我不再在這個項目上工作(放棄),但我記得我們使用的是Communications。我想這只是一個有趣的系統錯誤。 – oferei 2015-05-12 19:56:53