【发布时间】:2011-01-07 10:42:55
【问题描述】:
我有一个用 Java 编写的带有 Java Sound API 的工作程序,它能够将多个 mp3 音频文件同时播放到同一台计算机上的不同 USB 声卡。它在 Linux 中运行良好。但是,在 Mac OS X 中却没有。
我的混音器信息列表是:
[0] Java Sound Audio Engine
[1] Built-in Input
[2] USB Advanced Audio Device
如果我选择混音器 [0] 来播放文件,它会使用内置声卡成功播放。如果我选择混音器 [2] 播放文件,我会收到以下异常:
Exception in thread "Thread-1" java.lang.IllegalArgumentException: Line unsupported: interface SourceDataLine supporting format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian
at com.sun.media.sound.SimpleInputDevice.getLine(SimpleInputDevice.java:142)
at javax.sound.sampled.AudioSystem.getSourceDataLine(AudioSystem.java:633)
at pt.mobbit.sensorsloader.actuators.multiaudio.AudioPlayer$AudioPlayerThread.run(AudioPlayer.java:135)
at java.lang.Thread.run(Thread.java:613)
但是,如果我在 OS X 的系统偏好设置中将输出设备更改为 USB 声卡,然后在我的 java 应用程序中选择混音器 [0],声音会通过 USB 声卡发出。这让我相信 USB 声卡也可以在 OS X 中播放 mp3 文件,只是当它不是主要输出设备时。
有谁知道如何在 OS X 中将声音输出到我的 USB 声卡,而不必成为系统的主要输出设备?
【问题讨论】:
-
我刚刚打印出了我的混音器提供的所有 SourceDataLine 和 TargetDataLine。奇怪的是,USB 声卡只显示一个 TargetDataLine(麦克风输入)。如何让明显存在的 SourceDataLine 出现?