Я считаю, что самый простой путь - использовать старый мультимедийный API Windows, потому что он действительно прост.
Вот ссылка на MSDN: http://msdn.microsoft.com/en-us/library/dd743586(v=VS.85).aspx
Что вы делаете, так этоВы используете функцию waveInOpen
, чтобы получить устройство ввода.Чтобы выяснить, какое устройство использовать, вы не перечислите все устройства, но вы можете запросить каждое из них.Количество установленных устройств возвращается по телефону waveInGetNumDevs
.Затем вы можете вызвать waveInGetDevCaps
для каждого устройства и проверить эти свойства.
Если у вас есть дескриптор вашего устройства, вы неоднократно вызываете waveInAddBuffer
, чтобы получить небольшие порции данных.В зависимости от формата, который вы указали во время waveInOpen
, байты представляют необработанные аудиоданные.Амплитуда в 8- или 16-битном знаке или неотстраненной выборке на некоторой частоте.
Затем можно применить скользящее среднее для сглаживания сигнала и просто напечатать его.
C # не имеет звукаAPI, о котором я знаю, поэтому вы используете P / Invoke для доступа к функциям Win32 API.Это довольно просто, вам нужно только портировать небольшие версии заголовков Win32, чтобы иметь возможность вызывать их из C # напрямую.
Если вы более хардкорный, вы можете написать библиотеку-обертку на C ++ / CLI.Это неплохая идея, потому что она позволяет вам использовать существующие заголовочные файлы Windows C / C ++ и интересным образом смешивать C ++ и управляемый код.Просто будьте осторожны с неуправляемыми ресурсами, и вы получите очень мощную библиотеку интробируемости в кратчайшие сроки.
Но есть и более продвинутые аудио API, начиная с Windows Vista, компонентов Windows Core Audio, которые могут быть еще интереснеевдоль линии.Но для базовой операции ввода-вывода мультимедийные функции Windows помогут вам быстрее.
Я использовал эти функции несколько раз при создании простых программных синтезаторов.К сожалению, этот код давно ушел.