一个Flex做的Mp3播放器

 

在一个网站上找到了一个flex做播放器含进度条的和歌曲名称含源代码:

import flash.events.*;

import flash.net.URLRequest;

import flash.media.Sound;

import flash.media.SoundChannel;

 import flash.media.SoundTransform;

 import flash.utils.Timer;

import flash.events.TimerEvent;

 //mp3 的 url 地址

private var soundURL:String = "song/b.mp3";

//访问 url 上的东西都用 URLRequest 了

private var request:URLRequest = new URLRequest(soundURL);

 private var my_sound:Sound=new Sound();

// 新建 Sound 对象 //声明 SoundChannel 类型的变量 my_channel

private var my_channel:SoundChannel; /

/新建 myTimer 对象并定义循环的时间间隔为10毫秒,循环次数为无限次(参数中的0表示无限次)

private var myTimer:Timer = new Timer(10, 0);

 private function myinit():void{

my_sound.load(request);

 // 载入外部 mp3:

 She is my sin.mp3

}

//播放音乐:

private function playSound(): void{

my_channel = my_sound.play();

// 音乐正式开始播放 //添加事件侦听器, 功能: 循环执行 timerHandler 函数(但这里还没有开始循环执行) myTimer.addEventListener(TimerEvent.TIMER, timerHandler);

 myTimer.start();

// 这里才开始循环执行 timerHandler 函数

} /

/停止音乐:

private function stopSound():void{

//停止对函数 timerHandler 的循环执行, 因为音乐开始时 myTimer 对象就对函数 timerHandler 循环执行了 myTimer.stop();

my_channel.stop();

// 正式停止音乐

 progress_hs.value = 0;

// 使那"播放进度"条的值回到0,即回到最左端

 }

//定义被 myTimer 循环执行的函数 timerHandler

 private function timerHandler(event:TimerEvent):void{

//功能: 显示音乐的播放进度, 进度条会随着音乐的继续播放而向右缓缓移动;

//把这个公式翻译为中文: 播放进度条的值=当前音乐播放时间/音乐的总时间

progress_hs.value = my_channel.position/my_sound.length;

}

//改变播放进度: 每当 "播放进度" 条被用户拉动过而使其值改变时,就执行以下函数

 private function changeProgress():void{ /

/音乐停止且必须停止,是为了从新的播放时间点开始播放

//(感觉这里麻烦了点, 如果有更好的方法,恳请高手指点!请联系我: // www.Y-boy.cn 或 www.RiaHome.cn ,谢谢!)

 my_channel.stop();

//使音乐从新的时间点开始播放,新的时间点是小括号内的值,

//即:"播放进度"条的值*音乐的总时间, 为什么会这样呢?

//因为 HSlider 控件(那条"播放进度")的长度在下面被定义为1,

//使得"播放进度"条的值在闭区间[0,1]内, 所以只需再乘以音乐的总时间就行了

my_channel = my_sound.play(progress_hs.value*my_sound.length);

}

//改变音量: 每当 "音量大小" 控制条被用户拉动过而使其值改变时,就执行以下函数

private function changeVolume():void{

 //把 my_channel.soundTransform 赋值给 my_transform

var my_transform:SoundTransform = my_channel.soundTransform;

 my_transform.volume = volume_hs.value;

 // 把"音量大小"控制条当前值赋给

my_transform.volume my_channel.soundTransform = my_transform;

 // 给 my_channel.soundTransform 赋值

}

//改变左右声道: 每当 "左右声道" 控制条被用户拉动过而使其值改变时,就执行以下函数

private function changePan():void{

//此处用法与上面的 改变音量 相同, 理解 改变音量 的, 就能理解这里

var my_transform:SoundTransform = my_channel.soundTransform;

my_transform.pan = pan_vs.value;

my_channel.soundTransform = my_transform;

}

]]>
   
  </fx:Script>
  
  <!-- 显示歌曲名称 -->
  <mx:Label text="歌曲:She is my sin" fontSize="12"/>
  
  <!-- 播放进度条 -->
  <mx:Label text="播放进度:" fontSize="12" y="25"/>
  <mx:HSlider id="progress_hs" width="100" minimum="0" maximum="1"
     x="60" y="25" mouseDown="myTimer.stop()" mouseUp="myTimer.start()"
     change="changeProgress()"/>
  
  <!-- 音量控制条 -->
  <mx:Label text="音量大小:" fontSize="12" y="52"/>
  <mx:HSlider id="volume_hs" width="100" minimum="0" maximum="1"
     y="52" x="60" value="0.8" change="changeVolume()"/>
  
  <!-- 左右声道控制条 -->
  <mx:Label text="左右声道:" fontSize="12" x="-1" y="78"/>
  <mx:HSlider id="pan_vs" width="100" minimum="-1" maximum="1"
     x="60" y="80" value="0" change="changePan()"/>
  <!-- 播放和停止按钮 -->
  <mx:Button label="play" y="116" x="50" click="playSound()"/>
  <mx:Button label="stop" y="116" x="109" click="stopSound()"/>
</s:Application>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值