编程语言
首页 > 编程语言> > javascript-标记到audioBuffer-有可能吗?

javascript-标记到audioBuffer-有可能吗?

作者:互联网

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

为了使我的webApp正常工作,我必须两次读取/访问mp3文件:

>通过XMLHttpRequest读取整个MP3文件并将其放入audioBuffer,随后可以使用audioContext.decodeAudioData()对其进行解码-如此处所述:Extracting audio data every t seconds
>通过指定< audio>标记,使我可以按需播放文件,以毫秒为单位指定提示/开始点. Playing audio with Javascript?.

问:当前有什么方法可以首先声明< audio>标记,然后以某种方式直接从中派生audioBuffer,而无需诉诸XMLHttpRequest?

我有关于createMediaElementSource的read,但是我看不到如何使用它来获取audioBuffer.

解决方法:

在执行第一个XHR时,要求一个Blob:

xhr.responseType = 'blob'

然后从中获取一个ArrayBuffer:

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

并将其提供给解码音频数据以照常获取AudioBuffer.您现在可以进行处理了.

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

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

您可能需要使用Webkit供应商前缀为URL加上前缀,我不记得他们是否实现了非前缀版本.无论如何,斑点是路要走!

标签:html5,web-audio,audio,javascript
来源: https://codeday.me/bug/20191029/1961627.html