Подтвердить что ты не робот

Многоканальная запись USB с Java Sound API?

Я пытаюсь записать/обработать некоторый звук из трех 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.

Кто-нибудь знаком с этой проблемой?

4b9b3361

Ответ 1

Я думаю, что простой способ сделать это - использовать Soundflower и Soundflowerbed.

Я не вижу, как сделать входы микрофонов USB в Soundflower, а затем подключить их к Java.

Похоже, у вас уже установлен Soundflower. Soundflowerbed находится на том же образ диска, что и Soundflower, и представляет собой текстовое приложение. Он позволяет маршрутизировать звук между приложениями, у которых нет встроенных элементов управления для выбора звуковых устройств. Установите это с образа диска и щелкните по нему, чтобы запустить.

Все следующие будут использовать мой Echo Audiofire 4, но в принципе должны работать на любом звуковом устройстве.

Использование Soundflowerbed

Откройте Soundflower и отметьте аудиоустройство, которое вы хотите использовать в Soundflower (16ch). Поскольку я новый пользователь, я не могу размещать изображения, но они связаны ниже. Если я получу награду, я отредактирую сообщение, чтобы включить изображения в строку.

1

Здесь вы должны использовать Soundflower (16ch) в качестве устройства ввода аудио в звуке Java.

Создание агрегатного аудиоустройства

Альтернативный способ решить это, если это не сработало, - создать агрегатное устройство. Откройте "Приложения" > "Утилиты" > "Настройка аудио Midi" и щелкните знак "плюс", чтобы создать новое агрегатное устройство.

2 Отметьте устройство, которое вы хотите объединить. Вам нужен только ваш USBMIC (поскольку я новый пользователь SO, я могу отправлять только два изображения за каждый ответ, поэтому следующие два связаны здесь).

3

Ключевая часть, которая может вызвать проблемы, - это часы на устройстве. Если вы выберете Mac в качестве источника синхронизации, это может быть более стабильным. 4

Если это все еще не работает, вы можете попробовать добавить встроенный звук Mac в агрегатное устройство и сделать его главными часами, щелкнув правой кнопкой мыши на устройстве, которое вы хотите стать ведущим.

5

Другие опции

Наконец, я не использовал это раньше, но Pulse Audio (Google, я не могу вставлять больше ссылок в этот пост) может быть возможным решением для смешивания ваших аудиопотоков. Однако он выглядит довольно тяжеловесным.

Ответ 2

Согласно моим исследованиям, особенно такие темы, как this, используемый вами микрофон, скорее всего, вызывает проблему. В потоке говорится, что микрофон является даже проблемой, когда дело доходит до переключения игр, поэтому я предполагаю, что это будет проблемой и при переключении платформ.

Мое предложение - если вы еще не пробовали это - использовать другой микрофон! Большинство микрофонов, с которыми я столкнулся, имеют специальные контроллеры чипов, которые преобразуют данные в данные, совместимые для игровой системы. Поскольку вы используете это в операционной системе для компьютера, вы, вероятно, получаете некоторые очень странные эффекты, которые вы не могли бы получить в игровой системе, такой как Playstation или другие.

Надеюсь, это поможет! Счастливое кодирование!

Ответ 3

AudioFormat не соответствует формату, поддерживаемому TargetDataLine. Я не знаю, была ли это опечатка или нет, но Исключение было сказано, что TargetDataLine поддерживает 8-битный звук и прямо ниже того, что вы сказали, что используете 16-битный AudioFormat. Он также поддерживает до 2 байтов на кадр, насколько быстро и в каких размерах вы пытаетесь прочитать данные? Извините, если это не поможет, но я подумал, что укажу на это, если это будет упущено.