2015-05-04 409 views
16

我试图通过getUserMedia录制48000Hz录音。但没有运气。返回的音频MediaStream返回44100Hz。我怎样才能把它设置为48000Hz?更改AudioContext的采样率(getUserMedia)

这里是我的代码片段:

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的财产采样率,但没有运气。

如何将sampleRate更改为48000Hz?

编辑:我们现在也有一个闪光灯解决方案,它可以记录和48000Hz

回答

2

不能导出wav文件没关系。 AudioContext的采样率由浏览器/设备设置,您无法做任何更改。事实上,你会发现你的机器上的44.1kHz可能是我的48kHz。它随OS的默认选择而变化。

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

+0

我明白了,谢谢。有没有支持48kHz的闪存解决方案?(不要紧,如果有些硬件不支持它) –

+0

@ f.lorenzo也许。你应该为此发布一个不同的问题,因为Flash的答案与Web Audio API完全不同。 – Brad

10

据我所知,没有办法改变音频上下文中的采样率。采样率通常是录音设备的采样率,并保持这种状态。所以,你不能写这样的事情:

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

不过,如果你想利用你的音频流,重新采样,然后将其发送到后端(或做某事别人用它的外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 
    } 
+0

谢谢,但遗憾的是重新采样版本的录音不起作用。但是对于其他寻找转换sampleRates方法的人来说,这是一个很好的答案。 –

+0

好吧,那么出于好奇:你想用你的音频流做什么?你想以某种方式保存它,或者你的目标是什么? – basilikum

+0

由于公司政策,我不能告诉你它的目的。但正确的sampleRate是必须的。 –

2

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

因此,您可以使用正常的音频上下文录制自己的录制内容,然后使用具有不同采样率的OfflineAudioContext来呈现缓冲区。 Mozilla页面上有一个例子。

0

它现在在规范中,但尚未在Chromium中实施。 同样在bugs.chromium.org中,“状态:可用”并不意味着它已经实现。这仅仅意味着没有人正在处理它,并且任何想要处理它的人都可以使用它。所以“可用”是指“未分配”。