通过Java SoundSystem使用ALSA pcm输出

时间:2012-02-21 17:13:06

标签: java ubuntu javasound alsa

我有一个具有多个输出的声卡,并使用ALSA将它们映射到2个独立的立体声声道。配置工作正常,并允许我,例如扬声器测试在其上播放音频。

我现在想要使用AudioSystem API在Java程序中使用这两个立体声输出。但是,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.");
        }
    }
}

1 个答案:

答案 0 :(得分:0)

答案是:不。 Java无法列出用户定义的ALSA pcms,因为它只公开硬件设备和“默认”设备。

在此处获取ALSA开发人员的信息:http://www.spinics.net/linux/fedora/alsa-user/msg10796.html