2013-07-14 6 views
5

Sono nuovo di Javascript e l'SDK Soundcloud, quindi se la mia soluzione attuale è completamente fuori base, fatemi sapere come può essere migliorato.Come posso passare automaticamente al suono successivo al completamento della traccia precedente utilizzando l'SDK JavaScript Soundcloud per lo streaming?

Sto costruendo un player Soundcloud personalizzato e non utilizzo un widget precostruito. Sto cercando di automaticamente passare alla traccia successiva al termine della riproduzione di una traccia. Voglio essere in grado di farlo senza usare una playlist Soundcloud. Invece, inserirò una lista JSON di brani da suonare.

Sono in grado di riprodurre, mettere in pausa, interrompere e saltare le tracce facendo clic sui collegamenti, ma non sono sicuro di sapere quando una traccia ha completato la riproduzione per attivare la funzione nextTrack. Eventuali suggerimenti?

Soundcloud Javascript SDK Streaming API: http://developers.soundcloud.com/docs/api/sdks#streaming

Ecco il mio codice:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
<script src="http://connect.soundcloud.com/sdk.js"></script> 

<div class="music-player"> 
    <h4 class="trackTitle">Current track</h4> 
    <a href="#" id="play">Play</a> 
    <a href="#" id="pause" style="display:none;">Pause</a> 
    <a href="#" id="stop">Stop</a> 
    <a href="#" id="next">Next</a> 
</div> 

<script> 

    Track = function (trackId){ 
     var currentTrack = ""; 

     SC.initialize({ 
      client_id: "CLIENT_ID" 
     }); 

     SC.stream("http://api.soundcloud.com/tracks/" + trackId, function(sound){ 
      currentTrack = sound; 
     }); 

     this.play = function() { 
      currentTrack.play(); 
     }; 

     this.pause = function() { 
      currentTrack.pause(); 
     }; 

     this.stop = function() { 
      currentTrack.stop(); 
     }; 
    }; 

    Rotation = function(tracks) { 
     var currentTrack = tracks[0]; 

     this.currentTrack = function() { 
      return currentTrack; 
     }; 

     this.nextTrack = function() { 
      var currentIndex = tracks.indexOf(currentTrack); 
      var nextTrackIndex = currentIndex + 1; 
      var nextTrackId = tracks[nextTrackIndex]; 
      currentTrack = nextTrackId; 
      return currentTrack 
     }; 
    }; 

    $(document).ready (function(){ 
     var songs = [{"title":"Sad Trombone","song_url":"https://soundcloud.com/sheckylovejoy/sad- trombone","soundcloud_id":"00"},{"title":"AraabMUZIK - \"Beauty\"","song_url":" https://soundcloud.com/selftitledmag/araabmuzik-beauty","soundcloud_id":"79408289"}] 
     var rotation = new Rotation(songs); 
     var currentTrack = rotation.currentTrack(); 
     var currentPlayingTrack = new Track(currentTrack.soundcloud_id); 

     $('#play').on('click', function(event){ 
      currentPlayingTrack.play(); 
      $('.trackTitle').html(currentTrack.title); 
      $('#pause').show(); 
      $('#play').hide(); 
     }); 

     $('#pause').on('click', function(event){ 
      currentPlayingTrack.pause(); 
      $('#pause').hide(); 
      $('#play').show(); 
     }); 

     $('#stop').on('click', function(event){ 
      currentPlayingTrack.stop(); 
      $('#pause').hide(); 
      $('#play').show(); 
     }); 

     $('#next').on('click', function(event){ 
      currentPlayingTrack.stop(); 
      currentTrack = rotation.nextTrack(); 
      currentPlayingTrack = new Track(currentTrack.soundcloud_id); 
      currentPlayingTrack.play(); 
      $('.trackTitle').html(currentTrack.title); 
     }); 

    }); 

</script> 

risposta

7

È possibile implementare il metodo OnFinish quando si crea l'oggetto pista, ora è possibile sostituire l'output della console con una funzione .

SC.stream("http://api.soundcloud.com/tracks/" + trackId, {onfinish: function(){ 
    console.log('track finished'); 
}}, function(sound){ 
    currentTrack = sound; 
}); 
+0

Grazie bnz - Esattamente quello che mi serviva :) – jmejia

+0

Che cosa significa la "funzione (suono) {currentTrack = suono;}" fare? –

+0

Ho provato questo, ma non ho console ... non sono sicuro che non funziona .. – Francesco

Problemi correlati