Javascript 更改AudioContext(getUserMedia)的采样率

Javascript 更改AudioContext(getUserMedia)的采样率,javascript,getusermedia,sample-rate,audiocontext,Javascript,Getusermedia,Sample Rate,Audiocontext,我正试图通过getUserMedia录制48000Hz的录音。但是没有运气。返回的音频媒体流返回44100Hz。如何将其设置为48000Hz 以下是我的代码片段: var startUsermedia = this.startUsermedia; navigator.getUserMedia({ audio: true, //sampleRate: 48000 }, start

我正试图通过getUserMedia录制48000Hz的录音。但是没有运气。返回的音频媒体流返回44100Hz。如何将其设置为48000Hz

以下是我的代码片段:

var startUsermedia = this.startUsermedia;

            navigator.getUserMedia({ 
                audio: true, 
                //sampleRate: 48000 
            }, startUsermedia, function (e) {
                console.log('No live audio input: ' + e);
            });
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.');
        },
我尝试更改AudioContext的属性采样器,但没有成功

如何将采样器更改为48000Hz


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

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


还请记住,并非所有硬件都能实现所有采样率。

据我所知,在音频环境中无法更改采样率。采样率通常是您的录音设备的采样率,并保持不变。所以你不能写这样的东西:

var input = audio_context.createMediaStreamSource(stream);
var resampler = new Resampler(44100, 48000);
input.connect(resampler);
resampler.connect(audio_context.destination);
但是,如果您想获取音频流,对其重新采样,然后将其发送到后端(或在Web audio API之外使用它进行其他操作),则可以使用外部采样率转换器(例如)


似乎存在无法设置采样率的公开错误:

还有一个Chrome问题:

我检查了最新的Chromium代码,里面没有允许您设置采样率的内容

编辑:它似乎已经在Chrome中实现,但目前已被破坏-请参阅Chrome问题中的注释。

您可以使用基本上以不同的采样率呈现音频缓冲区(但这是批处理操作)


因此,您可以使用普通音频上下文录制录制,然后使用具有不同采样率的OfflineAudioContext渲染缓冲区。Mozilla页面上有一个示例。

它现在在规范中,但尚未在Chromium中实现。
同样在bugs.chromium.org中,“Status:Available”并不意味着它已经实现。这只意味着没有人在做这件事,任何想做这件事的人都可以使用它。所以“可用”表示“未分配”。

它已添加到chrome中:

var ctx=new(window.AudioContext | | window.webkitadiocontext)({sampleRate:16000})


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

我明白了,谢谢。是否有支持48kHz的闪存解决方案?(如果某些硬件不支持它,这并不重要)@f.lorenzo也许。你应该发布一个不同的问题,因为Flash的答案与Web音频API完全不同。谢谢你,但遗憾的是,录音的重新采样版本不起作用。但这对于其他正在寻找转换sampleRatesOk的方法的人来说是一个很好的答案,他们只是出于好奇:您想对音频流做什么?你想以某种方式保存它,还是你的目标是什么?遗憾的是,由于公司的政策,我不能告诉你它的目的。但正确的采样器是必须的。好的,我明白了。如果您可以控制应用程序使用的环境(浏览器、操作系统),那么您可以直接在那里更改音频设备的默认采样率。音频上下文采用输出设备的采样率,而不是输入设备的采样率。从2021年起,Firefox无法运行。
   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
    }
audioContext = new AudioContext({sampleRate: 48000})