# Windows Lautstärke ändern / Stumm schalten



## Cymatoxa (6. Oktober 2010)

Hi, ich möchte mit meinem Programm die Windows-Lautstärke beeinflussen. Das hab ich mit folgendem Code versucht (der ist nicht von mir, sondern aus dem i-Net):

```
private void playSound() {
        try {
            AudioInputStream stream = AudioSystem.getAudioInputStream(new File("test.wav"));
            AudioFormat format = stream.getFormat(); 
            if (format.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) { 
                format = new AudioFormat( AudioFormat.Encoding.PCM_SIGNED, 
                        format.getSampleRate(), 
                        format.getSampleSizeInBits()*2, 
                        format.getChannels(), 
                        format.getFrameSize()*2, 
                        format.getFrameRate(), true);
                stream = AudioSystem.getAudioInputStream(format, stream); 
            } 
            DataLine.Info info = new DataLine.Info(Clip.class, stream.getFormat(), ((int)stream.getFrameLength()*format.getFrameSize()));
            Clip clip = (Clip) AudioSystem.getLine(info); 
            FloatControl gainControl = (FloatControl)clip.getControl(FloatControl.Type.MASTER_GAIN);
            double gain = .2d;
            float dB = (float)(Math.log(gain)/Math.log(10.0)*20.0); 
            gainControl.setValue(dB);
            BooleanControl muteControl = (BooleanControl)clip.getControl(BooleanControl.Type.MUTE);
            muteControl.setValue(false);
            clip.open(stream); 
            clip.start(); 
        }
        catch (MalformedURLException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        catch (LineUnavailableException e) {
            e.printStackTrace();
        }
        catch (UnsupportedAudioFileException e) {
            e.printStackTrace();
        }
    }
```
Leider bekomm ich immer eine Exception:

```
Exception in thread "main" java.lang.IllegalArgumentException: Unsupported control type: Master Gain
        at com.sun.media.sound.AbstractLine.getControl(AbstractLine.java:147)
        at simpleGame.Sound.playSound(Sound.java:49) [Das ist die Zeile FloatControl gainControl = (FloatControl)clip.getControl(FloatControl.Type.MASTER_GAIN);]
        at simpleGame.Sound.<init>(Sound.java:25)
        at simpleGame.Sound.main(Sound.java:76)
Java Result: 1
```

Wär super, wenn ihr mir helfen könntet.
Grüße, Cymatoxa


----------



## vfl_freak (7. Oktober 2010)

Moin,

in welcher Zeile kommt der Fehler denn genau 
Sicher, das alles Notwendige korrekt importiert wird 

Gruß
Klaus


----------



## Cymatoxa (7. Oktober 2010)

Hi, 

Der Fehler ist in Zeile 16.
Ich hab mich auf NetBeans verlassen, dass alles importiert wurde.
Hier aber noch meine Importe:

```
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.BooleanControl;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
```

Grüße, Cymatoxa


----------



## vfl_freak (7. Oktober 2010)

Moin,

ich kenne zwar dieses _FloatControl_ nicht wirklich, aber versuch' mal, auch :
*javax.sound.sampled.FloatControl.Type*
zu importieren ...
Ggf. kannst in der Zeile, in der der Fehler auftritt, links mit der rechten Maustaste auf das Fehlersymbol klicken und Vorschläge für die Fehlerbehebung bekommen ... möglicherweise wird dabei ja auch der entspr. Import angezeigt ;-)

Gruß
Klaus


----------



## Cymatoxa (7. Oktober 2010)

Hi,

danke für deine Bemühnungen, aber am Import scheints nicht zu liegen. Gibt es noch andere Möglichkeiten?

Gruß,
Cymatoxa


----------



## vfl_freak (7. Oktober 2010)

Moin,



Cymatoxa hat gesagt.:


> danke für deine Bemühnungen, aber am Import scheints nicht zu liegen. Gibt es noch andere Möglichkeiten?



Ja - wie ich oben schon schrieb :
_*Du kannst in der Zeile, in der der Fehler auftritt, in der linken Spalte mit der rechten Maustaste auf das rote Fehlersymbol klicken und bekommst Hinweise für die Fehlerbehebung ... 
*_ 

Gruß
Klaus


----------



## Cymatoxa (7. Oktober 2010)

Tach,

richtig, man bekommt dank NetBeans wirklich schöne Fehlerbeschreibungen und Lösungsansätze, wenn man auf ein solches Symbol klickt. Leider erhalte ich aber keine Fehlermeldung von NetBeans. Der Fehler tritt erst beim Ausführen auf (oder Kompilieren?). NetBeans sagt, mein Code wäre in Ordung, deshlb brauche ich ja auch Hilfe 

Grüße,
Cymatoxa


----------



## Peregrin (7. Oktober 2010)

Hi 

ich glaube dir fehlt das open beim clip bzw es steht zu weit unten:


```
Clip clip = (Clip) AudioSystem.getLine(info); 
clip.open(stream);
FloatControl gainControl = (FloatControl)clip.getControl(FloatControl.Type.MASTER_GAIN);
```


----------



## vfl_freak (7. Oktober 2010)

Moin,



Peregrin hat gesagt.:


> ich glaube dir fehlt das open beim clip bzw es steht zu weit unten:
> 
> ```
> Clip clip = (Clip) AudioSystem.getLine(info);
> ...



richtig, Peregrin hat Recht 

Hier mal ein anderes Beispiel:
http://www.java-forum.org/java-basics-anfaenger-themen/29919-probleme-sounds.html

Gruß
Klaus


----------



## Cymatoxa (7. Oktober 2010)

Vielen Dank 

ich bekomm schon mal keine Exception mehr.
Leider hat sich an der Lautstärke-Einstellung nichts geändert.
Kann das an der Soundkarte liegen?

Grüße,
Cymatoxa


----------

