Я запускаю исследование, в котором два участника будут носить разные микрофоны, обсуждая несколько тем. Мне нужно уметь анализировать каждый входной аудиосигнал каждого участника в Java - независимо записывать два аудиопотока. Я не могу объединить оба входных потока для анализа.
Кто-нибудь знает, могу ли я сделать это на Java и как?
Я столкнулся с этим, в котором говорится: "Обычно только один входной порт может быть открыт одновременно, но также возможен микшер аудио-ввода, который смешивает аудио с нескольких портов".
благодаря
Редактирование 1: захват и анализ должны выполняться в режиме реального времени.
Изменить 2: Я использую 64-разрядную операционную систему Windows 7. У моей звуковой карты есть только один порт микрофона. У меня есть два аудио адаптера USB, которые похожи на это. Если я не смогу выполнить это на Java, что является хорошим альтернативным решением? Было предложено использовать USB-библиотеку. Анализ, который я буду выполнять на аудиоданных, - это определение скорости произношения каждого оратора (насколько они говорят).
Вывод: я смог читать из двух TargetDataLines одновременно, используя потоки в Java. Оба моих аудиоадаптера USB были видны Java.
Я не сделал этого сам, поэтому сделайте следующее, как предложение, больше, чем ответ. (Я больше в синтезе музыки и аудиоэффектах для воспроизведения в реальном времени, таких как игровой звук.)
Как вы, наверное, уже читали в учебнике, Java предоставляет класс AudioSystem, который обеспечивает доступ к строкам и портам, которые доступны на данном компьютере. Если на компьютере, с которым вы хотите работать, есть две линии микрофона, то есть все основания полагать, что эти две линии станут видимыми для Java. Ограничение ввода зависит в большей степени от аппаратного обеспечения (используемая звуковая карта и количество предложенных ими линий микрофона) и драйверов и ОС, чем на Java. Возможно, вам придется приобрести специальную звуковую карту, которая позволяет одновременно использовать несколько входов.
Кроме того, я знаю, что на уровне ОС могут существовать ограничения (в частности, некоторые особенности Linux), которые позволяют только одной выходной линии работать одновременно. Это ограничило бы то, что может видеть Java. Но я еще не изучил это с помощью ОС Windows.
Для чтения данных из строки обычно используется класс TargetDataLine. Обычно данные считываются из этой строки в буферных блоках (например, 1024 байта за раз) через цикл while. У меня было несколько TargetDataLines, работающих одновременно в прошлом: где источником данных были различные источники синхронизации программного обеспечения Java. Предполагая, что каждый TDL назначен другой строке ввода, каждый из них может быть прочитан из этого цикла, и соответствующие данные затем передаются другим анализаторам. TargetDataLines блокируют линии - если линия не имеет готовых данных (обычно обработка идет намного быстрее, чем могут быть представлены аудиоданные) --then, программа блокирует, пока данные не будут присутствовать.
Java способен много DSP реального времени. Я не знаю конкретной формы анализа, которую вы хотите сделать, но, вероятно, есть библиотеки, доступные независимыми источниками.