Я работаю над проектом, который требует от меня:
- Запись звука из браузера (в настоящее время через MediaRecorder API)
- Отправка через HTTP POST в Python API
- Сохраните эти аудиоданные где-нибудь в файловой системе как файл WAV
В настоящее время я кодирую звук, записанный из браузера, в виде строки base64 (из BLOB-объекта, созданного из фрагментов звука):
start() {
return new Promise(resolve => {
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
this.mediaRecorder = new MediaRecorder(stream);
this.audioChunks = [];
this.mediaRecorder.addEventListener('dataavailable', event => {
this.audioChunks.push(event.data);
});
this.mediaRecorder.start();
});
});
stop() {
this.mediaRecorder.stop();
}
getData() {
const blob = new Blob(this.audioChunks, { type: 'audio/wav;codecs=opus' });
const reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = () => {
const base64data = reader.result;
this.http.post('http://localhost:5000/test', { audio: base64data }).subscribe(res => {
console.log(res);
});
};
}
После отправки его на сервер и попытки сохранить аудио путем декодирования строки base64 и использования пакета Python 'Wave' для записи файла. Однако я получаю статический в результирующем файле.
def write_to_file(base64_audio):
decoded = base64.standard_b64decode(base64_audio)
print(type(decoded))
with wave.open('temp/test.wav', 'wb') as wav:
wav.setparams((2, 2, 16000, 0, 'NONE', 'NONE'))
wav.writeframes(decoded)
Буду очень признателен за любые предложения о том, как это исправить или улучшить процесс.