我试图使用以下代码在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中声音API的限制吗?还是有其他办法在mac中执行此操作?
答案 0 :(得分:1)
这个问题面临的是苹果Java for OS X 2014-001。从Apple卸载java 1.6并尝试使用oracle java 1.7。现在这在mac osx和windows中运行良好。