2

JQuery と SoundManger2 を使ってみたところ、JQuery が使用されている特定の状況で SoundManager に問題があることに気付きました。また、Firefox (3.6.13) または IE (8.0.7600) が使用されているかどうかにも依存します。

私がテストしようとしているのは、サウンドを再生できるかどうかだけです。各例では、最初にコードを示し、コードの後に​​ IE と FireFox が成功したか失敗したかを示します。


<html> 
<head>
    <title></title>
    <script type="text/javascript" src="/Project/PublicWebSite/Scripts/soundmanager2.js"></script>
    <script type="text/javascript" src="/Project/PublicWebSite/Scripts/jquery-1.5.js"></script>    
    <script type="text/javascript">
        soundManager.debugMode = true;
        soundManager.defaultOptions.volume = 50
        soundManager.debugFlash = true; // enable flash debug output for this page
        soundManager.url = '/Project/PublicWebSite/Scripts/swf/soundmanager2.swf';
        soundManager.flashVersion = 8; // optional: shiny features (default = 8)
        soundManager.useFlashBlock = false; // optionally, enable when you're ready to dive in
        //enable HTML5 audio support, if you're feeling adventurous. iPad/iPhone will always get this.
        //soundManager.useHTML5Audio = true;
        soundManager.onready(function () {
            soundManager.createSound('helloWorld', '/Project/PublicWebSite/Content/Sounds/Chime.mp3');
            soundManager.play('helloWorld');
        });
    </script>
</head>
<body>
</body>
</html>

IE : 成功; FireFox : 成功


次のコードでは、JQuery ドキュメントの読み込みで SoundManager の構成を追加する以外はすべて同じです。

<html> 
<head>
    <title></title>
    <script type="text/javascript" src="/Project/PublicWebSite/Scripts/soundmanager2.js"></script>
    <script type="text/javascript" src="/Project/PublicWebSite/Scripts/jquery-1.5.js"></script>    
    <script type="text/javascript">

        $(function () {
            soundManager.debugMode = true;
            soundManager.defaultOptions.volume = 50
            soundManager.debugFlash = true; // enable flash debug output for this page
            soundManager.url = '/Project/PublicWebSite/Scripts/swf/soundmanager2.swf';
            soundManager.flashVersion = 8; // optional: shiny features (default = 8)
            soundManager.useFlashBlock = false; // optionally, enable when you're ready to dive in
            //enable HTML5 audio support, if you're feeling adventurous. iPad/iPhone will always get this.
            //soundManager.useHTML5Audio = true;
            soundManager.onready(function () {
                soundManager.createSound('helloWorld', '/Project/PublicWebSite/Content/Sounds/Chime.mp3');
                soundManager.play('helloWorld');
            });
        });
    </script>
</head>
<body>
</body>
</html>

IE : 成功; FireFox : 失敗


JQuery および SoundManger スクリプト参照の順序を変更しました

<html> 
<head>
    <title></title>
    <script type="text/javascript" src="/Project/PublicWebSite/Scripts/jquery-1.5.js"></script>    
    <script type="text/javascript" src="/Project/PublicWebSite/Scripts/soundmanager2.js"></script>
    <script type="text/javascript">

        $(function () {
            soundManager.debugMode = true;
            soundManager.defaultOptions.volume = 50
            soundManager.debugFlash = true; // enable flash debug output for this page
            soundManager.url = '/Project/PublicWebSite/Scripts/swf/soundmanager2.swf';
            soundManager.flashVersion = 8; // optional: shiny features (default = 8)
            soundManager.useFlashBlock = false; // optionally, enable when you're ready to dive in
            //enable HTML5 audio support, if you're feeling adventurous. iPad/iPhone will always get this.
            //soundManager.useHTML5Audio = true;
            soundManager.onready(function () {
                soundManager.createSound('helloWorld', '/Project/PublicWebSite/Content/Sounds/Chime.mp3');
                soundManager.play('helloWorld');
            });
        });
    </script>
</head>
<body>
</body>
</html>

IE : 失敗; FireFox : 成功


静的な Web ページを作成するだけであれば、これは問題になりません。レイヤーなどを使用してasp.net MVCでコードを作成していますが、ロードされる順序が重要です。これが、私が最初にこの問題に遭遇した方法です。

私は JQuery と SoundManger の初心者なので、何か間違ったことをしている可能性が非常に高いです。これを改善する方法についてコメントがある場合は、回答をお願いします。これを理解する前に、しばらくキーボードに頭をぶつけて、これが他の人の助けになることを願っています.


アップデート

サウンドが再生されない場合、SoundManager2 から次の情報を取得します

-- SoundManager 2 のロードに失敗しました (セキュリティ/ロード エラー) --
soundManager.disable(): シャットダウン
soundManager: 初期化に失敗しました。
soundManager: /Project/PublicWebSite/Scripts/swf/soundmanager2.swf が有効なパスであることを確認します。
soundManager: 予想される時間内に Flash の応答がありません。考えられる原因: soundmanager2_debug.swf の読み込みに失敗した (および/または Flash 8+ が存在しない)、Flash がブロックされている、または JS-Flash セキュリティ エラーが発生している可能性があります。詳細なデバッグ情報については、SWF 出力を参照してください。
soundManager: せっかちで、まだ Flash を待っています...
soundManager::initMovie(): Flash からの ExternalInterface 呼び出しを待っています..
soundManager::initMovie(): EMBED 要素を取得しました (JS で作成)
soundManager::createMovie(): 試行中./soundmanager2_debug.swf を読み込む
-- SoundManager 2 V2.97a.20110123 (AS2/Flash 8)、通常のポーリング --

Firebug と Fiddler で、このエラーが発生すると、SoundManger が soundmanager2_debug.swf @ /project/PublicWebSite/static/ を見つけようとすることに気付きました。問題は、swf ファイルがそこにないことです。これは、私の HTML ファイルがある場所です。


アップデート

サイモン、それは私を正しい方向に向けました。http://www.schillmania.com/projects/soundmanager2/doc/getstarted/#lazy-loadingで説明されているように、soundmanger2.js ファイルを変更する必要はありませんでした。
SoundManger スクリプトへの参照を削除し、JQuery ajax 呼び出しを使用してスクリプトを動的にロードしました。

<html> 
<head>
    <title></title>
    <script type="text/javascript" src="/Project/PublicWebSite/Scripts/jquery-1.5.js"></script>    

    <script type="text/javascript">

        $(function () {
            $.ajax({
                url: '/Project/PublicWebSite/Scripts/soundmanager2.js',
                dataType: 'script',
                success: 
                {
                    soundManager.debugMode = true;
                    soundManager.defaultOptions.volume = 50
                    soundManager.debugFlash = true; // enable flash debug output for this page
                    soundManager.url = '/Project/PublicWebSite/Scripts/swf/soundmanager2.swf';
                    soundManager.flashVersion = 8; // optional: shiny features (default = 8)
                    soundManager.useFlashBlock = false; // optionally, enable when you're ready to dive in
                    //enable HTML5 audio support, if you're feeling adventurous. iPad/iPhone will always get this.
                    //soundManager.useHTML5Audio = true;
                    soundManager.onready(function () {
                        soundManager.createSound('helloWorld', '/Project/PublicWebSite/Content/Sounds/Chime.mp3');
                        soundManager.play('helloWorld');
                    });
                }

            });

        });
    </script>
</head>
<body>
</body>
</html>

IE : 成功; FireFox : 成功

BarDev

4

2 に答える 2

3

ここでの問題は、特に jquery の使用ではなく、Soundmanager2 の構成を DOM 対応イベントにバインドしているという事実です。Soundmanager2 自体もその読み込みルーチンをこのイベントにバインドするため、このイベントが発生するまで構成コードが実行されない場合、ブラウザーがこれらのイベント ハンドラーを呼び出す順序によっては、既に手遅れになる可能性があります。

私は SM2 の専門家ではありません (使用したことはありません) が、Soundmanager2 のロード プロセスを延期し、後で明示的にロードできるようにするため、マネージャーの "遅延読み込み" 機能に出くわしました。構成コードが呼び出されました: http://www.schillmania.com/projects/soundmanager2/doc/getstarted/#lazy-loading

于 2011-02-15T08:58:51.210 に答える
0

i recently released an audio player framework that leverages SoundManager2 AND integrates w/ jQuery as a $.fn. -- very simple to use and/or customize.. similar to jPlayer in the front-end design, but w/ additional playback capabilities (eg RTMP streaming, full HTML5 support), examples, tests etc:

https://github.com/APMG/APMPlayer

于 2013-01-09T02:29:55.860 に答える