Replies: 13 comments 45 replies
|
你好!不好意思看到得有点晚了。 非常惊讶也特别开心——到现在还有人愿意钻研这些“老家伙”,欢迎! 关于你提的几个问题,我稍作整理分享一下: 关于 playrix 不过说明一下:我并不是当年这块工作的原作者。某些细节,可能得向当初最早分析并转换为 C 的原作者 bspal 了解才行。遗憾的是,我自己也和他很久没联系上了。 drov1 格式输出 你可以把 derix.c 稍作调整(注意先不要看derix262,那个被其他维护者扩展了很多,短篇难尽,看他本人后续有没有兴趣参与讨论吧),尤其是中断处理部分,改成一次性跑完;接着按 drov1 格式写好文件头,再把 ad_bop 的部分从写寄存器改成依次写入寄存器和数值——就可以了。 事实上,AdPlug 的 rix player 初版就是靠这个思路从 dro player fork出来的。可以看看它当时的实现: adplug/adplug@69f9788 关于乐理和结构 不过从代码层面讲,我个人不太认同“rix 就是 388 端口的字节袋子”这个比喻。dro倒是非常符合,但 rix 本身结构性是很强的: 文件头就明确存在音色区和指令区的偏移指针 指令区里还能看到明显的 9x、Ax、Bx、Cx 等几种指令 有些指令看得出是跟音乐层面直接相关的,比如 9x 是用来切换现成的 ins 音色用的。 只是说到每个指令的具体意义和用途……这我真的只能惭愧地说,有待后继高手继续挖掘了 最后再次欢迎哈!江湖之大,相逢便是有缘。 |
|
欢迎!非常高兴在2025年还能有机会认识研究RIX格式的同好。 客套话不多说了哈,咱们进入正题。 首先,我的认识是,RIX并不完整包含原ROL+INS档的全部信息。也就是说,RIX逆向回ROL+INS需要很多人工,而且能还原到“等效”ROL就算是成功了。 RIX并没有保留BPM一类的信息,只留下了单纯时序信息,而且INS名称也没有保留,这两点相信我们都知道了。但是,我发现,这个格式似乎还有更多的“奇特”之处。
|
|
关于播放器。 经过多年的迭代,我想,现阶段PalResearch项目的RIX播放方案已经实现了音乐意义上的百分百完成。但是,是否能达成寄存器完美,我心里也没有底。 如果打算追求更高精度的还原,那么我猜我们应该先确定现阶段效果最好的软硬件配置:
PLAYRIX。这是官方版播放器。
DOSBOX提供的核心。请注意,不要用DOSBOX原版默认的设置来回放RIX。我们应该同时设置 [sblaster] oplrate=49716 和 [mixer] rate=49716,这样就可以绕开DOSBOX内部的低质量重采样算法,让OS的音频系统来实现采样率转换,使音质更高。 Ad Plug(SDLPal版和foobar2000版)提供的核心。请选用Nuked OPL3核心。按说明,这是一个电路级精确的模拟核心,而且无论你选什么输出采样率,它内部均使用49716Hz合成,只是会重采样到你设置的输出采样率而已。 YMF7x4系列声卡的FM模块。这是雅马哈的官方方案,内部应该也采用了49716Hz合成,重采样到48000Hz后输出。个人感觉其重采样算法所实现的音质远好于DOSBOX的,所以它的输出可以直接参考。这个系列的亮点是大部分型号原生支持SPDIF数字输出,只要软硬件启用即可。 CMI8738系列声卡的FM模块。这应该是一个精确度很高的clone。较早的型号据说也支持SPDIF数字输出FM音频。值得注意的是,这块卡从DOS到Windows 11均可以支持,兼容性无以伦比。因此,8738可以当作对比用硬件。 |
|
需要指出的是,寄存器完美,我已经人工完成了一次084的重构。 有很多步骤理论上是可以自动化的,这样可以大幅节省时间,无奈编程较弱。 |
|
网上已然找不到完全的使用RIX 格式的游戏列表, 目测最早的游戏是轩辕剑1,1990中那几个半成品RIX. |
|
正在编辑的vgmpf页面, 欢迎助力 |
|
目前, 网上典型的格式说明只有两篇一模一样的描述.
这个说明都快盘包浆了..... 音乐块以 2 "位元"?(byte?字节?) 为单位(作为一个word??)? |
|
尝试使用ROLRIX.EXE 生成了一下Thecloud.ROL, 打开编译后RIX看到如下. 因此, 我不认为"RIX 没有完整保留INS格式."这一说法严谨. 也或者? 我使用OPL3BANKEDIT生成的 INS 文件是新版文件? 另外...... 根据那篇格式描述......... 期待在 $20 offset 找到 $01 $00 来区别是否开启打击乐模式..... 其,听起来也和原ROL 没有太多的区别, 暂未检测寄存器实际写入的值是否与AdLib Sound Driver 等价. 无法验证 "RIX 中扩展了pitch bent 范围这一说法."? |
|
ROLRIX.EXE 有date code 吗? git库中的文件datecode 已被摧毁. |
|
无法记得在哪里看到, 大富翁2用的RIX格式似乎与其他游戏中的格式不同一样? 如您知道不同是哪里,欢迎指出. |
|
一些Vogons 上的信息. 结论是区别实在不重要... ESS FM的FeedBack 算法反而比OPL3要更加柔和. https://www.vogons.org/viewtopic.php?t=49648 魂牵梦绕的图片演示高频混叠区别.... https://www.vogons.org/viewtopic.php?p=1259488&hilit=esfm#p1259488 硬件播放现代ESFM音乐的软件. |
|
完蛋.....🤣 F.............. well, 文件在此... 感兴趣欢迎查看........然后也许指着笑? |
|
大概看了下RIX 格式之前用的 所谓 MIX 格式 干脆! 等游戏加载这些文件, 然后在内存中期待有解压后的文件..........额.....怎么做到... |




Uh oh!
There was an error while loading. Please reload this page.
大佬您好!
感谢您对pal的付出以及sdlpal的重置!
我对rix文件进行了一些研究,想请您检查作业,可能的话想更多的和您交流一下,如果可能的话,找出更好方法来完成rix文件的逆向。
地址:https://tieba.baidu.com/p/7605051096
余在21时有浅显的对rix文件进行了研究,当时没写多少,而且对rix文件的认知也十分迷糊,弄出了用IDA 打开rix当x86汇编来"逆向"这种蜜汁操作。
不过也的确用穷举法鼓捣出分离出了其中的乐器文件和音高(midi)文件。
我就没期待有10人以上感兴趣。
不曾想,几年后,林坤信大佬来b站的时候偶然相中了余发的视频。问我是怎么做到的,并且想从一些rix文件中分离出他硬盘坏了丢失的rol ins 文件。
现在余对YM3812 和 IBM PC-AT ISA BUS 稍微有多了些认知。
综合起来又洛阳铲了这个帖子。
但在大佬面前,还是些许心虚的……有很多地方我可能没弄对,或者您有更好的方法来完成。
比如对rix结构的结论。
余主要的结论是不要管什么rix格式了,就叫他softstar 388h bit stream。
没有什么"乐器块","音乐块",乐器相关的寄存器初始化只是刚好在rix文件头部。
而且有些时候,还会在曲子中间换乐器。
实际上其中就含了写给388h的"opl寄存器地址"和389h 写给 opl寄存器 的数据。 类似 imf wlf dro格式。
没必要尝试直接分离任何东西,而是通过分析playrix,来直接parse 到dro 这种 "国际上"通常的 YM3812 reg-dump。
但看playrix.asm 看得我头大不说,看起来rix文件还有什么CD 指令来控制loop point……
余对其内部微观结构也是一无所知,抛开之前那篇文件说什么偏移地址有“乐器块”,那些是写给388h的地址数据,那些写给389h的“opl寄存器数据”,有默认写入速度是多少?有曲目自定义写入/更新速度的控制符没?完全不知道。
噢,little endian 储存我认。
目前,主要是以下两个挑战
1,可否请您讲解一下playrix?
2,您可否看一下要怎么直接从rix parse 为 dro?
3,rix 的内部结构细节还是不太清晰。
cheers,
will
All reactions