【问题标题】:Java Sound API on OS X with USB Sound Card带有 USB 声卡的 OS X 上的 Java 声音 API
【发布时间】: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 出现?

标签: java api macos audio usb


【解决方案1】:

当 USB 卡不是默认设备时,您能否以其他采样率/采样格式在 USB 卡上播放?

我的是 OS X 在默认声卡上进行软件混合 + 采样率 + 采样格式转换(否则多个程序将无法同时播放声音,除非它们都同意一个采样率 + 采样格式,这将是非常不切实际),但对于其他声卡却没有。所以 OS X 在默认选择 USB 声卡时会将程序的输出转换为 USB 声卡硬件需要的输出,但如果不是默认设置则不会进行转换,因此会出现格式不支持的错误。

查看卡的文档以了解它支持的采样率和采样格式 - 很可能是 48000 Hz、16 位有符号小端序和 2 或 6 或 8 个通道。

【讨论】:

  • 感谢您的回答。我已经尝试过其他文件,包括具有声卡期望格式的 .wav 文件(Asus Xonar U1 - 基本上就是你描述的那个),但仍然没有运气。我也尝试手动设置 AudioFormat 但仍然没有。我仍然得到类似的东西: java.lang.IllegalArgumentException: Line unsupported: interface SourceDataLine support format PCM_SIGNED 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian 你有什么其他建议吗?谢谢。
  • 嗯,可以试试 6 通道和 8 通道。或者,查看卡的文档以了解它本机支持的格式。缺少文档,请尝试找到足够详细的 USB 声卡驱动程序(例如 Linux 中的驱动程序),列出该卡支持的格式。
猜你喜欢
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 2016-07-29
  • 2021-09-17
  • 2013-12-13
相关资源
最近更新 更多