首页 > 设计 > 媒体动画 > 正文

Authorware综合技巧:random循环选择播放midI背景音乐

2020-09-19 18:37:30
字体:
来源:转载
供稿:网友
  我们在上面介绍的“循环播放midi背景音乐”范例中只能播放一首midi音乐对象,这样显的比较单调,如果我们要实现多首midi背景音乐的随机循环选择播放,能实现吗?答案是肯定的。

  在这里我们要介绍另外一个外部函数a5wmme.u32。这个函数包括各种多媒体的播放控制函数,如动画、cd、midi、wav等的控制函数,其中我们可以利用的控制midi音乐播放的函数有:

midipause()

midiplay(filename, tempo, wait)

midiplaying()

midiplaysegment(filename, tempo, fromseconds, forseconds, wait)

midiresume()

midistop()

a5wmme.u32对midi音乐的控制函数比起midiloop.u32可就强大多了。

  在本范例中,有两个核心问题:一是如何实现随机选择不同的midi音乐的问题,二是如何让midi循环播放。解决第一个问题的方法是以所有要播放的midi声音文件名“创建”一个播放列表,这里“创建”的列表并不是真正存在的播放列表,而是通过系统函数“catalog”将存放midi音乐的文件夹中的文件名以字符串的形式赋给变量,即所谓的播放列表,最后通过系统函数“random”随机选择“播放列表”中的midi文件进行播放。而解决第二个问题的方法是利用了永久型的条件交互的一点技巧而已。一起来看看如何实现吧!

1、 执行界面预览,如图3.4



图3.4 范例程序执行效果

2、 程序的流程图如图3.5



图3.5 范例程序流程图
3、操作步骤:

1) 新建一个文件,并调入外部函数a5wmme.u32的相关扩展函数:

midiplay(filename, tempo, wait)

这个函数的功能即播放指定的midi音乐文件,其中“filename”参数即指定播放的midi音乐文件名;“tempo”参数是播放midi的速率,例如tempo =100表示以正常的速率播放midi;“wait”参数是播放midi的等待时间,例如wait=0即为立刻播放指定的midi音乐。

midiplaying()

判断当前是否正在播放midi音乐,如果条件为真则返回“1”,条件为假则返回“0”

midistop()

停止当前正在播放的midi音乐

2) 设置屏幕大小和背景,如图3.6和图3.7所示



图3.6 设置演示窗口大小



图3.7 设置范例的背景



图3.8 创建“播放列表”的内容

3) 创建“播放列表”,如图3.8,在计算图标中写入以下代码:

midilist:=catalog(filelocation^"midi","f") ----把midi文件夹下的midi文件名

midinum:=linecount(midilist) ----赋值给字符串变量midilist,实现

midilist_bak:=midilist ----随机选择midi文件

midinum_bak:=midinum

ramdonnum:=random(1,midinum,1)

currentfile:=getline(midilist,ramdonnum)

deleteline(midilist,ramdonnum)

midinum:=midinum-1
4) 开始播放midi文件,并进行随机循环选择控制。

(1) 在交互“midiloop”右边添加一永久条件交互,条件为“~(midiplaying()&sec)”返回类型设置为“return”,相关设置如图3.9所示;在计算图标里写入以下代码,如图3.10所示:

----判断恢复“播放列表”,即实现循环的目的

if midinum=0 then

midilist:=midilist_bak

midinum:=midinum_bak

end if

----继续随机选择播放新的midi文件

ramdonnum:=random(1,midinum,1)

currentfile:=getline(midilist,ramdonnum)

midilist:=deleteline(midilist,ramdonnum)

midinum:=midinum-1

midiplay(filelocation^"midi//"^currentfile,100,0)



图3.9 永久条件的设置



图3.10 永久条件交互的执行内容

为什么要设置永久条件为“~(midiplaying()&sec)”呢?其实原理就是通过系统变量sec的不断变化,迫使系统去检查整个表达式的值,当midi停止播放时,midiplaying()返回“0”,条件表达式立刻变为真,系统自动执行计算图标“~(midiplaying()&sec)”里的相关内容,即播放下一首随机选择的midi音乐文件,从而实现了midi背景音乐的随机选择循环播放的功能。

(2)再在交互“midiloop”的右边继续添加两个按钮响应交互“next”和“quit”,返回类型设置为“return”。其中“next”交互的作用是手动选择播放下一首midi,其实只要在它的计算图标里写上“midistop()”即可实现,为什么?自己想一想。“quit”按钮交互实现退出程序执行。

(3)在交互“midiloop”流程的后面添加一计算图标“playmidi”,输入代码:

midiplay(filelocation^"midi//"^currentfile,100,0)

不知道大家注意到程序的流程了没有,其实这才是系统最先播放执行的mid

[1] [2] 下一页  

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表