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)
});
})
};
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
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. –