获取默认音频/视频设备我正在使用dotNetc#。我需要确定默认的视频和音频设备我知道我可以枚举音频设备,但是如何确定默认设备?ManagementObjectSearchermo=newManagementObjectSearcher("select*fromWin32_SoundDevice");foreach(ManagementObjectsoundDeviceinmo.Get()){StringdeviceId=soundDevice.GetPropertyValue("DeviceId").ToString();字符串名称=soundDevice.GetPropertyValue("名称").ToString();Stringstatus=soundDevice.GetPropertyValue("StatusInfo").ToString();超级晚了,但我最近一直在努力弄清楚如何在不依赖NAudio等第三方项目的情况下获取音频设备信息。注册表似乎跟上音频播放和录音设备的变化。这应该为您提供一种获取已启用或活动音频录制或播放设备名称的方法。不能说它永远是完美的,但它现在对我有用。我是C#的新手,所以在阅读评论时请记住这一点。使用Microsoft.Win32;使用系统;namespaceRetrieveAudioDeviceInfo{classProgram{staticvoidMain(string[]args){stringRequestedDeviceStatus="Active";//初始化用于存储感兴趣的音频设备状态的字符串变量。有效输入="Active"或"Enabled"stringRequestedDeviceType="Playback";//初始化用于存储感兴趣的音频设备类型的字符串变量。Validinput="Playback"or"Recording"if(!String.Equals(RequestedDeviceStatus,"Active",StringComparison.OrdinalIgnoreCase)&&!String.Equals(RequestedDeviceStatus,"Enabled",StringComparison.OrdinalIgnoreCase))//检查RequestedDeviceStatus以确保提供了有效输入{Console.WriteLine("指定的AudioDeviceStatus无效。信息请求已取消");//将信息输出到事件日志Console.ReadLine();//等待用户输入返回;//立即停止处理内联函数}stringDeviceRegistryName;//声明用于存储的字符串变量感兴趣的设备类型的注册表名称if(String.Equals(RequestedDeviceType,"Playback",StringComparison.OrdinalIgnoreCase))//检查信息请求是否针对播放设备DeviceRegistryName="Render";//设置DeviceRegistryNameelseif(String.Equals(RequestedDeviceType,"Recording",StringComparison.OrdinalIgnoreCase))//检查信息请求是否用于记录设备DeviceRegistryName="Capture";//设置DeviceRegistryNameelse{Console.WriteLine("指定的AudioDeviceType无效。信息请求已取消");//将信息输出到事件日志Console.ReadLine();//等待用户输入返回;//立即停止处理内联函数}RegistryKeyRootKey;//初始化RegistryKey以包含根(基本)密钥以评估if(Environment.Is64BitOperatingSystem)//检查操作系统是否为64位RootKey=RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,RegistryView.Registry64);//打开注册表的LocalMac具有64位视图的hine密钥elseRootKey=RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,RegistryView.Registry32);//使用32位视图字符串打开注册表的LocalMachine键AudioKey=@"SOFTWAREMicrosoftWindowsCurrentVersionMMDevicesAudio";//音频设备的父注册表项stringDeviceName,DeviceType;//声明用于存储音频设备信息的字符串变量string[]ActiveDeviceRoles=null;//使用(RegistryKeyChildKey=RootKey.OpenSubKey(AudioKey))初始化字符串数组,用于存储有关每个音频角色的活动设备的信息//打开AudioKey的子密钥并存储在ChildKey中。实施“使用”以进行适当处置。{foreach(stringChildKeyNameinChildKey.GetSubKeyNames())//遍历ChildKey中的每个SubKeyName{if(ChildKeyName==DeviceRegistryName)//检查ChildKeyName是否为“Render”(表示音频播放设备的注册表文件夹){using(RegistryKeyRenderKey=ChildKey.OpenSubKey(ChildKeyName))//打开ChildKey的子项并存储在RenderKey中。实施“使用”以进行适当处置。{DateTime[]ActiveDeviceRoleTimes=null;//初始化DateTime数组,用于存储音频设备最后一次担任特定音频角色的时间intj=1;//初始化用于跟踪音频播放设备计数的整型变量foreach(stringDeviceKeyNameinRenderKey.GetSubKeyNames())//遍历RenderKey中的每个SubKeyName{using(RegistryKeyDeviceKey=RenderKey.OpenSubKey(DeviceKeyName))//打开RenderKey的子键和存储在DeviceKey中。实施“使用”以进行适当处置。{if(Convert.ToInt32(DeviceKey.GetValue("DeviceState"))==1)//检查当前音频设备是否启用{stringCurrentDeviceInfo;//使用(RegistryKeyDeviceKeyProperties=DeviceKey.OpenSubKey("Properties"))声明用于存储有关当前音频设备信息的字符串变量//打开DeviceKey的“Properties”子项并存储在DeviceKe中y属性。实施“使用”以进行适当处置。{DeviceName=DeviceKeyProperties.GetValue("{b3f8fa53-0004-438e-9003-51a46e139bfc},6").ToString();//从注册表中检索当前设备的名称DeviceType=DeviceKeyProperties.GetValue("{a45c254e-df1c-4efd-8020-67d146a850e0},2").ToString();//从注册表中检索当前设备的类型CurrentDeviceInfo=DeviceType+"("+DeviceName+")";//组合DeviceName和DeviceType信息,类似于VoiceAttack在“选项”菜单中显示此数据的方式if(String.Equals(RequestedDeviceStatus,"Enabled",StringComparison.OrdinalIgnoreCase))//检查用户是否要显示启用了哪些音频设备{Console.WriteLine("Audio"+RequestedDeviceType+"Device"+j+++"="+CurrentDeviceInfo);//将CurrentDeviceInfo输出到事件日志continue;//继续父循环中的下一个索引}}string[]roles={"Role:0","Role:1","Role:2"};//初始化用于存储不同音频角色名称的字符串数组DateTime[]CurrentDeviceRoleTimes=newDateTime[roles.Length];//初始化DateTime数组,用于存储当前音频设备最后担任特定音频角色的时间//Console.WriteLine("Audio"+RequestedDeviceType+"Device"+j+++"="+CurrentDeviceInfo);//将CurrentDeviceInfo输出到事件日志。对调试有用for(inti=0;i当前选择的默认设备会一直显示为ID0以上是C#学习教程:获取默认音视频设备分享的所有内容如果对你有用还有你需要了解的C#学习教程,希望你多多关注---本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,如需转载请注明出处:
