gpt4 book ai didi

windows-phone-8 - 捕获的音频缓冲区在 Windows Phone 8 上都是静音的

转载 作者:行者123 更新时间:2023-12-04 07:18:14 27 4
gpt4 key购买 nike

我正在尝试使用 WASAPI 捕获音频。我的代码主要基于 ChatterBox VoIP sample app .我正在获取音频缓冲区,但它们都是静音的(标记为 AUDCLNT_BUFFERFLAGS_SILENT)。

我正在使用适用于 Windows Phone 的 Visual Studio Express 2012。在模拟器上运行。

最佳答案

如果我将 Visual Studio 设置为 native 调试并在任何时候逐步执行代码,我就会遇到完全相同的问题并设法在 ChatterBox 示例应用程序中重现它。

此外,如果不通过“停止”程序关闭应用程序并停止 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 框架的选项。:)

关于windows-phone-8 - 捕获的音频缓冲区在 Windows Phone 8 上都是静音的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14796877/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com