嗨,我目前正在开发一个用纯 HTML5 和 Javascript 编写的音频波形编辑器。
我使用Mozilla<audio>
的.MozAudioAvailable 事件取得了一些进展,以获取每一帧中的数据并将它们绘制在画布上。然而,使用 MozAudioAvailable 我只能得到它现在正在播放的帧。
作为一个波形编辑器,我的程序必须在当前播放之前大约几秒钟寻找和预处理数据,即播放 00:05:00 时,我的程序可能应该显示从 00:04:50 到 00:05 的波形:10,所以我必须在播放之前对 00:05:00 到 00:05:10 之间的数据进行预处理。
我在互联网上搜索了一个解决方案(不限于 Mozilla 方法,也接受 Chrome 或 Opera 方法),但没有得到任何答案。preload 属性和 onprogress 事件没有帮助。现在我正在尝试制作另一个<audio>
标签,它播放与原始音乐相同的音乐,但提前几秒钟获取数据。但是,如您所见,该解决方案非常脏。
我想知道 HTML5 小组是否正在研究一些更灵活的方法来处理多媒体对象,或者是否一些浏览器开发团队正在研究这个。如果您对此主题有任何想法或经验,请给我一些指示。谢谢。
更新:
也许我没有清楚地描述我的问题。下面是一张从 Audacity 拍摄的照片,可以证明我的目标。
大约 1:55.10 处的垂直线表示当前正在播放的帧。对于该行左侧的帧,我可以使用我的程序保存的历史帧。但是对于尚未播放的行右侧的帧,我无法在播放之前获得它们。
一个丑陋的解决方案可能是添加另一个<audio>
播放速度比原始标签更快的标签(在屏幕截图中应该播放 1:55.90),这样我就可以得到垂直线右侧的帧。但这很丑陋,而且不容易实现,不是吗?