AN软件中基于AS3.0的音频控制研究
2022-05-30汪志敏
摘要:AN(Animate) 软件是近几年由Adobe公司新推出的动画制作软件,它以全新的面貌取代了市场上流行多年的Flash软件,在多媒体应用与处理方面有独到的效果。因此,在介绍AN与AS3.0的基础上,阐明了AN的程序设计模式和程序响应机制,并详细介绍了AN中的音频控制类型及音频应用,并以典型案例诠释了音频控制应用的设计过程。
关键词:AN;动画制作;AS3.0;音频控制
中图分类号:TP37 文献标识码:A
文章编号:1009-3044(2022)31-0099-04
AN全称Adobe Animate,是Adobe公司在原有Adobe Flash Professional软件的基础上推出的一款专业且强大的2D动画制作软件,提供了非常丰富全面的插图和动画工具,并且增加了HTML5创作工具,为网页开发者提供更适应现代网页应用的音频、图片、视频、动画等创作支持,从而满足不同用户的各种动画创作需求。AS(ActionScript) 3.0 是继承自Flash的内置脚本语言,提供了可靠的编程模型,支持大型数据集、代码重用和面向对象编程,便于复杂应用程序的设计与实现。AS3.0使用新型的虚拟机AVM2,实现了性能的优化;升级了应用程序编程接口 (API),在面向对象模型和对象控制等方面有所突破;将XML添加为语言的本机数据类型;与早期版本相比,编译器代码库更加先进,并且在遵循 ECMAScript (ECMA 262) 标准方面也更加严格,执行优化更深入。
1 AN软件中的程序设计模式
AN软件的默认文件类型为.fla类型,即动画文件,此类文件的主要特点是能在用户的相应控件下,利用AN软件的基本动画设计方法,创建出常规的动画效果,包括补间动画、遮罩动画、引导层动画、帧动画等。但这些动画究其根源,皆属于AN软件产品的初级形式,是简单动画效果。如果想创建出更加丰富炫酷的多样化动画效果,通常要借助于AS(ActionScript,动画脚本)语言进行编程。因此,人们常说脚本语言是AN软件高级动画作品的灵魂,而在AN软件中,程序设计有两种模式,具体见下文。
1.1 独立程序模式
独立程序模式也称外部脚本文件模式。即用户编程的脚本代码独立于角色所在动画文件之外,二者需要进行一定的连接才能最终呈现用户想要得到的最终动画效果。此模式下编程,要求用户对AS3.0脚本语言的语法规则及相应的类库、对象名、方法及属性等有相当的了解,并且对于大型的案例制作而言,通常是角色、场景等和脚本的设计由不同人员分工协作来完成,因此要求程序设计人员要充分考虑到程序的接口。
1.2 嵌入编程模式
嵌入编程模式通常称为内部脚本模式。在该种编程方式下,程序所涉及的所有动作脚本代码都写在动画文件的时间轴的特定关键帧上,影片播放过程中,当播放头进入该帧时,代码被执行。由此,设计人员可以更加灵活地为应用程序添加行为,而在具体的编程实践中,代码可以在主时间轴的任何关键帧添加,也可以在影片中的MC(MovieClip,即影片剪辑)元件或实例的内部时间轴的关键帧添加。然而,与这种灵活性相伴而生的,是程序维护难度的增加,即在设计与开发复杂应用程序时,随着程序规模的扩大或者时间的延长,脚本位置的定位越发困难,错误排查越发艰难。因此,大部分设计人员习惯将代码放在第1帧,或者设置特定图层,专门用于添加脚本代码,以简化在.fla文档设计中代码的组织,从而降低代码的维护难度。但是,即便这样,在代码的重用方面仍然有很大的缺陷,如果有另一个AN项目需要实现同样的功能效果,必须重写或将代码复制粘贴到新文件中。
2 AS3.0程序的事件机制与音频控制类
2.1 事件处理机制
AS3.0的事件机制采用的是监听的方式,所有的事件都是需要触发器、监听器、执行器三种结构的,这样做的好处就是使得这个语言非常标准化[1]。同时,AS3.0中,Event是所有事件类的父级类,而Event类是从基类Object继承而来,因此AS3.0中所有的事件都具有统一的结构,大大提高了程序的可读性和代码的重用性。也正因如此,使得AS3.0 程序设计中允许所有的可视对象接收和发送事件[2]。
此外,在AS3.0程序设计中,整个事件处理过程分为注册侦听器、分发事件、侦听事件和移除侦听器四个步骤[2-3]。
2.2 常用音頻控制类
AN软件中,与音频控制相关的功能脚本类较多,涉及音频对象导入与加载的,音频对象声道控制的,音频对象播放控制的,以及音频对象播放效果的等。现主要介绍如下[4-5]:
Sound类:是AN中音频控件的基础类,能够决定在AN应用程序中是否可以使用音频。利用此类,可以创建Sound对象、加载外部音频文件(如MP3) 到对象、控制音频的播放状态、访问音频相关属性数据。
SoundChannel类:是AN中关于声道控制的类。创建SoundChannel 对象,可以方便地控制音频的左和右回放声道的音量,并且在同一应用程序允许多个声道并在。
SoundCodec类:用于在设置Microphone类codec属性使用的常数值的枚举[4]。
SoundeLoaderContext类:用于为加载音频的文件提供安全检查。可以对加载声音的缓冲秒数进行指定,其对象用于Sound.Load() 方法的参数。
SoundMixer类:包含应用程序中全局声音控件的静态属性和方法。能对影片中所有声音相关的回放及安全属性进行控件。创建SoundMixer 对象,能实现多个声道的混合,而其值也将会影响当前播放的所有 SoundChannel 对象。
SoundTransform类:具有音量控件功能,其值包含音量和声相。创建SoundTransform 对象后,可以在SoundChannel、SoundMixer及 Microphone 对象的属性设置中使用。
Microphone类:此类指向用户计算机接入的音频输入设备[5],如麦克风等。能够将麦克风拾取的音频传送到本地扬声器,或传到远端服务器。
3 音频控制在动画制作中的应用
通常,借助于AS3.0脚本的音频控制功能,可以将音频素材应用于以下类型的动画作品中:
1) MV动画;
2) 动态音画作品,比较典型如天然音画作品等;
3) 游戏背景音乐或特效音乐;
4) 配乐电子相册、电子贺卡类动画作品;
5) 角色动画的配音;
6) 网站动画素材配乐等。
4 典型音频控制应用的动画案例设计
为进一步展示音频控制功能,下面以“音频播放器”案例设计为例,简单介绍如下。
4.1 整体设计
本案例的主要功能是实现对既定音乐的播放。基本思路是预先准备好作为播放备选项的音乐文件若干(本案例准备16个),通过AN内置组件ComboBox(下拉列表框)实现与用户交互;同时准备若干个MC(影片剪辑)作为舞台动感元素,当用户选择音乐后,程序自动从预设的MC中随机挑选一个,加载到舞台上播放;添加“播放”“暂停”和“停止”三个按钮,实现用户对当前音乐的交互式控制功能。
4.2 角色设计
根据案例功能设计的需要,本案例需要设计的角色主要有三部分:一是音乐文件,这是案例设计的主体,根据AN软件对音频文件的要求,所有音乐文件采用mp3格式,采样频率为44.1KHz,可以通过“文件”——“导入”功能将事先准备好的音乐素材直接导入。二是舞台展示区所需的MC,这部分较为复杂,是本案例动画效果的核心,为简便操作,采用事先准备好的部分动态图片(gif格式)来代替,直接导入即可,系统会自动生成与图片同名的MC元件,但有一点非常关键,就是为后续程序调用方便,需要为每个MC设置类名等属性,具体如图1所示。三是功能控制按钮的设计,因为AN中不再支持AS2.0,并没有继承flash cc中的公用按钮库,所以这部分主要靠自定完成,也剛好可以设计出更具个性化的按钮元件;当然,如果想更加省事的话,也可以将flash cc中的按钮库“Buttons.fla”以外部库的方式打开,从中选择合适样式的按钮直接使用。
4.3 舞台设计
整体舞台大小可以预告设计好,本案例中采用标准舞台大小(640×480) ,在舞台的顶部居中显示案例主题(标题)文字——音乐播放器;舞台中间部分为动画MC展示区,舞台底部左侧为音乐文件选择器(ComboBox组件),用户可以由此选择想要播放的音乐,右侧为音乐播放控制区,显示几个预设的功能按钮。具体界面效果如图2所示。
4.4 代码设计
根据整个案例的功能和效果,涉及的代码很多,现主要介绍如下:
1) ComboBox组件初始化
var s_list:ComboBox=new ComboBox();//定义存放歌名的下拉列表框(组合框),将预定的歌曲名称和音乐文件装入该组件中。
addChild(s_list);//把列表框加载到舞台上,即显示出来。
s_list.x = 30;/水平位置。
s_list.y = 350;//垂直位置。
s_list.width = 200;//宽度。
s_list.addItem({label:"请选择歌名",data:null});
s_list.addItem({label:"一次就好",data:"一次就好.mp3"});
s_list.addItem({label:"我的歌声里",data:"我的歌声里.mp3"});
s_list.addItem({label:"我和我的祖国",data:"我和我的祖国.mp3"});
s_list.addItem({label:"阳光总在风雨后",data:"阳光总在风雨后.mp3"});
s_list.addItem({label:"歌唱祖国",data:"歌唱祖国.mp3"});
…
2) 加载MC到舞台
var my_mc:MovieClip;//定义剪辑类对象my_mc。
my_mc=new tw01();// 为my_mc赋值,即创建一个将实际调用的MC类的对象,并指定给my_mc,此句为简化版,按本案例的实际功能和效果,此处应借助随机函数,实现从tw01-tw06中的随机指定。
addChild(my_mc);//把剪辑加载到舞台上。
my_mc.x = 125; //设置MC在舞台上的水平坐标。
my_mc.y = 90; //设置MC在舞台上的垂直坐标。
my_mc.width = 300; //设置MC在舞台上的宽度。
my_mc.height = 220; //设置MC在舞台上的高度。
3) ComboBox组件事件程序
为了使案例能正常运行,为ComboBox组件添加了CHANGE事件处理程序,即当ComboBox组件的当前选项发生改变时,执行相应的程序功能,并且配合其添加了SoundChannel类的SOUND_COMPLETE事件程序,从而更好地实现了音乐播放与重放功能。具体代码如下 :
s_list.addEventListener(Event.CHANGE,s_play);
function s_play(event)// ComboBox组件的CHANGE事件处理程序,实现音乐的初始播放。
{
var s_music:Sound=new Sound();//此处重新定义s_music,是为避免在更换歌曲时的加载错误。
if (s_list.selectedItem.data != null)
{
s_name.url = s_list.selectedItem.data;
s_state = true;
s_music.load(s_name);
s_channel = s_music.play();
s_channel.addEventListener(Event.SOUND_COMPLETE,s_replay);
}
else
{
removeChild(my_mc);//当不选任何歌曲的时候,将舞台上的剪辑删除。
my_mc = null;
}
}
function s_replay(event) // SoundChannel类对象的SOUND_COMPLETE事件程序,实现音乐的重放。
{
s_name.url = s_list.selectedItem.data;
var s_music:Sound=new Sound();
s_music.load(s_name);
s_channel = s_music.play();
s_channel.addEventListener(Event.SOUND_COMPLETE,s_replay);
}
4) 功能按钮实现
根据预先设计的功能按钮,分别将舞台上的三个按钮实例命名为bplay、bstop和bpause,即播放、停止和暂停三个按钮。对应于三个按钮的事件程序分别为P_bplay()、P_bstop()和P_bpause(),具体代码如下:
bplay.addEventListener(MouseEvent.CLICK,P_bplay);
bstop.addEventListener(MouseEvent.CLICK,P_bstop);
bpause.addEventListener(MouseEvent.CLICK,P_bpause);
var position:uint = 0;
function P_bplay(event:MouseEvent):void
{
if (s_channel!=null)
{
position = s_channel.position;//保存當前播放位置
s_channel.stop();
s_channel = null;
}
s_name.url = s_list.selectedItem.data;
var s_music:Sound=new Sound();
s_music.load(s_name);
s_channel = s_music.play(position);//在声音通道对象s_channel中播放声音对象music
}
function P_bstop(event:MouseEvent):void
{
position = 0;
s_channel.stop();
s_channel = null;
}
function P_bpause(event:MouseEvent):void
{
position = s_channel.position;//保存当前播放位置
s_channel.stop();
s_channel = null;
}
5 结束语
好的音频,能对一部好的动画作品锦上添花,更能对一部普通的动画作品画龙点睛,AN软件中延续了对Flash软件中的大部功能,并承袭了关于AS3.0的支持,能较好地实现对音频素材的各类控制,从而展现出AN软件的强大功能和AN动画作品的无穷魅力。
参考文献:
[1] 周俊平.Flash中ActionScript语言的使用分析[J].无线互联科技,2012(7):91-92.
[2] 熊焕演,范志勤.浅谈AS3.0的事件机制[J].科技广场,2009(11):249-250.
[3] 钟山,李辉熠,夏丽雯.ActionScript 3.0事件处理机制的应用[J].数字技术与应用,2014(9):114.
[4] Adobe Systems Incorporated.ActionScript 3.0 编程[Z].2007.
[5] 章精设,胡登涛.Flash ActionScript 3.0从入门到精通[M].北京:清华大学出版社,2008.
【通联编辑:谢媛媛】
收稿日期:2022-05-15
基金项目:AN软件中基于AS3.0的音频控制研究(项目编号:2020107)
作者简介:汪志敏(1981—) ,男(满族),内蒙古赤峰人,副教授,硕士,研究方向为计算机科学技术。