Authorware开发实例:实际示例演练Authorware(3)-多媒体对象播放音频视频控制

作者:网络 来源:佚名 更新时间:2008-03-24 点击:

下面通过结合具体实例阐述多媒体对象播放的各种方法和技巧。

实例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”知识对象,由于它集成了一些程序片段,占用资源较高,运行效率比其他的方法要差一些,这可以在调用知识对象时的速度很慢可以发现,这应该是目前所有知识对象的通病,相信在以后的发展中,这应该是值得注意的一个地方。

实例3-9:调用外部多媒体播放软件直接播放。
可以利用跳转函数直接运行多媒体播放软件播放多媒体文件。
创作过程:
a、由于本程序利用cover.u32的cover()函数实现屏幕遮盖,所以先点击工具条的函数图标,在“category”选择当前编辑的文件,点击“load...”按钮,在弹出窗口先找到cover.u32,选定打开后弹出“custom function”窗口,这里只要用“ctrl”键选定“cover”和“uncover”就可以了。
b、在流程线上放置一计算图标“初始化”,里面填上:
resizewindow(640,480)
cover()--利用cover.u32的cover()遮盖屏幕背景
c、流程线下加入一显示图标,加上背景图,并打上文字说明:本程序利用跳转函数jumpoutreturn调用外部播放软件播放avi、mpg、wav、swf媒体文件,由于调用的外部播放软件版本有冲突或其他原因,如果不能调用,请将相关软件拷贝到当前运行目录下。
d、在流程线放入一交互图标“调用”。在右边放置5个计算图标,它们分别命名为“播放avi”“播放mpg”“播放wav”“播放swf”“退出”,交互方式都设定为“button”。这些图标的属性“button”里设定“cursor”为手型指针,其他的属性不用改变。
e、按ctrl_alt_k调整好这5个按钮,或者在主菜单的“modify”选择“align”。
f、“播放avi”图标里面填:
jumpoutreturn("quicktimeplayer.exe", filelocation^"sample.avi")
--如果当前目录没有调用文件,请详细给出 具体路径
--jumpoutreturn("c:\\program files\\quicktime\\quicktimeplayer.exe", "c:\\sample1\\sample2\\sample.avi")
“播放mpg”图标里面填:
jumpoutreturn("wmplayer.exe", filelocation^"sample.mpg")
“播放wav”图标里面填:
jumpoutreturn("sndrec32.exe", filelocation^"sample.wav")
“播放swf”图标里面填:
jumpoutreturn("flashpla.exe", filelocation^"sample.swf")
“退出”图标里面填:
uncover()--去除屏幕黑色遮盖
quit()
程序运行时,背景给黑色所遮盖,按提示说明,点击相应的按钮就可以调用程序播放音频和视频文件。当退出程序时,要选择“退出”按钮正常退出,否则背景还有黑色遮掩。(流程图见31和效果图见图32)

 

小结:
对于音频、视频文件格式,首推使用功能强大,资源相对消耗较少的第三方插件,同时对于大容量文件尽量使用连接方式,并尽量使用压缩率高的同类型文件。例如:声音类可以使用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等插件才可以支持。