Сохранение записанного звука из браузера в Python API в виде файла WAV - PullRequest
1 голос
/ 17 марта 2019

Я работаю над проектом, который требует от меня:

  1. Запись звука из браузера (в настоящее время через MediaRecorder API)
  2. Отправка через HTTP POST в Python API
  3. Сохраните эти аудиоданные где-нибудь в файловой системе как файл 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)

Буду очень признателен за любые предложения о том, как это исправить или улучшить процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...