下面通過結合具體實例闡述多媒體對象播放的各種方法和技巧。
實例3-1:聲音圖標和視頻圖標
authorware 6版本聲音圖標直接支持mp3格式的播放,它把mp3文件當成內部文件調用。authorware 6版本采用媒體同步技術,它的作用是使聲音或視頻與前后的媒體更協調展示。在流程線上放置一聲音圖標或視頻圖標,在這圖標右邊放置一其他例如顯示圖標,這是會出現一個象小時鐘的圖標,雙擊這圖標可以進行媒體同步設定,選擇時間或位置同步,擦除相鄰圖標的時效。(見圖22)
使用聲音圖標和視頻圖標播放聲音,在authorware中是單線程的,因為它不支持微軟的directdraw和directsound技術,凡是支持這2種技術的,都可以多線程使用聲頻和視頻資源,例如很多第三方插件就支持,包括tabuleiro公司的directmediaxtra、mpegxtras、streamingmediaxtra。例如:先后放置2個聲音圖標,如果第一個聲音圖標的“concurrency”設定為“wait until done”,不管你后一圖標設置如何,它都是先執行完前一聲音段再開始執行后一聲音段。如果前一聲音“concurrency”設定為“concurrent”,那后面的聲音怎設定,都是前一聲音只極短的出現就播放后一聲音。
而對于2個視頻文件來說,視頻總可以同時展示,但對于包含單線程聲頻的視頻文件來說,它的效果和上面所述一樣的,這便是:2個視頻文件,對于單線程的聲音流只能有一個線程展示,對于視頻流則沒限制。
authorware6新增加對mp3的直接支持,使到聲音圖標可以直接接入aiff、mp3、swa、pcm、swa、vox、wave這幾種格式,接入這些聲音文件,它可以當成內部文件處理,所以,當使用一些大的聲音文件時,會造成系統資源的大損耗,容易產生死機等現象,這應該盡量避免。
authorware視頻圖標支持bitmap sequence(8位非壓縮小型點陣圖片序列)、flc/fli、director(包括已作保護的dcr格式,但實際上authorware6最多也只是部分支持到director6.5,director7以上全部不支持,authorware6也沒發行新的director的驅動程序)、mpeg。
實例3-2:一屏幕顯示4種視頻格式。
4個視頻圖標分別展示flc、fli、director、mpeg的格式,可以全部同時展示,對于可以導入的dir文件的交互是完全支持的。直接用視頻展示消耗大量系統資源,建議盡量少使用。
制作步驟:
1、在流程線上放置一計算圖標“初始化”,填上:
resizewindow(640,480)
2、在流程線上放上4個視頻圖標:“p_fli”、“p_dir”、“p_mpg”、“p_mov”,讓它們分別插入視頻文件fli、dir、mpg、mov,暫停運行時設置好它們的位置,fli、flc文件格式改不了大小的。authorware對director6.5以下版本的支持還是比較好,6.5以上版本基本無效了,但如果支持的話,在運行視頻文件時是可以對dir文件進行交互作用的。效果見圖23。
實例3-3:用聲音圖標播放wav和mp3。
要求:在屏幕上有2個按鈕,按鈕按下會轉換顯示文字以及轉換開關聲音,并有簡單操作提示。
操作步驟:
a、拖放一計算圖標,寫上內容:
resizewindow(300,180)--設定顯示窗口大小
wav:=0
mp3:=0
b、在流程線上放置2個交互圖標分別處理wav和mp3的。
它們下面都掛3個群組圖標,前2個都是按鈕,后一個是熱區。各組的3個圖標所定義的位置是完全相同的。
c、wav這組:
雙擊第一個按鈕交互,“button”的“options”屬性點選“hide when inactive”,當無響應時按鈕隱藏起來,可以在同一放置下放2個按鈕也相互不影響。在“cursor”選擇好交互響應時的光標。在“response”的“scope”設定為“perpetual”(永久),在“active if”里面填上“wav=0”(在這里不能填wav:=0,這和在計算圖標里不相同的,否則出錯),在“erase”里設定“don't erase”(不要擦除)。
在“播放wav”圖標下先放置一計算圖標,填上:
wav:=1--先改變wav變量值
wavstop:=0--定義wavstop變量為0時才進行wav播放
在流程線下放置一聲音圖標,import所需要播放的聲音文件,聲音圖標屬性下的“timing”里面的“concurrency”設定為“concurrent”,“play”設定為“until true”(設定不停循環播放,直至條件“wavstop=1”成立,播和停就靠這來進行的!),其他選項使用省缺值就可以了。
利用authorware6的新特性:媒體同步,在聲音圖標下掛一等待圖標,讓聲音可以播放。(這由wav聲音是單線程聲音流而決定,否則,在沒設定聲音防止擦除時,當有其他聲音或刷新時都會使聲音播放停止的)
在按鈕交互的“停播wav”圖標下放置一群組圖標,這里的設定除了在“active if”里面設定為“wav=1”以外,其他的和“播放wav”圖標的相同,它的目的就是通過wav變量的變化,選擇出示那個按鈕。這個按鈕交互里面有一計算圖標,上面寫上:
wavstop:=1--改變wavstop的變量值,與聲音播放的條件控制播放或停止
wav:=0--停止播放后,讓“播放wav”按鈕有效
右邊的熱區交互“tips_wav”用來做提示之用,當鼠標在按鈕位置上面時提示操作,所以,這熱區響應match于“cursor in area”。讓人看的提示可以設定幾秒等待就用擦除圖標把它們擦除。
d、由于mp3已經在authorware6中直接調用,它的使用和wav已完全相同,所以,交互的設置也是步驟c完全相同,只是改變一下2個變量名稱就可以了。(主流程線和效果圖見圖24)
實例3-4:利用ucd播放音頻和視頻
ucd是user code document(用戶代碼文檔)的簡稱,它是用戶為了擴展authorware功能而開發的函數的一種標準,象系統函數一樣使用。ucd文件同樣對應有16位(“.ucd”)和32位(“.u32”)2種版本,在使用ucd文件時,要將文件拷貝到authorware目錄下面,通過調用自定義函數來使用。
authorware6自帶的ucd只有a5wwme提供音頻和視頻的播放,它支持的mmm動畫格式是很久定義的格式,現在已經很少人用了,所以,利用ucd主要講述對音頻的處理,我們可以利用ucd播放midi和vqf文件
需要使用的ucd是:a5wmme.u32和xjvqf.u32。a5wmme.u32是authorware自帶的,xjvqf.u32的作者是武漢市忘情草工作室的徐先生([email protected])。
a、在流程線上放置一“初始化”計算圖標,里面寫上:
resizewindow(240,180)--設定展示窗口大小
midi:=0--給變量midi初始值
vqf:=0--給變量vqf初始值
b、首先裝載a5wmme.u32和xjvqf.u32。
點擊工具條欄的函數窗口,在“category”選擇當前編輯的文件,點擊“load...”按鈕,在彈出窗口先找到a5wmme.u32,選定打開后彈出“custom function”窗口,這里只要用“ctrl”鍵選定“midiplay”和“midistop”就可以了。同樣方法裝載xjvqf.u32的“x_playvqf”和“x_stopvqf”這2函數。
c、在流程線上放置一交互圖標“midi”,在右邊放一計算圖標“播放midi”,交互方式為“button”,輸入:
midiplay(filelocation^"sample3.mid", 100,0)--播放midi
midi:=1
其中的100表示按正常速度播放,0表示播放當前midi音樂的同時繼續向下執行,相當于聲音圖標的“concurrent”屬性設定。
雙擊“播放midi”圖標,在“button”屬性里面size(大小)設定為x=100 ,y=50;location(位置)設定x=30,y=15;在“options勾選“hide when inactive”(無效時隱藏圖標);在“cursor”中選擇手型指針。在“response”屬性里面scope勾選“perpetual”;在active if填上midi=0,意思就是當變量midi為零時激活圖標。其他選項使用省缺值就可以了。
d、繼續在右邊放置一計算圖標“停播midi”,交互方式也是“button”,寫入內容:
midistop()--停止播放midi
midi:=0
在計算圖標“停播midi”的圖標屬性里面除了在active if填上midi=1以外,其他的屬性設置和“播放midi”圖標相同。
e、在右邊拖入一群組圖標“midi_tips”,設定交互類型為“hot spot”,熱區的位置和范圍和前2圖標相同,但match選擇“cursor in area”,cursor選擇手型,scope設定為“perpetual”。
打開“midi_tips”,先放入一顯示圖標“tips”,在視窗適當位置寫上提示內容。在流程線下繼續放一等待圖標,在time limit填上3,其他項不勾選。
f、在流程線上放置一交互圖標“vqf”,在右邊放一計算圖標“播放vqf”,交互方式為“button”,輸入:
--在使用前應保證"twinvq2.cdb","vqf.dll"這兩個文件已經復制到window的system目錄
vqf:=1
x_playvqf("sample3.vqf")--播放vqf
“播放vqf”屬性設置與“播放midi”雷同,不同地方是在位置上做調整,在active if中填上:vqf=0。
g、在右邊放交互方式為“button”的計算圖標“停播midi”,輸入:
vqf:=0
x_stopvqf("sample3.vqf")--停播vqf文件
與“播放vqf”不同的屬性設定在active if中填上:vqf=1。
h、在右邊拖入一群組圖標“vqf_tips”,交互方式設定為“hot spot”,它的設定基本與“midi_tips”相同,里面放置也是相同類型的圖標,就是將提示內容改動一下就可以了。
這程序的主流程圖見圖25所示。這程序播放操作很簡單,有個缺陷,就是當midi或vqf文件播放完畢后,按鈕沒有變化,這是由于ucd的不足,沒有對播放次數和時間做處理,當然,你只要知道播放文件的長度,就可以在播放按鈕下面加一個等待圖標,設定好時間,再在下面加一個計算圖標,將變量midi或vqf改變一下就可以了。
利用ucd播放音頻和視頻制作上要注意調入的函數準確使用,加上一定的技巧,就可以輕松地設計一個播放程序。
實例3-6:利用activex控件制作2個媒體播放器。
activex技術是一種嵌入式程序技術,它其實就是ole和 ocx的融合。 authorware調用控件的方法是通過activex xtra函數的“callsprite”實現。利用activex控件要安裝和注冊,但對于設計者來說需要用的控件一般都已經安裝有的,所以,在這里也不說安裝和注冊的方法了。
在一個屏幕中利用不同的2個activex控件制作2個媒體播放器,分別是shockwave flash activex控件和windows media player activex控件,它們分別可以播放swf與mpg、dat、wav、mid等格式,media player activex控件是可以播放聲頻和視頻格式的。
制作步驟:
a、在流程線放置一計算圖標“初始化”,里面填上:
resizewindow(640,480)
設定顯示窗口大小為640*480。
b、繼續增加一個顯示圖標“背景”,雙擊打開,在上面寫上說明,并制訂好2個正方形大格,用于定格播放的位置。
c、在主菜單上的“insert”的“control”下點選“active...”,在出現select activex control中選定“shockwave flash object”,點擊確定。在出現的屬性設置中,先不用理會那些屬性,按確定一路關閉就可以了,名稱叫“flash_player”。
d、在流程線下放一交互圖標“dispose”,在右邊放置3個計算圖標,名稱分別為:open、play、stop,設定它們的交互屬性為按鈕,并執行一下,按暫停按鈕或ctrl_p,調節好3個按鈕的大小和位置。在“button”的cursor中設定手型指針,scope設定為perpetual,erase設定為on exit,branch設定為try again,其他屬性使用省缺值。
在“open”計算圖標中,填寫上:
object:=newobject("fileio")
flashfile:=callobject(object,"displayopen")
seticonproperty(@"flash_player",#pathname,flashfile)
先定義“fileio”子對象,用變量flashfile保存從[打開文件對話框]中所選文件名,然后用pathname屬性把flashfile保存的文件賦給flash動畫圖標。
在“play”計算圖標中,填寫上:
setspriteproperty(@"flash_player",#movie,flashfile)
callsprite(@"flash_player",#play)
設定flashfile的movie屬性,對flash對象驅動播放。
在“stop”計算圖標中,填寫上:
callsprite(@"flash_player",#stop)--停止播放flash。
按flash的屬性和方法的介紹,setspriteproperty(@"flash_player",#sound,false)應該可以停止聲音的播放,但由于某些swf文件對聲音流的處理,用stop屬性只能停止動畫部分,對聲音沒效果,停不了聲音的播放。按停止以后,再按 “play”繼續播放。
e、在主菜單上的“insert”的“control”下點選“active...”,在出現select activex control中選定“windows media player ”,點擊確定。在出現的屬性設置中,先不用理會那些屬性,按確定一路關閉就可以了,名稱叫“wmp_player”。
f、采用步驟d的方法設置好播放windows media player的4個圖標。
在“open”計算圖標中,填寫上:
w_file:=newobject("fileio")
wmpfile:=callobject(w_file,"displayopen")
setspriteproperty(@"wmp_player",#filename,wmpfile)
先定義“fileio”子對象,用變量wmpfile保存從[打開文件對話框]中所選文件名,然后用filename屬性把wmpfile保存的文件賦給圖?quot;wmp_player"。
在“play”計算圖標中,填寫上:
setspriteproperty(@"wmp_player",#movie,wmpfile)
callsprite(@"wmp_player",#play)
設定wmpfile的movie屬性,對媒體對象進行播放。
在“stop”計算圖標中,填寫上:
callsprite(@"wmp_player",#stop)--停止播放音、視頻文件。
由于windows media player采用自己定制的directdraw和directsound技術,對于聲頻視頻的多線程處理,不會受其他媒體驅動的影響。
g、最后加一個交互圖標,下面帶一個“按鈕”交互的計算圖標,寫上:quti()已便退出程序。
windows media player用來播放視頻和音頻2大類型的素材,所以,在畫定的activx的播放框中,如果播放的是音頻,當然也沒畫像出現的。
利用activx技術充分利用系統資源,它山之石作自用,擴充了authorware自身的不足,但畢竟接口的原因,加上屬性和方法的數量多,難以控制,使用時要充分弄清各種相互屬性和方法的操作。(全流程線圖見圖26)
實例3-7:利用第三方多媒體控件directmediaxtra播放聲頻、視頻。
由于macromedia公司的開放,很多廠商和個人都可以自己對authorware進行二次增強開發,所以,網絡上的第三放多媒體控件很多,比較出名的有tabuleiro公司的directmediaxtra(最新的2。01版本)、mpegxtras、streamingmediaxtra,visiblelight公司的onstage(最新4.0版本,支持dvd模式),在這里采用在國內使用最多的directmediaxtra作實例介紹。
directmediaxtra完美支持microsoft的directdraw and directsound技術,支持mpeg, avi, quicktime, wav, aif, mp2、midi,如果windows media player已經安裝,可以支持a/asf、 wmv、wma格式,可以是說一個大集成,單一使用它已經足以處理好各種視頻和聲頻。
制作目的:顯示一下directmediaxtra強大的多媒體支持技術,將一個屏幕集成多種聲頻和視頻對象。
制作步驟:
a、在流程線上放置一計算圖標,寫上:
resizewindow(640,480)
b、在你安裝directmediaxtra之后,可以選擇insert主菜單下tabuleiro xtras里的directmediaxtra,打開屬性設定,在digital video file那的browse files選擇裝載一個mp3文件,在playback options那里設定tool bar(顯示工具條)和loop(循環),其他用省缺值。
c、在流程線上按順序用同樣方法分別裝載asf、avi、mid、wav、mpg、gif,屬性設定也相同。
directmediaxtra也太夸張了,不單是音頻視頻一起包攬,竟然連圖片也可以放在里面,可以顯示bmp、jpg,動態的gif也支持,還可以控制動態的屬性設置!當然,很多別的圖片dmx是不支持的。
d、在主菜單的insert的media里面點選animated gif...,在彈出的屬性設置里面,通過browse來選擇要顯示的gif圖片,放置在流程線上,圖標名為“gif”。
e、在主菜單的insert的media里面點選flash...,在彈出的屬性設置里面,通過browse來選擇flash文件,并勾選“loop”,在流程線上圖標改名為“flash”。
f、在主菜單的insert的media里面點選quicktime...,在彈出的屬性設置里面,通過browse來選擇mov文件,并勾選“loop”,在流程線上圖標改名為“mov”。
g、讓程序運行,這次可熱鬧了,聲音夠亂,視頻也多,這時按ctrl_p,將需要調整的位置處理好。(最后效果見圖27)
這樣,流程線上有10個圖標,都是常用的音頻和視頻,并且都可以在同一時間運行,并且運行也比較穩定,你看看,有了directmediaxtra,還有什么難倒你呀?
directmediaxtra的屬性設置主要分幾個區域:preview、digital video file、searchpaths、cue points、playback options、play control。只要文件格式接受,它在preview一定有展示,不能演示的肯定用不了。在playback options里面,可以設定循環、分段、顯示工具條等。在play control里面,可以設定音量、均衡、重放設置、cpu占有率控制等。像背單詞之類的軟件,它的聲音量是很大的,你可以將聲音作成一個大容量文件,而利用cue points(提示點)就可以分段來,這樣在錄制聲音上就大大方便了。
使用directmediaxtra可以使你有一種“一但擁有,別無所求”的感覺,對于絕大多數的視頻音頻處理,有它足以,而且,它占資源不是很大,即使在一個屏幕內多個一起使用也不會輕易出問題。從使用方便、易用、實效、高效的角度上來說,它絕對是吐血推薦的!
注意的是:如果程序有菜單條,它使用視頻時會有20像素的位置偏差,制作時會造成一些不便,使打包后展示的和制作是有些位置的偏異。
實例3-8:利用“movie controller”知識對象播放avi、dir、mov、mpeg文件。
知識對象(knowledge object)是authorware5版本以上新增的內容,它將一些常用的程序片段集成一個帶有向導的獨立模塊,一般用戶可以利用它們進行高效的創作。在6.0版本,共有8類42個知識對象,現在我們利用“movie controller”來制作播放視頻的實例。
制作過程:
a、在流程線上拖入一計算圖標“初始化”,填上:
resizewindow(640,480)
b、繼續放置一顯示圖標,用來作背景。
c、 在流程線下加一交互圖標“播放”,右邊放置4個群組圖標,都是相同的按鈕屬性,分別命名為“play_avi”“play_dir”“play_mpg”“play_mov”繼續在右邊放置一計算圖標“退出”,用來退出程序使用,里面填著:quit()
d、整理一下按鈕的放置,讓它們整齊擺成一組。每組群組圖標的內容都相同,先是一個擦除圖標,運行一下,按ctrl_p暫停一下,擦除圖標里面的“icon”屬性里面,在list點選“icon to preserve”,點選背景圖、按鈕這些不擦除。將這個擦除圖標復制一下,然后在其他的群組下面放置這樣的一個擦除圖標。
e、在“play_avi”之下,將指針指到擦除圖標之后,將鼠標移動到右邊的知識對象處,如果沒看到,按ctrl_shift_k就可以出現。移動滾動條,找到“movie controller”知識對象,雙擊之后先出現要求保存提示,保存好后打開對話框。這部分是入門介紹,說這知識對象模塊支持avi、mpg、dir、mov格式的文件。
點擊“next”,第二步是選擇數字視頻文件。點擊右上角的...按鈕,選擇要播放的視頻文件,如果視頻文件格式不對或其他問題,會提示有錯誤,確定有重新作選擇。左下角有一預覽小窗口可以進行預覽。(見圖28)
確定沒錯誤點擊“next”進入下一選擇,這里有5個控制工具條可以選擇,你勾選就可以使用工具條進行操作。你也可以按自己的喜好做處理。
點擊“next”進入下一選擇,這時進行大小、比例的選擇,其實這步沒必要了,應該那視窗大小在播放窗口那才好控制。(見圖29)
再繼續是位置的選擇,這里也可以不理會,按“next”繼續就可以了,應該在這2步里面,這知識對象好象不完善,有些數字改動不了。(見圖30)
最后看著完成的說明,按“done”就大功告成了。
這時將知識對象改名成"play_avi"
f、重復上個步驟,將其他的3個播放視頻的知識對象也設置好。
g、暫停運行時,將知識對象的大小和位置調整好就可以了。
“movie controller”知識對象不支持director文件的交互性,并且不支持但視頻圖標是直接支持的,但它支持分段跳進。它對資源是獨霸的,在一時間段只可以有一個視頻播放,而且要選定停止播放時其他對象才可以使用。
用“movie controller”知識對象播放視頻時,視頻部分的層次是無限大的,而播放的工具條則是0層的,視頻部分與工具條銜接不連貫的。
使用“movie controller”知識對象,由于它集成了一些程序片段,占用資源較高,運行效率比其他的方法要差一些,這可以在調用知識對象時的速度很慢可以發現,這應該是目前所有知識對象的通病,相信在以后的發展中,這應該是值得注意的一個地方。
小結:
對于音頻、視頻文件格式,首推使用功能強大,資源相對消耗較少的第三方插件,同時對于大容量文件盡量使用連接方式,并盡量使用壓縮率高的同類型文件。例如:聲音類可以使用midi、rmi、swa、vox、asf、wma、rm,少使用wav、mp3、vqf等;視頻類可以使用rm、flash、動態gif(與視頻有雷同效果,當視頻類處理)、視頻asf、wmv等,少使用avi、mpg、mov、dat等,最近隨著mpeg4的技術的不斷發展,對于采用mpeg4壓縮技術的文件,壓縮率已極高,例如采用mpeg4技術壓縮的avi比同等質量的流媒體rm或asf還要好,但authorware要利用divx等插件才可以支持。
新聞熱點
疑難解答