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