android - 在 android 中获取麦克风音频。音频上下文

标签 android cordova audio web-audio-api intel-xdk

(出于某种原因我无法得到这个问题的答案......)

你好。我需要访问安卓麦克风。我使用这个在网络上制作了一个调谐器应用程序:https://github.com/cwilso/PitchDetect .工作得很好。

但是,当我使用 intelXDK 和 cordova 插件将应用程序构建到 android 时,我无法获得任何麦克风输入。我不确定我是否需要使用这个:https://github.com/edimuj/cordova-plugin-audioinput .似乎是在 android 中获取 audioContext 的正确方法。另外,它在安装应用程序时显示警告,提示它需要授权。这可能是正确的道路,不是吗?

有人可以帮我解决这个问题吗?知道为什么,尽管我收到日志说输入已启用但我无法获得任何音频吗? (麦克风正在工作)

最佳答案

我是 cordova-plugin-audioinput 的创建者,这是一个 Cordova 插件,可让您访问来自麦克风的原始音频数据。如果不修改 PitchDetect 库,则不能将其与 audioinput 插件一起使用。 PitchDetect 库依赖于 getUserMedia API,它在旧版 Android webviews (<5.0) 上不受支持,并且在任何 iOS webviews 上都完全不受支持。另一方面,cordova-plugin-audioinput 是专门为在 iOS 和旧版 Android webview 上启用麦克风访问而创建的。

一种可以解决您在 Android 上的特定问题的快速方法:

英特尔 XDK 支持使用 Crosswalk webview 构建 Android 应用程序,这使您能够使用支持 Web Audio API 和 getUserMedia API 的更新版本的 Blink(Chrome 的开源版本)。

要在您的构建中启用 Crosswalk,请转到英特尔 XDK 中适用于 Android 的build设置屏幕,并确保选中“使用 Crosswalk 优化” 复选框。有关将 Crosswalk 与英特尔 XDK 结合使用的更多信息:https://software.intel.com/en-us/xdk/blog/what-is-crosswalk .

我认为该应用还需要访问麦克风的权限,因此在 “添加权限” 英特尔 XDK 构建配置的字段。

将 cordova-plugin-audioinput 与 PitchDetect 一起使用

另一方面,如果您想要将 cordova-plugin-audioinput 与 PitchDetect 库一起使用(例如,如果您希望您的应用程序也能在不支持 getUserMedia API 的 iOS 中运行),您必须做一些修改;具体来说,您需要更改 PitchDetect 的 toggleLiveInput 函数,使其不依赖于 getUserMedia,而是启动(和停止)audioinput 插件并将 audioinput 插件连接到 PitchDetect 分析器:

audioinput.start({
    streamToWebAudio: true,
    audioContext: audioContext // To ensure that the audioinput plugin uses the same audioContext as the PitchDetect library
});
analyser = audioContext.createAnalyser();
analyser.fftSize = 2048;
audioinput.connect(analyser);
updatePitch();

请注意,上面的示例仍然依赖于 Web Audio API,它对旧 Android 版本的支持有限; Android 5+ 应该可以正常工作。有关不同浏览器上的 Web 音频 API 支持的更多信息:http://caniuse.com/#feat=audio-api .

希望这对您有所帮助,祝您好运!

关于android - 在 android 中获取麦克风音频。音频上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40984462/

相关文章:

javascript - 从浏览器访问麦克风 - Javascript

android - 在 SingleChoice 警报对话框的 OnClick() 中存储 CheckedItemPosition

java - 如何在 Activity 之间传递 Seek Bar 变量?

android - 如何查看手机的服务状态

javascript - '$root' 上的未捕获引用

java - JOptionPane中的音频文件

javascript - 为页面上的所有音频标签添加播放按钮

java - BufferedReader readLine 返回奇怪的字符

javascript - 如何使用 PhoneGap、HTML/JavaScript 和 jQuery Mobile 存储数据?

performance - Jquery Mobile + Phonegap 提高 ListView 性能