Yamaha S-YXG 50 逆向记录

s-yxg 50 vsti 版本是可以调复音数的,能到 128

2 Likes

帖子更新了一下,告诉大家一个秘密,其实 S-YXG 50 的 2MB 版本波表库的音质比 4MB 要好

2 Likes

https://veg.by/ru/projects/syxg50/comment-page-3/#comment-50325

根据这里的讨论,他们认为 2MB 波表里面鼓的细节比较多一点(看不懂请找各路AI)

事实上已经有人尝试改波表的采样率和其他一些参数了,我现在有点进行不下去了,这个软件并不是特别容易逆向的那种,有很多数据结构我还没有搞明白具体的含义

4 Likes

[本篇文章没有涉及到技术性讨论
杂谈?<大概是>]

雅马哈的大刀 取舍给错了
不过也都不清楚具体是哪点不好

老感觉这句话有耳熟

下面这位回复的就挺中肯


(毕竟还是一种主观感受,每个人都觉得不同)

讲实话,就像以前在摸主机的时候
总是争论 Gba和sfc (那就扯远了)
<总之没有可比性,不管是技术上还是设备定位>


雅马哈的情况,如我提出主观的话应该是:
取舍不当就成这样了
(不清楚这里的rom<或sample>是否有封装大小的限制)


总之主观论点就是猜的

有上述情况就是取舍错误
没有的话雅马哈的大刀接英特尔 (doge)


https://veg.by/ru/projects/syxg50/comment-page-3/#comment-50325

@DecemberLens 这帖子讨论的东西挺有趣的 (提到sample与质量)

我看看这个帖 (虽然可能不会对您现在正在进行的工作,起到什么变化吧)

chirs.

25/03/27 17:50 utc+8 首评

17:53 二改

1 Like

嗯,我昨晚联系了 veg,然后他就给我指路到这个俄语的评论区了,事实上已经有大神逆向成功了 S-YXG 50,我也在研究他们评论区的内容,现在的问题是我需要把这些数据表以及每个字段的作用完全搞明白,不过一路逆向到现在,我觉得其实只要能兼容 XG 标准,我也完全没有必要非得用 Yamaha 的采样……可能我比较怀旧吧
总之逆向还需要一些时间,接下来我需要把这些毛子说了啥完全搞明白先

3 Likes


也好理解,2006LE好像没有设置可调
(连面板都找不到)

见过有人套着这个用


(不过我没用过xgworks不清楚干嘛的)

25/03/27 18:40

2 Likes

2006LE 其实是给 Midradio Player 专用的音源,虽然它是 VSTi 但是本来就没考虑给其他宿主用的,自然也就不需要什么设置了。
xgworks 是 yamaha 自己的 daw,支持 XG 标准的,能用 SysEX 去调某些隐藏参数(比如打击乐器的频率参数什么的)

4 Likes

我在翻译 veg.by 的讨论区,我之前逆向的内容,很多他们都已经做过了。

目前来说,如果能搞明白tbl文件的全部内容,我大概率会先完成一个lib,实现对tbl文件的解析,但是据我目前掌握的情况来说,程序内固化了很多数据表,而且会参与计算,细节尚不明确。

就翻译内容中大家的吐槽,其实 S-YXG 50 整体的效果并不像硬件合成器那么好(例如mame),所以未来还有可能,我会放弃读取tbl文件,而是尝试用rust复刻mame的相关模块,我想实现界面与音源分离(作为后台服务运行)在 Linux 上面

1 Like

这个 2011EE 的版本,感觉缺了采样

2 Likes

感谢LZ的工作

我也想要把XG音源逆向出来可是没那个技术和时间
不过我见到电子琴论坛好像把MU50那个 mame弄到网页上了,还挺神奇的

1 Like

我是在开始逆向之后发现其实 veg.by 那些人已经做了很多了,我目前的进度也仅仅跟他们持平,虽然是个音源,但是这玩意的复杂程度也不亚于一个大型软件了

1 Like

真的泪目了,现在还有人在对古老的S-YXG50和S-YXG2006LE音源进行逆向…
必须狠狠支持了
个人觉得S-YXG2006LE那么好的高音质采样,却全败在无法启用的S-YXG50 GUI,败在被砍成XGlite和32个Polyphony上,实在太可惜了。
有朝一日希望看到2006LE也能被破解支持128复音和Full XG!
看了Veg.by大佬制作的S-YXG50 VSTi中的Readme,可以把S-YXG50的sxgwave4.tbl文件删掉替换为自己准备的波表文件,考虑到S-YXG50有GUI并且可以调复音数,就想试试能不能另辟蹊径把S-YXG2006LE的TBL波表移植给S-YXG50来破除复音限制,毫无疑问因为波表加密的缘故没法行得通,遂见此贴!
跪拜大佬们!

3 Likes

话说这个是做什么用的音源呢?拿回去听了一下貌似就只有正弦波的采样,并且GM1 Reset后支持映射为正弦波的乐器反而比XG更多就很奇怪呢(
用来叠加多个正弦波来合成人声或许不错

那狠狠支持用爱发电的大佬了!
很希望有一天S-YXG2006LE采样这么好的音源也能用上Full XG和128个复音…

那个不全,缺少采样文件

1 Like


最近闲的蛋疼,逆向了一下SCVA

3 Likes

别的不说,S-YXG50/70/100的原始2MB波表,String Ensemble 1音色听起来要比4MB波表好多了,很高昂的感觉。至少在我的音乐审美来看是这样的,哈哈 :wink:

Codex对三个文件做了第一轮静态分析,没有运行 DLL。

结果挺有料:

  • SGP2.DLL32 位 x86 VSTi DLL,导出函数只有 main
  • DLL 内部明确包含:
    • sxgbnw6l.tbl
    • sxgdat6l.tbl
    • YAMAHA SoftSynthesizer S-YXG2006LE
  • 它通过 GetModuleFileNameA 找自身路径,再用 CreateFileA / GetFileSize / ReadFile 把两个 .tbl 整个读入内存。
  • sxgbnw6l.tbl 不是波形本体,更像 索引/参数/映射表。开头是:
    • UTG VPRM 06 07 28 15 28
    • 后面有一组 offset table。
  • sxgdat6l.tbl 才更像大数据/波形数据,但它不是裸 WAV/PCM,原始内容高熵,DLL 里有解码逻辑。

Codex找到的关键代码位置:

SGP2.DLL+0x2DD0  负责加载两个 tbl
SGP2.DLL+0x2D60  复制字符串 sxgbnw6l.tbl
SGP2.DLL+0x2D80  复制字符串 sxgdat6l.tbl
SGP2.DLL+0x4C830  通用“读取整个文件”函数
SGP2.DLL+0x2EF0  sxgdat6l.tbl 解码例程
SGP2.DLL+0x4C900  解码 helper

SGP2.DLL+0x2EF0 里面能看到一个明显的处理:先调用 +0x4C900 做第一阶段变换,然后对数据做类似“每两个字节交换 + XOR 0x5A”的第二阶段处理。解码后仍然不是 RIFF/WAVE,所以后面很可能还有专有采样压缩、ADPCM 或 Yamaha 自己的波形编码格式。

另外,外部资料也能对应上:SGP2.DLL 确实被社区记录为 Yamaha MidRadio 7 里的 S-YXG2006LE VSTi,使用 sxgbnw6l.tbl / sxgdat6l.tbl 这组新 wavetable。参考:VEG.BYXG-Central

下一步最有价值的是用 Ghidrax32dbg 深入 SGP2.DLL+0x2EF0+0x4C900 和读取后的数据结构,把 sxgbnw6l.tbl 里的 20 字节表项、6048 个指针表项和 sxgdat6l.tbl 的偏移关系对应起来。这样才能进一步判断它到底是 PCM、ADPCM、循环采样,还是更复杂的 Yamaha AWM2 风格数据。

3 Likes

感谢 @gaozhe3321 带来新的逆向进展。

这种文件有反编译过的样本么,或者说具体结构可以形容下

闲话本人就折叠起来了,想看就展开吧

提到这个其实联想到的是Motif的乐器预设或波表(如wXa,wXv;只是举个例子实际上有更多变种)

https://archive.org/details/motif-es-sound-library
以上这张CD是购买Motif附赠的音色库,如果跑题的话可能就没什么研究价值了

雅马哈的其他私有格式Fmj_Awave说是整理吧(但它软件能读数据,所以基本是转了)

就看看得了


但也并非一无是处,至少得知了雅马哈习惯性的把乐器预设(voice)和样本(waveformat)分开放这个事实(但似乎也早说过了?)

https://www.fmjsoft.com/awavestudio.html#formats
(看一眼这几个格式的介绍也无妨?)

2605082330

你太牛了!

事实上 2006LE 也采取了跟 YXG-50 相似的索引+波表的方式

我事实上还发现,其实很多音色是共用了同一个采样,但是在调制方式上有区别。也就是说我们目前只是知道了这些数据是如何排布的,但是更复杂的调制算法以及效果器/SysEx这些功能是如何实现的,还有待进一步分析。

整个程序的结构也需要进一步去分析,但这可能需要动态调试了,我能力和时间都有限,只能暂时搁置了

1 Like