【问题标题】:How can I set this parameter in JavaScript getusermedia?如何在 JavaScript getusermedia 中设置此参数?
【发布时间】:2026-02-06 16:20:02
【问题描述】:

我想用 JavaScript 以 16khz 的采样率实时录制音频。我有以下代码:

navigator.getUserMedia(
    {
        "audio": {
            "mandatory": {
                "googEchoCancellation": "false",
                "googAutoGainControl": "false",
                "googNoiseSuppression": "false",
                "googHighpassFilter": "false"
            },
            "optional": {
                "sampleRate": 16000 
            }
        },
    }, gotStream, function(e) {
        console.log(e);
    });

但这会引发错误:

index.html:1026 Uncaught TypeError: 无法执行 “Navigator”上的“webkitGetUserMedia”:提供的值既不是 数组,也没有索引属性。

如何在 JavaScript 中实时录制 16khz 的音频?

【问题讨论】:

    标签: javascript audio getusermedia


    【解决方案1】:

    几个问题:

    1. optional(现在是 advanced)接受一个数组,例如optional: [{ sampleRate: 16000 }]
    2. 此约束语法已过时,仅适用于 Chrome。
    3. sampleRate 尚未在任何浏览器 AFAIK 中实现。

    所以它不会起作用,至少现在还不会。以后用spec syntax

    navigator.mediaDevices.getUserMedia({
      audio: {
        echoCancellation: {exact: false},
        sampleRate: 16000,
      }
    })
    .then(gotStream)
    .catch(e => console.log(e));
    

    【讨论】: