Изменить микшер для вывода звука в Java
Я пытаюсь воспроизвести wav/mp3 на моем виртуальном аудиокабеле, я искал несколько часов, но не могу найти, как этого добиться. Мне удалось воспроизвести звук в обоих форматах, но я не могу вывести его на "Line-1", а не "Speakers"
Любые полезные ссылки или примеры кода будут с благодарностью.
1 ответ
Чтобы получить массив всех Mixer
на текущей платформе, вы можете использовать AudioSystem#getMixerInfo
:
static void printAllMixerNames() {
for(Mixer.Info info : AudioSystem.getMixerInfo()) {
System.out.println(info.getName());
}
}
Если ваш виртуальный кабель доступен, он будет в массиве. Например, на моем Mac напечатано следующее:
Java Sound Audio Engine Встроенный вход Soundflower (2-канальный) Soundflower (64-канальный) Pro Tools Aggregate I / O
(Soundflower - это виртуальное устройство.)
Чтобы получить некоторые конкретные Mixer
вам, к сожалению, нужно сделать оценку строки. Таким образом, вам нужно заранее узнать его имя, поставщика, что угодно, или дать пользователю возможность выбрать один из списка.
static Mixer getMixerByName(String toFind) {
for(Mixer.Info info : AudioSystem.getMixerInfo()) {
if(toFind.equals(info.getName())) {
return AudioSystem.getMixer(info);
}
}
return null;
}
Как только у вас есть конкретный Mixer
Вы можете получить Line
или же AudioInputStream
от него. Вы можете получить Clip
от этого через AudioSystem#getClip(Mixer.Info)
,
Я пытаюсь играть в WAV / MP3...
javax.sound.sampled
не поддерживается mp3
, Альтернативы можно найти здесь.