Java Sound API на OS X со звуковой картой USB - PullRequest
2 голосов
/ 20 января 2010

У меня есть рабочая программа, написанная на Java с API Java Sound, которая способна одновременно воспроизводить несколько аудиофайлов в формате 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 также может воспроизводить файлы mp3 в OS X, но только если это не основное устройство вывода.

Кто-нибудь знает, как я могу выводить звук на свою звуковую карту USB в OS X без необходимости быть основным устройством вывода системы?

1 Ответ

3 голосов
/ 20 января 2010

Можно ли воспроизводить на USB-карте другие частоты дискретизации / образцы форматов, если это устройство не является устройством по умолчанию?

Моя версия заключается в том, что OS X выполняет программное микширование + частоту дискретизации + преобразование формата семпла на звуковой карте по умолчанию (в противном случае несколько программ не смогут одновременно воспроизводить звуки, если все они не согласятся на единую частоту дискретизации + формат семпла, который был бы очень непрактично), но это не делает это для других звуковых карт. Таким образом, OS X преобразует выходные данные вашей программы в ту, которая нужна оборудованию звуковой карты USB, когда звуковая карта USB выбрана по умолчанию, но преобразование не выполняется, если это не значение по умолчанию, поэтому вы получаете ошибку неподдерживаемого формата.

Просмотрите документацию карты, чтобы увидеть частоту дискретизации и поддерживаемый формат сэмпла - наиболее вероятно, что это будет 48000 Гц, 16-разрядный двоичный код с прямым порядком байтов и 2, 6 или 8 каналов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...