Shawn
Shawn

Reputation: 11401

How can I get better response times with soundManager2?

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>

Upvotes: 0

Views: 1670

Answers (1)

Louis Waweru
Louis Waweru

Reputation: 3672

I don't see where the song gets preloaded. You want to set autoLoad to true in the default or createSound section (the defaults should be inherited by createSound).

In the default section it would be soundManager.autoLoad = true;

Or in the createSound method autoLoad:true, id: 'aSound', url: 'sounds/kick.mp3'

Upvotes: 1

Related Questions