Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows phone 8 捕获的音频缓冲区在Windows Phone 8上都是静默的_Windows Phone 8_Wasapi_Windows Phone Voip - Fatal编程技术网

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

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

我正在尝试使用WASAPI捕获音频。我的代码主要基于。我正在获取音频缓冲区,但它们都是静默的(标记为AUDCLNT\u BUFFERFLAGS\u silent)


我正在为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,但也遇到了同样的问题——缓冲区都是零。嘿,谢谢你的回复!我希望这能帮助人们,但这不是我的情况。我确实停止了音频,而且无论如何,即使重新启动设备,我也可以重现我的问题。我还试着在没有调试的情况下运行。换句话说,我的问题是始终如一的——它从来都不起作用,在任何情况下都不起作用。我不再从事这个项目(已放弃),但我确实记得我们使用了通信。我想这只是一个有趣的系统错误。