我正在嘗試使用WASAPI捕獲音頻。我的代碼主要基於ChatterBox VoIP sample app。我收到音頻緩衝區,但它們都是無聲的(標記爲AUDCLNT_BUFFERFLAGS_SILENT)。捕獲的音頻緩衝區都在Windows Phone 8上保持沉默
我正在使用Windows Phone的Visual Studio Express 2012。在模擬器上運行。
我正在嘗試使用WASAPI捕獲音頻。我的代碼主要基於ChatterBox VoIP sample app。我收到音頻緩衝區,但它們都是無聲的(標記爲AUDCLNT_BUFFERFLAGS_SILENT)。捕獲的音頻緩衝區都在Windows Phone 8上保持沉默
我正在使用Windows Phone的Visual Studio Express 2012。在模擬器上運行。
我有完全相同的問題,並設法在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框架中的選項
當然.. :)
嘿,謝謝你的回覆!我希望這有助於人們,但這不是我的情況。我確實停止了音頻,無論如何,即使重新啓動設備後,我仍然可以重現我的問題。我也嘗試運行而不進行調試。換句話說,我的問題是一致的 - 它永遠不會起作用,而不是在任何情況下。 – oferei 2013-08-28 18:37:27
這是其浪費約2天完成一個非常惱人的問題我的問題是通過將AudioClientProperties.eCatagory
設置爲AudioCategory_Communications
而不是AudioCategory_Other
來解決的。
經過這段漫長的嘗試和錯誤期後,我不確定問題將來不會重複,因爲API不會非常穩定,每次運行都可能會返回不同的結果。
編輯:是我的猜測是true.Restarting的WP模擬器使緩衝無聲again.But改變AudioClientProperties.eCatagory
回AudioCategory_Other
再解決它。我仍然不知道什麼是錯的,什麼是最終的解決方案。
我再次遇到同樣的問題,並且此時評論(刪除)解決問題的 properties.eCategory = AudioCategory_Communications;
。
我遇到了同樣的問題。您似乎可以只使用AudioCategory_Other
或創建VoipPhoneCall
的實例並僅使用AudioCategory_Communications
。
所以我的解決方案是使用AudioCategory_Communications
並創建一個即將離任的VoipPhoneCall
。您應該執行後臺代理,如Chatterbox VoIP sample app中的VoipCallCoordinator
一樣工作。
我可以添加我對Windows Phone 8.1的建議。 我做了以下的實驗。
然後我打開捕獲設備與AudioDeviceRole ::通信和捕獲設備工作正常。
對於Windows 10捕獲設備始終工作,無論您是否使用AudioDeviceRole :: Communications打開它。
我不再在這個項目上工作(放棄),但我記得我們使用的是Communications。我想這只是一個有趣的系統錯誤。 – oferei 2015-05-12 19:56:53
您確定您的麥克風實際上在模擬器中可用嗎?但我必須推薦使用設備在Windows Phone上測試VoIP! – 2013-03-13 21:42:42
由於我在手機上試過它。問題也發生在那裏。 麥克風在模擬器上工作。我設法錄製音頻使用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