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)
不知道大家注意到程序的流程了没有,其实这才是系统最先播放执行的MIDI文件的程序处,程序开始播放MIDI音乐文件是从这里开始的,为什么?请参考“12.2.1 Try Again交互返回类型”章节的内容。
4、存盘完成,可以执行测试一下效果拉。
专题总结
以上的两个范例你都可以作为模块套用在你的多媒体系统中,实现MIDI背景音乐的应用。这里值得一提的是MidiLoop.U32函数其实也是同时支持MP3格式的声音文件,使用方法和范例一相同,对于钟爱MP3的开发者不妨一试。
评论 {{userinfo.comments}}
{{child.content}}
{{question.question}}
提交