Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]如何用代码获取多块声卡的名称以及设置默认声卡?

1976yuan  发表于:2018-03-09 16:17:01  
复制

如何用代码获取多块声卡的名称以及设置默认声卡? 各位老师大家好!我在Access环境下开发了一个智能胎教播放程序。 希望在同一台电脑里可以同时播放三种不同的胎教声音,为了防止这三种不同的声音交织在同一块声卡里而出现怪异杂乱的合成声音,我就给电脑安装了三块独立的声卡,计划每一块声卡单独播放一种声音。 现在需要解决的问题是,如何用cmd命令行或者VBA代码做下面两件事: 第一件事:如何获取这三块声卡的名称?(USB Audio Device,Realtek HD Audio output,USB Audio Device (2)) 第二件事:如何将某一块声卡设置为默认播放设备?


 

Top
MDZZ 发表于:2018-03-09 16:47:44

切换默认声卡的命令行怎么写? - ☆PCI王牌声卡音频技术讨论区 POPPUR爱换 http://we.poppur.com/thread-838287-1-1.html

vb有类似的 vba没有现成



1976yuan 发表于:2018-03-09 18:07:18
Sub ttt() Dim Soundcard, k As Integer k = 0 For Each Soundcard In GetObject("winmgmts:").ExecQuery("select * From Win32_SoundDevice") k = k + 1 Debug.Print "声卡" & k & ":" & Soundcard.Name Next End Sub 我用上面的代码测试,得到的结果不如意: 声卡1:USB Audio Device 声卡2:Realtek High Definition Audio 声卡3:NVIDIA High Definition Audio 声卡4:USB Audio Device 而实际上,在Windows的声音和音频设备 属性设置的图形界面中,看到的只有三个声音播放设备,即:USB Audio Device、Realtek HD Audio output 和 USB Audio Device (2) 至于切换默认声卡,目前我只找到了一个据说不太安全的方法,也就是通过cmd命令行来修改注册表: Reg ADD "HKCU\Software\Microsoft\Multimedia\Sound Mapper" /v Playback /t REG_SZ /d "USB Audio Device (2)" /f (之所以说不安全,据说用此方法切换默认声卡,容易导致注册表文件本身的损坏) 在没有找到更好的切换默认声卡的方法之前,暂且采用修改注册表的方法吧。 只是,第一步无法获取三块可用的声卡名称:USB Audio Device、Realtek HD Audio output 和 USB Audio Device (2)。

1976yuan 发表于:2018-03-09 18:20:00
在网上搜索到了一篇关于枚举声卡的两种方法,但是用c#写的,有哪位老师可以把方法二改成VBA代码: 方法一:using System.Management; StringBuilder sb = new StringBuilder(); ManagementObjectSearcher SoundDeviceQuery = new ManagementObjectSearcher("SELECT * FROM Win32_SoundDevice"); foreach (ManagementObject SoundDevice in SoundDeviceQuery.Get()) { sb.AppendLine("=========================================================="); sb.AppendLine("Name : " + SoundDevice["Name"].ToString()); sb.AppendLine("DeviceID : " + SoundDevice["DeviceID"].ToString()); } Output: ========================================================== USB Audio Device USB/VID_046D&PID_0A02&MI_00/6&39E4CC60&0&0000 ========================================================== USB Audio Device USB/VID_046D&PID_0A02&MI_00/6&9124E6&0&0000 ========================================================== Realtek AC'97 Audio PCI/VEN_8086&DEV_24D5&SUBSYS_1021147B&REV_02/3&13C0B0C5&0&FD 方法二: Code For Sound Device Enumeration: using Microsoft.DirectX.DirectSound; DevicesCollection dc = new DevicesCollection(); foreach (DeviceInformation di in dc) { MessageBox.Show(di.Description); } Output: Realtek AC'97 Audio Logitech USB Headset Logitech USB Headset (2)

总记录:3篇  页次:1/1 9 1 :