Java AudioSystem.GetMixerInfo截断某些设备的设备名称
首先,这可能只是openJDK中的一个bug: 您已经厌倦了使用这两种方法: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运行时环境(构建12.0.2+10)
- OpenJDK运行时环境(构建14+36-1461)
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上,已经有几年没有被触及过了