Windows phone 8 捕获的音频缓冲区在Windows Phone 8上都是静默的
我正在尝试使用WASAPI捕获音频。我的代码主要基于。我正在获取音频缓冲区,但它们都是静默的(标记为AUDCLNT\u BUFFERFLAGS\u silent)Windows phone 8 捕获的音频缓冲区在Windows Phone 8上都是静默的,windows-phone-8,wasapi,windows-phone-voip,Windows Phone 8,Wasapi,Windows Phone Voip,我正在尝试使用WASAPI捕获音频。我的代码主要基于。我正在获取音频缓冲区,但它们都是静默的(标记为AUDCLNT\u BUFFERFLAGS\u silent) 我正在为Windows Phone使用Visual Studio Express 2012。在模拟器上运行。我遇到了完全相同的问题,如果我将Visual Studio设置为本机调试并在任何时候逐步完成代码,我会设法在ChatterBox示例应用程序中重现该问题 此外,在不执行“停止”过程的情况下关闭应用程序并停止AudioClient
我正在为Windows Phone使用Visual Studio Express 2012。在模拟器上运行。我遇到了完全相同的问题,如果我将Visual Studio设置为本机调试并在任何时候逐步完成代码,我会设法在ChatterBox示例应用程序中重现该问题 此外,在不执行“停止”过程的情况下关闭应用程序并停止AudioClient将需要重新启动仿真器/设备,然后才能再次捕获音频数据 在我解决前面提到的问题之前,它几乎让我发疯,但我最终还是让它工作了 所以。。 1.确保不进行本机调试 2.始终调用IAudioClient->Stop();在终止应用程序之前。 3.确保将正确的参数传递给IAudioClient->Initialize() 我已经包括了一段代码,对我来说,它在所有的时间里都能正常工作。为了清楚起见,我省略了错误检查
LPCWSTR pwstrDefaultCaptureDeviceId=
GetDefaultAudioCaptureId(AudioDeviceRole::Communications);
HRESULT hr=激活eAudioInterface(pwstrDefaultCaptureDeviceId,
__uuidof(IAudioClient2),(无效**)和m_pAudioClient;
hr=m_pAudioClient->GetMixFormat(&m_pwfx);
m_frameSizeInBytes=(m_pwfx->wBitsPerSample/8)*m_pwfx->nChannels;
hr=m_pAudioClient->初始化(AUDCLNT_SHAREMODE_SHARED),
AUDCLNT_STREAMFLAGS_NOPERSIST | AUDCLNT_STREAMFLAGS_EVENTCALLBACK,
延迟*10000,0,m_pwfx,空);
hr=m_pAudioClient->SetEventHandle(m_hCaptureEvent);
hr=m_pAudioClient->GetService(u uuidof(IAudioCaptureClient),
(无效**)和m_pCaptureClient);
就这样。。在调用这段代码之前,我启动了一个工作线程,它将侦听m_hCaptureEvent并调用IAudioCaptureClient->GetBuffer();无论何时触发捕获事件
当然,使用Microsoft.XNA.Audio.microscop可以很好地工作,但并不总是可以参考XNA框架:) 这是一个非常烦人的问题,浪费了我整整两天的时间。我的问题通过将
AudioClientProperties.eCatagory
设置为AudioCategory\u Communications
而不是AudioCategory\u Other
解决了
经过这么长的尝试和错误期后,我不确定这个问题将来是否不会重复,因为API的运行不是很稳定,每次运行都可能返回不同的结果
编辑:是的,我的猜测是正确的。重新启动wp emulator会使缓冲区再次静音。但是更改AudioClientProperties.eCatagory
返回到AudioCategory\u Other
再次解决它。我仍然不知道它有什么问题,最终的解决方案是什么
我再次遇到了同样的问题,这次我评论(删除)了
properties.eCategory=AudioCategory\u通信代码>
解决这个问题。我也遇到过同样的问题。似乎您可以只使用AudioCategory\u Other
或创建VoipPhoneCall
的实例,并且只使用AudioCategory\u通信
因此,在我的案例中,解决方案是使用AudioCategory\u通信
,并创建一个传出的VoipPhoneCall
。您应该像中一样实现后台代理,以便VoipCallCoordinator
工作 我可以为Windows Phone 8.1添加我的建议。
我做了下面的实验
打开捕获设备。缓冲区不是静默的
使用AudioDeviceOLE::Communications打开渲染设备。缓冲器立即停止工作
关闭渲染设备。缓冲区不是静默的
然后我用AudioDeviceRole::Communications打开了捕获设备,捕获设备一直工作正常
对于Windows 10,无论是否使用AudioDeviceRole::Communications打开捕获设备,捕获设备始终工作。您确定您的麦克风在模拟器中实际可用吗?但我必须推荐在Windows Phone上使用设备测试VoIP!自从发帖后,我就在电话上试过了。问题也发生在那里。麦克风在模拟器上工作。我设法用XNAAPI录制音频。有一次我也尝试了API,但也遇到了同样的问题——缓冲区都是零。嘿,谢谢你的回复!我希望这能帮助人们,但这不是我的情况。我确实停止了音频,而且无论如何,即使重新启动设备,我也可以重现我的问题。我还试着在没有调试的情况下运行。换句话说,我的问题是始终如一的——它从来都不起作用,在任何情况下都不起作用。我不再从事这个项目(已放弃),但我确实记得我们使用了通信。我想这只是一个有趣的系统错误。