我有一个用Java编写的带有Java Sound API的工作程序,它能够同时播放多个mp3音频文件到同一台计算机上的不同USB声卡。它在Linux中运行良好。但是,在Mac OS X中,它没有。
我的声音Mixer Infos列表是:
[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声卡而不必是系统的主输出设备?
答案 0 :(得分:3)
当它不是默认设备时,您可以使用其他采样率/样本格式播放USB卡吗?
我的OS X在默认声卡上进行软件混合+采样率+样本格式转换(否则多个程序将无法同时播放声音,除非他们都同意单一采样率+样本格式,这将是非常不实用),但对其他声卡不这样做。因此,当默认选择USB声卡时,OS X会将程序的输出转换为USB声卡硬件所需的输出,但如果它不是默认设置,则不会进行转换,因此您将收到不受支持的格式错误。
查看卡的文档,查看它支持的采样率和采样格式 - 最有可能是48000 Hz,16位带符号的小端,以及2或6或8个通道。