在 C# 中读取 ASCII 文件的特定部分

Read specific parts of ASCII file in C#

我正在尝试为 Sylenth1 音色库制作一个 FXB 文件预览器(VST 预设音色库适用于不知道的人)。我已将 FXB 编码为 ASCII 字符串并将其打印到控制台。预设名称显示正常。我的问题是振荡器、滤波器和效果器的参数被编码为随机字符(主要是“?”和相当大的 spaces)。

红色下划线:文件头 (?)

蓝色下划线:预设名称(我想保留)

黄色下划线:osc/FX/filter 参数(我想从字符串中丢弃)

这是我写的代码:

    byte[] arr = File.ReadAllBytes(Properties.Resources.pointer); /* pointer is a string in resources I
used to point to the external FXB file for testing */
    System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
    string fstr = enc.GetString(arr);
    Console.Write(fstr);
    Console.ReadKey();

我写了一个 foreach 循环来用 string.Empty 替换每个不需要的字符,但它也删除了部分预设名称(例如“Lead”中的 L),留下 spaces完好无损并创建新的,所以我删除了它。

对于那些好奇的人,我的最终目标是:

Preset 1
Preset 2
Preset 3
Preset 4
...

我完全不知所措。我尝试了来自不同网站和 Stack Overflow 帖子的不同解决方案,但 none 给了我想要的结果。

(我还注意到预设名称之间的 space 几乎相同(相隔约 200 个字符),我可以使用差异来排除不需要的部分吗?)

它看起来像一个二进制文件,而不是 ascii。文件中的一些数据很容易读取,因为它是 ASCII 编码的,但其他数据(例如数字)以二进制格式编码。

并非所有二进制数据都可以转换为可打印的 ASCII 字符,因此当您像这样打印出来时,您会得到 ????乱七八糟

最好使用二进制编辑器阅读此文件。 Visual studio 有一个,可能有 vs code 的扩展,其他编辑器有二进制查看器(例如 sublime)。这将显示文件中的编码数据,通常在第二列中使用十六进制和 ascii。

但这只是为了让您能够准确地看到内容。它不能帮助您理解含义或布局。您也许可以像这样通过逆向工程使某些东西工作,但它可能不适用于所有情况。使用 and API 会更容易。

我不熟悉这些文件,但你找到了吗? https://new.steinberg.net/developers/ 那里有一个论坛可能会有所帮助。

我自己找到了答案。我基本上在十六进制编辑器中对 FXB 进行了一些逆向工程,然后继续加载文件的特定字节(准确地说是 31 个字节),以便将这些字节编码为字符串并将其打印到控制台。

我通过逐字计算从开头到第一个预设名称,然后从预设名称末尾(31 个字节)到另一个预设名称开头有多少字节,等等来做到这一点上。

有兴趣的朋友,我以后会开发一个GUI版本的。但它确实(并且可能会)支持 仅 Sylenth1 v2 soundbanks/FXBs.

也感谢伸出援手的人们。他们以自己的方式提供帮助。