我想知道如何在一臺機器上獲取安裝的音頻輸出設備(waveout的)的列表在C#中如何枚舉音頻輸出設備
操作系統:Windows(XP,Vista中,7) 框架: .Net 3.5 語言:c#
當遍歷此列表時,我想獲得像標識符,製造商,...每個設備的信息。
任何提示?
我想知道如何在一臺機器上獲取安裝的音頻輸出設備(waveout的)的列表在C#中如何枚舉音頻輸出設備
操作系統:Windows(XP,Vista中,7) 框架: .Net 3.5 語言:c#
當遍歷此列表時,我想獲得像標識符,製造商,...每個設備的信息。
任何提示?
這裏是代碼在C#枚舉音頻設備,使用WMI(參考System.Management)。
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));
}
}
導致輸出類似:
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煩人不會出現音頻輸入和輸出設備之間的簡單區分。但是,如下(參考Microsoft.DirectX.DirectSound),使用DirectSound的受管接口和DevicesCollection類,我們可以獲得更多面向聲音的信息。
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
}
你知道是否有可能獲得某個音頻設備的傑克信息? – 2015-12-01 17:47:08
我不確定,也許看看https://msdn.microsoft.com/en-us/library/windows/desktop/dd370793(v=vs.85).aspx - 只是在黑暗中刺。 – Kazar 2015-12-03 09:02:56
託管DirectX已被棄用相當長一段時間。 – 2016-08-20 02:19:56
這裏是一個例子
的參考添加到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
}
檢查waveOutGetNumDevs API
[DllImport("winmm.dll", SetLastError = true)]
public static extern uint waveOutGetNumDevs();
返回設備的數量。返回值爲零意味着沒有設備存在或發生錯誤。 http://msdn.microsoft.com/en-us/library/dd743860(v=vs.85).aspx
這隻給你設備的數量。你如何列舉它們? – 2012-10-24 18:51:48
/// <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);
而且回調應該是這樣的:
private static bool DevicesEnumCallbackHandler(IntPtr lpGuid, IntPtr lpcstrDescription, IntPtr lpcstrModule, IntPtr lpContext)
在Windows Vista及以上的,你可以使用IMMDeviceEnumerator
這是爲了枚舉音頻終端設備包你通過NAudio。例如:
var enumerator = new MMDeviceEnumerator();
foreach (var endpoint in
enumerator.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active))
{
Console.WriteLine(endpoint.FriendlyName);
}
你知道是否有可能獲得某個音頻設備的傑克信息? – 2015-12-01 17:50:46
檢出WMI ... – 2009-10-06 12:36:52