我有一个带有多个输出的声卡,并使用 ALSA 将它们映射到 2 个独立的立体声通道。配置工作正常,并允许我,例如使用扬声器测试在它们上播放音频。
我现在想在 Java 程序中使用这两个立体声输出,使用 AudioSystem API。但是,stereo1 和 stereo2 不会使用 MixerInfo 显示。
我真的不明白 Java 如何决定使用 AudioSystem API 公开哪些“设备”。我目前正在 Ubuntu 11.10 系统上对此进行测试。
这是使用的 asound.conf:
#/etc/asound.conf
pcm_slave.fourchannels {
pcm "hw:0,0"
channels 4
}
pcm.stereo1 {
type plug
slave.pcm {
type dshare
ipc_key 87882222
slave fourchannels
bindings [ 0 1 ]
}
}
pcm.stereo2 {
type plug
slave.pcm {
type dshare
ipc_key 87882222
slave fourchannels
bindings [ 2 3 ]
}
}
这是我用来显示可用输入和输出的代码:
Mixer.Info[] mixers = AudioSystem.getMixerInfo();
for (Mixer.Info mixerInfo : mixers) {
System.out.println("Found Mixer: " + mixerInfo);
Mixer m = AudioSystem.getMixer(mixerInfo);
Line.Info[] sourceLines = m.getSourceLineInfo();
for (Line.Info li : sourceLines) {
System.out.println(" Found source line: " + li);
try {
m.open();
} catch (LineUnavailableException e) {
System.out.println(" Line unavailable.");
}
}
Line.Info[] targetLines = m.getTargetLineInfo();
for (Line.Info li : targetLines) {
System.out.println(" Found source line: " + li);
try {
m.open();
} catch (LineUnavailableException e) {
System.out.println(" Line unavailable.");
}
}
}