Pracuję z Java Sound API i okazuje się, że chcę dostosować woluminy nagrania, które muszę wymodelować sprzęt, który system operacyjny udostępnia do Javy. Okazuje się, że jest wiele różnorodności.Jakie porty wyjściowe i nagrywające znajdują się na komputerze Java Sound API?
Z tego powodu z pokorą proszę, aby każdy mógł mi pomóc uruchomić na swoim komputerze i odesłać wyniki, aby dowiedzieć się, co tam jest.
góry dzięki każdemu, kto może pomóc :-)
import javax.sound.sampled.*;
public class SoundAudit {
public static void main(String[] args) { try {
System.out.println("OS: "+System.getProperty("os.name")+" "+
System.getProperty("os.version")+"/"+
System.getProperty("os.arch")+"\nJava: "+
System.getProperty("java.version")+" ("+
System.getProperty("java.vendor")+")\n");
for (Mixer.Info thisMixerInfo : AudioSystem.getMixerInfo()) {
System.out.println("Mixer: "+thisMixerInfo.getDescription()+
" ["+thisMixerInfo.getName()+"]");
Mixer thisMixer = AudioSystem.getMixer(thisMixerInfo);
for (Line.Info thisLineInfo:thisMixer.getSourceLineInfo()) {
if (thisLineInfo.getLineClass().getName().equals(
"javax.sound.sampled.Port")) {
Line thisLine = thisMixer.getLine(thisLineInfo);
thisLine.open();
System.out.println(" Source Port: "
+thisLineInfo.toString());
for (Control thisControl : thisLine.getControls()) {
System.out.println(AnalyzeControl(thisControl));}
thisLine.close();}}
for (Line.Info thisLineInfo:thisMixer.getTargetLineInfo()) {
if (thisLineInfo.getLineClass().getName().equals(
"javax.sound.sampled.Port")) {
Line thisLine = thisMixer.getLine(thisLineInfo);
thisLine.open();
System.out.println(" Target Port: "
+thisLineInfo.toString());
for (Control thisControl : thisLine.getControls()) {
System.out.println(AnalyzeControl(thisControl));}
thisLine.close();}}}
} catch (Exception e) {e.printStackTrace();}}
public static String AnalyzeControl(Control thisControl) {
String type = thisControl.getType().toString();
if (thisControl instanceof BooleanControl) {
return " Control: "+type+" (boolean)"; }
if (thisControl instanceof CompoundControl) {
System.out.println(" Control: "+type+
" (compound - values below)");
String toReturn = "";
for (Control children:
((CompoundControl)thisControl).getMemberControls()) {
toReturn+=" "+AnalyzeControl(children)+"\n";}
return toReturn.substring(0, toReturn.length()-1);}
if (thisControl instanceof EnumControl) {
return " Control:"+type+" (enum: "+thisControl.toString()+")";}
if (thisControl instanceof FloatControl) {
return " Control: "+type+" (float: from "+
((FloatControl) thisControl).getMinimum()+" to "+
((FloatControl) thisControl).getMaximum()+")";}
return " Control: unknown type";}
}
Wszystko aplikacja robi to wydrukować wiersz o OS, linia o JVM, a kilka linii o sprzęcie znaleziono które mogą dotyczyć nagrywania sprzętu. Na przykład na moim komputerze w pracy pojawia się następujący:
OS: Windows XP 5.1/x86 Java: 1.6.0_07 (Sun Microsystems Inc.)
Mixer: Direct Audio Device: DirectSound Playback [Primary Sound Driver] Mixer: Direct Audio Device: DirectSound Playback [SoundMAX HD Audio] Mixer: Direct Audio Device: DirectSound Capture [Primary Sound Capture Driver] Mixer: Direct Audio Device: DirectSound Capture [SoundMAX HD Audio] Mixer: Software mixer and synthesizer [Java Sound Audio Engine] Mixer: Port Mixer [Port SoundMAX HD Audio] Source Port: MICROPHONE source port Control: Microphone (compound - values below) Control: Select (boolean) Control: Microphone Boost (boolean) Control: Front panel microphone (boolean) Control: Volume (float: from 0.0 to 1.0) Source Port: LINE_IN source port Control: Line In (compound - values below) Control: Select (boolean) Control: Volume (float: from 0.0 to 1.0) Control: Balance (float: from -1.0 to 1.0)
Ponieważ nie jest to prawo/źle pytanie (lub nawet kwestia naprawdę), wierzę że możesz odnieść większy sukces, jeśli zmienisz to pytanie na wiki społeczności. Ale nawet wtedy może jeszcze zostać zamknięte. Powodzenia dla ciebie! – Mike
Brak głosów "dziękuję" za osoby, które zadały sobie trud prowadzenia kodu? Zimno, Dave. Zimno. ;) – JMD
Każdy, kto zarejestruje prawdziwą odpowiedź, powinien głosować na wszystkich, którzy wysyłają posty. To byłaby zachęta. Tak robię. –