horizontalScrollPolicy=”off” verticalScrollPolicy=”off” verticalAlign=”middle” horizontalAlign=”center”
initialize=”init(event)” layout=”vertical” fontSize=”14″ paddingLeft=”0″ paddingTop=”0″ paddingRight=”0″ paddingBottom=”0″ >
import mx.formatters.DateFormatter;
import mx.effects.SoundEffect;
import mx.events.SliderEvent;
import mx.core.SoundAsset;
import mx.controls.Alert;
import mx.managers.CursorManager;
import flash.media.*;
import flash.utils.Timer;
[Embed(source=”images/cursor.gif”)]
private var cursorHand : Class;//图标
private var xml:XML;
private var xmlPath:String=”/flex/bin-debug/song.xml”;
private var currIndex : Number=0;
private var song :Sound;
private var channel :SoundChannel;
private var position : Number=0;
// 保存 512 个声音波形的快照
private var bytes:ByteArray=new ByteArray();
// SoundBar 的个数
private var barNum:uint=64;
// 保存所有 SoundBar 的引用
private var soundBars:Array=new Array();
//定时器
private var timer : Timer;
//Application的initialize初试化事件
private function init(event:Event):void
{
var loader:URLLoader=new URLLoader();
loader.load(new URLRequest(xmlPath));
loader.addEventListener(Event.COMPLETE,Xml_Complete);
timer=new Timer(100);
timer.addEventListener(TimerEvent.TIMER,timerTick);
var barWidth:Number=boxSoundBar.width*1.00/barNum;
// 初始化Canvas为音频条,放入舞台并加入数组
for (var i:uint=0; i < barNum; i++) {
var soundBar:Canvas=new Canvas();
soundBar.width=barWidth;
soundBar.height=boxSoundBar.height;
soundBar.x=i * barWidth;
soundBar.y= 0;
var g:Graphics=soundBar.graphics;
g.lineStyle(1,0x6688AA,1);
g.beginGradientFill(GradientType.RADIAL,[0x33cc00,0x456628],[1,1],[0,255],null,SpreadMethod.REFLECT,InterpolationMethod.RGB,0);
g.drawRect(0,0,soundBar.width,soundBar.height);
g.endFill();
boxSoundBar.addChild(soundBar);
soundBars.push(soundBar);
}
// 隐藏一些内建的鼠标右键菜单项
this.contextMenu.hideBuiltInItems();
var contextMenuItem : ContextMenuItem=new ContextMenuItem(“Powered By: Jonllen”);
contextMenuItem.enabled=false;
contextMenu.customItems.push(contextMenuItem);
this.contextMenu.customItems.push(contextMenuItem);
//更改鼠标图标
CursorManager.setCursor(cursorHand);
}
//读取XML文件完成事件
private function Xml_Complete(event:Event):void
{
xml=new XML(event.target.data);
if(xml.item.length()>=1)
{
listSong.dataProvider=xml.item.name;
listSong.selectedIndex=0;
//手动触发List的Change事件
listSong.dispatchEvent(new mx.events.ListEvent(Event.CHANGE, true, false));
}
}
//List选择歌曲改变事件
private function Xml_Change(event:Event):void
{
currIndex=event.target.selectedIndex;
timer.stop();
//停止声音文件的加载
if( song!=null )
{
//移除之前加载PROGRESS事件对songProgress进度条的控制
song.removeEventListener(ProgressEvent.PROGRESS,songProgress_Change);
if( song.isBuffering )
song.close();
}
song=new Sound();
var url : String=xml.item[currIndex].url;
var source:URLRequest=new URLRequest(url);
song.load(source);
song.addEventListener(ProgressEvent.PROGRESS, songProgress_Change);
song.addEventListener(IOErrorEvent.IO_ERROR, songProgress_Error);
position=0;
songStart();
}
//歌曲播放完成
private function songProgress_Complete(e:Event):void {
if(currIndex==xml.item.length()-1) {
currIndex=0;
}else {
currIndex++;
}
listSong.selectedIndex=currIndex;
listSong.dispatchEvent(new mx.events.ListEvent(Event.CHANGE, true, false));
}
//加载歌曲失败
private function songProgress_Error(e:IOErrorEvent):void {
Alert.show(“文件不存在!”,”系统提示”);
}
//开始播放歌曲
private function songStart():void {
if ( channel !=null ){
channel.stop();
}
lblName.text=xml.item[currIndex].name;
channel=song.play(position,int.MAX_VALUE);
var length :Number=song.length*song.bytesTotal/song.bytesLoaded;
var date : Date=new Date();
date.time=length;
var dt : DateFormatter=new DateFormatter();
dt.formatString=”NN:SS”;
var totalTime : String=dt.format(date);
date.time=channel.position;
lblTime.text=dt.format(date) + ” | ” + totalTime;
lblStatus.text=”播放”;
var soundcontrol : SoundTransform=channel.soundTransform;
soundcontrol.volume=volumeSlider.value;
channel.soundTransform=soundcontrol;
timer.start();
boxSoundBar.visible=true;
}
//停止歌曲播放
private function songStop():void {
timer.stop();
position=0;
boxSoundBar.visible=false;
lblTime.text=”00:00 |”+lblTime.text.split(“|”)[1];
lblStatus.text=”停止”;
songSlider.value=songSlider.minimum;
songProgress.setProgress(songProgress.minimum,songProgress.maximum);
if ( channel !=null )
{
channel.stop();
}
}
//暂停歌曲播放
private function songPause():void {
if ( channel !=null ){
timer.stop();
position=channel.position;
channel.stop();
lblStatus.text=”暂停”;
}
}
//加载歌曲进度条显示
private function songProgress_Change(e:ProgressEvent):void {
var percent:int=Math.round(e.bytesLoaded * 100 / e.bytesTotal);
songProgress.setProgress(e.bytesLoaded,e.bytesTotal);
}
//定时器方法
private function timerTick( e:TimerEvent):void {
if( channel!=null) {
var length :Number=song.length*song.bytesTotal/song.bytesLoaded;
var date : Date=new Date();
date.time=length;
var dt : DateFormatter=new DateFormatter();
dt.formatString=”NN:SS”;
var totalTime : String=dt.format(date);
date.time=channel.position;
lblTime.text=dt.format(date) + ” | ” + totalTime;
songSlider.value=100*channel.position/length;
if( songSlider.value>=songSlider.maximum){
timer.stop();
songProgress_Complete(null);
return;
}
SoundMixer.computeSpectrum(bytes, false, 0);
for (var i:uint=0; i < barNum; i++) {
soundBars[i].scaleY=bytes.readFloat();
}
}
}
//歌曲进度调整事件
internal function songSlider_Change(e:SliderEvent):void{
timer.stop();
if ( channel !=null ){
var length :Number=song.length*song.bytesTotal/song.bytesLoaded;
position=e.value*length/100;
songStart();
}
}
//声音大小调整事件
internal function changeVolume(evt:SliderEvent):void{
if ( channel !=null ){
var soundcontrol : SoundTransform=channel.soundTransform;
soundcontrol.volume=evt.value;
channel.soundTransform=soundcontrol;
}
}
//设置歌曲播放时间和总时间
private function setTimeStatus():void {
var length :Number=song.length*song.bytesTotal/song.bytesLoaded;
var date : Date=new Date();
date.time=length;
var dt : DateFormatter=new DateFormatter();
dt.formatString=”NN:SS”;
var totalTime : String=dt.format(date);
date.time=channel.position;
lblTime.text=dt.format(date) + ” | ” + totalTime;
}
]]>
width=”192″ height=”50″ x=”5″ y=”39″ visible=”false”>
width=”290″ height=”3″ mode=”manual” textAlign=”left”
labelPlacement=”center” fontSize=”3″ x=”10″ y=”97″
minimum=”0″ maximum=”100″ barColor=”yellow”
trackColors=”[white, haloSilver]”/>
showTrackHighlight=”true” x=”5″ y=”85″ thumbDrag=”songSlider_Change(event)”
width=”300″ height=”22″ minimum=”0″ maximum=”100″
liveDragging=”false” snapInterval=”1″ toolTip=”拖动调整播放进度”>
showTrackHighlight=”true” value=”0.5″ x=”222″ y=”133″
width=”81″ minimum=”0″ maximum=”10″ liveDragging=”true”
snapInterval=”0.1″ toolTip=”音量调节” />
change=”Xml_Change(event)” width=”130″ toolTip=”点击选择歌曲”>