网络音频:如何使用移动麦克风从远处拾取音频
Web Audio: How can I get a mobile microphone to pick up audio from a distance?
通过navigator.getUserMedia
访问用户的麦克风非常容易。但是,如果我正在使用移动浏览器,并且想从远处接收音频,比如使用"扬声器"模式,该怎么办?
我将如何实现这一目标?似乎有一些本地应用程序可以实现这一点,但网络音频呢?
这样做的目的是使用DTMF在设备之间发送消息。我已经用我的笔记本电脑做到了这一点,因为它的麦克风可以从很远的距离记录周围的音频,但我能接触到的任何手机似乎都只在"话筒"附近记录音频,所以我必须把手机放在离源扬声器非常近的地方,哪怕只是一点点收到消息的机会。除非我能让移动麦克风从远处拾取音频,否则这就违背了我的目的。
编辑:我所说的距离是指几英尺以上,而不是几厘米。环境声音,与麦克风旁边的声音相反。
我在这里回答我自己的问题。感谢所有帮忙的人,尽管这里发布的实际答案都不令人满意,IMO.
在较新版本的Chrome上,navigator.mediaDevices
有一个名为enumerateDevices
的功能,可用于列出可用的硬件设备,包括麦克风。事实证明,这确实在我的安卓手机上返回了一个"扬声器"设备。因此,如果您的设备怀疑扬声器没有设置为默认的浏览器麦克风,并且您(或您的用户)使用的是Chrome 47或更高版本,则可以使用enumerateDevices
返回的设备ID来指定特定的麦克风。
因此,如果您的用户在特定麦克风设备的选择元素中选择了一个选项,您将获取该设备的ID并将其传递给getUserMedia
。
navigator.getUserMedia({ audio: {deviceId: {exact: <insert device uuid here>}} }, callback)
请注意,截至本文发布之时,enumerateDevices
API仅在Chrome上可用。在任何其他浏览器或web视图中,这可能都不起作用。
如果麦克风的音量对您的应用程序来说太低,您可以通过为AudioContext创建gainNode
来增加音量。
volume = context.createGain()
volume.gain.value = 3 // raises the volume to 300%
audioInput = context.createMediaStreamSource(e)
audioInput.connect(volume)
或者,如果您处理的是原始样本,您可以将每个样本乘以一个数字,然后将它们传递给用于处理它们的任何函数。
这是无法完成的,因为它与设备的硬件直接相关。如果设备硬件(麦克风)无法接收几米外的声音,那么就无能为力。
两年前,我实现了一个webrtc(使用谷歌示例),它可以在移动web浏览器上工作,声音可以通过环境级别捕获。我真的没有对谷歌库进行深入的代码分析,但也许你可以从这里开始。
- 移动设备上的 HTML 5 音频 .play() 延迟
- HTML5音频播放器只有在双击后才能在移动浏览器上播放
- 网络音频:如何使用移动麦克风从远处拾取音频
- 检测iOS移动设备的JavaScript比自动播放音频
- Javascript Regex移动设备音频替换
- HTML5 音频单击进度条可移动到其他时间
- 可以'不要让HTML5音频标签在移动浏览器上工作
- 移动设备上的 HTML5 base64 编码音频
- HTML <音频>标签的播放功能无法在移动设备上触发
- HTML,JS:加载音频是否需要在移动浏览器上进行用户交互
- 在移动设备上使用 Web 音频 API 进行 Javascript 节拍检测
- 移动设备上 cocos2d-javascript 中的音频问题
- Javascript开源移动游戏引擎与音频和粒子
- 音频对象未在移动设备的回调中播放
- 在移动浏览器上播放 HTML5 音频文件时出现延迟
- 移动浏览器无法播放本地 blob 数据中的音频
- 移动设备上没有音频播放
- "自动播放“;移动浏览器上的HTML5音频播放器
- 功能检测自动播放HTML5音频-移动浏览器上的音频
- 将javascript音频移动到jquery中