在JavaScript的navigator.mediaDevices.getUserMedia中设置采样频率

时间:2018-09-24 12:54:17

标签: javascript audio audio-recording web-mediarecorder

我目前正在尝试在navigator.mediaDevices.getUserMedia内设置采样频率。这是一个代码段:

navigator.mediaDevices.getUserMedia({audio: {"sampleRate": {"exact": 8000}}, video: false}).then(handleSuccess).catch(e => console.log(e));

var handleSuccess = function(stream)
{
    mediaRecorder = new MediaRecorder(stream);
    mediaRecorder.start(1000); // the argument here is the duration of each audio chunk in milliseconds
    mediaRecorder.addEventListener
    ("dataavailable", event => 
        {
            blob = event.data;
            console.log(blob)
        }
    );
}

我不相信在sampleRate中设置getUserMedia实际上是可行的,因为当我用不同的sampleRate值检查blob大小时,它永远不会改变。每个Blob始终在6000到7000范围内。

1 个答案:

答案 0 :(得分:0)

我发现了问题所在。截至2018年10月6日,Firefox不支持sampleRate约束。Chrome应该支持sampleRate约束,但是它不起作用,我已经提交了Chromium的错误报告:https://bugs.chromium.org/p/chromium/issues/detail?id=889851

如果您需要自己检查一下,Mozilla为支持的媒体限制做了非常好的演示:https://mdn.mozillademos.org/en-US/docs/Web/API/Media_Streams_API/Constraints$samples/Example_Constraint_exerciser?revision=1411870

您将在顶部看到受支持的音频限制。如果您在Firefox上输入链接,则会看到{"sampleRate": 8000}并未在其中列出。在Chrome上,它已列出,但如果您在“请求的音频限制”输入框中输入HexToDecimalExample3,然后单击“应用限制”,则应该在“实际音频设置”框中看到采样率是“不受影响。