Updated MIDI embedding method on DVD pages.

I’ve updated the method I’m using to embed MIDI files in my DVD pages that had them. A couple of example pages are The Best of Benny Hill and Star Wars I: The Phantom Menace. I am using the JavaScript method that is described at MIDKar.com. It’s basically the same thing I was doing before directly within the page’s code without JavaScript; however, this script now adjusts the code based upon the browser it detects which should make it more compatible.  I did modify their code slightly by adding an optional autostart parameter with a default value of 0 if no value is given so that it does not automatically start playing.  Here’s my modified code:

// This script determines correct code required to embed MEDIA files
// for a large number of browsers, including AOL and WebTV
// Windows Media Player is required and always used, except for WebTV
// Written by Les Gorven, http://midistudio.com/
// Ver. 4.0 (simple) auto-start parameter is true - Created: February 2, 2008
// autostart parameter added by Mark Headrick December 2, 2009

function playMedia(mediaURL,rpt,height,width,autostart) {
var mediaURL,rpt,height,width,autostart;

if (typeof autostart == "undefined") {
   autostart = 0;
}

if (GetBrowser() == "IE")
   playAll(mediaURL,rpt,height,width,autostart) ;  
else if (GetBrowser() == "unknown")
   embedSource(mediaURL,rpt,height,width,autostart) ;
else if (navigator.appName.substring(0,5) == "WebTV")
   embedSource(mediaURL,rpt,height,width,autostart) ;
else
   playAll(mediaURL,rpt,height,width,autostart) ;
}

function embedSource(mediaURL,rpt,height,width,autostart) {

   var CodeGen = "";
   var mediaURL,rpt,height,width,autostart;
         
   CodeGen = '<embed src="' + mediaURL + '"' + '\n' ;
   if (autostart == 0) {
      CodeGen += ' height=' + height + ' width=' + width + ' autostart="false"' + '\n';
   } else {
      CodeGen += ' height=' + height + ' width=' + width + ' autostart="true"' + '\n';
   }
   CodeGen += ' LOOP=' + rpt + '>';
   document.write(CodeGen);
}

function playAll(mediaURL,rpt,height,width,autostart) {
   var CodeGen = "";

   CodeGen = '<embed type="application/x-mplayer2" ' + '\n' ;
   CodeGen += ' pluginspage="http://www.microsoft.com/Windows/MediaPlayer/" ' + '\n' ;
   CodeGen += 'Name="Player" ' + 'src="' + mediaURL + '" ' + '\n' ;
   CodeGen += 'autoStart=' + autostart + ' ' ;
   if ((height == 24) && (width == 299))
      CodeGen = CodeGen + 'ShowStatusBar=1 ';
   if ((height >= 50) && (height <= 75) && (width >= 200))
      CodeGen = CodeGen + 'ShowStatusBar=1 ';
   if ((height > 75) && (width >= 200))
      CodeGen = CodeGen + 'ShowStatusBar=0 ';
   if ((height <= 49) && (width != 299))
      CodeGen += 'ShowStatusBar=0 ';
   CodeGen += 'enableContextMenu=1 cache=0' + '\n' ;
   CodeGen += 'playCount=' + rpt + ' ' ;
   CodeGen += 'volume=-1 ' ;
   CodeGen += 'HEIGHT=' + height + ' WIDTH=' + width + '>' ;
   document.write(CodeGen);
}

function GetBrowser()
{
   var agt=navigator.userAgent.toLowerCase();
   if( ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1)) )
       return "IE";
   else if( ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
         && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
         && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)) )
       return "Netscape";
   else
       return "unknown";
}

Within the page itself, I just put the following where I want the player to appear:

   <script type="text/javascript">
   playMedia("/midi/SomeFileToPlay.mid",3,65,300)
   </script>

If I want the song to automatically start playing, then I would change the code to:

   <script type="text/javascript">
   playMedia("/midi/SomeFileToPlay.mid",3,65,300,1)
   </script>

Seems to work well in both Firefox 3.5.5 and Internet Explorer 8. 🙂