Я пытаюсь записать/обработать некоторый звук из трех USB-микрофонов с помощью Java Sound на Snow Leopard (но может переключиться на Windows, если он исправляет все). Проблема в том, что когда я пытаюсь использовать микшер, который соответствует микрофону usb, Java Sound говорит мне, что линия не поддерживается. В частности, это говорит об этом...
Доступные смесители:
Java Sound Audio Engine
USBMIC Serial # 041270067
Встроенный встроенный микрофон ввода
Soundflower (2ch)
Soundflower (16ch)
Исключение в потоке "AWT-EventQueue-0" java.lang.IllegalArgumentException: Строка не поддерживается: интерфейс Формат поддержки TargetDataLine PCM_SIGNED 96000.0 Гц, 8 бит, стерео, 2 байта/кадр,
... когда я попрошу выбрать микшер USBMIC:
Mixer mixer = AudioSystem.
getMixer(mixerInfo[1]);
Я пробовал сопоставить аудиоформат с точными характеристиками микрофонов (16 бит, 44100 Гц, стерео), и это не имело никакого значения.
Проблема возникает здесь:
final TargetDataLine line = (TargetDataLine)
mixer.getLine(info);
Казалось бы, микшер и TargetDataLine не любят друг друга. Есть ли способ заставить этих двоих "поиграть" и ладить?
Микрофоны, которые я использую, по общему признанию, немного странные. Они были сделаны для использования в видеоигре караоке под названием SingStar. У самих микрофонов есть стандартные моно линейные разъемы, которые подключаются к небольшому концентратору (от двух до ступицы), который преобразует их в один мужской разъем USB. Странность в стороне, однако, они, похоже, отлично работают с Audacity как отдельные каналы, поэтому многоканальная запись с ними явно возможна, возможно, не на Java.
Я также рассмотрел возможность использования такой программы, как Soundflower, которая делится звуком между различными программами. Тем не менее, я не уверен, что это сработает, поскольку я не могу понять, как сделать входы микрофонов USB в Soundflower, а затем подключить их к Java. Быстрый эксперимент показал мне, что я могу записывать аудио в Audacity из микрофонов, транслировать его через Soundflower, а затем обрабатывать в своей программе Java. Тем не менее, я бы хотел, чтобы все это происходило в реальном времени на Java.
Кто-нибудь знаком с этой проблемой?