Как получить WAV-файл из BLOB-объекта в NodeJS - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть интерфейс в ReactJS, где я использую MediaRecorder для записи голоса с микрофона и сохранения его в аудиоблоб с типом mime «audio / mp3». Затем я загружаю этот BLOB-объект в хранилище облачных объектов IBM. Мой пример использования: я хочу смешать некоторые из моих Aud ios и объединить некоторые Aud ios, и для этого я использую SOX в NodeJS. Итак, я использовал cosHandler в Node, где я загружаю объекты, которые я сохранил ранее, то есть BLOB-объекты. Моя функция getCosObject выглядит примерно так:

const getCosObject = async(key, itemName) => {
  var wstream = fs.createWriteStream(`${'/tmp/'}${itemName}`);
  console.log(`Retrieving audio from bucket: ${bucketName}, key: ${key}`);
  return cos.getObject({
    Bucket: bucketName,
    Key: key,
  }).promise()
    .then(async(data) => {
      if (data !== null) {
        wstream.write(data.Body);
        console.log('Audio FILE Downloaded from COS::', itemName);
        return;
      }
    })
    .catch((e) => {
      console.error(`ERROR: ${e.code} - ${e.message} - ${itemName}\n`);
      return;
    });
};

Но когда я использую SOX над этими файлами, я получаю следующую ошибку:

Error from the SOX command: FAIL formats: can't open input file `/tmp/processedAnswer1Me.wav': WAVE: RIFF header not found

Примечание: Когда я конвертирую свой BLOB-объект в WAV в моем ReactJS с использованием функции decodeAudioData AudioContext и функции audioBufferToWav моя SOX-команда успешно выполняется в NODE. Почему я не хочу реализовывать это, потому что размер файла WAV после этого имеет исключительно большой размер, чем BLOB.

Использование SOXI для моего сгенерированного большого двоичного объекта приведено ниже:

Input File     : '/tmp/PreQNADiscussion.wav'
Channels       : 2
Sample Rate    : 32000
Precision      : 16-bit
Duration       : 00:00:03.34 = 107008 samples ~ 250.8 CDDA sectors
File Size      : 2.21M
Bit Rate       : 5.28M
Sample Encoding: MPEG audio (layer I, II or III) 

И когда я использую SOXI для WAV-конвертированного звука, то есть который я не хочу реализовывать

Input File     : '/tmp/QNA1tts.wav'
Channels       : 1
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:00:03.95 = 174375 samples = 296.556 CDDA sectors
File Size      : 349k
Bit Rate       : 706k
Sample Encoding: 16-bit Signed Integer PCM

Любая помощь?

...