Flash基于Sound类的音乐控制

时间:2022-10-21 02:34:43

Flash基于Sound类的音乐控制

【摘要】内置类是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.

上一篇:电子专业实验教学模式的改革与创新探究 下一篇:尾焰微波衰减试验验证技术研究