<audio>标签到audioBuffer - 可能吗?</audio>

时间:2014-04-15 10:02:03

标签: javascript html5 audio web-audio

我的javascript-webApp首先读取一个短的mp3文件,并在其中找到沉默间隙(出于导航目的),然后它播放相同的mp3文件,提示它从一个静音或另一个完成开始。这与通常的webAudio场景不同,后者旨在授予对当前正在流中播放的音频数据的访问权限(而不是整个轨道)。

让我的webApp工作我必须阅读/访问mp3文件两次

  1. 通过XMLHttpRequest读取整个MP3文件并将其放入audioBuffer中,然后我可以使用audioContext.decodeAudioData()进行解码 - 如下所述:Extracting audio data every t seconds
  2. 通过指定<audio>标签,允许我按需播放文件,以毫秒为单位指定提示/起点。 Playing audio with Javascript?
  3. 问:目前我是否可以先声明<audio>代码,然后以某种方式直接从中获取audioBuffer,而无需诉诸XMLHttpRequest

    read关于createMediaElementSource,但我无法通过使用它来了解如何获得audioBuffer

1 个答案:

答案 0 :(得分:4)

在做第一次XHR时,请求blob:

xhr.responseType = 'blob'

然后从中获取一个ArrayBuffer:

var arrayBuffer;
var fileReader = new FileReader();
fileReader.onload = function() {
    arrayBuffer = this.result;
};
fileReader.readAsArrayBuffer(blob);

并将其交给decodeAudioData以照常获取AudioBuffer。您现在可以进行处理了。

然后,当您的处理完成后,将blob作为源提供给标记,当您想要播放它时,它将照常工作:

 audio.src = window.URL.createObjectURL(blob);

您可能需要在URL前加上webkit供应商前缀,我无法记住它们是否实现了未加前缀的版本。无论如何,blob是要走的路!