Проблема:
Я записываю аудио из браузера, который дает мне BLOB-объект после завершения записи:
let blob = new Blob(chunks, { 'type' : 'audio/webm;codecs=opus' });
Изменение типа пантомимыздесь не поможет, поскольку блоки уже поставляются с MIME-типом, который audio/webm;codecs=opus
почти для всех браузеров. Поэтому ничего не могу сделать здесь.
Отправка этого большого двоичного объекта через XHR на сервер node.js приведет к получению буфера из этого большого двоичного объекта:
Клиент:
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://localhost:3000/audio', true);
xhr.send(blob);
Сервер:
app.post('/audio' , (req, res) =>{
req.on('readable',()=>{
let buffer = req.read();
// sending this buffer to the external API results in error
// since it expects the mime-type audio/wav
});
res.send({msg: 'success'});
});
Для большинства решений требуется записать файл на диск и преобразовать его ( ffmpeg ). Другие используют функции браузера, которые являются экспериментальными или несовместимыми с более старыми браузерами ... Я также пытался использовать пакет wavfile npm, но он создает поврежденный файл, если я пытаюсь записать его с помощью UInt8Array из этого webm-отформатированный буфер (воспроизводимый файл, но он содержит только шум и намного короче, чем должна быть фактическая запись)
Должно быть простое решение для преобразования стороны сервера двоичных данных, верно? Лучшее, что я мог бы пожелать, - это функция convertWebmBufferToWavBuffer
.