Sound Manager 2 и плейлист автоматически воспроизводят следующую песню не работают

У меня есть буквальный объект JS, который создает и воспроизводит мой список воспроизведения. На странице HTML у меня есть список со всеми моими треками. Когда я нажимаю на какую-то дорожку, все работает нормально, но когда я нажимаю на одну дорожку и жду конца дорожки, следующая дорожка не воспроизводится. это часть моего кода:

   playSound : function(track){
        console.log("Play this song");



        DG_PLAYER.TrackPlaying = track;

        soundManager.destroySound('MySoundID');



                DG_PLAYER.Sound =   soundManager.createSound({
                                        id:'MySoundID',
                                        url:track.sound,
                                        autoLoad: true,
                                        autoPlay: true,
                                        onload: function() { console.log('sound loaded!', this); },
                                        onfinish: function(){
                                            console.log('end song');
                                    var nextSong = DG_PLAYER.getNextSong();
                                            DG_PLAYER.playSound(nextSong);
                                        },
                                        onfailure : function(){console.log('some error')},
                                        whileloading : function(){console.log('i m loading');},
                                        whileplaying : function(){console.log('i m playing');}
                                    });


    },

Если я изменяю строку в событии onfinish следующим образом: setTimeOut(function(){DG_PLAYER.playSound(nextSong);},2000), все работает нормально. Кто-нибудь может мне помочь?

Еще одна вещь, когда заканчивается первая песня и вызывается Play для следующей песни, дорожка не загружается (нет сообщения от события onload). Спасибо, и извините за мой плохой английский. А.

ОК, я пытаюсь добавить «flashVersion: 9» при установке, и это устраняет проблему, но в IE 8 теперь появляется сообщение о недействии сценария.


person Andrea D    schedule 29.03.2013    source источник


Ответы (1)


Из истории изменений SoundManager2:

Проигрыватель Flash Player 11.6.602.171, выпущенный Adobe 26 февраля 2013 г., представил проблему с взаимодействием JS/Flash на основе API Flash 8 (flashVersion: 8) SM2 по умолчанию, когда методы SM2, вызываемые из обратных вызовов, таких как onfinish(), не будут работать. В первую очередь это сломало методы, используемые для последовательного воспроизведения звуков, последовательной загрузки серии звуков и так далее. (Подробнее см. обсуждение.)

Обратите внимание, что это не влияет на случаи, когда используется soundManager.setup({ flashVersion: 9}); однако SM2 использует flashVersion: 8 по умолчанию.

В частности, события, инициированные Flash (например, окончание звука), вызывают вызовы Flash -> JS к SM2 API, которые впоследствии вызывают указанные пользователем обработчики событий. Если указанный пользователем обработчик SM2 onfinish() немедленно вызывает метод SM2, такой как play(), который выполняет вызов JS -> Flash, этот вызов либо автоматически терпит неудачу, либо блокируется. Другие библиотеки JS + Flash, использующие аналогичные шаблоны обратного вызова, также могут быть затронуты, если их SWF-файл создан для API Flash 8.

Подозревая проблемы с синхронизацией или рекурсией/стеком, было обнаружено, что добавление setTimeout(callback, 0) к указанным пользователем обратным вызовам SM2, таким как onfinish(), восстановило функциональность последовательного воспроизведения/списка воспроизведения.

Проигрыватель Flash Player 11.6.602.180, выпущенный Adobe 12 марта 2013 г., демонстрирует такое же поведение. Чтобы избежать дополнительных взломов, SM2 применяет это ко всем обратным вызовам API на основе Flash 8 независимо от того, какая версия Flash Player установлена. Регрессий в результате этого изменения не ожидается.

С другой стороны, этой проблемы можно избежать, используя soundManager.setup({ flashVersion: 9 }), так как API на основе Flash 9, похоже, не имеет этой проблемы.

person idbehold    schedule 29.03.2013