fe制造吧 关注:2,846贴子:14,352
  • 9回复贴,共1

GBA音乐制作(包括火纹,大部分ROM)

只看楼主收藏回复

1L献给fe制作吧


IP属地:广西1楼2014-12-18 12:14回复
    首要工具,需要任天堂的官方开发包
    AGB3.0
    http://pan.baidu.com/s/1hqpF6wW
    火纹用的类似开发包内的MusicPlayerAGB2000(或者说是大部分GBA),有没有扩展就不知道了
    这楼我们讲音乐程序主要调用,想改写播放程序的看这部分
    1,初始化
    m4aSoundInit(void)
    +---------------SoundDriverInit(SoundArea*);
    +---------------SoundDriverMode(u32)
    2,在中断执行下列程序
    m4aSoundMain(void)
    +---------------SoundMain() = SoundDriverMain();
    m4aSoundVSync(void) = SoundVSync_rev01() = SoundDriverVsync();
    3.切换音乐
    m4aSongNumStart(u16) 最大值是999
    或者
    m4aSongNumStartOrChange(u16)
    SoundArea参加AGB\doc\AllManual\header\AgbSound_h
    SoundArea指针地址 在游戏时地址:0x3007ff0
    //Sound Work Area Structure
    typedef struct {
    u32 r1; // 保留
    vu8 DmaCount; //dma个数,dma数据传输
    u8 reverb; //混响值
    u8 maxchn; //最大声道
    u8 masvol; //主音量
    u8 freq; //Direct Sound Replay Frequency Number(1=5734Hz ~ 12=42048Hz),直接声道频率
    u8 mode; //Sound Driver Operation Mode,对应初始化的模式
    u8 r2[6]; // 保留
    u32 r3[16]; // 保留
    SoundChannel vchn[12];//声道结构体,重点所有改写程序的重点,最大声道数12
    s8 pcmbuf[PCM_DMA_BUF*2]; //播放波形声音的缓存,8bit的wav,不过每个bye-0x80
    } SoundArea;

    03005400-03005404,保留,游戏内部使用,68736d53表示没有正在处理,68736d54表示正在处理
    03005405 ...
    03005406 混响值
    03005407 最大声道数
    03005408 主音量,直接更改可以改变音量
    03005409 声音频率模式,5734Hz-42048Hz
    0300540a 初始化时的模式
    0300540b-0300544f 系统保留
    03005450 声道1
    03005490 声道2
    030054D0 声道3
    ..... 每个声道0x40
    结构体说明参考
    http://pan.baidu.com/s/1kTDpZxl,
    不懂的更贴


    IP属地:广西2楼2014-12-18 12:50
    回复
      2025-07-31 00:32:56
      广告
      不感兴趣
      开通SVIP免广告
      我以为说弃坑了....................


      IP属地:美国3楼2014-12-18 13:05
      收起回复
        第二部分,此楼献给不会该程序,会编曲的伙伴
        音乐数据格式
        1.例子,圣魔的所有音乐指针在08214120

        2.跳转至08535f38,(注:08216060不用管,它指向空的声音)
        如图,

        08,第一个字节,表示声道数
        00,第二个字节,块编号,一直为0?
        0A,第三个字节,优先权,
        94,第四个字节,混响程度
        20 71 1F 08, 5-8字节,指针081F7120,指向音色表的指针
        接下来的每4个字节一个声道的数据指针,对应第一个字节有多少个声道,就有多少个指针
        声道的数据指针:
        类似mid格式的音乐控制,所以,mid格式很容易导入
        (使用简单的MML,音乐标记语言)
        例子可以参考(AGB\MusicPlayerAGB2000\mp2000\wario.s)
        说明文档(AGB\MusicPlayerAGB2000\mp2000\MusicPlayDef.s)
        声道数据指针
        第一个字节一般为,
        BC xx 也就是key shift,后面还要跟一个字节,也就是 BC xx,表示变化
        80~B0 等待时间,不跟参数,Wait00~Wait96
        00~7f,xx 按下键,Cm2-Bm2,C-0~G-8,如果xx小于80,表示音量v000~v127
        B1 fine,这个不会翻译,无参数
        B2 xxxxxxxx goto 后面跟4个字节的参数,把数据跳转至地址
        B3 xxxxxxxx pattern play,格子播放,mid有,参数4个字节的指针
        B4 pattern end 格子结束
        B5 repeat 重复
        ..........,一般都在MusicPlayDes.s找到说明


        IP属地:广西4楼2014-12-18 13:15
        回复
          第三部分,献给那些用工具的,不会编曲,也不会该程序的
          这部分没什么好讲的,首先要有mid文件,
          网上找到Midi2GBA,然后直接转换,后面的我不知道了,我没用过那工具


          IP属地:广西5楼2014-12-18 13:23
          回复
            我想提取恶魔城白夜的bgm————不要让自己有借口


            IP属地:广西来自Android客户端6楼2014-12-23 21:38
            回复
              谢谢分享,给你点32个赞哟!


              IP属地:福建来自手机贴吧7楼2015-01-29 16:35
              回复