1

プレイリストを作成して再生するリテラル 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) 正常に動作します。誰かが私を助けることができますか?

もう 1 つ、最初の曲が終了し、Play for next Song を呼び出すと、トラックはロードされません (onload イベントからメッセージが返されません)。ありがとう、そして私の下手な英語でごめんなさい。A.

OK 、セットアップで「flashVersion: 9」を追加しようとすると、これで問題が修正されますが、IE 8 ではアクション スクリプト メッセージが表示されません。

4

1 に答える 1

1

SoundManager2の改訂履歴から

2013 年 2 月 26 日に Adob​​e によってリリースされた Flash Player 11.6.602.171 は、SM2 のデフォルトの Flash 8 (flashVersion: 8) API ベースの JS/Flash インタラクションに問題をもたらし、SM2 メソッドが などのコールバックから呼び出されてonfinish()動作しませんでした。これは主に、サウンドを順番に再生したり、一連のサウンドを連続してロードしたりするために使用されるメソッドを壊しました。(詳細については、ディスカッションを参照してください。)

soundManager.setup({ flashVersion: 9})これは が使用されている場合には影響しないことに注意してください。ただし、SM2 はflashVersion: 8デフォルトで使用します。

具体的には、Flash によって開始されるイベント (サウンド フィニッシングなど) は、SM2 API に対して Flash -> JS 呼び出しを行い、その後、ユーザー指定のイベント ハンドラーを呼び出します。ユーザー指定の SM2onfinish()ハンドラーが、JS -> Flash 呼び出しを行う play() などの SM2 メソッドをすぐに呼び出した場合、この呼び出しは暗黙のうちに失敗するか、ブロックされます。SWF が Flash 8 API を対象として構築されている場合、同様のコールバック パターンを使用する他の JS + Flash ライブラリも影響を受ける可能性があります。

タイミングまたは再帰/スタックの問題を疑って、シーケンシャル/プレイリスト機能の復元setTimeout(callback, 0)など、ユーザー指定の SM2 コールバックを導入することが判明しました。onfinish()

2013 年 3 月 12 日に Adob​​e によってリリースされた Flash Player 11.6.602.180 は、同じ動作を示します。追加のハッキングを回避するために、SM2 は、インストールされている Flash Player のバージョンに関係なく、すべての Flash 8 ベースの API コールバックにこれを適用します。この変更によるリグレッションは予想されません。

soundManager.setup({ flashVersion: 9 })または、 Flash 9 ベースの API にはこの問題がないように見えるため、を使用することでこの問題を回避できます。

于 2013-03-29T15:00:09.327 に答える