Hallo,
Ich bin seit einigen Stunden dabei mich in das Audio Processing mit Java einzuarbeiten.
Mein Ziel ist es, einen
für den
meiner Creative-Soundkarte und dessen
für die Lautsprecher einzurichten, sodass ich entwerder mit einem
die Lautstärke variieren oder mit einem
die Lautsprecher muten kann.
Dazu habe ich mir drei Funktionen geschrieben:
1) Ein Array aller Mixer erzeugen
2) Ein Array aller Lines eines speziellen Mixers
Ich vermute es ist überflüssig
überhaupt zu betrachen wenn man die Lautstärke der Lautsprecher manipulieren will, aber so hab ich wirklich ALLE Lines eines Mixers.
3) Ein Array aller Controls einer Line
Das bisherige war mehr zum Filtern meiner Daten gedacht. Nun zur eigentlichen Funktion.
Ich möchte zu einem speziellen Mixer und einem speziellen Line eine bestimmte Control (sofern unterstützt) erhalten.
Das funktioniert soweit auch ganz prima. Z.B. erhalte ich zu dem Mixer meiener Creative-Soundkarte und dem Line für die SPEAKER ein VolumeControl / MuteControl. Dieses ist auch kein Nullpointer!
Allerdings scheinen alle Änderungen mit Hilfe der Control keinen Effekt zu haben.
Vielen vielen Dank schonmal im Voraus.
Die Lösung interessiert mich wirklich brennend : )
PS: Ich nutze einmal meine Creative-Soundkarte und dann hat mein USB-Headset noch seine Treiber (also auch eigene Mixer/Lines).
Ich bin seit einigen Stunden dabei mich in das Audio Processing mit Java einzuarbeiten.
Mein Ziel ist es, einen
Code:
Control
Code:
Mixer
Code:
Line
Code:
FloatControl
Code:
BooleanContol
Dazu habe ich mir drei Funktionen geschrieben:
1) Ein Array aller Mixer erzeugen
Java:
public static Mixer[] getMixers(){
LinkedList<Mixer> mixerlist = new LinkedList<>();
Mixer.Info[] infos = AudioSystem.getMixerInfo();
for(Mixer.Info info : infos)
mixerlist.add(AudioSystem.getMixer(info));
return mixerlist.toArray(new Mixer[0]);
}
2) Ein Array aller Lines eines speziellen Mixers
Java:
public static Line[] getLines(Mixer mixer){
LinkedList<Line> linelist = new LinkedList<>();
Line.Info[] linesininfo = mixer.getSourceLineInfo();
Line.Info[] linesoutinfo = mixer.getTargetLineInfo();
Line.Info[] linesinfo = new Line.Info[linesininfo.length+linesoutinfo.length];
System.arraycopy(linesininfo, 0, linesinfo, 0, linesininfo.length);
System.arraycopy(linesoutinfo, 0, linesinfo, linesininfo.length, linesoutinfo.length);
for(Line.Info info : linesinfo){
try {
linelist.add(mixer.getLine(info));
} catch (LineUnavailableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return linelist.toArray(new Line[0]);
}
Code:
mixer.getSourceLineInfo()
3) Ein Array aller Controls einer Line
Java:
public static Control[] getControls(Line line){
try{
line.open();
return line.getControls();
}
catch(LineUnavailableException ex){
return null;
}
}
Das bisherige war mehr zum Filtern meiner Daten gedacht. Nun zur eigentlichen Funktion.
Ich möchte zu einem speziellen Mixer und einem speziellen Line eine bestimmte Control (sofern unterstützt) erhalten.
Java:
public static Control getControl(Mixer mixer, Line.Info lineinfo, Control.Type controltype){
if(mixer.isLineSupported(lineinfo)){
try{
mixer.open();
Port port = (Port) mixer.getLine(lineinfo);
try{
port.open();
Control[] controls = port.getControls();
for(Control control : controls){
if(control.getType().equals(controltype)){
System.out.println(port.getLineInfo());
return control;
}
}
}
catch(LineUnavailableException ex){
}
}
catch(LineUnavailableException ex){
}
}
return null;
}
Das funktioniert soweit auch ganz prima. Z.B. erhalte ich zu dem Mixer meiener Creative-Soundkarte und dem Line für die SPEAKER ein VolumeControl / MuteControl. Dieses ist auch kein Nullpointer!
Allerdings scheinen alle Änderungen mit Hilfe der Control keinen Effekt zu haben.
Vielen vielen Dank schonmal im Voraus.
Die Lösung interessiert mich wirklich brennend : )
PS: Ich nutze einmal meine Creative-Soundkarte und dann hat mein USB-Headset noch seine Treiber (also auch eigene Mixer/Lines).