Как сделать так, чтобы программа Java работала как устройство вывода звука? - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь создать программу, которая действует как аудиоустройство, чтобы я мог изменить громкость всех программ, проходящих через него, а затем отправить звук на другое реальное устройство воспроизведения. Я провел некоторые исследования в классе 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");
    }

}
...