网络音频:如何让移动麦克风从远处接收音频?

时间:2016-04-16 16:26:05

标签: javascript google-chrome mobile web-audio getusermedia

通过navigator.getUserMedia访问用户的麦克风非常简单。但是,如果我使用移动浏览器并希望从远处接收音频,例如使用“扬声器”模式,该怎么办?

我将如何实现这一目标?似乎有本机应用程序可以实现这一点,但Web Audio呢?

这样做的目的是使用DTMF在设备之间发送消息。我已经通过我的笔记本电脑实现了这一点,因为它的麦克风可以远距离记录周围的音频,但我可以访问的任何手机似乎只能在“喉舌”附近录制音频,所以我必须把手机放得非常接近即使收到消息的可能性很小,也要使用扬声器。除非我能让移动麦克风从远处拾取音频,否则这会失败。

编辑:距离,我的意思是大于几英尺,而不是仅仅几厘米。环境声音,而不是麦克风旁边的声音。

3 个答案:

答案 0 :(得分:2)

这不能完成,因为它与设备的硬件直接相关。如果设备硬件(麦克风)无法从数米之外拾取声音,那么就无法做到。

答案 1 :(得分:1)

我在这里回答我自己的问题。感谢所有帮助过的人,尽管这里发布的实际答案都不令人满意,IMO。

在较新版本的Chrome上,navigator.mediaDevices有一个名为enumerateDevices的功能,可用于列出可用的硬件设备,包括麦克风。事实证明,这确实会在我的Android手机上返回“扬声器”设备。因此,如果您的设备中您怀疑扬声器未设置为默认浏览器麦克风,并且您(或您的用户)使用的是Chrome版本47或更高版本,则可以使用enumerateDevices返回的设备ID指定一个特定的麦克风。

因此,如果您的用户在特定麦克风设备的select元素中选择了一个选项,您就会获取该设备的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)

或者,如果您正在处理原始样本,您可以将每个样本乘以一个数字,然后再将它们传递给您用于处理它们的任何函数。

答案 2 :(得分:0)

两年前,我实施了一个可在移动网络浏览器上运行的webrtc(使用谷歌示例),并以环境级别捕获声音。我真的没有对谷歌图书馆进行深入的代码分析,但也许你可以从这里开始。