# Lautstärke einzelner AudioClips zur Laufzeit verändern



## Dirt Devil (17. Mrz 2007)

Liebe ProgrammiererInnen,

ich würde gerne ein Spiel in einem Applet programmieren, in dem in bestimmten Szenen die Lautstärke der Hintergrundmusik gedämpft wird. Dabei soll allerdings die Standard Lautstärke der Geräusche beibehalten werden, es soll also nur die Hintergrundmusik leiser gemacht werden. Gibt es dafür nicht einen einfachen Befehl wie „clip.setVolume(50)“ (also auf 50% Volume)?

Ich habe mich schon versucht zu erkundigen, aber die „FloatControl“ Methode leuchtet mir nicht ein und über google konnte ich auch keine Lösung zu diesem speziellen Problem finden. Ich würde mich über jede Erklärung (auch über Verweise zu Tutorials) freuen!

Dankeschön im Voraus,
Dirt Devil


Wärt ihr so freundlich und könntet bitte meinen Quelltext ergänzen?
(Ich habe den Code so einfach und kurz wie möglich gehalten, um bei den Grundlagen zu bleiben und keinen zusätzlichen schnick-schnack einzubauen  )


```
import java.awt.*;
import javax.swing.*;
import java.applet.*;

public class sound extends JApplet
{
    AudioClip acHintergrund;
    AudioClip acGeräusch1;
    
    public void init()
    {
        acHintergrund = getAudioClip(getCodeBase(), "hintergrund.wav");
        acGeräusch1 = getAudioClip(getCodeBase(), "plop.wav");
        acHintergrund.loop();
    }
    
    /*
    So in etwa sollte hier die Lautstärke geändert werden...die Frage ist nur, wie?!
    public void lautstärke(int volume)
    {
        acHintergrund.setVolume(volume);
    }
    */
}
```


----------



## Dirt Devil (18. Mrz 2007)

So Leute, ich habs jetzt selbst hinbekommen....
Ich empfehle www.javabuch.de/ für solche Probleme   


```
import java.awt.*;
import javax.swing.*;
import java.io.*;
import javax.sound.sampled.*;

public class sound extends JApplet
{
    Clip BG;
    FloatControl gainControl;
    
    public void init()
    {
        try
        {
            lala();
        }
        catch(Exception e)
        {
        }
        
        BG.start();
        gainControl = (FloatControl)BG.getControl(FloatControl.Type.MASTER_GAIN);
        gainControl.setValue(0);
        try
        {
            Thread.sleep(10000);
            gainControl.setValue(-10);
        }
        catch(Exception e)
        {
        }
    }
    
    public void lala() throws Exception
    {
        AudioInputStream aisBG = AudioSystem.getAudioInputStream(new File("bg.wav"));
        AudioFormat afBG = aisBG.getFormat();
        DataLine.Info nfoBG = new DataLine.Info(Clip.class,afBG,((int) aisBG.getFrameLength() * afBG.getFrameSize()));
        BG = (Clip)AudioSystem.getLine(nfoBG);
        BG.open(aisBG);
    }
    
    public void paint(Graphics g)
    {
    }
}
```


----------



## Dirt Devil (18. Mrz 2007)

Leider hab ich immernoch ein kleines Problemchen....
Wenn ich das Applet im Appletviewer starte, läuft alles glatt.
Wenn ich allerdings das Applet im Browser (->Internet Explorer) starten möchte, tut er dies nicht und wirft folgende Exception:



> java.lang.NullPointerException
> at sound.init(sound.java:22)
> at sun.applet.AppletPanel.run(Unknown Source)
> at java.lang.Thread.run(Unknown Source)



Der Quelltext des HTML-Dokuments lautet folgendermaßen:

```
<html>






    <head>
        <title>sound Applet</title>
    </head>
    <body>
        <h1>sound Applet</h1>
        <hr>
        <applet code="sound.class" 
            width=500 
            height=500
            codebase="."
            archive="file:/C:/BlueJ/lib/bluejcore.jar,file:/C:/BlueJ/lib/junit.jar,file:/D:/BlueJ/sound2/"
            alt="Your browser understands the &APPLET& tag but isn't running the applet, for some reason."
         >
             
            Your browser is ignoring the &APPLET& tag!      
        </applet>
        <hr>
    </body>
</html>
```

Die Datei "bg.wav" befindet sich im Projekt Verzeichnis, also in demselben Verzeichnis wie die "sound.class" Datei.


Kann mir bitte jemand sagen, wie ich das Applet dennoch im Browser starten kann?

Danke,
Dirt Devil


----------



## ToNyXXL (19. Mrz 2007)

Schonmal mit ner absoluten URL zu deinem Webserver im Java Code probiert? ^^


----------



## Dirt Devil (5. Apr 2007)

Lösung: alles ins jar archiv packen. Dazu bitte im FAQ nachschlagen.

Mit dem Signtool www.java-forum.org/de/viewtopic.php?t=18083&highlight=signtool zunächst die benötigte *.jar Datei erzeugen und im html quelltext als archive angeben:


```
<html> 
 
 
 
 
 
 
    <head> 
        <title>sound Applet</title> 
    </head> 
    <body> 
        <h1>sound Applet</h1> 
        <hr> 
        <applet code="sound.class" 
            width=500 
            height=500 
            codebase="." 
            archive="sound.jar"
            alt="Your browser understands the &APPLET& tag but isn't running the applet, for some reason." 
         > 
              
            Your browser is ignoring the &APPLET& tag!      
        </applet> 
        <hr> 
    </body> 
</html>
```


----------

