# Vollständige Musik in Spiel einbauen (wav - Format)



## OLED (6. Mai 2014)

Sehr geehrte Mitgieder.

Ich möchte euch nun nocheinmal bei einem Problem zu meinem Projekt befragen,vielleicht könnt ihr mir bitte nocheinmal helfen. Ich habe folgendes Problem:

Ich möchte in meinem Spiel vollständige Musik abspielen, dass heißt keine Clips im Sekundenbereich sondern Musik in Minutenlänge. Dazu habe ich schon einen passenden WAV- Player gefunden. doch nach einbindung in mein Projekt wird die Musik zwar abgespielt aber ich kann keine Taste mehr drücken bzw nimmt sie nicht mehr an. Am Timer liegt es nicht wie ich anfangs dachte. Hat jemand eine Idee an was es liegen könnte? Hier mein code aus dem Player:

```
public void playSound(String filename){

        String strFilename = filename;
        
        try {
            soundFile = new File(strFilename);
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }

        try {
            audioStream = AudioSystem.getAudioInputStream(soundFile);
        } catch (Exception e){
            e.printStackTrace();
            System.exit(1);
        }

        audioFormat = audioStream.getFormat();

        DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
        try {
            sourceLine = (SourceDataLine) AudioSystem.getLine(info);
            sourceLine.open(audioFormat);
        } catch (LineUnavailableException e) {
            e.printStackTrace();
            System.exit(1);
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
        
        	sourceLine.start();
        
        int nBytesRead = 0;
        byte[] abData = new byte[BUFFER_SIZE];
        while (nBytesRead != -1) {
            try {
                nBytesRead = audioStream.read(abData, 0, abData.length);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (nBytesRead >= 0) {
                @SuppressWarnings("unused")
                int nBytesWritten = sourceLine.write(abData, 0, nBytesRead);
            }
        }

        sourceLine.drain();
        sourceLine.close();
    }
```

Ich habe den Player nicht einfach Kopiert sondern auch informiert wie er funktioniert, doch nach vielen durchgegoogelten Foren kam ich nicht auf das Problem. 

Danke im vorraus 
lg


----------



## Androbin (6. Mai 2014)

Ich weiß zwar nicht, wo das Problem bei dir liegt,
aber versuch doch mal diese Variante:

```
import java.applet.*;
import java.net.*;
import java.util.*;

public class SoundLib {
	
	HashTable<String, AudioClip> sounds = new HashTable<String, AudioClip>();
	Vector<AudioClip> loopingClips = new Vector<AudioClip>();
	
	public void loadSound( String name, String path ) {
		
		if ( sounds.containsKey( name ) ) return;
		
		URL sound_url = getClass().getClassLoader().getResource( path );
		sounds.put( name, Applet.newAudioClip( sound_url ) );
		
	}
	
	public void playSound( String name ) { sounds.get( name ).play(); }
	
	public void loopSound( String name ) {
		
		AudioClip audio = sounds.get( name );
		loopingClips.add( audio );
		audio.loop();
		
	}
	
	public void stopLoopingSounds() { for ( AudioClip c : loopingClips ) c.stop(); }
	
}
```


----------



## OLED (6. Mai 2014)

OK probier ich gleich aus danke. 
Naja dass Problem liegt daran dass ich in einer if anweisung die Musikklasse aufrufe, aber nach dieser anweisung läuft nichts mehr weiter. Wenn ich diesen Musikplayer zum Beispiel noch vor dem JFrame aufrufe mach sich das Fenster garnicht auf aber Musik läuft...


----------



## OLED (6. Mai 2014)

Funktioniert dass mit wav Dateien auch? hab ne NullpointerException bzw welche Formate kann ich bei einem Clip den hernehmen?


----------



## OLED (6. Mai 2014)

Bin gerade drauf gekommen auf etwas:
Wenn ich den Musikplayer als erstes Starte dann erst dass Spiel dann funtioniert alles einwandfrei :bahnhof: wieso ist das so?


----------



## Androbin (6. Mai 2014)

> ... Funktioniert dass mit wav Dateien auch? hab ne NullpointerException bzw welche Formate kann ich bei einem Clip den hernehmen? ...


So weit ich weiß funktioniert es mit .aiff, .au, .midi, .ogg, .rmf, .wav sowie weiteren :rtfm:



> ... die Musik zwar abgespielt aber ich kann keine Taste mehr drücken bzw nimmt sie nicht mehr an. ...


Das ist eine gute Frage, ich vermute mal, dass bei dir der Sound nicht extra gestartet wird ( Thread )
und deine anderen Prozesse ( Tasten, etc. ) somit auf dessen Ende warten :toll:


----------



## OLED (6. Mai 2014)

Danke dir ich hatte ebenfalls schon die vermutung. Obs nun komplett funktuiniert muss ich nich schauen, da ich das programm jetzt dementsprechend umbauen muss...
Eine.frage noch: mit "this" übergebe ich da den aktuellen zustand eines programmes, also dass ich das this in.eine andere klasse übergebe und die klasse dann steuern kann, hab da noch nicht so den überblick :autsch:


----------



## Androbin (6. Mai 2014)

gewissermaßen, ja :autsch:
vor allem aber ist es nötig, wenn man eine Variable im Konstruktor-/Methoden- Kopf, etc. genauso benennt, wie eine Instanzvariable :bloed:
Dann muss man z. B. im Konstruktor( int x, int y, int z ) 
	
	
	
	





```
this.x = x; this.y = y; this.z = z
```
 angeben,
da x, y und z relativ zum Ort verschiedene Objekte angeben opcorn:
Wenn eine solche, gleichnamige Variable nicht existiert, ist "this" unnötig :toll:


----------



## OLED (7. Mai 2014)

Haha danke :lol:

dass mit den gleichen Variablen ist mir ja eh schon bekannt :bae: wollte nur einmal wissen weil ich den musikplayer je nachdem welche musik ich brauche steuern muss zwischen ingame und menümusik  und den musikplayer muss ich druch 4 klassen durchgeben :bloed:  xD

naja danke dir trotzdem


----------

