Java. Как захватить звук с аудиовыхода?

Необходимо получить звук с аудиовыхода.
Для получения звука с микрофона использую следующий код:
AudioFormat audioFormat = getAudioFormat();
DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class, audioFormat);
TargetDataLine targetDataLine = (TargetDataLine) AudioSystem.getLine(dataLineInfo);
targetDataLine.open(audioFormat);
targetDataLine.start();

//Ну и читаем
targetDataLine.read(tempBuffer, 0, tempBuffer.length);


Проблема в том, что TargetDataLine позволяет осуществить захват звука только с микрофона, а SourceDataLine, служит лишь для вывода звука.
  • Вопрос задан
  • 7513 просмотров
Решения вопроса 1
ehabarov
@ehabarov
IT Specialist
По ссылкам много полезной информации:
Java Sound Resources: FAQ: Audio Programming
Wired for sound
Java Microphone Selection and Level Monitoring

1. При записи с устройства нельзя выбрать непосредственно входной порт. Входной порт идет на микшер. Записывать можно с выхода микшера (TargetDataLine).
Но, если входных устройств несколько (микрофон, линейный, компакт-диск), то можно поставить "Mute" на ненужные входы (через интерфейс Control), и на выходе микшера получить запись с нужного источника. Аналогично, через Control, можно управлять громкостью выбранного источника. Control-ы нужно получать после Line.open().

2. Вход активируется только в случае, если к нему подключить внешнее устройство. По крайней мере так происходит со звуковыми картами Realtek, которые я видел. И, в этом случае, его можно "увидеть" через AudioSystem.getSourceLineInfo(<тип порта>). Вход микрофона почему-то обычно активен, возможно потому, что выведен на переднюю панель системного блока.

3. В диспетчере Realtek HD, в дополнительных настройках, устройство записи по умолчанию "комбинированное", т.е. все устройства записи отображаются как одно. Нужно выбрать вариант "Разделить входные гнезда ...."
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы