You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:11:00