Java AudioSystem.GetMixerInfo截断某些设备的设备名称

问题描述

我将从这开始,这可能只是openJDK中的一个错误: 两者都累了:

  • OpenJDK运行时环境(内部版本12.0.2 + 10)
  • OpenJDK运行时环境(内部版本14 + 36-1461)

当我尝试从混音器信息中获取TargetDataLine对象的名称时,该名称被截断为32个字符,但是Microsoft为Mic和Speaker设备的设备的字符串名称添加了31个字符。意思是我有1个字符来区分设备,这没有帮助。

import javax.sound.sampled.*
...
public TargetDataLine getAudioInLineByName(String deviceName) {
    Mixer.Info[] mixerInfos = AudioSystem.getMixerInfo();
    for (Mixer.Info info : mixerInfos) {
        logger.debug(JsonUtils.toJson(info));
        Mixer m = AudioSystem.getMixer(info);
        Line.Info[] lineInfos = m.getTargetLineInfo();
        //Gets Mics on systems
        if (lineInfos.length >= 1 && lineInfos[0].getLineClass() == TargetDataLine.class) {
            //Pass in name if device to search for
            if (info.getName().contains(deviceName)) {
                logger.info("Match found: " + info.getName());
                return  (TargetDataLine) m.getLine(lineInfos[0]);
            }
        }
    }
    return null; 
}

我在这里清理了调试输出的输出:

   {
      "name":"Port Echo Cancelling Speakerphone (P","vendor":"Unknown Vendor","description":"Port Mixer","version":"5.0"
   },{
      "name":"Port Speakers/Headphones (Realtek(R)","version":"10.0"
   },{
      "name":"Echo Cancelling Speakerphone (Poly Studio)","description":"Direct Audio Device: DirectSound Playback","version":"Unknown Version"
   },{
      "name":"Speakers/Headphones (Realtek(R) Audio)",{
      "name":"Echo Cancelling Speakerphone (P","description":"Direct Audio Device: DirectSound Capture",{
      "name":"Microphone (Realtek(R) Audio)","version":"Unknown Version"
   }...
]

如您所见,“端口混合器”和“捕获设备”的名称均被截断为32个字符,但“播放”未被截断。 有没有解决方法,我在java.net上看到了与此相关的几个老错误,但是它们存在于Java的旧版本中,并且几年没有被使用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...