Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755

    AdvancedPlaye (JavaZOOM) implementare loop continuo

    Per la riproduzione di un file mp3 sto utilizzando la libreria JavaZOOM ed in particolare la sua classe AdvancedPlayer.
    Il mio intento è quello di eseguire un loop continuo del file, cioè che appena finita la canzone riprenda da capo. Poichè AdvancedPlayer non ha definita questa funzione ho deciso di (provare) implementarla da me:
    ho pensato che per fare ciò che voglio devo "portare a zero" l'inputStream che esso riproduce quindi ho fatto una cosa del genere:

    codice:
    BufferedInputStream bis = new BufferedInputStream (getClass ().getResourceAsStream ("percorsoDelMioMP3"));
    bis.mark (0);
    AdvancedPlayer ap = new AdvancedPlayer (bis);
    ap.setPlayBackListener(new PlaybackListener () {
                    public void playbackFinished (PlaybackEvent pe) {
                        try {
                            bis.reset();
                            ap.play();
                        } catch (IOException ex) {
                            Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
    
                    public void playbackStarted (PlaybackEvent pe) {
                    }
    }
    Ma non ottengo il risultato sperato , anzi mi viene lanciata addirittura una eccezione (al termine dell'esecuzione del file ovviamente) , una NullPointerException alla riga "ap.play ()"..
    Dove sbaglio?Come posso risolvere?
    Ultima modifica di zipangulu; 01-11-2013 a 05:04

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da zipangulu Visualizza il messaggio
    Dove sbaglio?Come posso risolvere?
    Nota innanzitutto che il play() è "sincrono" (ovvero tiene impegnato il thread che lo ha invocato). E una volta che play ha finito materialmente i dati, lo stream sottostante viene chiuso (è già chiuso quando playbackFinished viene invocato). Quindi comunque in ogni caso non puoi tornare indietro.
    Pertanto la cosa più semplice è ricreare tutta la catena di oggetti, dallo stream della risorsa fino al AdvancedPlayer e rifare play().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.