Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中读取ASCII文件的特定部分#_C#_File Io_Vst - Fatal编程技术网

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

C# 在C中读取ASCII文件的特定部分#,c#,file-io,vst,C#,File Io,Vst,我正在尝试为Sylenth1银行制作一个FXB文件预览器(VST预设银行供不知道的人使用)。我已将FXB编码为ASCII字符串,并将其打印到控制台。预设名称显示良好。我的问题是振荡器、滤波器和效果的参数被编码为随机字符(主要是“?”和相当大的空格) 红色下划线:文件头(?) 蓝色下划线:预设名称(我想保留) 黄色下划线:osc/FX/filter参数(我想从字符串中丢弃) 以下是我编写的代码: byte[] arr = File.ReadAllBytes(Properties.Reso

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

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

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

黄色下划线: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),保留了完整的空格并创建了新的空格,因此我将其删除

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

Preset 1
Preset 2
Preset 3
Preset 4
...
我完全不知所措。我从各种网站和堆栈溢出帖子中尝试了不同的解决方案,但没有一个给了我想要的结果


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

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

不是所有的二进制数据都可以转换成可打印的ASCII字符,所以当你像这样打印出来时,你会得到????一团糟

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

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


我不熟悉这些文件,但你找到了吗?那里有一个论坛可能会有所帮助。

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

不是所有的二进制数据都可以转换成可打印的ASCII字符,所以当你像这样打印出来时,你会得到????一团糟

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

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


我不熟悉这些文件,但你找到了吗?那里有一个论坛可能会有所帮助。

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

我设法做到这一点,从第一个预设名称开始,然后从预设名称的末尾(31个字节)到另一个预设名称的开头,逐字计算有多少字节,依此类推

对于那些感兴趣的人,我将在将来开发它的GUI版本。但它确实(而且可能会)只支持Sylenth1 v2 soundbanks/FXBs


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

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

我设法做到这一点,从第一个预设名称开始,然后从预设名称的末尾(31个字节)到另一个预设名称的开头,逐字计算有多少字节,依此类推

对于那些感兴趣的人,我将在将来开发它的GUI版本。但它确实(而且可能会)只支持Sylenth1 v2 soundbanks/FXBs


也要感谢那些伸出援手的人们。他们自己的方式帮助。< / P>我想到了斯坦伯格API,但它不是用C++编写的吗?我对C++一无所知,所以我为什么要用C++来做。如果你想用VST.NET(Github)加载插件(使用C语言),我想到了斯坦伯格API,但是它不是用C++编写的吗?我根本不熟悉C++,所以我为什么要用C语言。你可以用VST.NET(Github)来加载插件(如果你想用C),这个文件的二进制格式是由主机(DAW)或者插件本身从我理解的……OBIWANJACOBII决定的,所以你是说我应该问LeNalDigic自己?你可以。如果插件没有实现它自己的序列化,DAW将实现它——因此您可能还需要对几个流行的DAW进行反向工程。很多工作。将实际插件作为参数UI加载,至少可以避免逆向工程格式的麻烦…此文件的二进制格式由主机(DAW)或插件本身决定,根据我的理解…@obiwanjacobi,所以你是说我应该问LennarDigital自己?你可以。如果插件没有实现它自己的序列化,DAW将实现它——因此您可能还需要对几个流行的DAW进行反向工程。很多工作。将实际插件作为参数UI加载到