大富翁吧 关注:28,941贴子:193,016
  • 16回复贴,共1

大富翁3及以下RIX音乐100%完美转出 .mid 的研究。

只看楼主收藏回复

https://www.bilibili.com/video/bv1VF411Y7WQ
此为快速烤出的视频!
仙剑1的音乐用了opl2 的特殊的打击乐模式,OpenMPT 不支持,就找了轩辕剑的代替测试了理论,成功!
众所周知,仙剑95版中有些音乐并没有midi版,所以98版中就少了那些音乐(好像是045?),现将rix格式打回原形(即.rol 和 .ins 文件)即可实现100%重置!!
不用看发帖时间! 现在是 12 20 年!(小尾数储存)
下面为图片

左边是轩辕剑的pattern(即.rol 的等效替代) 右边是4号乐器的参数,sbi 文件和.ins 文件等效。

这个是使用与仙剑95相同特殊打击乐模式的 大富翁2 的rix 转出的pattern,因为OpenMPT不支持,我现在还在抓脑袋,你可以明显看出并不是YM3812的常规9通道,而是12个通道。


IP属地:贵州1楼2021-11-08 17:02回复
    IP属地:贵州2楼2021-11-08 17:27
    回复


      IP属地:贵州4楼2021-11-08 19:54
      回复
        唉……


        IP属地:贵州5楼2021-11-08 19:55
        回复
          先来理一理一些基本事实吧。
          Rix 格式的音乐从百度百科上看来是使用小尾数法储存的388h 指令,这点可以从http://www.doczj.com/doc/3c9e9f18a8114431b90dd891-2.html 得到印证。 我查了许多资料,其中有一篇文章提到“只需将rix文件写入388h即可发声”,但现在找不到来源,姑且认为这就是软星播放的方式。
          388h 是IBM 兼容机上的一个常用声卡Adilib card的默认端口,这个声卡使用的是YM3812,当时雅马哈较低端的2op FM 合成器,大部分软件习惯只交代388h,实际上389h也是需要以达成控制YM3812。此后来者 创新 通过直接克隆电路的方式兼容了adilib card,并且加入了数字音频播放、手柄接口等功能来快速取代了adilib card 使得声霸卡及其标准迅速统治了IBM 兼容机的声卡市场,这就是为什么会在YM3812 上 同时出现 .rol + .ins 和 .mid + .sbi 格式的原因,是两个统治者的遗产。
          因为早期计算机资源十分有限,不可能像街机那样直接将YM3812 链接在
          ISA 总线上,那样既不可靠(ISA总线速度太快,噪音大),又占用大量io线,且无法满足ISA 地址解码等必须控制,所以adilib 在YM3812 和ISA 总线间加入地址解码电路,使得adilib card 只监听ISA 端口 388 ,当程序向388h 写入一个由adilib硬件决定的指令集时,那些74原件就会解码并转发数据到YM3812 的寄存器。
          (歪路1:这个指令集也并不是x86 系的机器码,我用IDA 看过了……)
          因此,必须理解一个重要的点,RIX文件纪录的通过388h 操作 YM3812 寄存器的指令。现流行的解析OPL音乐的方式,大多是直接看YM3812的寄存器,因为你可以直接到yamaha去下载他们的寄存器参数,为此,必须要先对RIX文件进行第一步转化,也就是要将其从寄存器操作,变成寄存器数据。
          晕了吗?我反正晕了!
          那要怎么完成这个任务呢? 如果是在80-90 年代的话,我会找个逻辑分析仪连接在 74HC 系列原件和YM3812 间看总线和地址线的变化,90年代的话OPL3(ym262)可以直接实时读取寄存器参数,那现在呢?
          DosBox 横空出世!
          将.rix 从左变为.dro (即388h 指令变为寄存器的 1000hz dump)

          此时就可以对照着雅马哈的数据表一个音符一个音符的重构了…………或者是吗?
          这样虽然可行,但不止工作量大,出错的可能性也极端的高。基本不实用。


          IP属地:贵州6楼2021-11-08 19:56
          回复
            为此我暂停许久…………直到近日我在“科幻 学习 上进 网络”途中,看到了国外论坛对另外一种格式 .imf (我 被 开)
            https://keenwiki.shikadi.net/wiki/IMF ID Software Music Format. 的探讨 https://www.lemmingsforums.net/index.php?topic=1840.0
            我才大雾!!!!
            这个格式和rix 大同小异,只不过 rix是直接dump,imf给其修饰了下,但imf已经有工具直接识别寄存器参数,然后比较乐器参数,导出乐谱为 .mid
            而且支持.dro!!!???
            赶紧试了一下!

            henhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh?
            看起来DosBox 的DRO 还分版本?
            没关系,imf维基上还有一个.dro2imf 转化工具。(左为.imf 右为.dro)


            IP属地:贵州7楼2021-11-08 19:59
            回复
              没关系,imf维基上还有一个.dro2imf 转化工具。(左为.imf 右为.dro)
              精彩刺激的找你M开始了!看看那里不同,指向大屏幕如果你发现了不同。


              IP属地:贵州8楼2021-11-08 20:02
              收起回复
                然后?!
                ----------------------------------------------
                以下为日志
                -----------------------------------------------
                PS C:\Users\liu\Desktop\rix\dro2midi-1.5-win32> .\dro2midi.exe .\49.9.imf 48.952.mid
                Input file appears to be in IMF type-0 format.
                File extension is .imf - using 560Hz speed (rename to .wlf if this is too slow)
                Using conversion constant of 49716.0
                // Ch01 <- Inst#067 @ line 127: Marimba [13]
                ** New instrument in use on channel 2
                ** Copy this into inst.txt to assign it a MIDI patch:
                NO 11-31/2D-00/C8-F5/2F-F5/0C/00-00: patch=?
                >> Using similar match: Inst#270 @ line 384: Electric Guitar (muted) [29]
                // Ch02 <- Inst#270 @ line 384: Electric Guitar (muted) [29]
                ** New instrument in use on channel 7
                ** Copy this into inst.txt to assign it a MIDI patch:
                NO 4E-48/0F-06/20-2F/F1-05/02/00-00: patch=?
                >> Using similar match: Inst#055 @ line 110: Oboe [69]
                // Ch07 <- Inst#055 @ line 110: Oboe [69]
                (此处省略超过5k字)
                // Ch01 <- Inst#018 @ line 66: Gunshot [128]
                // Ch01 <- Inst#067 @ line 127: Marimba [13]
                // Ch01 <- Inst#018 @ line 66: Gunshot [128]
                // Ch01 <- Inst#067 @ line 127: Marimba [13]
                // Ch01 <- Inst#018 @ line 66: Gunshot [128]
                Conversion complete. Wrote 48.952.mid
                Total pitchbent notes: 1179
                Total notes: 1179
                Notes still active at end of song: 0
                --------------------------------------------------------------
                日志结束
                ----------------------------------------------------------------
                此时得到了一个 48.952.mid 的文件,这里面纪录了音乐的乐谱。
                等等!
                ** Copy this into inst.txt to assign it a MIDI patch:
                NO 11-31/2D-00/C8-F5/2F-F5/0C/00-00: patch=?
                >> Using similar match: Inst#270 @ line 384: Electric Guitar (muted) [29]
                // Ch02 <- Inst#270 @ line 384: Electric Guitar (muted) [29]
                这是什么玩意?

                也就是说 NO 11-31/2D-00/C8-F5/2F-F5/0C/00-00 这是YM3812 的乐器参数
                此处省略几千字关于 .ins 和 .sbi 乐器格式的研究,感兴趣我再发吧。结论就是
                NO 11-31/2D-00/C8-F5/2F-F5/0C/00-00 等效于 这个sbi文件(红框内是sbi文件的有效值)

                这里有个恶心的点,请注意看偏移地址46、44 45,即倒数第二行的 14 、12 13 列,其和软件列出的 /0C/00-00 刚好是相反的。
                还有些乐器,软件已知是和GM 中那些乐器相近音色的就会直接映射,如下。
                // Ch01 <- Inst#067 @ line 127: Marimba [13]
                没关系,到其目录下找inst.txt 文件 中的第127 行

                等效于 sbi 文件中有效值部分 32 11 44 00 F8 F5 FF 7F 00 00 0E
                如此就可以得到.rix 文件中包含的 .ins 文件
                用OpenMPT 整理整理即可得到
                链接: https://pan.baidu.com/s/1SXBejhbR6w6TfZDQYvW7kw 提取码: wjmi 复制这段内容后打开百度网盘手机App,操作更方便哦
                用OpenMPT 打开。
                这个过程中得到的铺子是接近100%完整的(有些神奇到不能再神奇的pitch bent 可能要手动调一下),乐器也是。
                不过因为OpenMPT 不支持 打击乐模式,要是碰到像仙剑那种用打击乐的还得抓脑袋一下。
                以此留存方式,望诸位多多分享,让圈内得出些更完美的“考古”结果!


                IP属地:贵州9楼2021-11-08 20:05
                回复
                  三个帖子互链防吞,如果都吞的话大量回复或者私信。
                  https://tieba.baidu.com/p/7604967786
                  https://tieba.baidu.com/p/7604960466
                  https://tieba.baidu.com/p/7604964747


                  IP属地:贵州10楼2021-11-08 20:10
                  回复
                    百度贴吧,quality website。


                    IP属地:贵州来自Android客户端12楼2021-11-09 15:02
                    回复
                      https://www.bilibili.com/video/BV1YT4y19722?pop_share=1
                      此为应用示例1,无损转化出不存在的041.mid。


                      IP属地:贵州13楼2021-11-09 18:22
                      回复
                        支持楼主纯技术,我也对 老游戏的FM 和 midi 转换非常感兴趣。


                        IP属地:白俄罗斯14楼2021-11-27 14:05
                        回复