Я пытаюсь записывать и сохранять звуковые клипы с микрофона пользователя с помощью API GetUserMedia()
и AudioContext
.
Я смог сделать это с помощью MediaRecorder
API, но, к сожалению, это не поддерживается Safari / iOS, поэтому я хотел бы сделать это только с помощью AudioContext
API и буфера, который поставляетсяОт этого.
Я получил кое-что, что частично работает с в этом руководстве от Google Web основы , но я не могу понять, как сделать следующие шаги, которые они предлагают.
var handleSuccess = function(stream) {
var context = new AudioContext();
var source = context.createMediaStreamSource(stream);
var processor = context.createScriptProcessor(1024, 1, 1);
source.connect(processor);
processor.connect(context.destination);
processor.onaudioprocess = function(e) {
// ******
// TUTORIAL SUGGESTS: Do something with the data, i.e Convert this to WAV
// ******
// I ASK: How can I get this data in a buffer and then convert it to WAV etc.??
// *****
console.log(e.inputBuffer);
};
};
navigator.mediaDevices.getUserMedia({ audio: true, video: false })
.then(handleSuccess);
Как сказано в руководстве:
Данные, которые хранятся в буферах, являются необработанными данными с микрофона, и у вас есть несколько вариантов того, что вы можете сделатьс данными:
- Загрузить его прямо на сервер
- Сохранить его локально
- Преобразовать в выделенный формат файла, например WAV, и затем сохранить его вваши серверы или локально
Я мог бы сделать все это, но Я не могу понять, как получить аудио буфер, как только я остановил контекст .
С помощью MediaRecorder
вы можете сделать что-то вроде этого:
mediaRecorder.ondataavailable = function(e) {
chunks.push(e.data);
}
А затем, когда вы закончите запись, у вас будет буфер в chunks
.Должен быть способ для этого, как предложено в руководстве, но я не могу найти data
для вставки в буфер в первом примере кода.
Как только я получу аудио буфер, я смог преобразовать его в WAV и превратить в блоб и т. Д.
Кто-нибудь может мне помочь с этим?(Я не хочу использовать MediaRecorder
API)