我的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加上前缀,我不记得他们是否实现了非前缀版本.无论如何,斑点是路要走!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。