getUserMedia предоставляет вам доступ к устройству, но вы сами можете записывать звук. Для этого вам нужно «прослушать» устройство, создав буфер данных. Затем, когда вы перестанете слушать устройство, вы сможете отформатировать эти данные как файл WAV (или любой другой формат). После форматирования вы можете загрузить его на свой сервер S3 или воспроизвести прямо в браузере.
Чтобы прослушивать данные так, чтобы это было полезно для построения вашего буфера, вам понадобится ScriptProcessorNode. ScriptProcessorNode в основном находится между входом (микрофон) и выходом (динамики) и дает вам возможность манипулировать аудиоданными во время их потоковой передачи. К сожалению, реализация непростая.
Вам понадобиться:
- getUserMedia для доступа к устройству.
- AudioContext для создания MediaStreamAudioSourceNode и ScriptProcessorNode.
- MediaStreamAudioSourceNode для представления аудиопотока
- ScriptProcessorNode, чтобы получить доступ к данным потокового аудио через событие onaudioprocessevent. Событие предоставляет данные канала, с которыми вы будете строить свой буфер.
Собираем все вместе:
navigator.getUserMedia({audio: true},
function(stream) {
// create the MediaStreamAudioSourceNode
var context = new AudioContext();
var source = context.createMediaStreamSource(stream);
var recLength = 0,
recBuffersL = [],
recBuffersR = [];
// create a ScriptProcessorNode
if(!context.createScriptProcessor){
node = context.createJavaScriptNode(4096, 2, 2);
} else {
node = context.createScriptProcessor(4096, 2, 2);
}
// listen to the audio data, and record into the buffer
node.onaudioprocess = function(e){
recBuffersL.push(e.inputBuffer.getChannelData(0));
recBuffersR.push(e.inputBuffer.getChannelData(1));
recLength += e.inputBuffer.getChannelData(0).length;
}
// connect the ScriptProcessorNode with the input audio
source.connect(node);
// if the ScriptProcessorNode is not connected to an output the "onaudioprocess" event is not triggered in chrome
node.connect(context.destination);
},
function(e) {
// do something about errors
});
Вместо того, чтобы создавать все это самостоятельно, я предлагаю вам использовать код AudioRecorder, и это здорово. Он также обрабатывает запись буфера в файл WAV. Вот демо.
Вот еще один отличный ресурс.
person
jrullmann
schedule
08.10.2013