Bonjour
Sur mon site j'ai un player. Les gens peut écouter ma musique tout en navigant sur mon site. J'ai un petit script qui me permet de jouer, de mettre sur pause et de passer à la prochaine tune.

Pour ça j'ai fait un tableau JSON à la main :

var JSON_TRACK_LIST = [
  {"soundcloud_id" : "183786280", "sToken" : "","title" : "Deep Melody [Dubstep Version - preview]"},
  {"soundcloud_id" : "182344624", "sToken" : "s-LEGfA","title" : "Deep Melody [Preview 1]"},
  {"soundcloud_id" : "174492544", "sToken" : "s-lsmYY","title" : "Teste 6.1"},
  {"soundcloud_id" : "173862711", "sToken" : "s-3zWdr","title" : " Metropolise [Preview 1]"},
  {"soundcloud_id" : "173733793", "sToken" : "s-fC2oH","title" : "Teste 3"},
  {"soundcloud_id" : "172192204", "sToken" : "","title" : "Rétro"},
  {"soundcloud_id" : "172192650", "sToken" : "s-QHT4D","title" : "The dream"},
];

Voici la function qui est lancer pour jouer les tune :

Track = function (trackId,stoken){
    var currentTrack = "";
     SC.initialize({
            client_id: "YOUR_CLIENT_ID"
        });

        // We play the track
        SC.stream("https://api.soundcloud.com/tracks/"+trackId+"?secret_token="+stoken,{
            onfinish : function(){
                $('#next').trigger("click");
            }
        },function(sound){
            currentTrack = sound;
        });

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

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

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

La fameuse fonction qui permet d'avoir la prochiane tune

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
        };
    };

Le problème est quand je suis rendu à la fin de mon gros tablau JSON_TRACK_LIST
Cette fonction ne trouve plus la prochain tune car il n'y pas d'autre élément quand la fonction nextTrack(); est rendu à la dernière tune de mon tablau. Il faut que je retoune a premier index du tableau et celà automatiquement.

Voici quand l'utlisateur clique sur le bouton suivant :

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

Merci de votre aide.

4 réponses


Maenhyr
Réponse acceptée

bonjour,

dans ta fonctiin nextTrack(), il te faut regarder si l'index de la chanson actuelle est égale à la taille du tableau - 1 (vu que l'index commence à 0). si c'est le cas, tu reset l'index pour le mettre à 0.

lakamark
Auteur
Réponse acceptée

En suivant ton idée j'ai essayé quelque chose.

Je met dans une variable la grandeur du tableau :

var sizeArray = JSON_TRACK_LIST.length;
if(currentTrack > sizeArray) {
                console.log('Vous est sortit du tableau');
}

Le problème de ma condition est qu'elle n'est pas pris en charge. Si j'ai bien faite les chose celà devrait me retourner "vous est sorti du tableau". Ça ne fonctionne pas.

Vallyan
Réponse acceptée

Tu devrais peut-etre essayer de faire ce que prbaron te conseille, plutot que de faire un truc a ta sauce qui s'en sinspire mal et qui donc ne fonctionne pas.
Le numéro de la piste en cours NE PEUT PAS etre plus grand que sizeArray pour la raison que prbaron te donne:

il te faut regarder si l'index de la chanson actuelle est égale à la taille du tableau - 1 (vu que l'index commence à 0)

Si tu parcours un tableau, tu ne peux pas en sortir. Vérifie uniquement si :

if(currentTrack == sizeArray-1) {
                console.log('Dernière piste en train d'etre lue');
}
lakamark
Auteur
Réponse acceptée

Merci j'ai trouver ma solution :

if(currentIndex == sizeArray) {
                currentTrack = tracks[0];
                return currentTrack;
            } else {
                currentTrack = nextTrackId;
                return currentTrack
            }