如何在mac osx中使用java连接可用的音频设备

时间:2014-08-20 05:24:11

标签: java macos audio

我试图使用以下代码在MAC OSX中获取可用的混合物。即使我连接了3个不同的音频设备,并且能够在系统声音设置中看到相同的内容,下面的代码也不会全部显示。即mix.getMixerInfo())。isLineSupported(info)不允许显示任何内容和 甚至无法使用java连接。 Windows版本也一样。

  public static void main(String[] args) {
    String sf_ringtone = "/Users/abc.WAV";
    AudioInputStream stream = null;

    try {
        stream = AudioSystem.getAudioInputStream(new File(sf_ringtone));
    } catch (UnsupportedAudioFileException ex) {
        System.out.println(ex.getStackTrace().toString());
    } catch (IOException ex) {
        System.out.println(ex.getStackTrace().toString());
    }

    AudioFormat format=null;
    format = stream.getFormat();

    if (format.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {
        format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
                format.getSampleRate(), format.getSampleSizeInBits() * 2,
                format.getChannels(), format.getFrameSize() * 2,
                format.getFrameRate(), true); // big endian
        stream = AudioSystem.getAudioInputStream(format, stream);
    }

    DataLine.Info info = new DataLine.Info(Clip.class, stream.getFormat(),
            ((int) stream.getFrameLength() * format.getFrameSize()));

    ArrayList<Mixer> mixerList = (ArrayList<Mixer>) getAllMixer();
    for(Mixer mix:mixerList) {
        System.out.println(" Mixture  "+mix.getMixerInfo().getName());
    }

    ArrayList<String> cmbRingtonePlayback = new ArrayList<String>();
    for (Mixer mix : mixerList) {
        if (AudioSystem.getMixer(mix.getMixerInfo()).isLineSupported(info)) {
            System.out.println(supported mixture :: "+mix.getMixerInfo().getName());                    
        }
    }


}

输出:

混合Java声音音频引擎

混合内置输入

混合物JABRA TALK

Mixite Logitech USB耳机

支持混合:: Java声音音频引擎

这是mac osx中声音AP​​I的限制吗?还是有其他办法在mac中执行此操作?

1 个答案:

答案 0 :(得分:1)

这个问题面临的是苹果Java for OS X 2014-001。从Apple卸载java 1.6并尝试使用oracle java 1.7。现在这在mac osx和windows中运行良好。