[DirectorFAQ]
如何保持背景音乐连续 [2004-11-26]mazhiguo 发表在
DirectorFAQ--------------------------------------------------------------------------------
要保持背景音乐连续,那我们就得频繁检测播放背景音乐的声音通道是否空闲,如果空闲就用sound(1).play(member (soundmember))来播放背景音乐。
这时我们就会想到Director中的on idle句柄,只要我们在每个影片的影片剧本中放置一个on idle句柄用来检测播放背景音乐,这样就可以实现背景音乐的连续了。
但是,也正是因为在on idle句柄中的语句会被频繁地运行,如果在on idle句柄中放置的处理语句比较多,会比较耗费系统资源。
如果要回避这个问题,我们换一种思路来考虑,背景音乐为什么会中断不连续呢?就是因为在每个影片中都有播放背景音乐的处理程序,在影片跳转的时候,播放背景音乐的行为都会重新执行,如果我们用一个单独的MIAW影片来播放背景音乐,就可以做到不管你的影片怎么跳转,背景音乐都可以不受干扰的播放,除非你关闭了播放背景音乐的MIAW 。
综上所述,我们至少有两种方法来解决这个问题:
解决方法一、使用on idle句柄。
然后新建一个影片剧本(script的type属性为movie),输入以下代码:
on idle
if not soundbusy(1) then
--检测声音通道1,如果空闲执行以下语句
set i=random(8)-1
--给i随机赋值0~7
RandomMusic="music" & string(i)
puppetSound 1,RandomMusic
--随机播放背景音乐music0~music7
end if
end
这样就可以实现背景音乐的连续播放了,而且是在music0~music7之间随机播放。
解决方法二、使用MIAW。
首先新建一个影片,命名为soundplay.dir,导入背景音乐文件,然后将演员名命名为music0~music7,然后在剪辑室(score)双击帧脚本通道,输入以下代码:
on exitFrame me
if not(soundBusy(1)) then
soundmember = "music"& random(8)-1
--随机播放背景音乐
sound(1).play(member (soundmember))
end if
go the frame
end
此处与方法一相比,行为主体没有变化,只是其句柄不一样,此处是放在On exitFrame中。
然后新建一个影片,命名为main.dir,并新建一个影片剧本,输入以下代码:
global miaw
on preparemovie
miaw = window("soundplay"
--新建一个window,标题名为soundplay,保存在全局变量miaw中
miaw.filename = "soundplay"
--子窗口的文件名为soundplay.dir
miaw.visible = false
--设置子窗口为不可见
end preparemovie
只要不forget window,背景音乐一直存在并且连续,但是要记住,在关闭背景音乐或者退出影片之前,要用miaw.forget()命令来关闭子窗口。