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

Java AudioSystem.GetMixerInfo截断某些设备的设备名称,java,windows,audio,audio-recording,Java,Windows,Audio,Audio Recording,首先,这可能只是openJDK中的一个bug: 您已经厌倦了使用这两种方法: OpenJDK运行时环境(构建12.0.2+10) OpenJDK运行时环境(构建14+36-1461) 当我试图从混音器信息中获取TargetDataLine对象的名称时,它被截断为32个字符,但是对于同时是麦克风和扬声器设备的设备,Microsoft在字符串名称中添加了31个字符。这意味着我有1个字符来区分设备,这是没有帮助的 import javax.sound.sampled.* ... public Ta

首先,这可能只是openJDK中的一个bug: 您已经厌倦了使用这两种方法:

  • OpenJDK运行时环境(构建12.0.2+10)
  • OpenJDK运行时环境(构建14+36-1461)
当我试图从混音器信息中获取TargetDataLine对象的名称时,它被截断为32个字符,但是对于同时是麦克风和扬声器设备的设备,Microsoft在字符串名称中添加了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)",
      "vendor":"Unknown Vendor",
      "description":"Port Mixer",
      "version":"10.0"
   },
   {
      "name":"Echo Cancelling Speakerphone (Poly Studio)",
      "vendor":"Unknown Vendor",
      "description":"Direct Audio Device: DirectSound Playback",
      "version":"Unknown Version"
   },
   {
      "name":"Speakers/Headphones (Realtek(R) Audio)",
      "vendor":"Unknown Vendor",
      "description":"Direct Audio Device: DirectSound Playback",
      "version":"Unknown Version"
   },
   {
      "name":"Echo Cancelling Speakerphone (P",
      "vendor":"Unknown Vendor",
      "description":"Direct Audio Device: DirectSound Capture",
      "version":"Unknown Version"
   },
   {
      "name":"Microphone (Realtek(R) Audio)",
      "vendor":"Unknown Vendor",
      "description":"Direct Audio Device: DirectSound Capture",
      "version":"Unknown Version"
   }...
]
正如您所见,“端口混合器”和“捕获设备”的名称都已被截断为32个字符,但播放未被截断。 是否有解决方法,我看到java.net上出现了几个与此相关的老bug,但它们出现在较旧版本的java上,已经有几年没有被触及过了