Musik und Java

  • Themenstarter Themenstarter Martin
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
M

Martin

Gast
Hallo Ihr,

wie schafft man es in einen normalen Programm (kein Applet) eine wav-Datei abzuspielen. Meine Bücher schweigen sich darüber aus, JavaDoc versteh ich nich wirklich was die meinen. Laut "Java-Insel" kann Java 1.4 wav abspielen, wenn ich nun folgen Code eingebe kommt immer Fehlermeldung "java.net.MalformedURLException: no protocol: ding.wav"

Code:
...
String str = "ding.wav";
...

try {
	URL url = new URL(str);
	AudioClip clip = Applet.newAudioClip(url);
	clip.play();
} catch(MalformedURLException e) {
	System.out.println(e);
	System.exit(1);
}

die "ding.wav" liegt im Verzeichniss wo aich die Quelldateien liegen
der Code oben ist im Konstruktor untergebracht
 
Das Problem liegt nicht an der wav-Datei, sondern an der URL.
Das einfach so wie du zu machen, geht nicht, die muss in der Form
"file:///laufwerk://ordner/unterordner/unterordner(usw)/ding.wav"
sein.
Ich habe für den Zweck mal eine Methode geschrieben:
Code:
 private static URL getURLfromFile (File fi)
  throws java.io.FileNotFoundException,
         java.net.MalformedURLException
  {
    if (!fi.exists()){
      throw new java.io.FileNotFoundException ("File " + fi.toString() + " doesn't exist");
    }
    String s = fi.getAbsolutePath();
    StringTokenizer st = new StringTokenizer (s, "\\", false);
    String ret = st.nextToken();
    ret += "/";
    ret += st.nextToken();
    while (st.hasMoreTokens()){
      ret += "\\";
      ret += st.nextToken();
    }
    System.out.println(ret);
    return new URL ("file:\\\\\\" + ret);
  }
}

Dann machst du:

Code:
URL url = getURLfromFile(new File(str));
 
Danke, das hat geholfen.
Ich hab das jetzt mal so gemacht damit ich nicht nen Vollständigen Pfad angeben muß.
Code:
try {	// Musik abspielen
	URL url = getClass().getResource("media"+File.separator+"ding.wav");
	AudioClip clip = Applet.newAudioClip(url);
	clip.play();
} catch(Exception me) {
        System.err.println("Fehler: GameArea.java:"+me.toString());
	System.exit(1);
}

Aber jetzt sagt mir Eclipse bei dem catch-Block das dieser nie erreicht wird wenn da "MalformedURLException" drinne steht, deshalb hab ich ganz labidar "Exception" genommen. Aber es funktioniert.
Is das so doof, ich möchte ja sauberen Code schreiben.
 
Das, was getClass().getResource() macht, ist das, was meine Methode getURLfromFile macht. (Wusste nicht, dass das auch so einfach geht 🙂 )
(Du kannst ja ein File auch relativ angeben).

MalformedURLException musst du nicht abfangen, weil das vermutlich innerhalb von getRessource() gemacht wird.
Wahrscheinlich musst du gar keine Exception abfangen, außer welchen, die evtl. beim Abspielen entstehen.
 
Illuvatar hat gesagt.:
(Du kannst ja ein File auch relativ angeben).
Das wollt ich ja damit bezwecken.

Irgend ne Exception muß ich abfangen. Ohne try-catch geht das nicht 🙂

Da ham wa ja beide was gelernt :lol:
 
Mußte nun doch Deine Variante nehmen. Innerhalb von Ecplipse hat das ja wunderbar funktioniert aber ausserhalb als .jar kamm immer "NullPointerException"
 
Komisch...

Noch als Anmerkung: ich vermute, dass die Methode (Edit: ich meine die von mir) unter nicht-Windows auch nicht läuft.
 
HI

also bei mir ging das ohne Probleme, habs noch bissle verändert. Bei mir siehts so aus:
Code:
    try {   // Musik abspielen
      URL url = getClass().getResource("sound/ding.wav");
      AudioClip clip = Applet.newAudioClip(url);
      clip.play();
    } catch(Exception me) {

    }
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben