易码技术论坛

 找回密码
 加入易码
搜索
查看: 112817|回复: 9

[分享+讨论]wqx mid文件结构+奏曲时间

[复制链接]
发表于 2005-10-16 20:58:00 | 显示全部楼层
好啊!好啊!!!难得能看到这么精细的midi研究啊,强烈支持!我也回去在星星上继续研究。

想问楼主是否知道System.SndPlay()函数的使用方法,研究这个函数我的TC800已经Reset了N(>100)次了,是不是跟这个midi的播放有关啊?
 楼主| 发表于 2005-10-16 22:50:00 | 显示全部楼层
我的机子是NC3000,已经可以播放mid了,没有想过要研究System.SndPlay()

发此贴的目的在于讨论音乐中断的问题。
也期待上楼的同志能够研究成功。

因为写得比较匆忙,如果前文中有什么错误的地方,请指点指点,一定改正。



发表于 2005-10-17 02:09:00 | 显示全部楼层
以下是引用Cloty在2005-10-16 17:10:00的发言

还要跟音乐精灵的作者说一声:希望能把没有用的在文件末端的垃圾信息删掉!!!


呵呵,我本来也没有想要加那些的,但是字节数过小会导致任意键停止,而且一个文件就算再小也要占用16k,不用白不用,而且我觉得文件大小是个整数看着舒服些,所以我将不足1k的都补为1k了,也就是说编出来的文件都是1k的整数倍。

也谢谢楼主提的意见,以及他做出的辛苦的劳动^_^
发表于 2005-10-17 22:01:00 | 显示全部楼层
那不是垃圾讯息啊~不加长播不完的

这周要备考 估计下个星期才能做完 5555
 楼主| 发表于 2005-10-17 22:34:00 | 显示全部楼层
不加长播不完的,是什么意思??

用pacmgr改一改精忠报国(压缩包里有)的第一字节改为2,也是没奏完就断掉了..


我现在关心的就是这个问题!!!


 楼主| 发表于 2005-10-17 22:43:00 | 显示全部楼层
以下是引用zxrobin在2005-10-17 2:09:00的发言:<br>


但是字节数过小会导致任意键停止


可是加了之后,连|跳出|键也失灵了,要听一段或听完才能跳出。编辑曲谱的人在试听时不大方便。。。。


发表于 2005-10-22 20:24:00 | 显示全部楼层
你可以用闹铃设定来试听么 ^_^
发表于 2005-11-6 13:54:00 | 显示全部楼层
这么好的东西,怎么没下文了???

5714_19849_2303.rar

20 KB, 下载次数: 346

 楼主| 发表于 2005-11-6 21:49:00 | 显示全部楼层
你说的是我那个吗?

唉~~~本来热情是很高的!

但是后来发现有中断的问题, 就不想做了!!

可以用

http://www2.emsky.net/bbs/dispbbs.asp?boardID=20&ID=9576&page=3


音乐精灵

如果你行的话,可以自己做一个啊!!
 楼主| 发表于 2005-10-16 17:10:10 | 显示全部楼层 |阅读模式
[分享+讨论]wqx mid文件结构+奏曲时间

先来介绍一下文件结构
说明一下:这份文件结构并非我研究出来的,我只是把原文的语言简洁化,同时也修正了一个错误的地方。


[定义]

第一字节
??(1-1F)     整曲播放速度(越大速度越快)


/////////////

30 ??(01-1F)      ??为  鼓器音轨8的音量
28 ??(00-13)      ??为 鼓器音轨8的音色

31 ??(01-1F)      ??为 鼓器音轨9的音量
29 ??(00-13)      ??为 鼓器音轨9的音色

32 ??(01-1F)      ??为 乐器音轨A的音量
2A ??(00-22)      ??为 乐器音轨A的音色

33 ??(01-1F)      ??为 乐器音轨B的音量
2B ??(00-22)      ??为 乐器音轨B的音色

34 ??(01-1F)      ??为 乐器音轨C的音量
2C ??(00-22)      ??为 乐器音轨C的音色

35 ??(01-1F)      ??为 乐器音轨D的音量
2D ??(00-22)      ??为 乐器音轨D的音色



20 ??(00-04)      ??为 鼓器音轨8的音高
21 ??(00-04)      ??为 鼓器音轨9的音高
22 ??(00-04)      ??为 乐器音轨A的音高
23 ??(00-04)      ??为 乐器音轨B的音高
24 ??(00-04)      ??为 乐器音轨C的音高
25 ??(00-04)      ??为 乐器音轨D的音高


*音高值为4时升二音
               3时升一音
               2时为平音
               1时降一音
               0时降二音


[演奏](鼓音+乐器音+音长)

81 91 A? B? C? D? ??

81 为击打一下 鼓器音轨8 的鼓器
91 为击打一下 鼓器音轨9 的鼓器
A?(0-C)   为设定 乐器音轨A 的音阶为?
B?(0-C)   为设定 乐器音轨B 的音阶为?
C?(0-C)   为设定 乐器音轨C 的音阶为?
D?(0-C)   为设定 乐器音轨D 的音阶为?
?? 为延续音长度(范围不清,一般为2的n次方1,2,4,8)

对应的音阶




最后一字节

3F 结束音乐


\\\\\

以一段例子说明
08 30 0A 28 04 31 0D 29 07 32 05 2A 15 33 07 2B 02 22 02 23 02
01 02 03 04 05 06 07 08 09 10 11 12 13  14 15 16 17 18 19 20 21


81 A1 B3 08 A5 10 22 03 A3 08 33 02 B1 08 A0 04 - - - -3F
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37  38    39


(数字对应画线部分)
01   设定整曲播放速度为08
0203 设定鼓器音轨8的音量为0A
0405 设定鼓器音轨8的音色为04
0607 设定鼓器音轨9的音量为0D
0809 设定鼓器音轨9的音色为07
1011 设定乐器音轨A的音量为05
1213 设定乐器音轨A的音色为15
1415 设定乐器音轨B的音量为07
1617 设定乐器音轨B的音色为02
1819 设定乐器音轨A的音高为平音
2021 设定乐器音轨B的音高为平音
22   击打一下 鼓器音轨8 的鼓器
2324 乐器音轨A奏出平音的do乐器音轨2奏出平音的re
25   前面的两个奏音延续08个音长
26   乐器音轨A奏出平音的mi
27   奏音延续10(16进制)个音长
2829 设定乐器音轨A的音高为高一音
3031 乐器音轨A奏出高一音的re(2上加一点),奏音延续08个音长
3233 设定乐器音轨B的音量为02
3435 乐器音轨B奏do,奏音延续08个音长
3637 乐器音轨A停止发音,延续04个音长(如果不停音或换音,将会继续奏下去)
[用在可延续音的乐器(像笛子之类的,吹着气就不断音,为可延续音的乐器;
像钢琴之类按住一个键,音只能维持一阵,为不可延续音的乐器)这里的1213中设定的15号为可延续音的乐器]
38   各式各样的音律交织在一起,形成动听的乐曲。。。。(^-^)
39   结束音乐

(说明:并没有完全破解,有少许的几处地方可能不能用这种结构解释)
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||




[glow=255,red,2]下面部分才是本贴的重点!!!!!!!![/glow]

以这份文件结构是可以奏出音了,但是演奏时会突然中断。。。。

[讨论]如何才能长时间奏乐!!!

我正在做一个曲谱编辑软件(lava)(70%的完成度,不公开),拿了《暗香》做测试,结果发现了这个问题。。。





现在Emax有几款乐谱编辑软件

http://www2.emsky.net/bbs/dispbbs.asp?boardID=20&ID=9576&page=3


音乐精灵


http://www2.emsky.net/bbs/dispbbs.asp?BoardID=20&ID=8235&replyID=&skin=1


http://www2.emsky.net/bbs/dispbbs.asp?BoardID=20&ID=5641&replyID=&skin=1


还有曲


http://www2.emsky.net/bbs/dispbbs.asp?BoardID=20&ID=11143&replyID=&skin=1


精忠报国


大家可以用音乐精灵做一下测试
主音音色用22
速度用2
其他随便
然后编辑的时候就打在主音打123456712345671234567(三遍21个音符)
跳出转化到21



到|和弦音乐|打开,发现奏到第三遍的re就断掉了!!!!(压缩包里有)

我做的那个软件转换得曲子到第四遍的xi就断了(压缩包里有)!!
还有那首 暗香 奏到一半就断了(压缩包里有)

同样的如果用pacmgr改一改精忠报国(压缩包里有)的第一字节改为2,也是没奏完就断掉了..


发现了一个规律就是 如果第一字节(速度) 设得越大能播放的音符就越多,但总有会断的时候!!!(可怜了 暗香 慢歌)


可是官方的曲子是例外...有一首歌(歌曲44)我把它的第一字节改为2后奇迹般的无中断的播放了3min(压缩包里有)


压缩包里还有其他的50首mid


我对此研究了很久很久....没有结果!!!(始终没办法让他不断)



不知有谁能解这个迷????????????????????????


顺便说一声,我想到分辩音色的办法了....

如果没有解决上面那个问题,我的软件也不想开发下去了....


还要跟音乐精灵的作者说一声:希望能把没有用的在文件末端的垃圾信息删掉!!!


跟murmur说:但愿你的七里香能顺利放完...












[此贴子已经被作者于2005-10-17 22:54:47编辑过]

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-6-16 19:15 , Processed in 0.014744 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表