2013-03-29 7 views
1

내 재생 목록을 만들고 재생하는 리터럴 JS 개체가 있습니다. HTML 페이지에는 모든 트랙이있는 목록이 있습니다. 일부 트랙을 클릭하면 모두 정상적으로 작동하지만 한 트랙을 클릭하고 트랙의 끝을 기다리면 다음 트랙이 재생되지 않습니다. 나는이 같은 onfinish 이벤트에 라인을 변경하는 경우Sound Manager 2 및 재생 목록에서 다음 노래가 자동으로 재생되지 않습니다.

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


    }, 

: 이 내 코드의 일부이다 에서는 setTimeout (() 함수는 {DG_PLAYER.playSound (nextSong);}, 2000)가 잘 작동합니다. 어떤 사람이 나를 도울 수 있습니까?

첫 번째 노래가 끝나고 다음 노래를 재생할 때 트랙이로드되지 않습니다 (onload 이벤트의 메시지가 표시되지 않음). 감사합니다. 나쁜 영어로 유감스럽게 생각합니다. A.

OK, 설치에 "flashVersion : 9"를 추가하려고하는데 문제가 해결되었지만 Internet Explorer 8에서 실행 취소 스크립트 메시지가 나타납니다.

답변

1

From SoundManager2's Revision History :

의 Flash Player 11.6.602.171는 2013년 2월 26일에 어도비 발표, SM2의 기본 플래시 8 (flashVersion : 8)에 문제가 도입 API 기반 JS/플래시의 상호 작용, onfinish()과 같은 콜백에서 호출 된 SM2 메서드는 작동하지 않습니다. 이것은 주로 소리를 연속적으로 재생하고 연속적으로 일련의 사운드를로드하는 등의 방법을 사용합니다. 자세한 내용은 discussion을 참조하십시오. soundManager.setup({ flashVersion: 9})이 사용되는 경우에는 영향을 미치지 않습니다. 그러나 SM2는 기본적으로 flashVersion: 8을 사용합니다.

특히 Flash에서 시작된 이벤트 (사운드 완료)는 SM2 API에 Flash -> JS 호출을하며, 이후 사용자 지정 이벤트 처리기를 호출합니다. 사용자 지정 SM2 onfinish() 처리기가 JS -> Flash 호출을하는 play()와 같은 SM2 메서드를 즉시 호출하면이 호출이 자동으로 실패하거나 차단됩니다. 유사한 콜백 패턴을 사용하는 다른 JS + Flash 라이브러리도 SWF가 Flash 8 API를 대상으로 작성된 경우 영향을받을 수 있습니다.

타이밍 또는 재귀/스택 문제를 의심하여 ​​onfinish()과 같은 사용자 지정 SM2 콜백에 setTimeout(callback, 0)을 삽입하면 순차/재생 목록 기능이 복원 된 것으로 나타났습니다.

Adobe Flash Player 11.6.602.180은 2013 년 3 월 12 일에 Adobe에 관련되어 동일하게 작동합니다. 추가적인 해킹을 피하기 위해 SM2는 설치된 Flash Player의 버전에 관계없이 모든 Flash 8 기반 API 콜백에이를 적용합니다. 이 변화의 결과로 어떤 회귀도 예상되지 않습니다.

플래시 9 기반 API에이 문제가없는 것으로 표시되어 soundManager.setup({ flashVersion: 9 })을 사용하면이 문제를 피할 수 있습니다.

+1

고마워요! 이제 모두 확실합니다. –