0

我在各种网站上获得了三个基于 Flash 的音频播放器的屏幕截图,它们绘制了它将要播放的剪辑的波形,并在播放时移动,还允许用户单击音频文件上的一个点,然后跳到那个点。

DJ 从http://www.djdownload.com下载音乐播放器

DJ 下载音乐播放器 http://img13.imageshack.us/img13/6739/djdownloadmusicplayer.png

SoundCloud 音乐播放器来自http://www.soundcloud.com

SoundCloud 音乐播放器 http://img5.imageshack.us/img5/6336/soundcloudmusicplayer.png

来自http://www.trackitdown.net的 TrackItDown 音乐播放器

TrackItDown 音乐播放器 http://img697.imageshack.us/img697/7392/trackitdownmusicplayer.png

我对 Flash 的了解很少,但这很容易实现吗?我只想将 Flash 文件显示为 mp3 并绘制波形。我知道这在 CPU 上可能非常密集,所以有没有办法缓存波形数据,这样每次加载文件时就不会重绘?

4

5 回答 5

3

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

如果您正在使用 Flash Player 10,那么您很幸运,否则您似乎必须在播放声音时计算频谱。就像在 Chris 的链接中一样,您可以将声音对象中的声音数据放入ByteArraywith Sound.extract()(仅限 FP10)。然后,您通过ByteArray读取值并根据值在屏幕上绘制一些东西。

在 FP9 上,您必须在 a 上播放声音,SoundChannel并在播放时从通道中读取左右峰值。我找到了这个示例代码(链接

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-16T19:40:36.163 回答
0

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

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

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

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

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

于 2010-01-18T01:28:12.250 回答
0

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

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

于 2010-01-16T19:00:13.680 回答
0

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

于 2010-01-16T19:02:44.033 回答
0

克里斯 - 感谢您链接到我的博客,这里是该课程的来源(只是为了让它更容易)。我不完全确定代码处于什么状态,正如我在 2 年前写这篇文章时写的那样,但它应该可以为任何需要它的人完成工作。 http://efnx.com/lab/WavePlotter/src/WavePlotter_Main_081024.src.tar.gz

于 2010-07-23T08:50:34.063 回答