真的泪目了,现在还有人在对古老的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来破除复音限制,毫无疑问因为波表加密的缘故没法行得通,遂见此贴!
跪拜大佬们!
Yamaha S-YXG 50 逆向记录
话说这个是做什么用的音源呢?拿回去听了一下貌似就只有正弦波的采样,并且GM1 Reset后支持映射为正弦波的乐器反而比XG更多就很奇怪呢(
用来叠加多个正弦波来合成人声或许不错
那狠狠支持用爱发电的大佬了!
很希望有一天S-YXG2006LE采样这么好的音源也能用上Full XG和128个复音…
那个不全,缺少采样文件
别的不说,S-YXG50/70/100的原始2MB波表,String Ensemble 1音色听起来要比4MB波表好多了,很高昂的感觉。至少在我的音乐审美来看是这样的,哈哈 
Codex对三个文件做了第一轮静态分析,没有运行 DLL。
结果挺有料:
-
SGP2.DLL是 32 位 x86 VSTi DLL,导出函数只有main。 - DLL 内部明确包含:
sxgbnw6l.tblsxgdat6l.tblYAMAHA 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.BY、XG-Central。
下一步最有价值的是用 Ghidra 或 x32dbg 深入 SGP2.DLL+0x2EF0、+0x4C900 和读取后的数据结构,把 sxgbnw6l.tbl 里的 20 字节表项、6048 个指针表项和 sxgdat6l.tbl 的偏移关系对应起来。这样才能进一步判断它到底是 PCM、ADPCM、循环采样,还是更复杂的 Yamaha AWM2 风格数据。
感谢 @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这些功能是如何实现的,还有待进一步分析。
整个程序的结构也需要进一步去分析,但这可能需要动态调试了,我能力和时间都有限,只能暂时搁置了

