# Hintergrundsounds und Soundeffekte



## JUserToto (16. Nov 2010)

Hallo,

mein Spiel hat im Moment folgende Klasse:


```
package Sound;
import java.io.*;
import javax.sound.sampled.*;
/**
 * Diese Klasse dient zum Abspielen von Sounds.
 */
public class SoundThread extends Thread {

    /**
     * Dateiname des Sounds.
     */
    private String filename;

    private Clip audioClip;

    private boolean loop;

    public SoundThread(String path, boolean loop) {
        super();
        this.filename = path;
        this.loop = loop;
    }

    /**
     * Spiel den Sound ab.
     */
    public void run() {
        
        AudioFormat af;
            try {
                AudioInputStream audioInputStream =
                        AudioSystem.getAudioInputStream(
                    new File(SoundThread.class.getResource(filename).getFile()));

                af     = audioInputStream.getFormat();
                int size =
                (int) (af.getFrameSize() * audioInputStream.getFrameLength());
                byte[] audio  = new byte[size];
                DataLine.Info info = new DataLine.Info(Clip.class, af, size);
                audioInputStream.read(audio, 0, size);
                audioClip = (Clip) AudioSystem.getLine(info);
                audioClip.open(af, audio, 0, size);
                if (loop) {
                    audioClip.loop(audioClip.LOOP_CONTINUOUSLY);
                }
                audioClip.start();

            } catch(Exception e) {
                e.printStackTrace();
            }
    }
}
```

Die Klasse dient zum Abspielen von Sounds...
Leider scheint AudioInputStream sehr pingelich zu sein. Kriege keinen Stereo Sound abgespielt, bei längeren Sounds meldet er mir "Failed to allocate clip data: Requested buffer too large."...
Gibt es eine bessere Möglichkeit Sounds abzuspielen? (Möglicherweise auch andere Formate als .wav, wie zum Beispiel mp3?)

lg Toto


----------



## EgonOlsen (17. Nov 2010)

Ich empfehle das hier: 3D Sound System


----------



## Ralph-Uwe (17. Nov 2010)

Hallo JUserToto,

das Problem ist nicht das Stereo, sondern die Dateigröße. Probiere mal ein Stereosound, der kleiner 
als 64k ist, aus. Dann wird es funktionieren. So wird versucht die gesamte Datei zu lesen.

Um größere Dateien abspielen zu können, musst Du ein Buffer verwendet, der Teile aus der Datei liest und an die Soundkarte weiter leitet.
Dann den nächsten Teil der Sounddatei einlesen und wieder weiter leiten.

Der Thread, wie Du ihn implementiert hast funktioniert so auch nicht.  

Das Audioformat von Java kann von Haus aus keine mp3 verarbeiten.
Von Sun gibt es das JMF um Sounds und soweit ich weiß auch Filme abspielen kann. Letzteres habe ich nie
probiert und das mit den Sounds war nicht so einfach.

Innerhalb des JMF gibt es ein jar-Archive "mp3plugin.jar", wenn man diesen Archive in sein Projekt mit einbindet 
kann man ohne weiteren Aufwand mp3 abspielen.
Allerdings funktioniert das nicht mit AudioClip.


----------



## JUserToto (17. Nov 2010)

Hallo, 
dankeschön für die Hilfe.

Das sind dann so Geschichten, wo ich mich als Student frage "Warum lerne ich nicht C++?".
Es mag in Java alles so seine Vorteile haben, allen voran die große Plattformunabhängigkeit, aber was es mir bringt, ein Programm plattformunabhängig programmieren zu können, wenn ich, um ein einfaches Lied abzuspielen, einen riesen großen Aufwand betreiben muss, ist mir bis jetzt noch nicht so ganz klar. Und da bin ich auch schon mit Swing an einige Grenzen gestoßen.

Werde mich also wohl ein bisschen belesen müssen, denn die bisherigen Lösungen scheinen ja doch nicht ganz einfach zu sein (zumindest für einen einfachen Studenten wie mich).

lg Toto

P.S.: Ich war davon ausgegangen, dass mein Thread funktioniert... Habe einige Dinge herausgenommen, weil sie entweder sehr schlechter Stil waren oder nicht unbedingt gebraucht werden. Vielleicht habe ich dabei was lebensnotwendiges entfernt. Sorry. Ich kann damit jedenfalls Sounds abspielen. Bekomme bei längeren Clips jedoch die genannten Probleme.


----------



## Ralph-Uwe (17. Nov 2010)

Hast Du Interesse an eine Klasse die Sound abspielen kann und im Hintergrund läuft?

Ich habe das was.


----------



## Cottonwood (18. Mai 2011)

--- sorry. War ein Post im falschen Thread. Bitte löschen.


----------

