Я пытаюсь создать программу, которая действует как аудиоустройство, чтобы я мог изменить громкость всех программ, проходящих через него, а затем отправить звук на другое реальное устройство воспроизведения. Я провел некоторые исследования в классе java 'и нашел класс AudioSystem, который выглядит многообещающе, но я не знаю, как получить все отдельные звуковые строки программы.
Программа, которую я делаю, в значительной степени является упрощенной копией микшера громкости Windows, с которой я планирую сделать больше, но это только то, с чего я начинаю.
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Control;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.Line;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.Mixer;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.TargetDataLine;
public class SystemTests {
public static Mixer headPhones;
public static final int inputInfo = 10;
public static Mixer.Info[] mi;
public static Line.Info[] ti;
public static SourceDataLine line;
public static AudioFormat format;
public static final int recordTime = 10000;
static AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE;
static File wavFile = new File("c://temp//testFile1.wav");
public static void main(String[] args) {
final SystemTests recorder = new SystemTests();
//create a thread for stopping the process
Thread stop = new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(recordTime);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
// Scanner in = new Scanner(System.in);
// System.out.println("Press Enter to stop Recording.");
// in.nextLine();
// recorder.finish();
System.exit(0);
}
});
stop.start();
recorder.start();
}
public void start(){
mi = AudioSystem.getMixerInfo();
System.out.println(mi[inputInfo]);
//show all mixer info
// for(int i = 0; i < mi.length; i++) {
// System.out.println(mi[i] + " _ " + i);
// }
//get mixer and line info
headPhones = AudioSystem.getMixer(mi[inputInfo]);
ti = headPhones.getSourceLineInfo();
//show all line info
// for(int i = 0; i < ti.length; i++) {
// System.out.println(ti[i] + " _ " + i);
// }
//get the line
// try {
// line = (SourceDataLine) headPhones.getLine(ti[0]);
// } catch (LineUnavailableException e) {
// e.printStackTrace();
// }
Control[] controls = AudioSystem.getMixer(mi[inputInfo]).getControls();
for(int i = 0; i < controls.length; i++) {
System.out.println(controls[i]);
}
}
public void finish() {
line.stop();
line.close();
System.out.println("Finished");
}
}