# Problem mit Sound



## arthas (30. Sep 2013)

Moin ihr lieben Menschen,

nun bin gerade dabei das Hauptmenü für ein Spiel zu schreiben. Das ist mein erstes "GUI"-Spiel mit Java, also verzeiht mir mögliche Anfängerfehler.  
Mit den grafischen Part meines Spiel hatte ich bis jetzt keine nennenswerten Probleme, aber nun weiß ich nicht, wie man Sound abspielen kann mit Java. Standesgemäß habe ich das mal gegoogelt und kamm auf folgende Seite: Playing Sound in Java

Hab gleich mal den Code dort kopiert und ausprobieren wollen, und wie es zu erwarten war, kommt ein Fehler bei raus. Kompilieren tue ich ohne Probleme, aber dann kommt eine NullPointerException bei der Ausführung (habe es mir mal über e.getMessage() ausgeben lassen in der Konsole und es kam "null" raus ^^ ). Der fehlerhafte Code im Konkreten (laut mir und Eclipse  ):


```
URL url = this.getClass().getClassLoader().getResource("H:/Programmieren/MistsOfDalaran/src/experiment/gameOfThrones.mp4");
AudioInputStream audioIn = AudioSystem.getAudioInputStream(url); //Hier kommt die Fehlermeldung
Clip clip = AudioSystem.getClip();
clip.open(audioIn);
clip.start();
```


Liege ich richtig in der Annahme, dass er die URL nicht richtig erkennt, deshalb dem InputStream ein "null" als URL übergegeben wird und er deshalb diese nicht abspielen kann? In der "Eclipse-API" steht zu getResource(...) _Returns: A URL object for reading the resource, or null if the resource could not be found or the invoker doesn't have adequate privileges to get the resource._, aber wieso kann er es nicht lesen? Die Datei exestiert wirklich unter dieser Direktion. Angemerkt, ich hatte das Problem auch Gestern beim Laden eines Bildes mittels einer URL, konnte es aber umgehen, durch Benutzung einer anderen Methode.

Könnt ihr mir helfen? Wo liegt der Fehler, bzw. was kann ich tun? Gibt es vielleicht eine andere bessere Lösung zum Laden von Sounds in Java?


Gruß Paul!


(Hier die komplette Fehlermeldung:
Exception in thread "main" java.lang.NullPointerException
	at com.sun.media.sound.StandardMidiFileReader.getSequence(Unknown Source)
	at javax.sound.midi.MidiSystem.getSequence(Unknown Source)
	at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(Unknown Source)
	at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
	at experiment.SoundClipTest.<init>(SoundClipTest.java:22)
	at experiment.SoundClipTest.main(SoundClipTest.java:48))


----------



## arthas (30. Sep 2013)

Ich habe bereits eine (andere) Lösung für das Problem gefunden, in dem ich, wie bei dem Grafik-Gedöns das ganze URL-Zeug umgehe:


```
AudioInputStream audioIn = AudioSystem.getAudioInputStream(new File(fileDir));
			Clip clip = AudioSystem.getClip();
			clip.open(audioIn);
			clip.start();
```

Funktioniert bestens (solange ich nicht gerade eine Musik-Datei aufrufen will, die statliche 668 MB groß ist ^^).

Trotzdem würde es mich interessieren, warum es den mit URL nicht klappt? Kann mir da einer weiterhelfen?


Gruß Paul!


----------



## mymaksimus (3. Okt 2013)

weil getResource() eine relative pfadangabe benötigt. 
sprich einfach nur:


```
getClass().getResource("/experiment/datei.endung");
```

nur mal so:
du kannst tatsächlich mp4 files mit clip abspielen??


----------



## arthas (4. Okt 2013)

Relative Pfadangabe? :question: Was genau meinst du damit, bzw. relativ zu was? 


```
getClass().getResource("/experiment/datei.endung");
```

Hier jetzt relativ zu dem Ordner wo das Bild sich befindet oder verstehe ich das falsch?


Nein man kann kein .mp4-Dateien abspielen.  Ist mir auch aufgefallen, seit dem arbeite ich mit .wav-Dateien...^^ (Bei .mp4 kommt eine falsches Format Meldung oder so)


----------



## Gucky (4. Okt 2013)

Relativ bedeutet relativ zur ausführenden .class Datei.

Also in deinem Projekt ist ein Hauptordner. In dem sind die ganzen .java Dateien. Dann kannst du da noch einen Ordner machen, den du irgendwie nennst. Darin ist eine Datei. Der relative Pfad wäre dann:
/[ORDNER]/[DATEI]


----------



## arthas (4. Okt 2013)

Danke, probier ich dann nachher mal aus! 

(Das Thema ist damit erledigt, würde ich mal sagen  )


----------

