摘要:AN(Animate) 軟件是近幾年由Adobe公司新推出的動畫制作軟件,它以全新的面貌取代了市場上流行多年的Flash軟件,在多媒體應用與處理方面有獨到的效果。因此,在介紹AN與AS3.0的基礎(chǔ)上,闡明了AN的程序設(shè)計模式和程序響應機制,并詳細介紹了AN中的音頻控制類型及音頻應用,并以典型案例詮釋了音頻控制應用的設(shè)計過程。
關(guān)鍵詞:AN;動畫制作;AS3.0;音頻控制
中圖分類號:TP37 ? ? ?文獻標識碼:A
文章編號:1009-3044(2022)31-0099-04
AN全稱Adobe Animate,是Adobe公司在原有Adobe Flash Professional軟件的基礎(chǔ)上推出的一款專業(yè)且強大的2D動畫制作軟件,提供了非常豐富全面的插圖和動畫工具,并且增加了HTML5創(chuàng)作工具,為網(wǎng)頁開發(fā)者提供更適應現(xiàn)代網(wǎng)頁應用的音頻、圖片、視頻、動畫等創(chuàng)作支持,從而滿足不同用戶的各種動畫創(chuàng)作需求。AS(ActionScript) 3.0 是繼承自Flash的內(nèi)置腳本語言,提供了可靠的編程模型,支持大型數(shù)據(jù)集、代碼重用和面向?qū)ο缶幊?,便于復雜應用程序的設(shè)計與實現(xiàn)。AS3.0使用新型的虛擬機AVM2,實現(xiàn)了性能的優(yōu)化;升級了應用程序編程接口 (API),在面向?qū)ο竽P秃蛯ο罂刂频确矫嬗兴黄疲粚ML添加為語言的本機數(shù)據(jù)類型;與早期版本相比,編譯器代碼庫更加先進,并且在遵循 ECMAScript (ECMA 262) 標準方面也更加嚴格,執(zhí)行優(yōu)化更深入。
1 AN軟件中的程序設(shè)計模式
AN軟件的默認文件類型為.fla類型,即動畫文件,此類文件的主要特點是能在用戶的相應控件下,利用AN軟件的基本動畫設(shè)計方法,創(chuàng)建出常規(guī)的動畫效果,包括補間動畫、遮罩動畫、引導層動畫、幀動畫等。但這些動畫究其根源,皆屬于AN軟件產(chǎn)品的初級形式,是簡單動畫效果。如果想創(chuàng)建出更加豐富炫酷的多樣化動畫效果,通常要借助于AS(ActionScript,動畫腳本)語言進行編程。因此,人們常說腳本語言是AN軟件高級動畫作品的靈魂,而在AN軟件中,程序設(shè)計有兩種模式,具體見下文。
1.1 獨立程序模式
獨立程序模式也稱外部腳本文件模式。即用戶編程的腳本代碼獨立于角色所在動畫文件之外,二者需要進行一定的連接才能最終呈現(xiàn)用戶想要得到的最終動畫效果。此模式下編程,要求用戶對AS3.0腳本語言的語法規(guī)則及相應的類庫、對象名、方法及屬性等有相當?shù)牧私?,并且對于大型的案例制作而言,通常是角色、場景等和腳本的設(shè)計由不同人員分工協(xié)作來完成,因此要求程序設(shè)計人員要充分考慮到程序的接口。
1.2 嵌入編程模式
嵌入編程模式通常稱為內(nèi)部腳本模式。在該種編程方式下,程序所涉及的所有動作腳本代碼都寫在動畫文件的時間軸的特定關(guān)鍵幀上,影片播放過程中,當播放頭進入該幀時,代碼被執(zhí)行。由此,設(shè)計人員可以更加靈活地為應用程序添加行為,而在具體的編程實踐中,代碼可以在主時間軸的任何關(guān)鍵幀添加,也可以在影片中的MC(MovieClip,即影片剪輯)元件或?qū)嵗膬?nèi)部時間軸的關(guān)鍵幀添加。然而,與這種靈活性相伴而生的,是程序維護難度的增加,即在設(shè)計與開發(fā)復雜應用程序時,隨著程序規(guī)模的擴大或者時間的延長,腳本位置的定位越發(fā)困難,錯誤排查越發(fā)艱難。因此,大部分設(shè)計人員習慣將代碼放在第1幀,或者設(shè)置特定圖層,專門用于添加腳本代碼,以簡化在.fla文檔設(shè)計中代碼的組織,從而降低代碼的維護難度。但是,即便這樣,在代碼的重用方面仍然有很大的缺陷,如果有另一個AN項目需要實現(xiàn)同樣的功能效果,必須重寫或?qū)⒋a復制粘貼到新文件中。
2 AS3.0程序的事件機制與音頻控制類
2.1 事件處理機制
AS3.0的事件機制采用的是監(jiān)聽的方式,所有的事件都是需要觸發(fā)器、監(jiān)聽器、執(zhí)行器三種結(jié)構(gòu)的,這樣做的好處就是使得這個語言非常標準化[1]。同時,AS3.0中,Event是所有事件類的父級類,而Event類是從基類Object繼承而來,因此AS3.0中所有的事件都具有統(tǒng)一的結(jié)構(gòu),大大提高了程序的可讀性和代碼的重用性。也正因如此,使得AS3.0 程序設(shè)計中允許所有的可視對象接收和發(fā)送事件[2]。
此外,在AS3.0程序設(shè)計中,整個事件處理過程分為注冊偵聽器、分發(fā)事件、偵聽事件和移除偵聽器四個步驟[2-3]。
2.2 常用音頻控制類
AN軟件中,與音頻控制相關(guān)的功能腳本類較多,涉及音頻對象導入與加載的,音頻對象聲道控制的,音頻對象播放控制的,以及音頻對象播放效果的等?,F(xiàn)主要介紹如下[4-5]:
Sound類:是AN中音頻控件的基礎(chǔ)類,能夠決定在AN應用程序中是否可以使用音頻。利用此類,可以創(chuàng)建Sound對象、加載外部音頻文件(如MP3) 到對象、控制音頻的播放狀態(tài)、訪問音頻相關(guān)屬性數(shù)據(jù)。
SoundChannel類:是AN中關(guān)于聲道控制的類。創(chuàng)建SoundChannel 對象,可以方便地控制音頻的左和右回放聲道的音量,并且在同一應用程序允許多個聲道并在。
SoundCodec類:用于在設(shè)置Microphone類codec屬性使用的常數(shù)值的枚舉[4]。
SoundeLoaderContext類:用于為加載音頻的文件提供安全檢查??梢詫虞d聲音的緩沖秒數(shù)進行指定,其對象用于Sound.Load() 方法的參數(shù)。
SoundMixer類:包含應用程序中全局聲音控件的靜態(tài)屬性和方法。能對影片中所有聲音相關(guān)的回放及安全屬性進行控件。創(chuàng)建SoundMixer 對象,能實現(xiàn)多個聲道的混合,而其值也將會影響當前播放的所有 SoundChannel 對象。
SoundTransform類:具有音量控件功能,其值包含音量和聲相。創(chuàng)建SoundTransform 對象后,可以在SoundChannel、SoundMixer及 Microphone 對象的屬性設(shè)置中使用。
Microphone類:此類指向用戶計算機接入的音頻輸入設(shè)備[5],如麥克風等。能夠?qū)Ⅺ溈孙L拾取的音頻傳送到本地揚聲器,或傳到遠端服務器。
3 音頻控制在動畫制作中的應用
通常,借助于AS3.0腳本的音頻控制功能,可以將音頻素材應用于以下類型的動畫作品中:
1) MV動畫;
2) 動態(tài)音畫作品,比較典型如天然音畫作品等;
3) 游戲背景音樂或特效音樂;
4) 配樂電子相冊、電子賀卡類動畫作品;
5) 角色動畫的配音;
6) 網(wǎng)站動畫素材配樂等。
4 典型音頻控制應用的動畫案例設(shè)計
為進一步展示音頻控制功能,下面以“音頻播放器”案例設(shè)計為例,簡單介紹如下。
4.1 整體設(shè)計
本案例的主要功能是實現(xiàn)對既定音樂的播放?;舅悸肥穷A先準備好作為播放備選項的音樂文件若干(本案例準備16個),通過AN內(nèi)置組件ComboBox(下拉列表框)實現(xiàn)與用戶交互;同時準備若干個MC(影片剪輯)作為舞臺動感元素,當用戶選擇音樂后,程序自動從預設(shè)的MC中隨機挑選一個,加載到舞臺上播放;添加“播放”“暫停”和“停止”三個按鈕,實現(xiàn)用戶對當前音樂的交互式控制功能。
4.2 角色設(shè)計
根據(jù)案例功能設(shè)計的需要,本案例需要設(shè)計的角色主要有三部分:一是音樂文件,這是案例設(shè)計的主體,根據(jù)AN軟件對音頻文件的要求,所有音樂文件采用mp3格式,采樣頻率為44.1KHz,可以通過“文件”——“導入”功能將事先準備好的音樂素材直接導入。二是舞臺展示區(qū)所需的MC,這部分較為復雜,是本案例動畫效果的核心,為簡便操作,采用事先準備好的部分動態(tài)圖片(gif格式)來代替,直接導入即可,系統(tǒng)會自動生成與圖片同名的MC元件,但有一點非常關(guān)鍵,就是為后續(xù)程序調(diào)用方便,需要為每個MC設(shè)置類名等屬性,具體如圖1所示。三是功能控制按鈕的設(shè)計,因為AN中不再支持AS2.0,并沒有繼承flash cc中的公用按鈕庫,所以這部分主要靠自定完成,也剛好可以設(shè)計出更具個性化的按鈕元件;當然,如果想更加省事的話,也可以將flash cc中的按鈕庫“Buttons.fla”以外部庫的方式打開,從中選擇合適樣式的按鈕直接使用。
4.3 舞臺設(shè)計
整體舞臺大小可以預告設(shè)計好,本案例中采用標準舞臺大?。?40×480) ,在舞臺的頂部居中顯示案例主題(標題)文字——音樂播放器;舞臺中間部分為動畫MC展示區(qū),舞臺底部左側(cè)為音樂文件選擇器(ComboBox組件),用戶可以由此選擇想要播放的音樂,右側(cè)為音樂播放控制區(qū),顯示幾個預設(shè)的功能按鈕。具體界面效果如圖2所示。
4.4 代碼設(shè)計
根據(jù)整個案例的功能和效果,涉及的代碼很多,現(xiàn)主要介紹如下:
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賦值,即創(chuàng)建一個將實際調(diào)用的MC類的對象,并指定給my_mc,此句為簡化版,按本案例的實際功能和效果,此處應借助隨機函數(shù),實現(xiàn)從tw01-tw06中的隨機指定。
addChild(my_mc);//把剪輯加載到舞臺上。
my_mc.x = 125; //設(shè)置MC在舞臺上的水平坐標。
my_mc.y = 90; //設(shè)置MC在舞臺上的垂直坐標。
my_mc.width = 300; //設(shè)置MC在舞臺上的寬度。
my_mc.height = 220; //設(shè)置MC在舞臺上的高度。
3) ComboBox組件事件程序
為了使案例能正常運行,為ComboBox組件添加了CHANGE事件處理程序,即當ComboBox組件的當前選項發(fā)生改變時,執(zhí)行相應的程序功能,并且配合其添加了SoundChannel類的SOUND_COMPLETE事件程序,從而更好地實現(xiàn)了音樂播放與重放功能。具體代碼如下 :
s_list.addEventListener(Event.CHANGE,s_play);
function s_play(event)// ComboBox組件的CHANGE事件處理程序,實現(xiàn)音樂的初始播放。
{
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事件程序,實現(xiàn)音樂的重放。
{
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) 功能按鈕實現(xiàn)
根據(jù)預先設(shè)計的功能按鈕,分別將舞臺上的三個按鈕實例命名為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 結(jié)束語
好的音頻,能對一部好的動畫作品錦上添花,更能對一部普通的動畫作品畫龍點睛,AN軟件中延續(xù)了對Flash軟件中的大部功能,并承襲了關(guān)于AS3.0的支持,能較好地實現(xiàn)對音頻素材的各類控制,從而展現(xiàn)出AN軟件的強大功能和AN動畫作品的無窮魅力。
參考文獻:
[1] 周俊平.Flash中ActionScript語言的使用分析[J].無線互聯(lián)科技,2012(7):91-92.
[2] 熊煥演,范志勤.淺談AS3.0的事件機制[J].科技廣場,2009(11):249-250.
[3] 鐘山,李輝熠,夏麗雯.ActionScript 3.0事件處理機制的應用[J].數(shù)字技術(shù)與應用,2014(9):114.
[4] Adobe Systems Incorporated.ActionScript 3.0 編程[Z].2007.
[5] 章精設(shè),胡登濤.Flash ActionScript 3.0從入門到精通[M].北京:清華大學出版社,2008.
【通聯(lián)編輯:謝媛媛】
收稿日期:2022-05-15
基金項目:AN軟件中基于AS3.0的音頻控制研究(項目編號:2020107)
作者簡介:汪志敏(1981—) ,男(滿族),內(nèi)蒙古赤峰人,副教授,碩士,研究方向為計算機科學技術(shù)。