2016-05-21 1 views
0

J'utilise SoundManager2 pour lire l'audio extrait de SoundCloud. Mon problème se pose lorsqu'il y a plusieurs de la même piste sur une page, car je veux seulement créer un objet sonore pour chaque URL.SoundManager 2 - crée uniquement un objet sonore par URL

Il semble que lors de l'initialisation de chaque SCPlayer, il n'y a pas d'autre occurrence de SoundManager dans la fenêtre puisque this.player est toujours nulle. Je pense que cela a quelque chose à voir avec la promesse faite par le client soundcloud (depuis son asynchrone) mais ne sait pas comment résoudre le problème.

var SCPlayer = function(id, url){ 
    this.playing = false; 
    this.id = id; 
    this.elems = $(".player[data-sc-id="+ this.id + "]"); //Find all elems with data attr so all controls of the same sound are affected 
    this.btns = this.elems.find(".button"); 
    this.url = url; 
    this.player = window.soundManager.getSoundById('sc_' + this.id); //always null 
    this.init() 
}; 

SCPlayer.prototype = { 
    init: function(){ 
     var that = this; 
     if (! that.player) { 
      that.player = window.soundManager.createSound({ 
       id: 'sc_' + that.id, 
       url: that.url, 
       autoLoad: false, 
       autoPlay: false 
      }); 
     } 
     $(this.btns).on('click', {context: this}, this.onClick); 
    }, 
    onClick: function(ev){ 
     //Change play controls 
    } 
}; 

var init_SCPlayers = function(){ 
    //Loop through each player element, retrieve the stream url 
    //and then create the soundmanager object 
    var urls = []; 
    $('.player.sc-player').each(function(){ 
     var id = $(this).data('sc-id'); 
     SC.get('/tracks/' + id + '/streams').then(function(stream) { 
      new SCPlayer(id, stream.http_mp3_128_url) 
     }); 
    }) 
}; 

Répondre

0

Vous pouvez récupérer un son existant à partir de SoundManager2 en utilisant getSoundById. Les documents pour SoundManager2 sont here.

that.player = soundManager.getSoundById('sc_' + that._id) || soundManager.createSound(...); 
+0

Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire sur la façon dont et/ou pourquoi il résout le problème améliorerait la valeur à long terme de la réponse. – cpburnz

+0

Je ne suis pas sûr que l'édition ait fait beaucoup, parce qu'une fois qu'une personne a le nom de la fonction, elle peut le rechercher dans les documents. –