我有下面三个截图,基于Flash的音频播放器在不同的网站上,绘制了它将要播放的剪辑的波形,并在播放时沿着它移动,还允许用户在音频文件上单击一个点,它就会跳到那个点。
DJ从http://www.djdownload.com下载音乐播放器
DJ Download Music Player http://img13.imageshack.us/img13/6739/djdownloadmusicplayer.png
来自http://www.soundcloud.com的SoundCloud音乐播放器
SoundCloud Music Player http://img5.imageshack.us/img5/6336/soundcloudmusicplayer.png
来自http://www.trackitdown.net的TrackItDown音乐播放器
TrackItDown Music Player http://img697.imageshack.us/img697/7392/trackitdownmusicplayer.png
我有很少的Flash知识,但这很容易实现吗?我只想展示闪存文件的mp3和它绘制的波形。我知道这在CPU上可能是相当密集的,所以有没有一种方法可以缓存波形数据,这样它就不会在每次加载文件时都重新绘制?
发布于 2010-01-17 03:40:36
我以前从来没有这样做过,但据我所知,情况如下。
如果你使用的是Flash Player10,那你就走运了,否则你就得计算声音播放时的频谱了。就像在Chris的链接中一样,您可以使用Sound.extract()将声音对象中的声音数据放入ByteArray (仅限FP10)。然后查看ByteArray,读取值,并根据值在屏幕上绘制一些内容。
在FP9上,你必须在SoundChannel上播放声音,并在播放时读取通道的左右峰值。我找到了这个示例代码(link)
var snd:Sound = new Sound();
var req:URLRequest = new URLRequest("your track url");
var channel:SoundChannel;
var bytes:ByteArray = new ByteArray();
snd.load(req);
this.addEventListener(Event.ENTER_FRAME, enterFrameEvent);
channel = snd.play(0,3);
function enterFrameEvent(event:Event):void {
SoundMixer.computeSpectrum(bytes, true,0);
// bytes has 512 values 0-255 leftchannel 256-512 right channel
for (var i:Number = 0; i < 256; i++) {
val = bytes.readFloat();
}
}因此,简而言之,试着坚持使用FP10,如果您能够做到这一点(没有客户端限制),您应该能够将Waveform类直接从Chris的链接中删除并使用它。看起来这个类还绘制了实际的波形(在提取音频数据的基础上),但您可以将绘制移动到它自己的类中,或者修改代码以获得您自己的波形外观。
发布于 2010-01-17 03:00:14
我还没有尝试过,但是在谷歌上搜索"as3波形“就会发现这篇博客文章(包含一些源代码的链接)
http://blog.efnx.com/flash-actionscript-3-waveform-generation-class/
发布于 2010-01-17 03:02:44
这个Flashkit公告板条目还提供了许多非常有趣的资源:
https://stackoverflow.com/questions/2078545
复制相似问题