时间:2022-10-21 02:34:43
【摘要】内置类是Flash提供的复杂数据类型,为复杂的程序提供了方便,Flash中Sound类对声音控制的。通过该播放器实例,主要应用了Sound类的构造函数,以及Sound类的属性和方法的应用,实现了动态加载音乐文件并播放。与此同时,在该实例中结合MovieClip影片剪辑类的属性实现播放器播放进度的动态显示。
【关键词】Flash;Sound类;流媒体;MovieClip类;ActionScript2.0
声音的引入是Flash成为流行媒体的非常重要的因素。通常的制作过程是将声音文件导入到Flash文档中,这使Flash文档变的比较臃肿。Flash ActionScript2.0拥有大量的各种用途的内建类,使用这些类可以让你完成从数学到字符串的处理,从包罗万象的影片控制到全面的音频处理,从本地电影之间的通信到与远程Web应用之间进行数据通信等各种各样的工作。Sound类作为内建类中重要的一块,通过Sound()构造函数、loadSound()方法、start()方法、soundVolume()方法等能有效地从外部进行音乐载入,并对音乐进行控制。下面,通过一个实例,对Sound类的应用进行全面分析与研究。
1.效果描述
本实例制作了一个简单的音乐播放器,通过该实例展示出Flash脚本对音乐文件的控制,并能通过该实例掌握Sound()的方法和属性。该播放器带有播放时间与总时间,并显示进度条,该进度条随着声音文件播放时间而变化,播放和停止按钮能控制声音播放与暂停,音量控制按钮能控制音量的大小。界面效果如图1所示。
播放按钮:单击时音乐加载并开始播放音乐;
暂停按钮:单击时音乐停止,再单击播放按钮时,音乐从暂停时间继续播放;
停止按钮:从新加载音乐并从头开始播放音乐;
当前时间:动态显示音乐已经播放的时间;
歌曲长度:当音乐加载成功后,显示该曲面总时间长度;
音量控制:左右拖动,控制音量大小。
2.制作过程
2.1 库内原件储备
通过系统提供的公用库中的按钮,选择playback flat文件夹下的play、pause、stop放置库中。
新建按钮原件,命名为“控制器”,绘制一个宽10像素、高10像素的小球,并居于画布正中央。
新建影片剪辑,命名为“音量控制器”,将按钮“控制器”拖进来,并命实例名称为:handle_btn,并放置于该影片剪辑中央。
新建影片剪辑,命名为“进度条”,绘制一个宽270像素、高12像素长条,并相对于舞台左对、垂直居中对齐。
新建影片剪辑,命名为“进度提进度显示”,绘制一个宽270像素、高8像素长条,颜色区别于“进度条”并相对于舞台左对、垂直居中对齐。
新建影片剪辑,命名为“音量进度条”,绘制一个宽110像素、高8像素长条,并相对于舞台左对、垂直居中对齐。
2.2 舞台布局
将play、pause、stop三个按钮如上图显示方式布局,实例名为:playbtn、pause btn、stopbtn。
将影片剪辑进度条和影片剪辑进度条进度放置舞台,进度条进度在进度条上层,实例名为:my_mc。
将音量影片剪辑进度条放置舞台,并将影片剪辑音量控制器也放置舞台,放置位置在影片剪辑进度条最左端,实例名为:volume_mc。
放置两个动态文本,实例名分别为:ybftime和ztime。
文件这是可以保存,并在保存的根目录放置一个音乐文件,音乐文件命名为:music.mp3。
2.3 代码设置
在第一帧添加如下代码:
my_sound=new Sound();
my_sound.loadSound("music.mp3",false);
//声明一个新的sound对象,从外部载入MP3文件
var second:Number=0;
//初始记录播放位置变量,并赋值为0,也就是从0秒开始播放
volume_mc.top=volume_mc._y;
volume_mc.bottom=volume_mc._y;
volume_mc.left=volume_mc._x;
volume_mc.right=volume_mc._x+100;
volume_mc._x+=100;
//设置滑块的可拖动范围
volume_mc.handle_btn.onPress= function(){
startDrag(this._parent,false, this._parent.left,this._parent.top, this._parent.right,this._parent.bottom);
//允许拖动影片剪辑
};
volume_mc.handle_btn.onRelease =function(){
stopDrag();
var level:Number=Math.ceil(this._parent._x-this._parent.left);
this._parent._parent.my_sound.setVolume(level);
this._parent._parent.volume_txt.text=level;
};
volume_mc.handle_btn.onRelease Outside=volume_mc.handle_btn.onRelease;
//声控按钮鼠标弹起时的位置,确定音量的大小
playbtn.onRelease=function(){
my_sound.start(second);
};
//播放按钮播放声音
pausebtn.onRelease=function(){
second=my_sound.position/1000;
my_sound.stop();
};
//暂停按钮使声音暂停
stopbtn.onRelease=function(){
second=0;
my_sound.stop();
};
//停止按钮使音乐从新开始
onEnterFrame=function(){
var totalseconds:Number=my_sound.duration/1000;
var minutes:Number=Math.floor (totalseconds/60);
var seconds=Math.floor(tota-lseconds)%60;
if(seconds
seconds="0"+seconds;
}
var playedseconds:Number=my_sound.position/1000;
var minutesed:Number=Math.floor(playedseconds/60);
var secondsed=Math.floor(pla-yedseconds)%60;
if(secondsed
secondsed="0"+secondsed;
}
ybftime.text=minutesed+":" +secondsed;
ztime.text=minutes+":"+seconds;
my_mc._xscale=my_sound.position/my_sound.duration*100;
};
3.案例分析与知识总结
本实例通过ActionScript2.0完成,通过该实例学习分析Sound类属性和方法的使用。由于Sound()是构造函数,所有首先构造函数my_sound。
loadSound()将MP3文件加载到Sound对象中,可以使用isStreaming参数表示该声音是事件声音还是声音流。在Flash中,声音文件的播放有两种方式,一种是以事件触发的方式,另外一种是以流媒体的方式。所谓事件触发方式,是指声音是由于某个事件的发生而开始播放的,一旦声音开始播放,就不再受时间线的约束,会一直播放到深夜播放完。流媒体无需将整个声音下载完才能播放,声音与时间线同步,音频数据被分配到时间帧上。在本实例中,由于需要显示该曲面的总时间,所有本实例一事件的形式加载进来。以事件的形式加载音乐,仅仅是Flash Player调用库中的或者外部文件,无论是调用多少次,但声音文件都保存一次,不会增加文件的体积。
音量的控制通过方法setVolume()实现,其中参数一个从0到100之间的数字,表示音量级别。100为最大音量,而0为没有音量,系统默认设置为100。
音乐的开始、暂停、停止是通过start()、stop()实现,在函数start()中的参数控制音乐开始播放的时间。
属性duration和position分别是声音文件的总长度和已播放的时间数,但都是以毫秒为单位,如果需要在界面以日常时间显示,这里对毫秒进行了转换。由于时间都是两位显示的,所以,当时间大于10时,显示正常的两位,如果时间小于10时,前面补0显示。时间进度条的实现正是通过position属性与duration属性的比例关系,将已经播放的毫秒数除以总的持续时长将得到已经播放的百分比,我们通过影片剪辑的_xscale属性来控制该影片剪辑的宽度,因为_xscale的值是0到100,所以乘以100来设置相应的宽度,将音乐播放的时间和总时间显示及动态更新
4.小结
音乐播放器实例的制作包含了Sound类的属性及方法的综合应用,及使用脚本程序对声音大小的控制,并根据播放时间与总是时间的比例关系,结合MovieClip类的_xscale属性,实现进度条动态显示,是ActionScript2.0实例的应用。
参考文献
[1]keith Peters Flash ActionScript3.0动画教程[M]. 2008,4.
[2]陈冰.Flash第一步ActionScript编程篇[M].2008,6.
[3]陈冰.Flash第一步基础篇[M].2008,6.
[4]覃明揆,高山泉.Flash CS3 ActionScript特效设计120例[M].2008,9.