Java Sound in den Griff bekommen aber wie ?



  • Hi,

    Ich habe ein Problem mit dem abspielen mehrere Musikstuecke, der Funktion soundStuecke uebergeben ich aus einem Programm eine bestimmte Anzahl an Liedernamen diese sollen dann nacheinander abgespielt nur wenn die Funktion soundStuecke die Funktion abspielen aufruft wird das erste Lied abgespielt und dann sofort das zweite und das dritte usw. sie laufen dann alle sozusagen gleichzeitig, das soll aber nicht es soll immer ein Lied abgespielt werden und dann das nächste wie kann ich das erreichen ?

    import java.io.*;
    import java.applet.*;     //fuer Sound
    import java.net.*;        //fuer Sound
    import java.lang.*;
    
    class SoundClass
    {
          File songFile;
          String liedPfad;
          URL gesamtPfad;
          AudioClip song;
          void abspielen(String lied)
          {
             try{
                 songFile = new File(lied);
                 liedPfad = "file:///"+songFile.getAbsolutePath();
                 gesamtPfad = new URL(liedPfad);
                 song = Applet.newAudioClip(gesamtPfad);
                 boolean mytrue = true;
    
                 song.play();
    
                 try {
                   Thread.sleep(0);
                }catch (InterruptedException ewe)
                {
                }
                }catch (MalformedURLException ewe)
                {
                   System.out.println(ewe.toString());
                }
          }
    
          void soundStuecke(String lieder[])
          {
    
              for(int i=0;i<lieder.length;i++)
              {
                abspielen(lieder[i]);
              }
    
          }
    
          void anhalten()
          {
            song.stop();
          }
    
    }
    


  • falls ich mich nicht irre sieht das so aus das du die einzelnen lieder einfach nacheinander ausführst ohne zu überprüfen ob oder welches stück gerade gespielt wird. in deine fkt soundStücke musst du irgendeine abfrage einbauen die verhindert das die stücke gleich nacheinadner gespielt werden.
    ich weiss nich ob das geht, aber wenn du es hinbekommst das ein abspielen eines Stücks in einem thread läuft, kannst du überprüfen ob noch was aktive ist.
    aus der for schleife solltest du eine while machen. mit while !whatever und einem boolean könnte man das auch machen. du setz den boolean auf true wenn was gespielt wird und auf false wenn nichts gespielt wird. jetz musst du dir nur noch was einfallen lassen wo und wie den den boolean setz.
    kannst ja vielleicht auch mal in der java sun nachsehen oder mit google.
    falls du nicht weiterkommst meld dich nochmal.dann müssen wir halt schritt für schritt vorgehen :). ich behalt den thread im auge

    pain



  • So wie ich ihn verstanden habe will er genau das erreichen. Er will ja die LIeder in Folge abspielen scheitert aber wohl an dem Threading, das eingesetzt wird um die Lieder abzuspielen. Vielleicht gibt es eine Möglichkeit der Synchronisierung?



  • @Cegniz: ich hab ihn so verstanden das er nicht weiss wo der fehler liegt. dem hab ich ihm gesagt. falls das nich des frages ursprung sein sollte sorry.
    nur so nebenbei: kann man das abspielen in eigenen threads machen ? wenn ja ist die problemlösung ja easy (while !Thred aktiv....).

    pain



  • Nun ja ich kenn' mich mit dem ganzen Sound-Geraffel nicht so aus aber so wie er das erzählt hat (die Lieder fangen gleichzeitig an zu spielen) gehe ich mal davon aus, dass das SoundPackage das schon von alleine macht.



  • Hallo,

    ich hatte bei einem Java-Programm mal dasselbe Problem und habe ziemlich lange rumgesucht. Ich konnte aber keine Methode finden, die meldet, sobald die Sounddatei abgespielt ist. Die einzige Möglichkeit, die in einem Buch beschrieben wurde, war, dass man die Abspiellänge der Datei mit hinterlegt und dann die nächste Datei erst nach dieser Zeit startet.



  • Ja das Problem ist das man die ganzen Lieder gleichzeitig hoert also total das Chaos. Es soll sein wie im Radio immer ein Lied nach dem anderen. Die Idee mit dem ueberprufen ob gerade ein Lied abgespielt wird hatte ich auch schon aber hatte dasselbe Problem das ich nichts finden konnte was zurueckgegeben wird 😞 😞 Das mit der abspiellaenge ist eine gute Idee, wie kann man denn die ermitteln ??



  • Um noch einmal das Problem aufzugreifen. Ich denke das Problem liegt in der Natur der Sache. Das Interface AudioClip welches von der Applet-Klasse zur Verfügung gestellt wird ist wirklich nur für Applets gedacht. Das heisst, die Klasse ist quasi dafür da auf einer Website im Hintergrund Musik abzuspielen. Deswegen bietet das Interface auch keine Möglichkeit irgendwelche Playlists zu erstellen bzw. irgend was anderes mit den Sound-Dateien zu machen. Dafür gibt es die Java Sound API ( http://java.sun.com/products/java-media/sound/ ). Ich denke wenn Du dich mit ihr auseinandersetzt kommst Du eher zum Ziel.

    [ Dieser Beitrag wurde am 20.01.2003 um 15:58 Uhr von CengizS editiert. ]


Anmelden zum Antworten