我正试图建立一个混合控制台"在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();
}
}
}
再次感谢任何阅读我的帖子直到最后的人,并给我一个解决方案的开始。
尼古拉斯
答案 0 :(得分:0)
我不确定java声音API可以做到这一点。你可能应该看一个低得多的API,例如OpenAL(Java有绑定),它提供了对声音流的更多控制