如何在Flash中创建一个创建音频文件波形的音乐播放器?

时间:2010-01-16 18:50:00

标签: flash audio media-player

我在各个网站上有三个基于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知识很少,但这很容易实现吗?我想将Flash文件显示为mp3并绘制波形。我知道这可能在CPU上非常密集,所以有没有办法缓存波形数据,所以每次加载文件时都不会重绘?

5 个答案:

答案 0 :(得分:3)

我以前从未这样做过,但据我所知情况如下。

如果您正在使用Flash Player 10,那么您似乎必须在播放声音时计算频谱。与Chris的链接一样,您可以将声音对象中的声音数据转换为ByteArray Sound.extract()(仅限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,如果您能够做到这一点(没有客户端限制),您应该能够直接从Chris的链接中取出Waveform类并使用它。看起来该类还绘制了实际波形(除了提取音频数据之外),但您可以将绘图移动到它自己的类或修改代码以获得您自己的波形外观。

答案 1 :(得分:0)

没有尝试过,但谷歌搜索“as3波形”显示了这篇博文(包含一些源代码的链接)

http://blog.efnx.com/flash-actionscript-3-waveform-generation-class/

答案 2 :(得分:0)

此Flashkit板条目还提供了许多非常有趣的资源:

答案 3 :(得分:0)

生成示例中插图的方式或多或少如下:

计算宽度显示每像素的音频秒数。

对于从左到右的每个像素,计算文件对应段的平均RMS幅度。

这将为您提供该像素的峰高。在一些显示器中,它是对称渲染的(即它从上到下镜像),而在其他显示器中则呈现条形图样式。

(顺便说一下,从幅度显示中很容易看出它们是数字化产生的音乐,可能是某种技术)

答案 4 :(得分:0)

Chris - 感谢您链接到我的博客,这里是该课程的来源(只是为了让它更容易)。我不完全确定代码所处的状态,就像我在写这篇文章时写的那样,但它应该为其他需要它的人完成工作。  http://efnx.com/lab/WavePlotter/src/WavePlotter_Main_081024.src.tar.gz

相关问题