Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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#中使用speex预处理器的最简单方法?_C#_Speex - Fatal编程技术网

在C#中使用speex预处理器的最简单方法?

在C#中使用speex预处理器的最简单方法?,c#,speex,C#,Speex,我需要使用speex预处理器,并且只有VOIP应用程序中的预处理器(不需要使用编解码器)。我的应用程序是用C#编写的。我想我知道最简单的步骤,但不知道在哪里可以找到这些东西 我认为最简单的,如果我能找到这些: 只包含预处理器函数的Windows DLL,或者如果足够小,我想整个speex库都可以。到目前为止,我只找到了EXE格式的二进制文件,所以如果我找不到二进制文件,我就必须安装它们用来构建源代码的编译器,可能还有其他几个库(这是我在大多数开源构建中的经验) 头文件的C版本,用于pinvoki

我需要使用speex预处理器,并且只有VOIP应用程序中的预处理器(不需要使用编解码器)。我的应用程序是用C#编写的。我想我知道最简单的步骤,但不知道在哪里可以找到这些东西

我认为最简单的,如果我能找到这些:

  • 只包含预处理器函数的Windows DLL,或者如果足够小,我想整个speex库都可以。到目前为止,我只找到了EXE格式的二进制文件,所以如果我找不到二进制文件,我就必须安装它们用来构建源代码的编译器,可能还有其他几个库(这是我在大多数开源构建中的经验)

  • 头文件的C版本,用于pinvoking DLL函数

  • 所以我的问题是,有人知道我在哪里可以找到这些吗?我敢肯定,以前有人根据speex的大量用户创建过这些,只是在网上找不到

    希望人们不要认为我懒惰,我只是讨厌做这种“繁忙的工作”,如果我知道很多人可能已经做过同样的事情:)


    更新:我确实找到了包含libspeex.dll的文件,但该dll没有导出,因此不确定他们希望如何工作。他们拥有的其他二进制文件也只是EXE。

    Speex是用C编写的,并且有导出。我只是自己下载了源代码并查看了一下。在这里下载源代码,然后从那里开始。它看起来相当广泛。。。快乐编码

    当然有,但它仍处于测试阶段:


    我最后只使用了几个函数,但万一有人不想做这项工作,我写了以下内容:

        [DllImportAttribute("libspeexdsp.dll")]
        public static extern IntPtr speex_echo_state_init(int frameSize,int filterLength);
    
        [DllImportAttribute("libspeexdsp.dll")]
        public static extern void speex_echo_state_destroy(IntPtr st);
    
        [DllImportAttribute("libspeexdsp.dll")]
        public static extern void speex_echo_cancellation(IntPtr st, IntPtr recorded, IntPtr played, IntPtr echoRemoved);
    
        [DllImportAttribute("libspeexdsp.dll")]
        public static extern void speex_echo_playback(IntPtr st, IntPtr played);
    
        [DllImportAttribute("libspeexdsp.dll")]
        public static extern void speex_echo_capture(IntPtr st, IntPtr recorded, IntPtr echoRemoved);
    
        [DllImportAttribute("libspeexdsp.dll")]
        public unsafe static extern int speex_echo_ctl(IntPtr st, int id, ref IntPtr val);
    
        [DllImportAttribute("libspeexdsp.dll")]
        public static extern IntPtr speex_preprocess_state_init(int frameSize, int sampleRate);
    
        [DllImportAttribute("libspeexdsp.dll")]
        public static extern int speex_preprocess_ctl(IntPtr st, int id, IntPtr val);
    
        [DllImportAttribute("libspeexdsp.dll")]
        public static extern int speex_preprocess_run(IntPtr st, IntPtr recorded);
    
        [DllImportAttribute("libspeexdsp.dll")]
        public static extern void speex_preprocess_state_destroy(IntPtr st);
    
    我想我很幸运,因为没有太多的结构需要delcare,大部分都是IntPtr或int,所以非常简单


    至于查找二进制文件,我没有在任何地方发现它们是预编译的,但是源代码中确实包含了VS解决方案文件,这些文件只进行了一些小的修改,所以我想这一部分对于任何使用C#的人来说都很容易,因为他们无论如何都会使用VS。出于某种原因,我假设它需要一些其他编译器,比如GCC,或者大多数开源项目似乎都使用的其他编译器(我对这些都不熟悉)。再次,幸运的是,它没有

    --它们使用C风格的导出/函数。如果没有其他人提供指向二进制文件和c#typedef的链接,我将发布我创建的链接,这样我将有望成为最后一个执行此过程的人:)@eselk您发布此消息时,我刚刚查看完源代码。对不起,我对这件事的直觉是错误的。api文档使用的是OO术语和语法。理解了,我一开始也是这么想的。在最新的
    libspeex.dll
    中,似乎找不到很多speex echo函数。我检查了1.43.43(从dumpbin.exe/exports获得)。这里是要点,对带有echo函数的版本有什么建议吗?