使用JAVA控制soundCard

时间:2015-12-20 10:13:44

标签: java audio javasound mixer soundcard

我正试图建立一个混合控制台"在JAVA。在这个混音器中,每个"滑块"将是一条线,好像它是一个物理调音台。但是,在我搜索Goo ***并阅读oracle documentation之后,我并没有找到任何可以帮助我的东西。

首先,我列出了可用的混音器(参见最后的代码),很高兴,它列出了我的所有声卡,并找到了线路和线路输出。但那么,我必须做什么?

我的目标是创建"虚拟线"这将捕获来自(麦克风)或线路输出的任何线路的声音(捕获在VLC中播放的声音),允许我对其进行操作"然后,将其重新注入另一行。当然,我必须为每一行设置" in"哪个是" out" 使用示例:

  • (麦克风)中的3条物理线路将被捕获,然后进行水平调整"然后重新注入一个名为" chorus"的虚拟线路。并且这个虚拟线将被重新注入我的主物理线路中,称为“#34; Master level"。

  • 由VLC播放的歌曲(例如歌曲的旋律),通常直接发送到主" out,被捕获,就像"拦截"。然后我决定设置水平,然后重新注入我的主人并将其与麦克风混合。因此,它可以让我根据音乐水平调整歌手级别。

那么,谁能帮助我开始和进步呢?谢谢你的帮助。

以下是列出我的调音台的代码:

import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Control;
import javax.sound.sampled.Line;
import javax.sound.sampled.Mixer;

public class Mixers {

Mixers() {      
    try {
        //List of the mixers from the system
        Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo();
        //Characteristics of each mixer
        for (Mixer.Info info : mixerInfo) {
            System.out.println("\n"+info+ " - Description : "+info.getDescription());
            Mixer mix=AudioSystem.getMixer(info);

            //Controles available for this mixer
            for (Control c:mix.getControls()) {
                System.out.println ("\t Control supported by this mixer : "+c);
            }
            //Sources available for this mixer
            for (Line.Info i : mix.getSourceLineInfo()) {
                System.out.println("\t Source line available : "+i);

                //Controls available for this Source
                for (Control c : AudioSystem.getLine(i).getControls()) {
                    System.out.println ("\t\t ==> Controls supported by this source : "+c);
                }
            }
            // TargeLines available for this mixer
            for (Line.Info i : mix.getTargetLineInfo()) {
                System.out.println("\t Target line available : "+i);

                //Controls available for this Target
                for (Control c : AudioSystem.getLine(i).getControls()) {
                    System.out.println ("\t\t Controls supported by this target : "+c);
                }
            }               
        }
    } catch (Exception e) {
        e.printStackTrace();
    }               
}

}

再次感谢任何阅读我的帖子直到最后的人,并给我一个解决方案的开始。

尼古拉斯

1 个答案:

答案 0 :(得分:0)

我不确定java声音API可以做到这一点。你可能应该看一个低得多的API,例如OpenAL(Java有绑定),它提供了对声音流的更多控制