WEB开发网
开发学院图形图像Flash Mp3 Player 阅读

Mp3 Player

 2009-05-30 12:07:53 来源:WEB开发网   
核心提示: 六、SoundPlayer.as 完整代码package { import flash.display.Sprite; import flash.net.URLLoader; import flash.net.URLRequest; import flash.events.Event; i

六、SoundPlayer.as 完整代码

package {
    import flash.display.Sprite;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.events.Event;
    import flash.media.Sound;
    import fl.data.DataProvider;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.media.SoundTransform;
    import flash.media.SoundMixer;
    import flash.utils.ByteArray;
    import flash.events.IOErrorEvent;

    public class SoundPlayer extends Sprite {
        private var soundChannel:SoundChannel;
        // 保存 512 个声音波形的快照
        private var bytes:ByteArray = new ByteArray();
        // SoundBar 的个数
        private var barNum:uint = 512;
        // 保存所有 SoundBar 的引用
        private var soundBars:Array = new Array();
      
        public function SoundPlayer() {
            init();
        }
      
        private function init():void {
            // 每个 SoundBar 的宽度:舞台宽度 / SoundBar 的个数
            var barWidth:Number = stage.stageWidth / barNum;
          
            // 初始化 SoundBar,放入舞台并加入数组
            for (var i:uint = 0; i < barNum; i++) {
                var soundBar:SoundBar = new SoundBar();
                soundBar.width = barWidth;
                soundBar.x = i * barWidth;
                soundBar.y = stage.stageHeight;
                addChild(soundBar);
                soundBars.push(soundBar);
            }
          
            // 注册用来处理波形的函数
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
          
            var loader:URLLoader = new URLLoader();
            loader.load(new URLRequest("musicList.xml"));
            loader.addEventListener(Event.COMPLETE, initSoundList);
            volume_bar.addEventListener(Event.CHANGE, adjustVolume);
        }
      
        private function initSoundList(evt:Event):void {
            music_list.dataProvider = new DataProvider(XML(evt.target.data));
            music_list.addEventListener(Event.CHANGE, changeSound);
        }
      
        private function changeSound(evt:Event):void {
            var url:String = ComboBox(evt.target).selectedItem.url;
          
            if (soundChannel != null) {
                soundChannel.stop();
            }
          
            if (url == "stop") {
                return;
            }
          
            var sound:Sound = new Sound(new URLRequest(url));
//sound.addEventListener(IOErrorEvent.IO_ERROR, function(e:IOErrorEvent):void{ trace(e); });
            soundChannel = sound.play();
        }
      
        private function adjustVolume(evt:Event):void {
            soundChannel.soundTransform = new SoundTransform(evt.target.value);
        }
      
        private function onEnterFrame(evt:Event):void {
            SoundMixer.computeSpectrum(bytes, false, 0);
            for (var i:uint = 0; i < barNum; i++) {
                soundBars[i].scaleY = bytes.readFloat();
            }
        }
    }
}

七、补充说明

需要注意的是这个程序最好还是在单机上运行,如果上传到网络上 Sound.load() 和SoundMixer.computeSpectrum() 都存在跨域访问和安全沙箱问题,除非您有自己的服务器。

通常来讲 512 个SoundBar 有些太耗费资源了,如果隔一个取一次就只需要 256 个,或者也可以在算法上加以改良。

上一页  1 2 3 4 5 6 

Tags:Mp Player

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接