var boom = {
    defaults: {
      loop: true,
      preload: 'metadata',
      volume: 100
    },
    sounds: [],
    sound: function( src, settings ) {
        var settings = settings || {},
            options = {
                preload: settings.preload || boom.defaults.preload,
                loop: settings.loop || boom.defaults.loop,
                volume: settings.volume || boom.defaults.volume  
            },
            events = [];
        this.sound = document.createElement( 'audio' );
        this.sound.setAttribute( 'src', src );
        this.sound.setAttribute( 'preload', options.preload );
        this.sound.setAttribute( 'loop', options.loop );

        boom.sounds.push( this );

        this.volume = options.volume;

        this.play = function() {
            this.sound.play();
            return this;
        }
        this.stop = function() {
            this.sound.currentTime = 0;
            this.sound.pause();
            return this;
        }
        this.pause = function() {
            this.sound.pause();
            return this;
        }
        this.jump = function( time ) {
            this.setTime( time );
            return this;
        }
        this.toggle = function( ) {
            if ( this.sound.paused ) {
                this.sound.play();
            } else {
                this.sound.pause();
            }
            return this;
        }
        this.setVolume = function( volume ) {
            if ( volume > 100 ) {
                volume = 100;
            } 
            if ( volume < 0 ) {
                volume = 0;
            }
            this.volume = volume;
            this.sound.volume = volume / 100;
            return this;
        },
        this.getVolume = function() {
            return this.volume;
        }
        this.increaseVolume = function( value ) {
            this.setVolume( this.volume + ( value || 1 ) );
            return this;
        }
        this.decreaseVolume = function( value ) {
            this.setVolume( this.volume - ( value || 1 ) );
            return this;
        }
        this.setTime = function( time ) {
            this.sound.currentTime = time;
            return this;
        }
        this.getTime = function() {
            return Math.round( this.sound.currentTime * 100 ) / 100;
        }
        this.getDuration = function() {
            return Math.round( this.sound.duration * 100 ) / 100;
        }
        this.setPercent = function( time ) {
            this.sound.currentTime = this.sound.duration * time / 100;
            return this;
        }
        this.getPercent = function() {
            return Math.round( (this.sound.currentTime / this.sound.duration * 100 ) * 100) / 100;
        }
        this.set = function( key, value ) {
            this.sound.setAttribute( key, value );
            return this;
        }
        this.get = function( key ) {
            if ( key ) {
                return this.sound.getAttribute( key );
            }
            return this.sound;
        }
        this.bind = function( type, func ) {
            var idx = type;
            if ( type.indexOf( '.' ) > -1 ) {
				type = type.split( '.' )[1];
			}
			events.push( { idx: idx, func: func } );
            this.sound.addEventListener( type, func ); 
            return this;
        }
        this.unbind = function( type ) {
            var idx = type;
            if ( type.indexOf( '.' ) > -1 ) {
                type = type.split( '.' )[1];
			}
			for( var i in events ) {
			    var c = events[ i ].idx.match( /\.(.*)/ );
			 	if ( events[ i ].idx == idx || ( c && c[1] == idx.replace('.', '') ) ) {
                    this.sound.removeEventListener( type, events[ i ].func );
                    delete events[ i ];
			    }   
			}
            return this;
        }
        this.destroy = function() {
            for( var i in boom.sounds ) {
                if ( boom.sounds[ i ] == this ) {
                    delete boom.sounds[ i ];
                    break;
                }
            }
        }
    },
    all: function() {
      return new boom.group( boom.sounds );  
    },
    group: function( sounds ) {
        fn = function() {
            var args = Array.prototype.slice.call( arguments ),
                func = args.shift();
            for( var i in sounds ) {
                sounds[ i ][ func ]( args );
            }
        }
        this.play = function() {
            fn( 'play' );
        }
        this.stop = function() {
            fn( 'stop' );
        }
        this.jump = function( time ) {
            fn( 'jump', time );
        }
        this.toggle = function( ) {
            fn( 'toggle' );
        }
        this.setVolume = function( volume ) {
            fn( 'setVolume', volume );
        },
        this.increaseVolume = function( value ) {
            fn( 'increaseVolume', value );
        }
        this.decreaseVolume = function( value ) {
            fn( 'decreaseVolume', value );
        }
        this.setTime = function( time ) {
            fn( 'setTime', time );
        }
        this.set = function( key, value ) {
            fn( 'set', key, value );
        }
        this.bind = function( type, func ) {
            fn( 'bind', type, func );
        }
        this.unbind = function( type ) {
            fn( 'unbind', type );
        }
    }
}
@@ -32,47 +32,133 @@
     
-loop: true,%0A      preload: 'metadata',%0A
+  preload: 'metadata', // auto, metadata, none%0A        autoplay: false, // true, false%0A        loop: false, // true, false%0A  
     
@@ -291,24 +291,26 @@
  options = %7B
+%7D,
 %0A           
@@ -314,63 +314,20 @@
     
-    preload: settings.preload %7C%7C boom.defaults.preload,
+events = %5B%5D;
 %0A   
@@ -331,24 +331,25 @@
         
+%0A
         
 loop: se
@@ -344,30 +344,21 @@
     
-loop: settings.loop %7C%7C
+for( var i in
  boo
@@ -371,16 +371,13 @@
 ults
-.loop,%0A 
+ ) %7B%0A
     
@@ -384,26 +384,30 @@
         
-   volume:
+options%5B i %5D =
  setting
@@ -407,23 +407,21 @@
 settings
-.volume
+%5B i %5D
  %7C%7C boom
@@ -433,27 +433,23 @@
 ults
-.volume  %0A 
+%5B i %5D;%0A
         
    %7D
@@ -448,23 +448,18 @@
     
-   %7D,%0A 
+%7D%0A
         
    e
@@ -450,39 +450,24 @@
   %7D%0A        
-   events = %5B%5D;
 %0A        thi
@@ -638,51 +638,247 @@
 his.
-sound.setAttribute( 'loop', options.loop );
+volume = options.volume;%0A        %0A        if ( options.loop ) %7B%0A            this.sound.setAttribute( 'loop', true );%0A        %7D%0A        if ( options.autoplay ) %7B%0A            this.sound.setAttribute( 'autoplay', true );            %0A        %7D
 %0A%0A  
@@ -909,25 +909,24 @@
 this );%0A
-%0A
         
 this.vol
@@ -921,38 +921,8 @@
     
-this.volume = options.volume;%0A
 %0A   

Enhance options management