Lautstärke AudioClip

Turing0001

Aktives Mitglied
Hallo ihr Java-Experten,

ich brauche mal wieder eure Hilfe. Ich bin gerade dabei ein kleines Breakout-Spiel zu programmieren. Dabei soll sobald der Ball den Schläger oder einen der Steine trifft ein bestimmter Sound abgespielt werden. Das funktioniert auch alles wunderprächtig, aber der Sound ist sehr leise. Daher habe ich versucht, die Lautstärke zu regulieren via FloatControl. Dabei bekomme ich aber zur Laufzeit eine Fehlermeldung, zu der ich keine vernünftigen Informationen bei stackoverflow etc. bekomme:
java.lang.illegalArgumentException : Unsupported control type: master gain. Kann mir jemand von euch diesbezüglich weiterhelfen? Vielen Dank schon mal vorab.
Hier der Codeausschnit (es geht um die auskommentierten Zeilen):

Java:
  try {
            soundclip = AudioSystem.getClip();
            aistr = AudioSystem.getAudioInputStream(this.getClass().getResource("/Bass-Drum-1.wav"));
//            FloatControl gainControl = (FloatControl) soundclip.getControl(FloatControl.Type.MASTER_GAIN);
//            double gain = 0.8;
//            float dB = (float) (Math.log(gain) / Math.log(10.0) * 20.0);
//            gainControl.setValue(dB);
            soundclip.open(aistr);
        } catch (LineUnavailableException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
            catch (UnsupportedAudioFileException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 

Turing0001

Aktives Mitglied
Naja, die Meldung ist doch ziemlich eindeutig: der Clip unterstützt das gewünschte Control nicht. Lass Dir mal mit Hilfe von getControls() ausgeben, welche unterstützt werden.
Hallo mihe7,
danke für die schnelle Antwort. Eclipse bietet mir das Control an, bei der Ausgabe der Controls bekomme ich aber nur einen merkwürdigen Wert:
[Ljavax.sound.sampled.Control;@33bffee3
Offenbar gibt es auf meinem System keine Unterstützung wenn ich das richtig interpretiere. Dann muss ich mich wohl nach Alternativen umsehen.
Vilen Dank nochmals für dei nette Hilfe.
 

mihe7

Top Contributor
Du darfst nicht einfach das Array an System.out.println übergeben. Mach z. B. etwas wie
Java:
System.out.println(java.util.Arrays.toString(soundclip.getControls()));
 

Turing0001

Aktives Mitglied
Leer ist wenig :-( Die Controls stehen erst nach dem Öffnen zur Verfügung.
Hätte mir eigentlich klar sein sollen, aber wie dem auch sei. Nun steht da:
[Master Gain control with current value: 0.0 dB (range: -80.0 - 6.0206), Mute control with current value: False, Balance control with current value: 0.0 (range: -1.0 - 1.0), Pan control with current value: 0.0 (range: -1.0 - 1.0)]
 

mihe7

Top Contributor
Ja, jetzt platzierst Du das open vor den auskommentierten Code (den Du dann natürlich wieder "einkommentierst") und solltest glücklich werden :)
 

Ähnliche Java Themen

Neue Themen


Oben