Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的捕获设备列表(例如麦克风、立体声混音…)#_C#_Wpf_Audio_Device - Fatal编程技术网

C# C语言中的捕获设备列表(例如麦克风、立体声混音…)#

C# C语言中的捕获设备列表(例如麦克风、立体声混音…)#,c#,wpf,audio,device,C#,Wpf,Audio,Device,如何获取可用的声音设备列表?我指的是那个形象 我想把它放在组合框里。我的意思只是: 传声器 立体声混音 排队 ……还有更多 但一定是因为系统根据语言本地化系统更改了设备的名称,而这正是我所需要的 例如,在我的语言中是一种叫做Mikrofon和Stereo Mix=SměšovačStereo的麦克风 我需要这些设备的名字,没有别的 可以让某人成为示例代码吗?以下代码可以帮助您获得音频设备列表 ManagementObjectSearcher objSearcher = new Manag

如何获取可用的声音设备列表?我指的是那个形象

我想把它放在组合框里。我的意思只是:

  • 传声器
  • 立体声混音
  • 排队
  • ……还有更多
但一定是因为系统根据语言本地化系统更改了设备的名称,而这正是我所需要的

例如,在我的语言中是一种叫做Mikrofon和Stereo Mix=SměšovačStereo的麦克风

我需要这些设备的名字,没有别的


可以让某人成为示例代码吗?

以下代码可以帮助您获得音频设备列表

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
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

从列表中获取标题值。这是一个简单的文本解析问题;)

以下代码可以帮助您获取音频设备列表

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
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

从列表中获取标题值。这是一个简单的文本解析问题;)

这就是我所需要的

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

    [DllImport("winmm.dll", SetLastError = true, CharSet = CharSet.Auto)]
    public static extern uint waveInGetDevCaps(uint hwo, ref WAVEOUTCAPS pwoc, uint cbwoc);

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public struct WAVEOUTCAPS
    {
        public ushort wMid;
        public ushort wPid;
        public uint vDriverVersion;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
        public string szPname;
        public uint dwFormats;
        public ushort wChannels;
        public ushort wReserved1;
        public uint dwSupport;
    }

    public static string[] GetSoundDevices()
    {
        uint devices = waveInGetNumDevs();
        string[] result = new string[devices];
        WAVEOUTCAPS caps = new WAVEOUTCAPS();
        using (StreamWriter sw = new StreamWriter("appdata/audio/name"))
        {
            for (uint i = 0; i < devices; i++)
            {
                waveInGetDevCaps(i, ref caps, (uint)Marshal.SizeOf(caps));
                result[i] = caps.szPname;
                sw.WriteLine(caps.szPname);
            }
            return result;
        }
    }
[DllImport(“winmm.dll”,SetLastError=true)]
静态外部单元waveInGetNumDevs();
[DllImport(“winmm.dll”,SetLastError=true,CharSet=CharSet.Auto)]
公共静态外部waveInGetDevCaps(uint hwo、ref WAVEOUTCAPS pwoc、uint cbwoc);
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Auto)]
公共结构WAVEOUTCAPS
{
公共卫生署;
公共卫生署;
公共uint版本;
[Marshallas(UnmanagedType.ByValTStr,SizeConst=64)]
公共字符串szPname;
公共uint格式;
公共频道;
公共卫生服务1;
公众支持;
}
公共静态字符串[]GetSoundDevices()
{
uint devices=waveInGetNumDevs();
字符串[]结果=新字符串[设备];
WAVEOUTCAPS=新的WAVEOUTCAPS();
使用(StreamWriter sw=新StreamWriter(“appdata/audio/name”))
{
对于(uint i=0;i
。。但是每一行都被缩短了,我不能把它全部写下来

如何修改列出整体名称的代码


谢谢

这就是我所需要的

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

    [DllImport("winmm.dll", SetLastError = true, CharSet = CharSet.Auto)]
    public static extern uint waveInGetDevCaps(uint hwo, ref WAVEOUTCAPS pwoc, uint cbwoc);

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public struct WAVEOUTCAPS
    {
        public ushort wMid;
        public ushort wPid;
        public uint vDriverVersion;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
        public string szPname;
        public uint dwFormats;
        public ushort wChannels;
        public ushort wReserved1;
        public uint dwSupport;
    }

    public static string[] GetSoundDevices()
    {
        uint devices = waveInGetNumDevs();
        string[] result = new string[devices];
        WAVEOUTCAPS caps = new WAVEOUTCAPS();
        using (StreamWriter sw = new StreamWriter("appdata/audio/name"))
        {
            for (uint i = 0; i < devices; i++)
            {
                waveInGetDevCaps(i, ref caps, (uint)Marshal.SizeOf(caps));
                result[i] = caps.szPname;
                sw.WriteLine(caps.szPname);
            }
            return result;
        }
    }
[DllImport(“winmm.dll”,SetLastError=true)]
静态外部单元waveInGetNumDevs();
[DllImport(“winmm.dll”,SetLastError=true,CharSet=CharSet.Auto)]
公共静态外部waveInGetDevCaps(uint hwo、ref WAVEOUTCAPS pwoc、uint cbwoc);
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Auto)]
公共结构WAVEOUTCAPS
{
公共卫生署;
公共卫生署;
公共uint版本;
[Marshallas(UnmanagedType.ByValTStr,SizeConst=64)]
公共字符串szPname;
公共uint格式;
公共频道;
公共卫生服务1;
公众支持;
}
公共静态字符串[]GetSoundDevices()
{
uint devices=waveInGetNumDevs();
字符串[]结果=新字符串[设备];
WAVEOUTCAPS=新的WAVEOUTCAPS();
使用(StreamWriter sw=新StreamWriter(“appdata/audio/name”))
{
对于(uint i=0;i
。。但是每一行都被缩短了,我不能把它全部写下来

如何修改列出整体名称的代码


谢谢

用这个它对我有用

using NAudio.CoreAudioApi;

MMDeviceEnumerator names = new MMDeviceEnumerator();
var devices = names.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active);            
foreach (var device in devices)
    MessageBox.Show(device.friendlyName);

用这个它对我有用

using NAudio.CoreAudioApi;

MMDeviceEnumerator names = new MMDeviceEnumerator();
var devices = names.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active);            
foreach (var device in devices)
    MessageBox.Show(device.friendlyName);

在C++中它是。它做的更多,但它从设备本身的枚举开始。我几乎已经用C完成了这个项目,我只错过了这一部分,这在C中是可能的吗?谢谢可能的第二份!我不想知道声卡的信息,但我需要一个设备列表,用于用户在Windows中设置的语言。C++中是这样。它做的更多,但它从设备本身的枚举开始。我几乎已经用C完成了这个项目,我只错过了这一部分,这在C中是可能的吗?谢谢可能的第二份!我不想要有关声卡的信息,但我需要一个设备列表,以用户在其windows中设置的语言进行录制。谢谢,但这不是它。它向我展示了许多关于我的声卡的信息。我需要简单的捕获设备列表,只有图像中的名称(麦克风、线路输入、立体声混音……)我不想要USB音频设备或Realtek高清音频之类的名称,而是声卡的名称。。我需要输入的名称:'(感谢您应该帮助您获得用户友好的名称:)我将此主题中的代码添加到我的程序中,但无法获得字符串结果(我的意思是用户友好的输入名称)。。嗯,是的,我是初学者,你能再帮我一次吗?:)谢谢你得到了什么结果?谢谢,但不是这样。它向我展示了许多关于我的声卡的信息。我需要简单的捕获设备列表,只有图像中的名称(麦克风、线路输入、立体声混音……)我不想要USB音频设备或Realtek高清音频之类的名称,而是声卡的名称。。我需要输入的名称:'(感谢您应该帮助您获得用户友好的名称:)我将此主题中的代码添加到我的程序中,但无法获得字符串结果(我的意思是用户友好的输入名称)。。嗯