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 (将#修改为@)