多媒体编程高手请看!!!求助???(100分)

  • 主题发起人 主题发起人 delphi_help
  • 开始时间 开始时间
D

delphi_help

Unregistered / Unconfirmed
GUEST, unregistred user!
本人正在编写多媒体播放程序,现在碰到麻烦:
在音乐文件(MIDI)播放时, 怎么让它出现跳动的波条,象DVD机放音乐时出现的
那种效果???[:(!]
 
MIDI也有波形吗 关注
 
用第三方控件吧,我前一陈子有看过一个,不过现在忘了
 
如果直接通过硬件MIDI播放是不可能获取波形的,只有用软波表才有可能。
 
孰我愚昧,请问什么叫‘软波’?(to LuJuhe)
如果不用TMediaPlayer控件,如何实现MIDI的播放?
 
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指令时使显示的幅度归零。
 
To MilkRoad:
MIDI 的结构我有了解一些,可是我不知怎么让它们达到同步,既音符播放是同时用进
度条的形式显示出来?请您帮忙想想办法!!!我已经研究了快一个月了,一点进展都没有,

 
每一个midi命令都有一个触发时间,只要到时间到就发送该命令,不过这个时间要根据节拍,文件类型等算出来
有点麻烦,我不知道你说的同步是指什么。
我很久前写了一个获取midi文件信息的程序,
但他在计算某些格式的midi文件的时间还会计算错误,到现在还没有搞定,所以如果你有兴趣的
话,一起研究一下吧。
 
我原来写的程序是这样的:
运用流将MIDI文件解码,取出MIDI的参数,如轨道数、通道数等,如果要播放MIDI文件,
直接用DELPHI的TMediaPlayer控件将解码后的串(我是将MIDI文件读出并转换成十六进制串)
重新编码成MIDI文件来播放,倘若要关掉某个通道,我就将该通道的音符开关NOTE OFF掉(就是
将原来的‘9x’转换成‘8x’);这样的话当MIDI播放是没办法与进度条对应起来?
 
to MilkRoad:
要出现波形是很难,不过你的出现“波条”倒也是个好思路,有跳动感就行了,呵呵。

to Delphi_help:
软波表,就是用软件接收Midi命令,然后用自带的波形数据合成后送入播放设备,这样
就跳过了声卡本身的Midi合成设备,就可以从波形播放设备中获取波形数据并分析了。
 
To LuJuhe
想要出波形前提是你一定要使用软波表,如果用的是声卡的midi设备播放就不可以了。
 
微机是如何播放某个音符的(MIDI)?
我看了MIDI音乐的API函数,都是英文,看的很吃力(英文差),所以看不出什么东东来。。
 
如果你想编写自己的midi播放器那些是必须看的,还有必须看GM1,GM2,GS,XG等四种midi
文件格式,你安装了Roland的软波表后,他的帮助里有很详细的GS文件格式的说明,这种
格式基本上是最复杂的,看完这种其他的就不成问题。
 
如果是单个音符,机器是怎么播放的呢?(可否用API函数进行简单的解释、流程)
谢谢!!!!
 
到这里下载
http://www.playicq.com/
多媒体 --> 播放和跟踪 MIDI 的控件
 
接受答案!!
 
后退
顶部