更改AudioContext的采样率(getUserMedia)

f.l*_*nzo 22 javascript sample-rate getusermedia audiocontext

我试图通过getUserMedia录制48000Hz录音.但没有运气.返回的音频MediaStream返回44100Hz.我怎样才能将其设置为48000Hz?

以下是我的代码片段:

var startUsermedia = this.startUsermedia;

            navigator.getUserMedia({ 
                audio: true, 
                //sampleRate: 48000 
            }, startUsermedia, function (e) {
                console.log('No live audio input: ' + e);
            });
Run Code Online (Sandbox Code Playgroud)

startUsermedia函数:

startUsermedia: function (stream) {
            var input = audio_context.createMediaStreamSource(stream);
            console.log('Media stream created.');
            // Uncomment if you want the audio to feedback directly
            //input.connect(audio_context.destination);
            //__log('Input connected to audio context destination.');

            recorder = new Recorder(input);
            console.log('Recorder initialised.');
        },
Run Code Online (Sandbox Code Playgroud)

我尝试更改AudioContext的属性sampleRate,但没有运气.

如何将sampleRate更改为48000Hz?

编辑:我们现在也可以使用闪存解决方案,可以记录和导出48000Hz的wav文件

bas*_*kum 15

据我所知,无法在音频上下文中更改采样率.采样率通常是您的录音设备的采样率,并将保持这种方式.所以你将无法写出这样的东西:

var input = audio_context.createMediaStreamSource(stream);
var resampler = new Resampler(44100, 48000);
input.connect(resampler);
resampler.connect(audio_context.destination);
Run Code Online (Sandbox Code Playgroud)

但是,如果您想要获取音频流,重新取样然后将其发送到后端(或者在Web Audio API之外使用它做其他事情),您可以使用外部采样率转换器(例如https:// github.com/taisel/XAudioJS/blob/master/resampler.js).

   var resampler = new Resampler(44100, 48000, 1, 2229);

   function startUsermedia(stream) {
        var input = audio_context.createMediaStreamSource(stream);
        console.log('Media stream created.');


        recorder = audio_context.createScriptProcessor(2048);
        recorder.onaudioprocess = recorderProcess;
        recorder.connect(audio_context.destination);
    }

    function recorderProcess(e) {
        var buffer = e.inputBuffer.getChannelData(0);
        var resampled = resampler.resampler(buffer);
        //--> do sth with the resampled data for instance send to server
    }
Run Code Online (Sandbox Code Playgroud)


Tim*_*mmm 5

似乎有一个关于无法设置采样率的公开错误:

https://github.com/WebAudio/web-audio-api/issues/300

还有一个Chrome问题:

https://bugs.chromium.org/p/chromium/issues/detail?id=432248

我检查了最新的Chromium代码,其中没有任何内容可以让您设置采样率。

编辑:似乎它已在Chrome中实现,但目前已损坏-请参阅Chromium问题中的评论。


小智 5

audioContext = new AudioContext({sampleRate: 48000})
Run Code Online (Sandbox Code Playgroud)

只需在创建 AudioContext 对象时设置采样率,这对我有用

  • 截至 2021 年,不适用于 Firefox。 (2认同)
  • 仅当 SampleRate 已经是参数中的值时才起作用。 (2认同)

Bra*_*rad 4

注意:这个答案已经过时了。


你不能。AudioContext 的采样率由浏览器/设备设置,您无法更改它。事实上,您会发现您的机器上的 44.1kHz 可能是我的机器上的 48kHz。它随操作系统默认选择的内容而变化。

另请记住,并非所有硬件都能够支持所有采样率。