Change Mixer to output sound to in java

前端 未结 1 1767
无人及你
无人及你 2021-01-16 12:36

I am trying to play a wav/mp3 to my virtual audio cable, I have been searching for hours but can\'t seem to find how to achieve this. I have been able to play sound in both

相关标签:
1条回答
  • 2021-01-16 12:50

    To get an array of all Mixers on the current platform, you may use AudioSystem#getMixerInfo:

    static void printAllMixerNames() {
        for(Mixer.Info info : AudioSystem.getMixerInfo()) {
            System.out.println(info.getName());
        }
    }
    

    If your virtual cable is available, it will be in the array. For example, on my Mac the following is printed:

    Java Sound Audio Engine
    Built-in Input
    Soundflower (2ch)
    Soundflower (64ch)
    Pro Tools Aggregate I/O
    

    (Soundflower is a virtual device.)

    To get some specific Mixer you unfortunately need to do String evaluation. So you need to discover its name, vendor, whatever, beforehand or give the user an option to pick one from a list.

    static Mixer getMixerByName(String toFind) {
        for(Mixer.Info info : AudioSystem.getMixerInfo()) {
            if(toFind.equals(info.getName())) {
                return AudioSystem.getMixer(info);
            }
        }
        return null;
    }
    

    Once you have a particular Mixer you can obtain a Line or AudioInputStream from it. You can obtain a Clip from it through AudioSystem#getClip(Mixer.Info).

    I am trying to play a wav/mp3...

    javax.sound.sampled does not support mp3. Alternatives can be found here.

    0 讨论(0)
提交回复
热议问题