Share Pastebin
Guest
Public paste!

Untitled

By: a guest | Aug 6th, 2010 | Syntax: JavaScript | Size: 1.42 KB | Hits: 338 | Expires: Never
Copy text to clipboard
  1. avar LibCanvasAudio = function (file) {
  2.         this.audio = new Audio;
  3.         this.src(file);
  4. };
  5.  
  6. LibCanvasAudio.prototype = {
  7.         src : function (file) {
  8.                 var codec = this.getSupport();
  9.                 if (!codec) throw 'AudioNotSupported';
  10.                 this.audio.src = file.replace(/\*/g, this.getSupport());
  11.                 log('using ' + codec);
  12.                 this.audio.load();
  13.                 return this;
  14.         },
  15.         getSupport : function () {
  16.                 return !this.audio.canPlayType ? false :
  17.                         this.audio.canPlayType('audio/ogg;')  ? 'ogg' :
  18.                         this.audio.canPlayType('audio/mpeg;') ? 'mp3' : false;
  19.         },
  20.         cloneAudio : function () {
  21.                 if (window.opera) { // Reported Opera bug DSK-309302
  22.                         var audioClone = new Audio;
  23.                         audioClone.src = this.audio.src;
  24.                 } else {
  25.                         audioClone = this.audio.cloneNode(true);
  26.                 }
  27.                 audioClone.load();
  28.                 return audioClone;
  29.         },
  30.         gatling : function (count) {
  31.                 this.barrels = [];
  32.                 this.gatIndex =  0;
  33.                 while (count--) {
  34.                         this.barrels.push(this.cloneAudio());
  35.                 }
  36.                 return this;
  37.         },
  38.         getNext : function () {
  39.                 var elem = this.barrels[this.gatIndex];
  40.                 ++this.gatIndex >= this.barrels.length && (this.gatIndex = 0);
  41.                 return elem;
  42.         },
  43.         playNext : function () {
  44.                 var elem = this.getNext();
  45.                 elem.pause();
  46.                 // firefox 3.5 starting audio bug
  47.                 elem.currentTime = 0.025;
  48.                 elem.play();
  49.                 return this;
  50.         }
  51. };
  52.  
  53. var shotSound = new LibCanvasAudio('explosion.*').gatling(6);
  54.  
  55. window.addEventListener('keydown', function (e) {
  56.         shotSound.playNext();
  57. }, false);