更改Audiocontext(Getusermedia)的采样率



我试图通过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);
            });

stronusermedia函数:

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?

edit :我们现在也可以使用一个可以在48000Hz

记录和导出WAV文件的Flash解决方案据我所知,

无法在音频上下文中更改采样率。采样率通常是您的录音设备的样本率,并将保持这种状态。因此,您将无法写下这样的东西:

var input = audio_context.createMediaStreamSource(stream);
var resampler = new Resampler(44100, 48000);
input.connect(resampler);
resampler.connect(audio_context.destination);

但是,如果要进行音频流,将其重新采样,然后将其发送到后端(或在Web Audio API之外使用STH。://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
    }

看来,关于无法设置采样率的空白:

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

还有一个镀铬问题:

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

我检查了最新的铬代码,没有什么可以让您设置采样率。

编辑:似乎已经在Chrome中实现了,但目前已被打破 - 请参阅Chromium问题中的评论。

已添加到chrome:

var ctx = new(window.audiocontext || window.webkitaudiocontext)({采样:16000});

https://developer.mozilla.org/en-us/docs/web/api/audiocontext/audiocontext/audiocontext

audioContext = new AudioContext({sampleRate: 48000})

只需设置录像速率时,当创建AudioContext对象时,这对我有用

注意:此答案已过时。


你不能。AudioContext的采样率是由浏览器/设备设置的,您无能为力更改它。实际上,您会发现机器上的44.1kHz可能是我的48kHz。默认情况下,它的选择都会有所不同。

还请记住,并非所有硬件都能达到所有样本率。

您可以使用Offlineaudiocontext实质上将音频缓冲区渲染为不同的采样率(但这是批处理操作)。

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

现在在规格中,但尚未在铬中实现。另外,在bugs.chromium.org中,"状态:可用"并不意味着它已实现。这只是意味着没有人在研究它,并且适用于想要从事它的任何人。因此"可用"表示"未分配"。

相关内容

  • 没有找到相关文章

最新更新