Какой самый простой способ непрерывной выборки из линейного входа с использованием C #
-
04-07-2019 - |
Вопрос
Я хочу непрерывно сэмплировать аудио линию моего ПК, используя C # (затем обрабатывать эти данные). Каков наилучший способ сделать выборку?
Решение
Вы можете сделать некоторые (базовые) аудиозаписи, используя NAudio .NET Audio Library. Взгляните на проект NAudioDemo, чтобы увидеть простой пример записи в файл WAV с использованием функций WaveIn. NAudio теперь также включает возможность захвата аудио с помощью WASAPI (Windows Vista и выше) и ASIO (если ваша звуковая карта имеет драйвер ASIO).
Другие советы
Существует также Alvas Audio библиотека, которая не бесплатная, имеет придирку экран, если вы не платите, но работает красиво. И документация хорошая, и, если вы обнаружите ошибку или что-то в этом роде, поддержка тоже будет в порядке.
В .NET Framework нет встроенных библиотек для работы со звуком, но если вы работаете в Win32, вы можете использовать неуправляемую библиотеку, например DirectSound, для этого.
Яньер Муньос показывает как написать полнодуплексный аудиоплеер в C #, используя waveIn через P / Invoke в CodeProject. Он упоминает управляемый DirectSound как более общий метод.
Управляемый DirectX поддерживает прямой захват аудио и очень прост в использовании, но больше не поддерживается и был удален из DirectX SDK в прошлом году. Все еще можно получить его путем установки версии SDK до августа 2007 года.
Хотя это не совсем соответствует вашим требованиям, более надежным подходом было бы создание сборки-оболочки C ++ / CLI вокруг собственного C ++ DirectSound API, опять же из DirectX SDK. Это может быть вызвано непосредственно из кода C #. Это, безусловно, более мощный и поддерживаемый подход, несмотря на то, что он требует определенных знаний C ++ и COM.
Я использовал оба эти метода в прошлом, и они оба хорошо работают.