Lawliet
很zuo的男人
级别: 火花会员
编号: 93177
精华: 7
发帖: 1091
威望: 35 点
配偶: 单身
火 花 币: 21955 HHB
注册时间:2008-08-30
最后登陆:2012-09-29
|
GBA音乐数据详解
尽管我知道这个帖子没什么太大实际意义,因为能掌握的人不会很多。。。
首先工具: >16进制编辑器 >音乐导入软件Sappy http://soft.sotee.com/2009-02-13/6209.html
Sappy最大的用处并不是导入,而是地址查询。
讲座开始
首先,你要知道音乐数据有哪些部分组成。下载sappy,我以烈火为例进行讲解,运行软件,读取烈火的ROM。你会看到table, header,voices,还有下面的一串类似音轨的东西。
table就是指针表的位置 6ea8d0开始是烈火的指针表,我不知道每段音乐具体是什么,因为我没空去一个一个整理。现在请用16进制编辑器打开ROM,找到地址6ea8d8,你会看到一个指针和一串数字。
先解释下后面的那串数字,那是优先权,控制音乐的切出和切入,还有优先级别。优先代码有两个,分别代表in和out,两个代码永远是一样的。一般BGM的优先级为01,一些音效的优先级为06或是07.注意,当优先级为00时,为最高,会屏蔽其他所有的音效。圣魔隐藏动画没有音效就是因为优先级达到了00,改为06即可正常播放BGM。
再说指针指针的指向就是sappy标注的header,比如第一段音乐的指针指向为AF0A88。这个地址开始有一个次级指针表。用16进制编辑器定位到该地址。第一位的数字是音轨数量,有多少个音轨,这个数字就是多少,火纹中从01到07不等。之后3个字节不明,再之后你就会看到一组指针,第一个指针指向sappy里voices的地址。剩下的就是音轨指针。看sappy,你会发现音轨指针就是sappy中央的那一串地址。
顺藤摸瓜,从这些指针入手。先从voice开始,定位到6c4840,你会看到很长的一段数据。不用数,总共1536字节,12字节一分组,总共128组。每个voice都那么长。解释下,每组里的第一个字节是声音类型,第二字节貌似是决定是管乐发生还是打击发生。80是打击,3C是管乐。第一组里会有一个指针,之后的127个组都没有。这个指针是乐器模拟指针,就是模拟什么乐器发声。火纹游戏中有近30种模拟乐器的发音效果。
基础讲解完了,现在回到AF0A88。音乐主体在哪里呢?就是音乐的音轨。找到刚才那串音轨指针后面的部分。BC00,这是第二段音乐的起始,也是第二段音乐的音轨起始。晕了没?
好了,总结一下。 总指针表--->主体音乐的尾部--->次级指针表--->1536字节的模拟发声--->模拟乐器声效 总指针表--->主体音乐的尾部--->次级指针表--->音轨(若干个)--->主体音乐的头部
如果你要导出导入,就要把以上涉及的所有部分全部导出导入,并且重新定义指针表。
首先,你要一首音乐的每一个音轨导出,voice导出,模拟乐器发生数据导出。然后导入,按照原格式重新做指针,voice里的模拟乐器发生指针,次级指针表的音轨指针和voice指针,以及最后的的总指针表内的指针。
[ 此贴被Lawliet在2009-02-28 16:40重新编辑 ]
|
|
[楼 主]
|
Posted:2009-02-28 13:22| |
顶端
| |