[AS3]as3音乐播放器源代码实例
[AS3]as3音乐播放器源代码实例
[AS3]as3音乐播放器源代码实例
- package {
- ////可视化相关类
- import flash.display.Sprite;
- //声音相关类
- import flash.media.Sound;
- import flash.media.SoundChannel;
- import flash.media.SoundLoaderContext;
- import flash.media.SoundMixer;
- import flash.media.SoundTransform;
- //事件类
- import flash.events.Event;
- import flash.events.IOErrorEvent;
- import flash.events.EventDispatcher;
- //加载相关类
- import flash.net.URLRequest;
- //文本框相关类
- import flash.text.TextField;
- import flash.text.TextFieldAutoSize;
- //类及变量声明
- //======================================================================================//
- public class KingPlay extends Sprite {
- //媒体列表
- private var playList:Array;
- //声音对象
- private var playSound:Sound;
- //声音控制对象
- private var playSoundChannel:SoundChannel;
- //是否正在播放
- private var isPlay:Boolean;
- //媒体地址
- private var _playURL:String;
- //当前播放的媒体名字
- private var _playName:TextField=new TextField();
- //匹配歌词地址
- private var _lrc:String;
- //播放媒体在列表中ID
- private var _playID:int=0;
- //播放头
- private var playTime:Number;
- //循环模式
- //1为列表循环(默认),2为单曲循环
- private var _cycMode:int=1;
- //自动播放模式
- //1为顺序播放(默认),2为随机播放
- private var _autoMode:int=1;
- //每次加载并播放时调用的事件
- public const LOADPALY:String="loadplay";
- //======================================================================================//
- //构造函数
- public function KingPlay() {
- init();
- }
- //初始化
- private function init() {
- _playName.selectable=false;
- _playName.autoSize=TextFieldAutoSize.LEFT;
- }
- //
- //======================================================================================//
- /**
- //提供给外部设置的属性
- **/
- //================================================》
- //列表绑定(绑定后才真正运行)
- public function set listArray(arr:Array) {
- playList=arr;
- load(playList[_playID].url);
- }
- //================================================》
- //循环模式
- public function set cycMode(cycMode:int) {
- _cycMode=cycMode;
- }
- //================================================》
- //自动播放模式
- public function set autoMode(autoMode:int) {
- _autoMode=autoMode;
- }
- //
- //======================================================================================//
- /**
- //提供给外部的只读属性
- **/
- //================================================》
- //声音对象
- public function get sound():Sound {
- return playSound;
- }
- //================================================》
- //声音控制对象
- public function get channel():SoundChannel {
- return playSoundChannel;
- }
- //================================================》
- //匹配媒体的歌词文件URL
- public function get lrc():String {
- return _lrc;
- }
- //================================================》
- //媒体在列表中的ID
- public function get playID():uint {
- return _playID;
- }
- //
- //======================================================================================//
- /**
- //提供给外部方法
- **/
- //================================================》
- //获取媒体名(为一文本框)
- public function getPlayName():TextField {
- return _playName;
- }
- //================================================》
- //设置音量
- public function setVolume(num:Number) {
- var _volume:SoundTransform=new SoundTransform(num,0);
- playSoundChannel.soundTransform=_volume;
- }
- //================================================》
- //加载歌曲
- public function load(playURL:String) {
- //先停止所有声音
- SoundMixer.stopAll();
- //新建声音
- playSound=new Sound() ;
- _playURL=playURL;
- //加载(缓冲5秒)
- playSound.load(new URLRequest(_playURL),new SoundLoaderContext(5000,true));
- //加载错误时调用
- playSound.addEventListener(IOErrorEvent.IO_ERROR,loadErr);
- //播放声音
- playSoundplaySoundChannel=playSound.play();
- //播放状态
- isPlay=true;
- //匹配歌词
- _lrc=searchLRC(_playURL);
- //当前媒体在列表的ID位置
- _playID=searchID(_playURL);
- //更新歌媒体名
- upPlayName();
- //对外部广播加载并播放声音后的事件
- dispatchEvent(new Event(LOADPALY));
- //声音播放完毕
- playSoundChannel.addEventListener(Event.SOUND_COMPLETE,soundComplete);
- }
- /**
- 以下方法为控制媒体播放状态
- **/
- //================================================》
- //定位到指定时间播放
- public function goto(time:Number) {
- playSoundChannel.stop();
- playSoundplaySoundChannel=playSound.play(time);
- playSoundChannel.addEventListener(Event.SOUND_COMPLETE,soundComplete);
- isPlay=true;
- }
- //================================================》
- //播放
- public function play() {
- if (! isPlay) {
- playSoundplaySoundChannel=playSound.play(playTime);
- playSoundChannel.addEventListener(Event.SOUND_COMPLETE,soundComplete);
- isPlay=! isPlay;
- }
- }
- //================================================》
- //暂停
- public function pause() {
- if (isPlay) {
- playTime=playSoundChannel.position;
- playSoundChannel.stop();
- isPlay=! isPlay;
- }
- }
- //================================================》
- //停止
- public function stop() {
- if (isPlay) {
- playTime=0;
- playSoundChannel.stop();
- isPlay=! isPlay;
- }
- }
- //================================================》
- //下一首
- public function next() {
- if (_cycMode==1) {
- if (_autoMode==1) {
- //顺序循环
- if (playID<playList.length-1) {
- playSoundChannel.stop();
- _playID++;
- load(playList[_playID].url);
- } else {
- playSoundChannel.stop();
- _playID=0;
- load(playList[_playID].url);
- }//END IF
- } else {
- //随机循环
- _playID=Math.floor(Math.random()*(playList.length-1));
- playSoundChannel.stop();
- load(playList[_playID].url);
- }
- } else {
- //单曲循环
- playSoundChannel.stop();
- load(playList[_playID].url);
- }
- }
- //================================================》
- //上一首
- public function last() {
- if (playID>0) {
- playSoundChannel.stop();
- _playID--;
- load(playList[_playID].url);
- } else {
- playSoundChannel.stop();
- _playID=playList.length-1;
- load(playList[_playID].url);
- }
- }
- //
- //======================================================================================//
- /**
- 以下为内部方法
- **/
- //更新歌曲名
- private function upPlayName() {
- var tmpStr:String=playList[_playID].name.toString();
- var len:int=tmpStr.length;
- var tmpLen:int=tmpStr.length>10?tmpLen=10:tmpStr.length;
- //取7个字符防止溢出
- tmpStr=len>10?tmpStr.substr(0,tmpLen)+" ...":tmpStr.substr(0,tmpLen);
- _playName.htmlText="<FONT color='#FFFFFF'>"+tmpStr+"</FONT>";
- }
- //================================================》
- //匹配媒体在列表中的歌词文件
- private function searchLRC(song:String):String {
- for each (var tmp in playList) {
- if (tmp.url==song) {
- return tmp.lrc;
- }
- }
- return "无歌词";
- }
- //================================================》
- //匹配媒体在列表中的ID位置
- private function searchID(song:String):int {
- for (var id:int=0; id<playList.length; id++) {
- if (playList[id].url==song) {
- return id;
- }
- }
- return 0;
- }
- //================================================》
- //媒体播放完毕后自动下一首
- private function soundComplete(e:Event) {
- trace("播放完成")
- playSoundChannel.stop();
- next();
- }
- //================================================》
- //加载媒体失败时,自动下一首
- private function loadErr(evt:IOErrorEvent):void {
- trace("加载歌曲错误")
- next();
- }
- }
- }
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例
请稍候...