Wie erhält man den Master-Datenträger in Java? Ich möchte ein Programm erstellen, das (NOT CHANGE) diesen Wert (wahrscheinlich auf einem JProgressBar
oder etwas Ähnlichem) als Prozentsatz der maximalen Einstellung anzeigt. Ich möchte vielleicht auch den aktuellen Schallpegel als Prozentsatz des höchstmöglichen Schallpegels anzeigen, aber dies wird nicht benötigt.Ermitteln der System-Audiopegel in Java
Antwort
Ich bin mir nicht ganz sicher, aber Sie könnten sich die (Java Media Framework - JMF) ansehen. Sie können den Sound über diese Bibliothek steuern, also würde ich annehmen, dass Sie auch Details darüber erfahren können. Es könnte nur der Geräuschpegel der Anwendung sein, also könnte ich mich irren.
Nico hat Recht. Hier ist ein Artikel und ein Beispiel, das Ihnen helfen könnte.
http://onjava.com/pub/a/onjava/excerpt/jenut3_ch17/index.html
http://onjava.com/onjava/excerpt/jenut3_ch17/examples/SoundPlayer.java
hilft mir nicht. – Supuhstar
Sie könnten etwas weniger abrasiv sein und nicht sagen „mir nicht hilft“.
Ansonsten ist hier das große Bild, das API von Alexr dem Beispiel erwähnt Ton mit: (es gibt viele praktische Details on that forum thread, und es gibt einige Oracle-Dokumentation Processing Audio with Controls)
Sobald Sie ein
Line
Objekt, das die Tonausgabe Linie repräsentiert, die Sie steuern möchten, ist es ziemlich trivial die Lautstärke zu erhalten:line.open(); // May be necessary if the line is not already opened. FloatControl volumeControl = (FloatControl) masterLine.getControl(FloatControl.Type.VOLUME);
den „MasterErste"Objekt ist bestenfalls plattformabhängig. Sie müssen die
Mixer
s und dieLine
s zur Laufzeit mit den statischen MethodenAudioSystem
auflisten, um festzustellen, welche Zeile Sie wollen. Es kann auch vorkommen, dass die Masterzeile die Lautstärkeregelung nicht direkt, sondern nur über eineCompoundControl
unterstützt. (durch eine Hierarchie, die Sie erraten haben, plattformabhängig).
mit 'line = (Port) AudioSystem.getMixer (null) .getLine (Port.Info.LINE_IN);', bekomme ich 'java.lang.IllegalArgumentException: Line nicht unterstützt: LINE_IN Quellport' – Supuhstar
@Supuhstar: 1. Ich vermute Sie wollten schreiben '((Port) AudioSystem.getMixer (null)). getLine (Port.Info.LINE_IN);' - das hätte eine 'ClassCastException' ausgelöst. 2. Es gibt keine Garantie, dass das Aufrufen von 'AudioSystem.getMixer (null)' den 'Port' ergibt, den Sie bekommen möchten - der Computer kann nicht erraten, was Sie wollen. 3. Ich glaube, der einzige zuverlässige Weg besteht darin, eine Teilmenge der 'Line's oder' Mixer' des Systems aufzuzählen, indem man 'AudioSystem.getMixerInfo()' und ähnliche andere Methoden verwendet und jede einzelne prüft. 4. Wenn Sie den verknüpften Forum-Thread gelesen hätten, hätte ich die Punkte 2 und 3 nicht schreiben müssen. –
Obwohl JProgressBar
ist für diesen
verwendet, um dieses
package test;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.Line;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.Mixer;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
public class SoundMeter {
JFrame j;
public SoundMeter() {
j = new JFrame("SoundMeter");
j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
j.setLayout(new BoxLayout(j.getContentPane(), BoxLayout.Y_AXIS));
printMixersDetails();
j.setVisible(true);
}
public void printMixersDetails(){
javax.sound.sampled.Mixer.Info[] mixers = AudioSystem.getMixerInfo();
System.out.println("There are " + mixers.length + " mixer info objects");
for(int i=0;i<mixers.length;i++){
Mixer.Info mixerInfo = mixers[i];
System.out.println("Mixer Name:"+mixerInfo.getName());
Mixer mixer = AudioSystem.getMixer(mixerInfo);
Line.Info[] lineinfos = mixer.getTargetLineInfo();
for(Line.Info lineinfo : lineinfos){
System.out.println("line:" + lineinfo);
try {
Line line = mixer.getLine(lineinfo);
line.open();
if(line.isControlSupported(FloatControl.Type.VOLUME)){
FloatControl control = (FloatControl) line.getControl(FloatControl.Type.VOLUME);
System.out.println("Volume:"+control.getValue());
JProgressBar pb = new JProgressBar();
// if you want to set the value for the volume 0.5 will be 50%
// 0.0 being 0%
// 1.0 being 100%
//control.setValue((float) 0.5);
int value = (int) (control.getValue()*100);
pb.setValue(value);
j.add(new JLabel(lineinfo.toString()));
j.add(pb);
j.pack();
}
} catch (LineUnavailableException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
new SoundMeter();
}
}
- 1. Anzahl der in Java erstellten Objekte ermitteln
- 2. Ermitteln der aufgerufenen Klasse
- 3. Anzahl der Zeilen in einer Java-Ergebnismenge ermitteln
- 4. Ermitteln Sie das Ende der Zeichenfolge in Java
- 5. Ermitteln des chinesischen Zeichens in Java
- 6. Ermitteln des physischen Rechnernamens in Java
- 7. Ermitteln der Dateigröße in VB.NET
- 8. Ermitteln der Downtime-Dauer in der Serverprotokolltabelle
- 9. Ermitteln der Version von Java SDK auf dem Mac
- 10. Java 8 Ermitteln der Größe des Metaspaces zur Laufzeit
- 11. Ermitteln der Kompilierungszeit Multicatch-Ausnahmetyp
- 12. Ermitteln der Gesamtsumme der Rasteransicht
- 13. Ermitteln der IP-Adresse
- 14. Ermitteln der tatsächlichen Formularänderung?
- 15. Ermitteln der OnBeforeNavigate2-Quelle
- 16. Ermitteln der übergeordneten Komponente
- 17. Ermitteln der Größe der UITableViewCell
- 18. Ermitteln der Hauptseite Fehlerursache
- 19. Ermitteln der Oracle-Datenbankinstanz
- 20. Ermitteln der CCLabelTTF-Dimensionen
- 21. Ermitteln der Formel Feld
- 22. IntelliJ Gradle konnte Java-Version nicht ermitteln
- 23. Größe des Ordners oder der Datei ermitteln
- 24. Java NoSuchMethodException beim Ermitteln des Konstruktors
- 25. Java (Swing): Ermitteln der * Bildschirm * Größe einer Komponente, wenn das Fenster in der Größe geändert wird
- 26. Ermitteln des Modifikatortyps ohne ein InputEvent-Objekt in Java
- 27. Ermitteln der IP eines Jenkins-Knotens
- 28. Ermitteln der Skalierung in Metern pro Pixel
- 29. Ermitteln der Frequenz von Signaldaten in MATLAB
- 30. Ermitteln der referenzierten DLL-Version in C#
Als Randbemerkung, keine Fortschrittsbalken für diese Verwendung. Der Master-Lautstärkepegel ist kein Maß für den Fortschritt und einige Betriebssysteme zeichnen einen Animationsbalken, der für die Messung des Schallpegels nicht geeignet ist. – cdhowie
Als was ist es dann gemessen? – Supuhstar
Ein Fortschrittsbalken ist ein Balken, der den Fortschritt einer langlebigen Aufgabe anzeigt (z. B. Kopieren von Dateien). –