Java: независимая запись звука с 2 разных микрофонных входов

1

Я запускаю исследование, в котором два участника будут носить разные микрофоны, обсуждая несколько тем. Мне нужно уметь анализировать каждый входной аудиосигнал каждого участника в Java - независимо записывать два аудиопотока. Я не могу объединить оба входных потока для анализа.

Кто-нибудь знает, могу ли я сделать это на Java и как?

Я столкнулся с этим, в котором говорится: "Обычно только один входной порт может быть открыт одновременно, но также возможен микшер аудио-ввода, который смешивает аудио с нескольких портов".

благодаря

Редактирование 1: захват и анализ должны выполняться в режиме реального времени.

Изменить 2: Я использую 64-разрядную операционную систему Windows 7. У моей звуковой карты есть только один порт микрофона. У меня есть два аудио адаптера USB, которые похожи на это. Если я не смогу выполнить это на Java, что является хорошим альтернативным решением? Было предложено использовать USB-библиотеку. Анализ, который я буду выполнять на аудиоданных, - это определение скорости произношения каждого оратора (насколько они говорят).

Вывод: я смог читать из двух TargetDataLines одновременно, используя потоки в Java. Оба моих аудиоадаптера USB были видны Java.

Теги:
audio
audio-recording

1 ответ

0
Лучший ответ

Я не сделал этого сам, поэтому сделайте следующее, как предложение, больше, чем ответ. (Я больше в синтезе музыки и аудиоэффектах для воспроизведения в реальном времени, таких как игровой звук.)

Как вы, наверное, уже читали в учебнике, Java предоставляет класс AudioSystem, который обеспечивает доступ к строкам и портам, которые доступны на данном компьютере. Если на компьютере, с которым вы хотите работать, есть две линии микрофона, то есть все основания полагать, что эти две линии станут видимыми для Java. Ограничение ввода зависит в большей степени от аппаратного обеспечения (используемая звуковая карта и количество предложенных ими линий микрофона) и драйверов и ОС, чем на Java. Возможно, вам придется приобрести специальную звуковую карту, которая позволяет одновременно использовать несколько входов.

Кроме того, я знаю, что на уровне ОС могут существовать ограничения (в частности, некоторые особенности Linux), которые позволяют только одной выходной линии работать одновременно. Это ограничило бы то, что может видеть Java. Но я еще не изучил это с помощью ОС Windows.

Для чтения данных из строки обычно используется класс TargetDataLine. Обычно данные считываются из этой строки в буферных блоках (например, 1024 байта за раз) через цикл while. У меня было несколько TargetDataLines, работающих одновременно в прошлом: где источником данных были различные источники синхронизации программного обеспечения Java. Предполагая, что каждый TDL назначен другой строке ввода, каждый из них может быть прочитан из этого цикла, и соответствующие данные затем передаются другим анализаторам. TargetDataLines блокируют линии - если линия не имеет готовых данных (обычно обработка идет намного быстрее, чем могут быть представлены аудиоданные) --then, программа блокирует, пока данные не будут присутствовать.

Java способен много DSP реального времени. Я не знаю конкретной формы анализа, которую вы хотите сделать, но, вероятно, есть библиотеки, доступные независимыми источниками.

  • 0
    Спасибо за ваш ответ. Я добавил больше информации о моей настройке в Edit 2 . Интересно, будет ли аудиоадаптер USB с подключенным к нему микрофоном доступен через класс AudioSystem.
  • 0
    Возможно, не должно быть. Можно также читать из AudioInputStream. В руководстве упоминаются «сетевые» источники данных, а в AIS упоминается возможность чтения из потокового источника. Хотел бы я проработать это через себя и мог бы дать более определенный ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню