用Flash做了个MP3播放器,想放在自己的博客上做个自己的电台,可惜速度太慢了,想必没人会等很长时间来听一首MP3的,虽然我很喜欢的曲子。所以只好放着了!可以在http://www.ArtKing.cn/ArtPlay/上看到这个作品,但基本上难得听到什么!郁闷,有时间准备改进一下。就这个Flash播放器,还是写一些自己的想法。上次是那个留言板。
1、还是字符集的问题,我不真不知道怎么处理了。后台管理还只能用GB2312,而Flash的数据读取还得用UTF-8。
2、关于setInterval函数的应用,可以说这是一个很好的延时函数,但总不能把所有的情况都想到,所以还是有时候没能及进的清理掉计时器,结果出了问题。
3、关于MP3文件的读取,也有些问题。不知道为什么,在FlashMX里测试的时候不能读取,而加载到IE里就可以了。还有,有些MP3没声音,有些有,不知道是什么原因。
4、以下是AS原内容,希望有些参考价值。
//some var initialization
//
var m_mp3 =new Sound(); //MP3实例
var m_flie_name =new Array(2); //文件名与歌曲名统一
var m_volume =75; //声音大小
var m_start_time=0; //开始时的播放的时间,用于暂停后恢复播放
var m_all_time =1; //声音所有的时间
var m_palyed =0; //已经播放的时间
var m_mp3_number=1; //第几首MP3,用于多曲播放时使用
var m_mp3_isplay=false; //记录MP3当前是否正在播放
var file_name =""; //MP3文件名
var music_name =""; //歌曲信息
var text_i =0; //信息滚动参数,字数
var m_play_way ="列表播放" //MP3播放方法,"列表播放"或"单曲循环"
var m_is_stop =true; //用于控制MP3是否暂停
//
//Load varible form Server or Text Files
function loadFileList(){
if(m_music_text.substr(m_music_text.length-4,4)==".mp3"){
file_name=music_name=m_music_text;
}else{
loadVariables("list.asp",this,"POST");
}
m_load_timer=setInterval(loadMp3,2000);
}
//Load MP3 Flies
function loadMp3(){
//确定声音文件是否已经加载
clearInterval(m_load_timer);
if(file_name==""){
m_music_text="[加载音乐文件失败!]";
return false;
}
m_mp3.loadSound(file_name,false);
m_music_text="[加载缓存完成!]"
m_all_time="["+Math.floor(m_mp3.duration/60000)+"分"+Math.floor(m_mp3.duration/1000)%60+"秒]";
trace(m_all_time);
m_play._visible=true;
m_pause._visible=false;
m_play_timer=setInterval(playMp3,500);
}
//实时播放函数,用于更新百分比与调整音量
function my3Playing(){
//随时改变声音时间的大小
m_volume=50-m_volume_control.vertFader._y;
m_mp3.setVolume(m_volume);
// trace(m_volume);
//检测MP3是否加载完成,是就播放,否则就显示加载信息
if(file_name==""){
clearInterval(m_play_timer);
m_music_text="[加载音乐文件失败!]";
return false;
}
m_loaded=m_mp3.getBytesLoaded();
m_total =m_mp3.getBytesTotal();
// trace(m_loaded+":"+m_total);
if(m_loaded<m_total){
m_music_text="<"+m_mp3_number+">[加载中..."+Math.floor(m_loaded/m_total*100)+"%]"
return false;
}else{
m_minute =Math.floor(m_mp3.position/60000);
if(m_minute<10)m_minute="0"+m_minute;
m_second =Math.floor(m_mp3.position/1000)%60;
if(m_second<10)m_second="0"+m_second;
m_percent=m_minute+":"+m_second;
m_all_time="["+Math.floor(m_mp3.duration/60000)+"分"+Math.floor(m_mp3.duration/1000)%60+"秒]";
// trace(m_percent);
m_music_text_t=" <"+m_mp3_number+">"+music_name+"--<";
if(!m_is_stop){
m_music_text_t+="正在播放>("+m_play_way+")";
}else{
m_music_text_t+="暂停中>("+m_play_way+")";
}
m_music_text_t+=m_all_time;
m_music_text=m_music_text_t.substr(text_i,m_music_text_t.length);
text_i++;
if(text_i>m_music_text_t.length)text_i=0;
if(m_mp3.position>=m_mp3.duration){
clearInterval(m_timer);
if(m_play_way=="单曲循环"){
m_start_time=0;
playMp3();
}else{
m_mp3_number++;
loadFileList();
}
}
}
}
//自动加载音乐文件
loadFileList();
//m_timer=setInterval(my3Playing,300);
//playMp3();
function playMp3(){
m_mp3.start(m_start_time,1);
m_is_stop=false;
m_timer=setInterval(my3Playing,300);
clearInterval(m_play_timer);
}
//pauseMp3
function pauseMp3(){
m_palyed=m_mp3.position;
m_start_time=m_palyed/1000;
m_mp3.stop();
m_is_stop=true;
my3Playing(); //更新信息文本
clearInterval(m_timer);
}
//stopMp3
function stopMp3(){
clearInterval(m_timer);
if(m_music_text.substr(m_music_text.length-4,4)==".mp3"){
file_name=music_name=m_music_text;
m_load_timer=setInterval(loadMp3,500);
m_start_time=0;
}else{
m_mp3.stop();
m_start_time=0;
text_i =0;
m_music_text="[已经停止播放]";
// my3Playing();
m_play._visible=false;
m_pause._visible=true;
}
}
//Next mp3
function nextMp3(){
clearInterval(m_timer);
m_music_text="[音乐载入中...]"
my3Playing();
m_mp3_number++;
trace(m_mp3_number);
loadFileList();
}
//forward mp3
function forwdMp3(){
clearInterval(m_timer);
m_music_text="[音乐载入中...]"
my3Playing();
m_mp3_number--;
if(m_mp3_number<=0)m_mp3_number=1;
trace(m_mp3_number);
loadFileList();
}
结束努力吧!
文章来源:http://computer.mblogger.cn/wucountry/posts/31493.aspx