2016-04-07 5 views
0

Was ist die korrekte Verwendung des Stream-Finish-Ereignisses der Soundcloud-API? Ich kann eine URL auflösen, einen Stream starten und feststellen, wann der Song endet, aber nach dem ersten Song werden die nächsten Streams zum ersten Stream-Objekt hinzugefügt. Nachdem in meinem Beispiel der erste Song abgespielt wurde, wird durch Klicken auf "stop" die console.log ("Stop Clicked:" Stream.ID) auch für die vorherigen Streams ausgelöst.Soundcloud API Wie nutze ich das Ereignis finish?

Wie komme ich wieder aus der Track-Funktion, um einen neuen Song zu starten, anstatt einen neuen Stream in einem Stream zu starten?

Link to a Codepen of the below code

SC.initialize({ 
    client_id: '72e56a72d70b611ec8bcab7b2faf1015' 
}); 

$(document).ready(function() { 

    var urlid = ["https://soundcloud.com/sheckylovejoy/sad-trombone", "https://soundcloud.com/xcollective/x002"]; 
    $.get(
     'https://api.soundcloud.com/resolve.json?url=' + urlid[0] + '&client_id=72e56a72d70b611ec8bcab7b2faf1015', 
     function (result) { 
      $(document).trigger('Rotation/currentTrack', result); 
      return result; 
     }); 

    $(document).on('Track/finish', function(result){ 
     $.get(
      'https://api.soundcloud.com/resolve.json?url=' + urlid[1] + '&client_id=72e56a72d70b611ec8bcab7b2faf1015', 
      function (result) { 
       $(document).trigger('Rotation/currentTrack', result); 
       console.log("Song 2 " + result.id); 
       return result; 
      });  
     });   
    }); 

    $(document).on('Rotation/currentTrack', function(e, results){ 
     console.log("results " + results.id + " " + results.title); 
     track(e, results.id); 
    }); 

    function track(e, trackNum){ 
    SC.stream('/tracks/' + trackNum).then(function(sound) { 
     sound.play(); 
     $('#start').click(function(e) { 
      e.preventDefault(); 
      console.log("START Clicked") 
      sound.play(); 
      sound.on('finish', function(){ 
       console.log("The track finished"); 
       $(document).trigger('Track/finish', sound); 
      }); 
     }); 
    $('#stop').click(function(e) { 
     e.preventDefault(); 
     console.log("Stop clicked: " + trackNum) 
     sound.pause(); 
    }); 
    $('#skip').click(function(e){ 
     e.preventDefault(); 
     sound.seek(170000); 
    }); 

    }) 
} 

Antwort

0

Das Problem ist, dass ich die Methoden auf Ton anzurufenden nach haben mehrere Streams zu SC hinzugefügt. Ich habe herausgefunden, dass ich jeden Sound in einem Array speichern und dann die Methoden auf dem entsprechenden Sound im Array aufrufen kann. Durch das Speichern von Sound auf dem SC-Objekt können die Methoden auch außerhalb von track() aufgerufen werden.