D delphi_help Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-25 #1 本人正在编写多媒体播放程序,现在碰到麻烦: 在音乐文件(MIDI)播放时, 怎么让它出现跳动的波条,象DVD机放音乐时出现的 那种效果???[!]
L LuJuhe Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-25 #4 如果直接通过硬件MIDI播放是不可能获取波形的,只有用软波表才有可能。
D delphi_help Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-25 #5 孰我愚昧,请问什么叫‘软波’?(to LuJuhe) 如果不用TMediaPlayer控件,如何实现MIDI的播放?
M MilkRoad Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-25 #6 midi是没有wave的那种波形,不过midi也可以做到象wave波形的效果。 midi一共有16个通道, 所以波形的显示只能有16段,原理是当一个通道收到note on命令时,显示的幅度根据note on指令的数据, note on指令的格式如下 1st byte 2nd byte 3rd byte 9nH kkH vvH n : 通道号码。 kk: 音符。 vv: 速率。 段显示的幅度就是根据vv的数值,范围是0到127 当受到note off指令时使显示的幅度归零。
midi是没有wave的那种波形,不过midi也可以做到象wave波形的效果。 midi一共有16个通道, 所以波形的显示只能有16段,原理是当一个通道收到note on命令时,显示的幅度根据note on指令的数据, note on指令的格式如下 1st byte 2nd byte 3rd byte 9nH kkH vvH n : 通道号码。 kk: 音符。 vv: 速率。 段显示的幅度就是根据vv的数值,范围是0到127 当受到note off指令时使显示的幅度归零。
D delphi_help Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-25 #7 To MilkRoad: MIDI 的结构我有了解一些,可是我不知怎么让它们达到同步,既音符播放是同时用进 度条的形式显示出来?请您帮忙想想办法!!!我已经研究了快一个月了,一点进展都没有,
M MilkRoad Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-25 #8 每一个midi命令都有一个触发时间,只要到时间到就发送该命令,不过这个时间要根据节拍,文件类型等算出来 有点麻烦,我不知道你说的同步是指什么。 我很久前写了一个获取midi文件信息的程序, 但他在计算某些格式的midi文件的时间还会计算错误,到现在还没有搞定,所以如果你有兴趣的 话,一起研究一下吧。
每一个midi命令都有一个触发时间,只要到时间到就发送该命令,不过这个时间要根据节拍,文件类型等算出来 有点麻烦,我不知道你说的同步是指什么。 我很久前写了一个获取midi文件信息的程序, 但他在计算某些格式的midi文件的时间还会计算错误,到现在还没有搞定,所以如果你有兴趣的 话,一起研究一下吧。
D delphi_help Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-25 #9 我原来写的程序是这样的: 运用流将MIDI文件解码,取出MIDI的参数,如轨道数、通道数等,如果要播放MIDI文件, 直接用DELPHI的TMediaPlayer控件将解码后的串(我是将MIDI文件读出并转换成十六进制串) 重新编码成MIDI文件来播放,倘若要关掉某个通道,我就将该通道的音符开关NOTE OFF掉(就是 将原来的‘9x’转换成‘8x’);这样的话当MIDI播放是没办法与进度条对应起来?
我原来写的程序是这样的: 运用流将MIDI文件解码,取出MIDI的参数,如轨道数、通道数等,如果要播放MIDI文件, 直接用DELPHI的TMediaPlayer控件将解码后的串(我是将MIDI文件读出并转换成十六进制串) 重新编码成MIDI文件来播放,倘若要关掉某个通道,我就将该通道的音符开关NOTE OFF掉(就是 将原来的‘9x’转换成‘8x’);这样的话当MIDI播放是没办法与进度条对应起来?
L LuJuhe Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-25 #10 to MilkRoad: 要出现波形是很难,不过你的出现“波条”倒也是个好思路,有跳动感就行了,呵呵。 to Delphi_help: 软波表,就是用软件接收Midi命令,然后用自带的波形数据合成后送入播放设备,这样 就跳过了声卡本身的Midi合成设备,就可以从波形播放设备中获取波形数据并分析了。
to MilkRoad: 要出现波形是很难,不过你的出现“波条”倒也是个好思路,有跳动感就行了,呵呵。 to Delphi_help: 软波表,就是用软件接收Midi命令,然后用自带的波形数据合成后送入播放设备,这样 就跳过了声卡本身的Midi合成设备,就可以从波形播放设备中获取波形数据并分析了。
M MilkRoad Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-25 #11 To LuJuhe 想要出波形前提是你一定要使用软波表,如果用的是声卡的midi设备播放就不可以了。
D delphi_help Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-26 #12 微机是如何播放某个音符的(MIDI)? 我看了MIDI音乐的API函数,都是英文,看的很吃力(英文差),所以看不出什么东东来。。
M MilkRoad Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-26 #13 如果你想编写自己的midi播放器那些是必须看的,还有必须看GM1,GM2,GS,XG等四种midi 文件格式,你安装了Roland的软波表后,他的帮助里有很详细的GS文件格式的说明,这种 格式基本上是最复杂的,看完这种其他的就不成问题。
如果你想编写自己的midi播放器那些是必须看的,还有必须看GM1,GM2,GS,XG等四种midi 文件格式,你安装了Roland的软波表后,他的帮助里有很详细的GS文件格式的说明,这种 格式基本上是最复杂的,看完这种其他的就不成问题。
D delphi_help Unregistered / Unconfirmed GUEST, unregistred user! 2002-04-29 #14 如果是单个音符,机器是怎么播放的呢?(可否用API函数进行简单的解释、流程) 谢谢!!!!
M MilkRoad Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-08 #15 到这里下载 http://www.playicq.com/ 多媒体 --> 播放和跟踪 MIDI 的控件