【问题标题】:How to get hardware information of (in-build) microphone?如何获取(内置)麦克风的硬件信息?
【发布时间】:2015-10-23 15:01:46
【问题描述】:

当用户在我的网站上录制音频文件时,是否可以读取(内置)麦克风的硬件信息(至少是名称)?

这可以用 JavaScript 实现还是有其他方法可以解决这个问题?我在网上搜索,但只能找到用 JavaScript 录制的脚本。

【问题讨论】:

    标签: javascript web microphone


    【解决方案1】:

    过时的 API

    此答案使用非标准 API,浏览器支持有限。在撰写本文时,它在当前的 Chrome 中有效,但不会在其他浏览器的未来版本中采用,并且可能会在 Chrome 中消失。如需获得更广泛支持的解决方案,请参阅:https://stackoverflow.com/a/31758598/610573


    使用MediaStreamTrack.getSources(),您可以获得可用来源的列表。每个来源都有一个kind 属性,以及一个label

    MediaStreamTrack.getSources(function(sourceInfos) {
        for (var i = 0; i != sourceInfos.length; ++i) {
            var thisSource = sourceInfos[i];
            console.log('stream type: '+thisSource.kind+', label: '+thisSource.label); 
            // example: stream type: audio, label: internal microphone
        }
    });
    

    文档及相关

    【讨论】:

    • MediaStreamTrack.getSources 已过时,仅适用于 Chrome 和 Opera。
    • @ChrisBaker 这是not available in Firefox,从来没有。它已从 October 17. 2013November 5. 2013 之间的标准中删除,即已过时约 2 年。 Chrome 45 实现了它的替换,所以让所有人都集中在标准上。链接的 adapter.js 已过时/非官方。
    • @jib 这让我很奇怪,但我克服了它:)
    • 我编辑了我的答案以添加免责声明,并且很高兴知道这些信息,因为我在半实验/半生产工具的答案中使用了该方法。看起来我们需要修改我们的方法。 @Kami,请务必注意更改。如果您更改您选择的答案,我将删除我的答案。
    • 我同意@Kami 的观点,即遗留信息很有用,Chrome 尚未切换。感谢您编辑它。
    【解决方案2】:

    较新版本:在 Firefox、MS Edge 和 Chrome 45 中可用,带有实验标志。

    使用标准navigator.mediaDevices.enumerateDevices(),您可以获得可用资源的列表。每个来源都有一个kind 属性,以及一个label

    var stream;
    navigator.mediaDevices.getUserMedia({ audio:true })
    .then(s => (stream = s), e => console.log(e.message))
    .then(() => navigator.mediaDevices.enumerateDevices())
    .then(devices => {
      stream && stream.stop();
      console.log(devices.length + " devices.");
      devices.forEach(d => console.log(d.kind + ": " + d.label));
    })
    .catch(e => console.log(e));
    
    var console = { log: msg => div.innerHTML += msg + "<br>" };
    &lt;div id="div"&gt;&lt;/div&gt;

    文档及相关

    感谢adapter.js polyfill,最后一个演示可以在常规 Chrome 中运行。

    【讨论】:

    • 在 Chrome 45 中,尝试使用 this fiddle。由于某种原因,getUserMedia 在该浏览器中的堆栈溢出代码 sn-ps 中不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    相关资源
    最近更新 更多