Многоканальная USB-запись с Java Sound API?
Я пытаюсь записать / обработать звук с трех USB-микрофонов с помощью Java Sound на Snow Leopard (но могу переключиться на Windows, если это все исправит). Проблема в том, что когда я пытаюсь использовать микшер, который соответствует USB-микрофону, Java Sound говорит мне, что линия не поддерживается. В частности, это говорит об этом...
Доступные миксеры:
Java Sound Audio Engine
USBMIC Серийный № 041270067
Встроенный вход Встроенный микрофон
Soundflower (2-канальный)
Soundflower (16-канальный)
Исключение в потоке "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.
Кто-нибудь знаком с такой проблемой?
3 ответа
Я думаю, что простым способом сделать это было бы использование Soundflower и Soundflowerbed.
Я не вижу, как сделать входы микрофонов USB для Soundflower, а затем направить их в Java.
Похоже, у вас уже установлен Soundflower. Soundflowerbed находится на том же образе диска, что и Soundflower, и является приложением меню. Это позволяет вам передавать звук между приложениями, в которых нет встроенных элементов управления для выбора звуковых устройств. Установите это из образа диска и щелкните по нему, чтобы запустить.
Все последующее будет использовать мой Echo Audiofire 4, но в принципе должно работать на любом аудио устройстве.
Использование Soundflowerbed
Откройте Soundflower и отметьте аудиоустройство, которое вы хотите использовать в Soundflower (16-канальный). Поскольку я новый пользователь, я не могу публиковать изображения, но они связаны ниже. Если я получу вознаграждение, то я отредактирую пост, чтобы включить изображения встроенными.
Отсюда вы будете использовать Soundflower (16-канальный) в качестве устройства ввода звука в звуке Java.
Создание совокупного аудиоустройства
Альтернативный способ решить эту проблему, если это не сработало, - создать агрегатное устройство. Откройте "Приложения"> "Служебные программы"> "Настройка Audio Midi" и щелкните знак "плюс", чтобы создать новое агрегатное устройство.
Отметьте устройство, которое вы хотите объединить. Вам нужен только USBMIC (так как я новый пользователь SO, я могу опубликовать только два изображения на ответ, поэтому следующие два связаны здесь).
Ключевая часть, которая может доставлять вам неприятности - это часы на устройстве. Если вы выберете Mac в качестве источника синхронизации, он может быть более стабильным.
Если это по-прежнему не работает, то вы можете попробовать добавить встроенный звук Mac в совокупное устройство и сделать его основными часами, щелкнув правой кнопкой мыши на устройстве, которое вы хотите стать главным.
Другие опции
Наконец, я не использовал это раньше, но Pulse Audio (Google, я не могу вставить больше ссылок в этом посте) может быть возможным решением для смешивания ваших аудио потоков вместе. Это выглядит довольно тяжелым, хотя.
Согласно моим исследованиям, особенно подобным темам, микрофон, который вы используете, скорее всего, вызывает проблему. В потоке говорится, что микрофон - это даже проблема, когда дело касается переключения игр, поэтому я предполагаю, что это будет проблемой и при переключении платформ.
Мое предложение - если вы еще не пробовали это - использовать другой микрофон! Большинство микрофонов, с которыми я сталкивался, имеют специальные чип-контроллеры, которые преобразуют данные в данные, совместимые с игровой системой. Поскольку вы используете это в операционной системе для компьютера, вы, вероятно, получаете некоторые очень странные эффекты, которых вы не получите в игровой системе, такой как Playstation или другие.
Надеюсь, это поможет! Удачного кодирования!
AudioFormat не соответствует поддерживаемому формату TargetDataLine. Я не знаю, была ли это опечатка или нет, но в исключении говорится, что TargetDataLine поддерживает 8-битное аудио, а чуть ниже вы сказали, что используете 16-битный AudioFormat. Он также поддерживает до 2 байтов на кадр. Как быстро и в каком размере вы пытаетесь прочитать данные? Извините, если это не поможет, но я подумал, что укажу на это, если это упустят из виду.