Изменить микшер для вывода звука в 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, Альтернативы можно найти здесь.

Другие вопросы по тегам