2016-04-11 3 views
0

Я видел эту страницу resample audio buffer from 44100 to 16000, используя offlineAudioContext для повторной настройки звука из фиксированного буфера. Есть ли способ перепрограммировать звук из потока? То, что я хотел бы сделать, - захватить звук с микрофона, переконвертировать его до низкой скорости передачи и загрузить на наш сервер в режиме реального времени.Повторная запись захваченного аудиопотока с помощью offlineAudioContext

+0

Есть ли причина, по которой вы хотите использовать такую ​​медленную частоту дискретизации? Если вы просто пытаетесь уменьшить пропускную способность, уменьшение битовой глубины - это гораздо лучшая идея. API веб-аудио использует образцы float32. Вы можете уйти с 8-битными выборками на 44,1 кГц намного лучше, чем вы можете с 16-разрядными образцами на частоте 16 кГц. – Brad

+0

Да. Устройства, разговаривающие с браузером, знают только скорость выборки 8K, закодированную в ADPMC, и это 4 бита на выборку. Кроме того, в среде, в которой мы находимся, есть несколько сотен пользователей, которые загружают аудио в реальном времени (только речи) на облачные серверы одновременно почти 24 часа в сутки. Так что да, низкая пропускная способность - определенно требование. Хорошая идея по 8-битной выборке. Мы можем уменьшить его на стороне сервера в режиме реального времени, и это облегчает работу, так как большая часть моей команды состоит из людей C, C++. – user2600798

+0

Знают ли ваши разработчики о Emscripten? https://kripken.github.io/emscripten-site/ – Brad

ответ

0

Что вам нужно сделать, это создать ScriptProcessorNode, а затем выполнить повторный выбор буферов по мере вызова вашего обратного вызова.

var scriptNode = context.createScriptProcessor(4096, 1, 1); 
scriptNode.onaudioprocess = function onAudioProcess(e) { 
    // e.inputBuffer contains what you want 
}; 
+0

Спасибо за ваш ответ. Должен ли я иметь ВСЕ образцы данных, прежде чем я смогу это сделать? Я пытаюсь сделать это в режиме реального времени, а не записывать 30 минут аудио, а затем повторить выбор. Кроме того, спецификация webrtc не указывает, как часто происходит обратный вызов. – user2600798

+0

@ user2600798 Нет, прочитайте документацию, к которой я привязан для ScriptProcessorNode. Первый параметр при его создании указывает размер буфера в образцах. Установив его на 4096, обратный вызов будет запущен каждые 4096 образцов. Я считаю, что 2048 и 4096 являются хорошими компромиссами для латентности и производительности для большинства общих целей. Вы можете опустить его, если вам нужно, или поднять его, если это необходимо. Спецификация WebRTC не имеет ничего общего с этим ... это API веб-аудио. – Brad

+0

Спасибо, что расчистили его. Но это может сделать только один повторный выбор за раз. Информация с конца одного пакета не переносится в следующий пакет, так что в конце звука много ненормально. – user2600798

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