2009-10-06 5 views
8

Je voudrais savoir comment obtenir une liste des périphériques audio installés sur (waveOut) sur une machineComment énumérer les équipements périphériques audio en C#

OS: Windows (XP, Vista, 7) Cadre: .Net 3.5 Langue: C#

Lors de l'itération de cette liste, je voudrais obtenir des informations telles que Identifiant, Fabricant, ... par appareil.

Des indices?

+0

départ WMI ... –

Répondre

15

Voici le code d'énumérer les périphériques audio en C#, en utilisant WMI (de System.Management de référence).

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)); 
     } 
    } 

Quels sont les résultats de la production quelque chose comme:

 
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 ne semble pas fâcheusement distinguer simplement entre l'entrée et de sortie pour l'audio. Cependant, en utilisant l'interface gérée pour DirectSound et la classe DevicesCollection, comme ci-dessous (référence Microsoft.DirectX.DirectSound), nous pouvons obtenir beaucoup plus d'informations orientées sur le son.

 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 
     } 
+0

Savez-vous s'il est possible d'obtenir Jack information du périphérique audio certains? –

+0

Je ne suis pas sûr, peut-être regarder https://msdn.microsoft.com/en-us/library/windows/desktop/dd370793(v=vs.85).aspx - juste un coup de couteau dans le noir. – Kazar

+0

Managed DirectX est obsolète depuis un certain temps. –

3

est ici un exemple

Ajouter une référence à System.Management

ManagementObjectSearcher mo = new ManagementObjectSearcher("select * from Win32_SoundDevice"); 

foreach (ManagementObject soundDevice in mo.Get()) 
{ 
    Console.WriteLine(soundDevice.GetPropertyValue("DeviceId")); 
    Console.WriteLine(soundDevice.GetPropertyValue("Manufacturer")); 
    // etc      
} 
-2

Vérifiez API waveOutGetNumDevs

[DllImport("winmm.dll", SetLastError = true)] 
public static extern uint waveOutGetNumDevs(); 

Renvoie le nombre de périphériques. Une valeur de retour de zéro signifie qu'aucun périphérique n'est présent ou qu'une erreur s'est produite. http://msdn.microsoft.com/en-us/library/dd743860(v=vs.85).aspx

+1

Cela vous donne seulement le nombre de périphériques. Comment les énumérez-vous? –

0
 /// <summary> 
     /// The DirectSoundEnumerate function enumerates the DirectSound Odrivers installed in the system. 
     /// </summary> 
     /// <param name="lpDSEnumCallback">callback function</param> 
     /// <param name="lpContext">User context</param> 
     [DllImport("dsound.dll", EntryPoint = "DirectSoundEnumerateA", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] 
     static extern void DirectSoundEnumerate(DevicesEnumCallback lpDSEnumCallback, IntPtr lpContext); 

Et le rappel devrait par comme ceci:

private static bool DevicesEnumCallbackHandler(IntPtr lpGuid, IntPtr lpcstrDescription, IntPtr lpcstrModule, IntPtr lpContext) 
5

Dans Windows Vista et au-dessus, vous pouvez utiliser IMMDeviceEnumerator qui est enveloppé pour vous par NAudio afin d'énumérer les périphériques d'extrémité audio. Par exemple:

var enumerator = new MMDeviceEnumerator(); 
foreach (var endpoint in 
     enumerator.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active)) 
{ 
    Console.WriteLine(endpoint.FriendlyName); 
} 
+0

Savez-vous s'il est possible d'obtenir des informations Jack du certain périphérique audio? –

Questions connexes