fasttracker吧 关注:7贴子:19
  • 8回复贴,共1

XM文件版本$0104的XM模块格式说明!

取消只看楼主收藏回复

来源于1994年Triton的H先生。
-准备好了!你确定你想知道吗?:-)
<<引导者1995年撒哈拉冲浪者的阿尔弗雷德。所有附加内容都包含在
双尖括号<<like this>>和外部所有内容它们完好无损。
请注意原文。特里顿:也许你想把这个包括在下一个FT2版本?:-)
不受版权保护,发布到公共领域(至少由我们添加)。想做什么就做什么。请给于信用。
记住-添加的信息基于真实的XM文件。>>


IP属地:广东1楼2020-09-07 18:27回复
    模式组:
    ---------
    ? 4 (dword) 模式 标题大小
    +4 1 (byte) 包装类型(始终为0)
    +5 2 (word) 模式中的行数(1..256)
    +7 2 (word) 填充模式数据大小
    <<注意!如果模式是完全为空且没有模式数据跟随!>>
    ? ? Packed pattern data


    IP属地:广东3楼2020-09-07 18:28
    回复
      如果样本数>0,则将遵循:
      ! +29 4 (dword) 样本头 size
      ! +33 96 (byte) 所有记录的样本号
      ! +129 48 (byte) 音量包络的点组
      ! +177 48 (byte) 节拍包络的点组
      ! +225 1 (byte) 音量点数
      ! +226 1 (byte) 节拍点数
      ! +227 1 (byte) 音量持续点
      ! +228 1 (byte) 音量循环起点
      ! +229 1 (byte) 音量循环终点
      ! +230 1 (byte) 跟拍持续点
      ! +231 1 (byte) 跟拍循环起点
      ! +232 1 (byte) 跟拍循环终点
      ! +233 1 (byte) 音量类型: bit 0: On(开); 1: 持续; 2: 循环
      ! +234 1 (byte) 跟拍类型: bit 0: On; 1: 持续; 2: 循环
      ! +235 1 (byte) 颤音类型
      ! +236 1 (byte) 颤音清除
      ! +237 1 (byte) 下颤音
      ! +238 1 (byte) 颤音速度
      ! +239 2 (word) 颤音淡出
      ! +241 2 (word) 保持


      IP属地:广东5楼2020-09-07 18:30
      回复
        ***********************
        * 模式格式: *
        ***********************
        模式存储为普通的MOD模式,除了注释存储为5个字节:
        ? 1 (byte) Note (0-71, 0 = C-0)
        <<哈哈。实际上音符的数字是1-96,97是关键问题(试着找出在文档中!)>>
        +1 1 (byte) 仪器(0-128)
        <<更像1-128>>
        +2 1 (byte) 音量列字节(见下文)
        +3 1 (byte) 引用类型
        +4 1 (byte) 引用参数
        还采用了简单的包装方案,这样模式就不会变成
        太大:因为注释值中的MSB从未使用,如果用于
        压缩。如果设置了bit,则解释其他bit具体如下:


        IP属地:广东7楼2020-09-07 18:31
        回复
          bit 0 set: 记录跟随
          1 set: 仪器跟随
          2 set: 音量列跟随
          3 set: 引用实现
          4 set: 猜猜看
          它很简单,但远不是最优的。如果你想要更好的,
          您总是可以在加载程序中重新打包模式。


          IP属地:广东8楼2020-09-07 18:32
          回复
            ******************************
            * 音量和封装: *
            ******************************
            音量公式:
            FinalVol=(FadeOutVol/65536)*(EnvelopeVol/64)*(GlobalVol/64)*(Vol/64)*Scale;
            <<淡出度最初为65535,并由仪表淡出释放便条后的每个勾号>>
            跟拍公式:
            FinalPan=Pan+(EnvelopePan-32)*(128-Abs(Pan-128))/32;
            <<请注意,跟拍封装值的范围是0-64,而不是-128-+127>>
            封装:
            ---------
            跟拍每帧处理一次,而不是每帧不读新笔记。对于乐器颤音和淡出。
            因为我太懒了,而且跟踪器会自我解释,所以我暂时不打算再写了。


            IP属地:广东9楼2020-09-07 18:32
            回复
              <<有人知道instrument autovibrato是如何工作的吗?>>


              IP属地:广东10楼2020-09-07 18:34
              回复
                ********************************
                * 周期和频率: *
                ********************************
                PatternNote = 0..95 (0 = C-0, 95 = B-7)
                << Blah: Note = 1..96, 1 = C-0, 97 = key off >>
                FineTune = -128..+127 (-128 = -1 halftone, +127 = +127/128 halftones)
                RelativeTone = -96..95 (0 => C-4 = C-4)
                RealNote = PatternNote + RelativeTone; (0..118, 0 = C-0, 118 = A#9)
                线性频率表:
                Period = 10*12*16*4 - Note*16*4 - FineTune/2;
                Frequency = 8363*2^((6*12*16*4 - Period) / (12*16*4));
                Amiga频率表:
                Period = (PeriodTab[(Note MOD 12)*8 + FineTune/16]*(1-Frac(FineTune/16)) +
                PeriodTab[(Note MOD 12)*8 + FineTune/16]*(Frac(FineTune/16)))
                *16/2^(Note DIV 12);
                (The period is interpolated for finer finetune values)
                Frequency = 8363*1712/Period;
                <<由于以下原因,上面的插值代码不起作用几个原因:
                1.它不插值(尝试将1添加到第二行的PeriodTab索引)
                2.它可能会从表开始变成负数微调值 写你自己的插值程序-没那么难。>>
                PeriodTab = Array[0..12*8-1] of Word = (
                907,900,894,887,881,875,868,862,856,850,844,838,832,826,820,814,
                808,802,796,791,785,779,774,768,762,757,752,746,741,736,730,725,
                720,715,709,704,699,694,689,684,678,675,670,665,660,655,651,646,
                640,636,632,628,623,619,614,610,604,601,597,592,588,584,580,575,
                570,567,563,559,555,551,547,543,538,535,532,528,524,520,516,513,
                508,505,502,498,494,491,487,484,480,477,474,470,467,463,460,457);


                IP属地:广东11楼2020-09-07 18:35
                回复
                  <<注意!周期表是为基于1的便笺编号创建的,因此练习它包含B-3到G#4的周期值。很有趣。>>


                  IP属地:广东12楼2020-09-07 18:36
                  回复