2015-05-04 5 views
16

Im пытается записать запись 48000Hz через getUserMedia. Но без везения. Возвращенный звук MediaStream возвращает 44100 Гц. Как я могу установить это на 48000 Гц?Изменить частоту дискретизации 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.'); 
     }, 

Я попытался изменить свойство SAMPLERATE в AudioContext, но не повезло.

Как я могу сменить образецRate на 48000 Гц?

EDIT Мы также теперь хорошо с флэш-решение, которое может записывать и экспортировать WAV файлы в 48000Hz

ответ

2

Вы не можете. Частота выборки AudioContext устанавливается браузером/устройством, и вы ничего не можете изменить, чтобы изменить ее. Фактически, вы обнаружите, что 44.1 кГц на вашем компьютере может быть 48 кГц на моем. Он варьируется в зависимости от выбора ОС по умолчанию.

Также помните, что не все аппаратные средства способны ко всем частотам выборки.

+0

Я вижу, спасибо. Возможно, есть флеш-решение, поддерживающее 48 кГц?(Неважно, какое-то оборудование не поддерживает его) –

+0

@ f.lorenzo Возможно. Вы должны задать для него другой вопрос, поскольку ответ Flash полностью отличается от 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

К сожалению, я не могу сказать вам цели этого из-за политики компании. Но правильный образецRate является обязательным. –

1

Похоже, есть открытая ошибка о невозможности установить частоту дискретизации:

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

Там также вопрос Chrome:

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

Я проверил последний код Chromium, и там нет ничего, что позволяет вам установить частоту дискретизации.

2

Вы можете использовать OfflineAudioContext, чтобы по существу визуализировать ваш звуковой буфер с другой частотой дискретизации (но это пакетная операция).

Таким образом, вы записываете свою запись с использованием обычного аудиоконтента, а затем используете автономный аудиоконтент с другой частотой дискретизации для визуализации вашего буфера. На странице Mozilla есть пример.

0

Теперь он находится в спецификации, но еще не реализован в Chromium. Также в bugs.chromium.org «Status: Available» не означает, что он реализован. Это просто означает, что никто не работает над этим и что он доступен для всех, кто хочет работать над ним. Поэтому «Доступно» означает «Не назначено».

 Смежные вопросы

  • Нет связанных вопросов^_^