2015-05-04 37 views
16

Próbuję nagrać nagranie 48000Hz przez getUserMedia. Ale bez szczęścia. Zwrócony plik audio MediaStream zwraca 44100 Hz. Jak mogę ustawić to na 48000Hz?Zmiana częstotliwości próbkowania Kontekstu audio (getUserMedia)

Oto fragmenty mojego kodu:

var startUsermedia = this.startUsermedia; 

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

funkcji 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.'); 
     }, 

Próbuję zmienić własność SampleRate z AudioContext, ale bez powodzenia.

Jak zmienić wartość sampleRate na 48000Hz?

EDIT: Jesteśmy teraz w porządku roztworem flash, które można nagrywać i eksport plików WAV na 48000Hz

Odpowiedz

2

Nie możesz. Częstotliwość próbkowania Kontekstu audio jest ustawiana przez przeglądarkę/urządzenie i nic nie możesz zrobić, aby to zmienić. W rzeczywistości odkryjesz, że częstotliwość 44,1 kHz na twoim komputerze może wynosić 48 kHz na moim. Różni się od tego, co wybierze system operacyjny domyślnie.

Należy również pamiętać, że nie wszystkie urządzenia są w stanie obsłużyć wszystkie częstotliwości próbkowania.

+0

Widzę, dziękuję. Czy jest jakieś rozwiązanie flashowe, które obsługuje 48kHz?(Nie ma znaczenia, że ​​jakiś sprzęt go nie obsługuje). –

+0

@ f.lorenzo Może. Powinieneś opublikować inne pytanie, ponieważ odpowiedź Flash jest zupełnie inna niż Web Audio API. – Brad

10

O ile mi wiadomo, nie ma możliwości zmiany częstotliwości próbkowania w kontekście audio. Częstotliwość próbkowania będzie zwykle równa częstotliwości próbkowania urządzenia nagrywającego i pozostanie w ten sposób. Więc nie będzie mógł napisać coś takiego:.

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

Jednakże, jeśli chcesz zabrać swój strumień audio, resample go, a następnie wysłać go do backend (czy czegoś innego z nim na zewnątrz z Web Audio API), można użyć zewnętrznego konwertera częstotliwości próbkowania (np. 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

Dziękuję, ale niestety, poprawiona wersja nagrania nie zadziała. Ale jest to dobra odpowiedź dla innych osób, które szukają sposobu na konwersję sampleRates –

+0

OK, to tylko z ciekawości: co chcesz zrobić ze strumieniem audio? Czy chcesz go jakoś zapisać lub jaki jest Twój cel? – basilikum

+0

Niestety nie mogę powiedzieć, jaki jest tego cel ze względu na politykę firmy. Ale poprawna sampleRate jest koniecznością. –

2

Możesz użyć OfflineAudioContext, aby zasadniczo renderować bufor audio do innej częstotliwości próbkowania (ale jest to operacja wsadowa).

Aby nagrać nagranie, należy użyć normalnego kontekstu dźwiękowego, a następnie użyć trybu offlineAudioContext z inną częstotliwością próbkowania w celu renderowania bufora. Istnieje przykład na stronie Mozilli.

0

Jest teraz w specyfikacji, ale jeszcze nie jest zaimplementowany w Chromium. Również w bugs.chromium.org "Status: Dostępny" nie oznacza, że ​​jest zaimplementowany. Oznacza to po prostu, że nikt nie pracuje nad tym i że jest dostępny dla każdego, kto chce nad nim pracować. Tak więc "Dostępny" oznacza "Nie przypisany".