【发布时间】:2012-02-16 19:26:48
【问题描述】:
您好,我目前正在开发一个用纯 HTML5 和 Javascript 编写的音频波形编辑器。
我使用来自Mozilla 的<audio>.MozAudioAvailable 事件取得了一些进展,以获取每一帧中的数据并将它们绘制在画布上。但是使用 MozAudioAvailable 我只能得到它现在正在播放的帧。
作为一个波形编辑器,我的程序必须在当前播放之前大约几秒钟寻找和预处理数据,即播放 00:05:00 时,我的程序可能应该显示从 00:04:50 到 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),这样我就可以得到垂直线右侧的帧。但这很丑陋,而且不容易实现,不是吗?
【问题讨论】:
标签: javascript html audio mozilla waveform