Azure语音javascript SDK:以mp3输出音频

问题描述

我使用sdk.connection方法捕获语音到文本识别器的音频。它会创建要转换为MP3的PCM音频。

这是初始化连接的方式:

const con = SpeechSDK.Connection.fromRecognizer(this.recognizer);
      con.messageSent = args => {
        // Only record outbound audio mesages that have data in them.
        if (
          args.message.path === "audio" &&
          args.message.isBinaryMessage &&
          args.message.binaryMessage !== null
        ) {
          this.wavFragments[this.wavFragmentCount++] =
            args.message.binaryMessage;
        }
      };

这是wav文件构建:

let byteCount = 0;
    for (let i = 0; i < this.wavFragmentCount; i++) {
      byteCount += this.wavFragments[i].byteLength;
    }
    // Output array.
    const sentAudio = new Uint8Array(byteCount);
    byteCount = 0;
    for (let i = 0; i < this.wavFragmentCount; i++) {
      sentAudio.set(new Uint8Array(this.wavFragments[i]),byteCount);
      byteCount += this.wavFragments[i].byteLength;
    } // Write the audio back to disk.
    // Set the file size in the wave header:
    const view = new DataView(sentAudio.buffer);
    view.setUint32(4,byteCount,true);
    view.setUint32(40,true);

我尝试使用lamejs将'sentAudio'转换为MP3。

import {lamejs} from "../../modules/lame.min.js";

const wavBlob = new Blob([sentAudio]);
const reader = new FileReader();
    reader.onload = evt => {
      const audioData = evt.target.result;
      const wav = lamejs.WavHeader.readHeader(new DataView(audioData));
      const mp3enc = new lamejs.Mp3Encoder(1,wav.sampleRate,128);
      const samples = new Int8Array(audioData,wav.dataOffset,wav.dataLen / 2);
      let mp3Tmp = mp3enc.encodeBuffer(samples); // encode mp3

      // Push encode buffer to mp3Data variable
      const mp3Data = [];
      mp3Data.push(mp3Tmp);

      // Get end part of mp3
      mp3Tmp = mp3enc.flush();

      // Write last data to the output data,too
      // mp3Data contains now the complete mp3Data
      mp3Data.push(mp3Tmp);

      const blob = new Blob(mp3Data,{ type: "audio/mp3" });
      this.createDownloadLink(blob,"mp3");
    };
    reader.readAsArrayBuffer(wavBlob);

MP3 Blob为空或包含听不见的声音。 我也尝试过使用this example中描述的'encodeMP3'方法,但是它提供了相同的输出。

任何支持此mp3转换的现有解决方案吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)