4

Speex プリプロセッサを使用する必要があり、VOIP アプリではプリプロセッサのみを使用する必要があります (コーデックを使用する必要はありません)。私のアプリは C# で書かれています。最も簡単な手順は知っていると思いますが、これらのアイテムがどこにあるのかわかりません。

私がこれらを見つけることができれば、私の意見では最も簡単です:

  1. プリプロセッサ関数のみを含む Windows DLL、またはサイズが十分に小さければ、speex ライブラリ全体で問題ないと思います。これまでのところ、EXE 形式のバイナリしか見つけられなかったので、バイナリが見つからない場合は、ソースのビルドに使用するコンパイラと、おそらく他のいくつかのライブラリをインストールする必要があります (ほとんどのオープン ソース ビルドでの経験と同様)。 )。

  2. DLL 関数をピンボークするためのヘッダー ファイルの C# バージョン。

私の質問は、これらをどこで見つけることができるか知っている人はいますか? オンラインで見つけることができなかった膨大な数の speex ユーザーに基づいて、人々は以前にこれらを作成したと確信しています。

他の多くの人がおそらくまったく同じことをすでに行っていることを知っている場合、私はこの種の「忙しい仕事」をするのが嫌いです:)

更新: libspeex.dll を含むhttp://www.rarewares.org/files/others/libspeex-dll-1.2rc1.zipを見つけましたが、DLL にはエクスポートがないため、それがどのように機能するかはわかりません。彼らが持っている他のバイナリも単なるEXEです。

4

2 に答える 2

4

私はいくつかの関数を使用するだけで終了しましたが、誰かが作業をしたくない場合に備えて、ここに私が書いたものがあります:

    [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 ソリューション ファイルが含まれていました。とにかくVSを使用します。なんらかの理由で、GCC などの他のコンパイラや、ほとんどのオープン ソース プロジェクトで使用されていると思われる他のコンパイラが必要になると想定していました (どれもよく知りません)。繰り返しますが、幸いなことに、そうではありませんでした。

于 2012-06-07T22:36:28.243 に答える
1

Speex は C で書かれており、エクスポートがあります。ソースコードを自分でダウンロードして見ただけです。ここからソースをダウンロードし、そこからhttp://www.speex.org/downloads/にアクセスしてください。それは非常に広範に見えます...幸せなコーディング。

もちろん、これはありますが、まだベータ版です。

http://nspeex.codeplex.com/

于 2012-05-31T03:23:17.913 に答える