我正在尝试解码 Massive、FM8 和 absynth VST 合成器的文件格式。文件格式是二进制的,有几个部分。这样做的原因是将上述格式转换为通用 vst .fxp 格式,以便通过 vst api 自动加载和渲染预设。
通过在更改合成器参数时尝试保存文件,我发现了以下有关格式的事实:
- 文件以长度字段开始
- 文件包含一些由“DSIN”、“hsin”标记引入的固定长度部分
- effGetChunk vst sdk api调用返回的vst二进制块与.nmsv、.nabs、.nfm8预设文件内容99%相似
- 更改合成器中的单个参数会更改文件中多个位置 (3-4) 的一些字节
- 预设文件的主要部分似乎被压缩,而合成参数应该是 0 和 1 之间的浮点值,它们似乎没有作为浮点写入文件 - 除了无法识别的二进制值之外,还有明文字符串,例如用户定义的宏似乎对原始数据进行了某种压缩。压缩似乎引用了先前遇到的字符串并在流的后面部分引用这些字符串:如果“THIS_IS_A_MACRO_NAME_ABC”在流中位于“THIS_IS_A_MACRO_NAME_XYZ”之前,则第二个字符串将被压缩为“[短字节序列]_XYZ”。
- 这些文件似乎不包含任何用于压缩的字典,这让我认为字典必须存储在其他地方,否则可能根本没有字典。
任何人都可以在这里帮忙:
- 这里可以应用什么压缩方案?
- 有谁知道已成功解码的类似格式?
添加了一个示例文件:
http://s000.tinyupload.com/index.php?file_id=08960658549599455274包含一个示例文件。字符串“TESTSTRING1”和“PREFIXTESTSTRING1SUFFIX”包含在未压缩的流中。
数据块的香农熵是 5.84154,它介于英文文本和加密文本之间。
下面是一个示例,它应该演示如何计算长度字段:字符串“TESTSTRING123”在字符串“PREFIX...SUFFIX”之前。
P R E F I X L1 L2 D S U F L1 D
----------------------------------------------------------------------------------------
PREFIXTESTSTRING123SUFFIX 05 50 52 45 46 49 58 E0 04 16 02 53 55 46 20 12 40 42 00
PREFIXTESTSTRING12SUFFIX 05 50 52 45 46 49 58 E0 03 16 02 53 55 46 20 11 40 41 00
PREFIXTESTSTRING1SUFFIX 05 50 52 45 46 49 58 E0 02 16 02 53 55 46 20 10 40 40 00 33 40
PREFIXTESTSTRINGSUFFIX 05 50 52 45 46 49 58 E0 01 16 02 53 55 46 20 0F 40 3F 00 33 40
PREFIXTESTSTRINSUFFIX 05 50 52 45 46 49 58 E0 00 16 02 53 55 46 20 0E 40 3E 00 33 40
PREFIXTESTSTRISUFFIX 05 50 52 45 46 49 58 C0 16 02 53 55 46 20 0D 40 3D 00 33 40
PREFIXTESTSTRSUFFIX 05 50 52 45 46 49 58 A0 16 02 53 55 46 20 0C 40 3C 00 33 40
PREFIXTESTSTSUFFIX 05 50 52 45 46 49 58 80 16 02 53 55 46 20 0B 40 3B 00 33 40
PREFIXTESTSSUFFIX 05 50 52 45 46 49 58 60 16 02 53 55 46 20 0A 40 3A 00 33 40
PREFIXTESTSUFFIX 05 50 52 45 46 49 58 60 16 01 55 46 20 09 40 39 00 33 40
PREFIXTESSUFFIX 05 50 52 45 46 49 58 20 16 02 53 55 46 20 08 40 38 00 33 40
PREFIXTESUFFIX 05 50 52 45 46 49 58 20 16 01 55 46 20 07 40 37 00 33 40
PREFIXTSUFFIX 09 50 52 45 46 49 58 54 53 55 46 20 06 40 36 00 33 40
