Самый простой способ использовать препроцессор speex в C #?

Мне нужно использовать препроцессор speex и только препроцессор в моем приложении VOIP (кодек использовать не нужно). Мое приложение написано на C #. Я думаю, что знаю самые простые шаги, но не знаю, где их найти.

На мой взгляд, проще всего, если я найду это:

  1. Windows DLL, которая содержит только функции препроцессора, или, если она достаточно мала по размеру, я думаю, вся библиотека speex будет в порядке. Пока я нашел только двоичные файлы в формате EXE, поэтому, если я не могу найти двоичные файлы, мне придется установить компилятор, который они используют для сборки своего исходного кода, и, возможно, несколько других библиотек (как и мой опыт работы с большинством сборок с открытым исходным кодом ).

  2. C # версии файлов заголовков для вызова функций DLL.

Итак, мой вопрос: кто-нибудь знает, где я могу их найти? Я уверен, что люди создавали их раньше, основываясь на огромном количестве пользователей speex, которые просто не могли найти их в Интернете.

Надеюсь, люди не думают, что я ленив, я просто ненавижу заниматься такой «занятой работой», если знаю, что многие другие, вероятно, уже сделали то же самое :)

Обновление: я нашел http://www.rarewares.org/files/others/libspeex-dll-1.2rc1.zip, который включает libspeex.dll, но DLL не имеет экспорта, поэтому не уверен, как они ожидают, что это будет работать. Остальные двоичные файлы, которые у них есть, также являются просто EXE-файлами.


person eselk    schedule 31.05.2012    source источник


Ответы (2)


В итоге я использовал лишь несколько функций, но если кто-то не хочет выполнять эту работу, вот что я написал:

    [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, или другие, которые, похоже, используют большинство проектов с открытым исходным кодом (ни один из которых я не знаком). Опять же, к счастью, этого не произошло!

person eselk    schedule 07.06.2012
comment
Похоже, я не могу найти много функций speex echo в последней версии libspeex.dll. Проверяю 1.43.43 (достал из dumpbin.exe / exports). Вот в чем суть gist.github.com/swdevbali/692e469f57cd94456f5ebda25e для функций любой версии с предложением функции Any version375ee ? - person swdev; 14.03.2021

Speex пишется и на C, и у него есть экспорт. Я просто сам скачал исходники и посмотрел. Загрузите исходный код здесь и перейдите оттуда http://www.speex.org/downloads/. Выглядит довольно обширно, ... удачного кодирования.

Конечно, есть, но пока еще бета-версия:

http://nspeex.codeplex.com/

person Jonathan Henson    schedule 31.05.2012
comment
speex.org/docs/api/speex-api- reference / - они используют экспорт / функции в стиле C. Если никто другой не предоставит ссылки на двоичные файлы и определения типов C #, я опубликую созданные мной, чтобы, надеюсь, быть последним, кто сделает этот процесс :) - person eselk; 31.05.2012
comment
@eselk Я только что закончил изучать источник, когда вы разместили это. Извините за неправильное чутье по этому поводу. В документации api использовались термины и синтаксис OO. - person Jonathan Henson; 31.05.2012
comment
Понятно, я и сам сначала подумал о том же. - person eselk; 31.05.2012