0

Using soundManager2, I made a simple anchor with onclick="mySound.play()", but there is a big gap (almost half a second) before the sound is actually heard! This is, even though I pre-loaded the sound. How can I get a better response-time?

Here is the source code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" >
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <meta name="author" content="Shawn Inder" />
        <title>jeuReno</title>
        <style type="text/css">
        <!--



        -->
        </style>

        <!-- include SM2 library -->
        <script type="text/javascript" src="soundManager/script/soundmanager2.js"></script>

        <!-- configure it for your use -->
        <script type="text/javascript">

            soundManager.url = 'soundManager/swf/'; // directory where SM2 .SWFs live

            // Note that SoundManager will determine and append the appropriate .SWF file to the URL,
            // eg. /path/to/sm2-flash-movies/soundmanager2.swf automatically.

            // Beta-ish HTML5 audio support (force-enabled for iPad), flash-free sound for Safari + Chrome. Enable if you want to try it!
            // soundManager.useHTML5Audio = true;

            // do this to skip flash block handling for now. See the flashblock demo when you want to start getting fancy.
            soundManager.useFlashBlock = false;

            // disable debug mode after development/testing..
            // soundManager.debugMode = false;

            // Option 1: Simple onload() + createSound() method

            /*soundManager.onload = function() {
              // SM2 has loaded - now you can create and play sounds!
              soundManager.createSound('helloWorld','sounds/crash.mp3');
              soundManager.play('helloWorld');
            };*/

            // Option 2 (better): More flexible onload() + createSound() method

            /*soundManager.onload = function() {

              var mySound = soundManager.createSound({
                id: 'aSound',
                url: 'sounds/kick.mp3'
                // onload: [ event handler function object ],
                // other options here..
              });

              mySound.play();

            }*/

            // Option 3 (best): onready() + createSound() / ontimeout() methods for success/failure:

            /*soundManager.onready(function() {

              // SM2 has loaded - now you can create and play sounds!
              var mySound = soundManager.createSound({
                id: 'aSound',
                url: 'sounds/snare.mp3'
                // onload: [ event handler function object ],
                // other options here..
              });
              mySound.play();

            });*/

            soundManager.useHighPerformance = true;

            soundManager.ontimeout(function() {

              // (Optional) Hrmm, SM2 could not start. Show an error, etc.?
              alert("wtf");

            });
        </script>

        <script type="text/javascript">
            /*var snare = soundManager.createSound({
                id: 'snare',
                url: 'sounds/snare.mp3'
            });
            var kick = soundManager.createSound({
                id: 'kick',
                url: 'sounds/kick.mp3'
            });
            var crash = soundManager.createSound({
                id: 'crash',
                url: 'sounds/crash.mp3'
            });
            var highHat = soundManager.createSound({
                id: 'highHat',
                url: 'sounds/highHat.mp3'
            });*/
            soundManager.onready(function() {

              // SM2 has loaded - now you can create and play sounds!
              mySound = soundManager.createSound({
                id: 'aSound',
                url: 'sounds/snare.mp3'
                // onload: [ event handler function object ],
                // other options here..
              });
              mySound.load();
              // mySound.play();

            });

        </script>
    </head>
    <body>

        <a href="#" onclick="void(mySound.play());">click</a>

    </body>
</html>
4

1 回答 1

1

我没有看到这首歌是在哪里预加载的。您希望autoLoad在 default 或 createSound 部分中设置为 true(默认值应由 createSound 继承)。

在默认部分中,它将是soundManager.autoLoad = true;

或者在 createSound 方法中autoLoad:true, id: 'aSound', url: 'sounds/kick.mp3'

于 2011-03-03T06:22:29.537 回答