Чтобы ответить на ваш первый вопрос, вы можете проверить, соответствует ли объект Line.Info для вашего ввода записи Port.Info.LINE_IN следующим образом:
public static boolean isLineIn(Line.Info lineInfo) {
Line.Info[] detected = AudioSystem.getSourceLineInfo(Port.Info.LINE_IN);
for (Line.Info lineIn : detected) {
if (lineIn.matches(lineInfo)) {
return true;
}
}
return false;
}
Однако это не работает с операционными системами или API-интерфейсами драйверов звуковых карт, которые не предоставляют тип каждого доступного канала микшера. Поэтому, когда я тестирую его на Windows, он работает, но не на Linux или Mac. Для получения дополнительной информации и рекомендаций см. FAQ .
Что касается вашего второго вопроса, вы можете попробовать изменить настройки входа записи с помощью класса Control . В частности, см. FloatControl.Type для некоторых общих настроек. Помните, что доступность этих элементов управления зависит от операционной системы и драйверов звуковой карты, как и от линейного входа.