Javascript <;音频>;标签到音频缓冲区-可能吗?
我的javascript webApp首先读取一个简短的mp3文件,并在其中找到静音间隙(出于导航目的),然后播放相同的mp3文件,提示它从一个或另一个静音结束的地方开始。这与通常的webAudio场景不同,webAudio场景旨在授权访问流中当前正在播放的音频数据(而不是整个曲目) 要使我的Web应用程序正常工作,我必须读取/访问mp3文件两次:Javascript <;音频>;标签到音频缓冲区-可能吗?,javascript,html,audio,web-audio-api,Javascript,Html,Audio,Web Audio Api,我的javascript webApp首先读取一个简短的mp3文件,并在其中找到静音间隙(出于导航目的),然后播放相同的mp3文件,提示它从一个或另一个静音结束的地方开始。这与通常的webAudio场景不同,webAudio场景旨在授权访问流中当前正在播放的音频数据(而不是整个曲目) 要使我的Web应用程序正常工作,我必须读取/访问mp3文件两次: 通过XMLHttpRequest读取整个MP3文件并将其放入音频缓冲区,随后我可以使用audioContext.decodeAudioData()对
XMLHttpRequest
读取整个MP3文件并将其放入音频缓冲区,随后我可以使用audioContext.decodeAudioData()
对其进行解码-如下所述:
Q:目前是否有任何方法可以声明
关于createMediaElementSource
的,但我不知道如何使用它来获取音频缓冲区 在进行第一次XHR时,请输入一个blob:
xhr.responseType = 'blob'
然后从中取出一个ArrayBuffer:
var arrayBuffer;
var fileReader = new FileReader();
fileReader.onload = function() {
arrayBuffer = this.result;
};
fileReader.readAsArrayBuffer(blob);
和往常一样,用它来解码音频数据,得到音频缓冲区。现在可以进行处理了
然后,处理完成后,将blob作为源提供给标记,当您想要播放它时,它将正常工作:
audio.src = window.URL.createObjectURL(blob);
您可能需要使用webkit供应商前缀作为URL的前缀,我不记得他们是否实现了非固定版本。不管怎么说,水滴是最好的选择 谢谢,但是我想你错过了我问题中的一句话,那就是“不诉诸XMLHttpRequest”这是不可能的。标记的语义是流式的、缓存在磁盘上的、不透明的资源。音频缓冲区的语义是本地的、解码的、平面的、非常快速的访问、存储在内存中的数据。你可以在前者中使用后者,但是,出于明显的原因,不是相反。你有没有用过它?没有,我没有试一下