arraybuffer 到音频 src

arraybuffor into audio src

我正在从 HTTP 响应中获取数组缓冲区。下面的代码只播放一次音频,但我想使用音频作为音频元素的 src!

    this.toSpeechService.getAudioFile(this.text).subscribe(res => {
       const context = new AudioContext();
       let source = context.createBufferSource();
       context.decodeAudioData(res, function(buffer) {
            source.buffer = buffer;
          }, null).then(() => {
            source.connect(context.destination);
            this.audioSrc = context.destination; // doesn't fill the audio player
            source.start(0);
       });
       console.log(res)
     });
    <audio controls="controls">
      <source [src]="audioSrc" type="audio/mp3/wav" />
       Your browser does not support the audio element.
    </audio>

如果您知道 ArrayBuffer 中数据的 MIME 类型,则以下应该有效。

this.toSpeechService.getAudioFile(this.text).subscribe(res => {
    const blob = new Blob([ res ], { type: THE_MIME_TYPE });
    const url = URL.createObjectURL(blob);

    YOUR_AUDIO_ELEMENT.src = url;
    YOUR_AUDIO_ELEMENT.load();
});

THE_MIME_TYPE 是实际 mimeType 的占位符。 YOUR_AUDIO_ELEMENT 是对音频元素的引用。

一旦您不再需要对象 URL,您可以通过调用 URL.revokeObjectURL(url).

释放内存