如何在c#中枚举音频输出设备

Rom*_*mer 10 c# windows

我想知道如何在机器上获得已安装音频输出设备(waveOut)的列表

操作系统:Windows(XP,Vista,7)框架:.Net 3.5语言:c#

在遍历此列表时,我希望获得每个设备的标识符,制造商等信息.

任何提示?

Kaz*_*zar 16

以下是使用WMI(参考System.Management)枚举C#中的音频设备的代码.

    ManagementObjectSearcher objSearcher = new ManagementObjectSearcher(
           "SELECT * FROM Win32_SoundDevice");

    ManagementObjectCollection objCollection = objSearcher.Get();

    foreach (ManagementObject obj in objCollection)
    {
        foreach (PropertyData property in obj.Properties)
        {
            Console.Out.WriteLine(String.Format("{0}:{1}", property.Name, property.Value));
        }
    }
Run Code Online (Sandbox Code Playgroud)

这导致输出类似于:

Availability:
Caption:USB Audio Device
ConfigManagerErrorCode:0
ConfigManagerUserConfig:False
CreationClassName:Win32_SoundDevice
Description:USB Audio Device
DeviceID:USB\VID_047F&PID_0CA1&MI_00\6&2C037688&0&0000
DMABufferSize:
ErrorCleared:
ErrorDescription:
InstallDate:
LastErrorCode:
Manufacturer:(Generic USB Audio)
MPU401Address:
Name:USB Audio Device
PNPDeviceID:USB\VID_047F&PID_0CA1&MI_00\6&2C037688&0&0000
PowerManagementCapabilities:
PowerManagementSupported:False
ProductName:USB Audio Device
Status:OK
StatusInfo:3
SystemCreationClassName:Win32_ComputerSystem
SystemName:
Availability:

Caption:Realtek AC'97 Audio for VIA (R) Audio Controller
ConfigManagerErrorCode:0
ConfigManagerUserConfig:False
CreationClassName:Win32_SoundDevice
Description:Realtek AC'97 Audio for VIA (R) Audio Controller
DeviceID:PCI\VEN_1106&DEV_3059&SUBSYS_09011558&REV_60\3&61AAA01&1&8D
DMABufferSize:
ErrorCleared:
ErrorDescription:
InstallDate:
LastErrorCode:
Manufacturer:Realtek
MPU401Address:
Name:Realtek AC'97 Audio for VIA (R) Audio Controller
PNPDeviceID:PCI\VEN_1106&DEV_3059&SUBSYS_09011558&REV_60\3&61AAA01&1&8D
PowerManagementCapabilities:
PowerManagementSupported:False
ProductName:Realtek AC'97 Audio for VIA (R) Audio Controller
Status:OK
StatusInfo:3
SystemCreationClassName:Win32_ComputerSystem
SystemName:
Availability:

令人烦恼的是,WMI似乎并没有简单地区分音频的输入和输出设备.但是,使用DirectSound的托管接口和DevicesCollection类,如下所示(引用Microsoft.DirectX.DirectSound),我们可以获得更多面向声音的信息.

        DevicesCollection devColl = new DevicesCollection();
        foreach (DeviceInformation devInfo in devColl)
        {
            Device dev = new Device(devInfo.DriverGuid);   

            //use dev.Caps, devInfo to access a fair bit of info about the sound device
        }
Run Code Online (Sandbox Code Playgroud)


Oha*_*der 7

在Windows Vista及更高版本中,您可以使用NAudioIMMDeviceEnumerator为您包装的内容,以便枚举音频端点设备.例如:

var enumerator = new MMDeviceEnumerator();
foreach (var endpoint in 
         enumerator.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active))
{
    Console.WriteLine(endpoint.FriendlyName);
}
Run Code Online (Sandbox Code Playgroud)