如何通过Java Sound API获取麦克风/扬声器等音频设备名称?
使用Java Sound API获取音频输入/输出设备名称
你遇到的问题很典型——DataLine.Info确实只负责描述音频线路的格式参数,要拿到设备的名称,得转向**Mixer(混音器)**这个核心组件。Java Sound API里,每个物理音频设备(麦克风、扬声器)都对应一个Mixer,而Mixer.Info类里就包含了我们需要的设备名称、描述等信息。
下面直接上实用的代码方案:
1. 列出所有音频设备(输入+输出)
先从最简单的开始,一次性获取所有音频设备的详细信息:
import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Mixer; public class AudioDeviceLister { public static void main(String[] args) { // 获取系统中所有音频设备的Mixer信息数组 Mixer.Info[] allMixerInfos = AudioSystem.getMixerInfo(); System.out.println("=== 所有音频设备 ==="); for (Mixer.Info mixerInfo : allMixerInfos) { System.out.println("设备名称:" + mixerInfo.getName()); System.out.println("设备描述:" + mixerInfo.getDescription()); System.out.println("厂商信息:" + mixerInfo.getVendor()); System.out.println("------------------------"); } } }
运行这段代码,你就能看到每个设备的getName()输出,比如“内置麦克风”“扬声器 (Realtek High Definition Audio)”这类直观名称,完全符合你的需求。
2. 单独筛选输入/输出设备
如果需要分别列出麦克风(输入)和扬声器(输出),可以通过检查Mixer是否支持对应的音频线路类型:
- 输入设备:支持
TargetDataLine(用于捕获音频输入) - 输出设备:支持
SourceDataLine(用于播放音频输出)
代码示例:
import javax.sound.sampled.*; public class FilteredAudioDeviceLister { public static void main(String[] args) { Mixer.Info[] mixerInfos = AudioSystem.getMixerInfo(); // 筛选麦克风(输入设备) System.out.println("\n=== 可用音频输入设备(麦克风) ==="); for (Mixer.Info info : mixerInfos) { Mixer mixer = AudioSystem.getMixer(info); // 检查是否支持输入线路 if (mixer.isLineSupported(new DataLine.Info(TargetDataLine.class, null))) { System.out.println("- " + info.getName()); } } // 筛选扬声器(输出设备) System.out.println("\n=== 可用音频输出设备(扬声器) ==="); for (Mixer.Info info : mixerInfos) { Mixer mixer = AudioSystem.getMixer(info); // 检查是否支持输出线路 if (mixer.isLineSupported(new DataLine.Info(SourceDataLine.class, null))) { System.out.println("- " + info.getName()); } } } }
小提示
- 不同操作系统的设备名称格式会有差异,但都是用户能直接识别的名称,不用担心看不懂。
- 如果某些设备没被识别,大概率是系统音频驱动的问题,确保驱动正常安装即可。
内容的提问来源于stack exchange,提问作者Ken Reid
相关产品推荐
相关产品推荐

