代码之家  ›  专栏  ›  技术社区  ›  Ian Roke

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

  •  0
  • Ian Roke  · 技术社区  · 16 年前

    下面我有三个不同网站上基于Flash的音频播放器的屏幕截图,它们绘制了它将要播放的剪辑的波形,并在播放时移动,还允许用户单击音频文件上的某个点,然后跳到该点。

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

    DJ Download Music Player http://img13.imageshack.us/img13/6739/djdownloadmusicplayer.png

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

    SoundCloud Music Player http://img5.imageshack.us/img5/6336/soundcloudmusicplayer.png

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

    TrackItDown Music Player http://img697.imageshack.us/img697/7392/trackitdownmusicplayer.png

    我的闪光知识很少,但这很容易实现吗?我只想给Flash文件显示一个MP3,它会绘制波形。我知道这可能在CPU上非常密集,所以是否有一种方法来缓存波形数据,以便它不会在每次加载文件时重新绘制?

    5 回复  |  直到 16 年前
        1
  •  3
  •   Matti Lyra    16 年前

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

    如果你使用的是flash player 10,那么你的运气很好,否则你似乎必须在播放声音时计算频谱。就像在Chris的链接中一样,你可以将声音对象中的声音数据 ByteArray 具有 Sound.extract() (仅FP10)。然后你通过 二进制数组 读取值并根据值在屏幕上绘制一些内容。

    在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的链接中学习并使用它。看起来类还绘制了实际的波形(在提取音频数据的基础上),但是您可以将绘图移动到自己的类中,或者修改代码以获得自己的波形查找类型。

        2
  •  0
  •   Chris    16 年前

    还没有尝试过,但是谷歌搜索“as3波形”发现了这篇博客文章(包含指向某些源代码的链接)

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

        3
  •  0
  •   Open Source    16 年前

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

        4
  •  0
  •   Justin Smith    16 年前

    示例中的插图的生成方式大致如下:

    计算出每像素宽度显示多少秒的音频。

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

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

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

        5
  •  0
  •   schellsan    16 年前

    克里斯-谢谢你链接到我的博客,这里是这个课程的来源(只是为了更简单)。我不完全确定代码处于什么状态,正如我两年前在写这篇文章时写的那样,但是它应该能够为其他需要它的人完成工作。 http://efnx.com/lab/WavePlotter/src/WavePlotter_Main_081024.src.tar.gz

    推荐文章