2015-05-04 408 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中,「狀態:可用」並不意味着它已經實現。這僅僅意味着沒有人正在處理它,並且任何想要處理它的人都可以使用它。所以「可用」是指「未分配」。