docs: function (src, startTime, duration, playbackResource) {
  		this.EventDispatcher_constructor();
  
  
  	// public properties:
  		/**
  		 * The source of the sound.
  		 * @property src
  		 * @type {String}
  		 * @default null
  		 */
  		this.src = src;
  
  		/**
  		 * The unique ID of the instance. This is set by {{#crossLink "Sound"}}{{/crossLink}}.
  		 * @property uniqueId
  		 * @type {String} | Number
  		 * @default -1
  		 */
  		this.uniqueId = -1;
  
  		/**
  		 * The play state of the sound. Play states are defined as constants on {{#crossLink "Sound"}}{{/crossLink}}.
  		 * @property playState
  		 * @type {String}
  		 * @default null
  		 */
  		this.playState = null;
  
  		/**
  		 * A Timeout created by {{#crossLink "Sound"}}{{/crossLink}} when this AbstractSoundInstance is played with a delay.
  		 * This allows AbstractSoundInstance to remove the delay if stop, pause, or cleanup are called before playback begins.
  		 * @property delayTimeoutId
  		 * @type {timeoutVariable}
  		 * @default null
  		 * @protected
  		 * @since 0.4.0
  		 */
  		this.delayTimeoutId = null;
  		// TODO consider moving delay into AbstractSoundInstance so it can be handled by plugins
  
  
  	// private properties
  	// Getter / Setter Properties
  		// OJR TODO find original reason that we didn't use defined functions.  I think it was performance related
  		/**
  		 * The volume of the sound, between 0 and 1.
  		 *
  		 * The actual output volume of a sound can be calculated using:
  		 * <code>myInstance.volume * createjs.Sound.getVolume();</code>
  		 *
  		 * @property volume
  		 * @type {Number}
  		 * @default 1
  		 */
  		this._volume =  1;
  		Object.defineProperty(this, "volume", {
  			get: this.getVolume,
  			set: this.setVolume
  		});
  
  		/**
  		 * The pan of the sound, between -1 (left) and 1 (right). Note that pan is not supported by HTML Audio.
  		 *
  		 * <br />Note in WebAudioPlugin this only gives us the "x" value of what is actually 3D audio.
  		 *
  		 * @property pan
  		 * @type {Number}
  		 * @default 0
  		 */
  		this._pan =  0;
  		Object.defineProperty(this, "pan", {
  			get: this.getPan,
  			set: this.setPan
  		});
  
  		/**
  		 * Audio sprite property used to determine the starting offset.
  		 * @property startTime
  		 * @type {Number}
  		 * @default 0
  		 * @since 0.6.1
  		 */
  		this._startTime = Math.max(0, startTime || 0);
  		Object.defineProperty(this, "startTime", {
  			get: this.getStartTime,
  			set: this.setStartTime
  		});
  
  		/**
  		 * Sets or gets the length of the audio clip, value is in milliseconds.
  		 *
  		 * @property duration
  		 * @type {Number}
  		 * @default 0
  		 * @since 0.6.0
  		 */
  		this._duration = Math.max(0, duration || 0);
  		Object.defineProperty(this, "duration", {
  			get: this.getDuration,
  			set: this.setDuration
  		});
  
  		/**
  		 * Object that holds plugin specific resource need for audio playback.
  		 * This is set internally by the plugin.  For example, WebAudioPlugin will set an array buffer,
  		 * HTMLAudioPlugin will set a tag, FlashAudioPlugin will set a flash reference.
  		 *
  		 * @property playbackResource
  		 * @type {Object}
  		 * @default null
  		 */
  		this._playbackResource = null;
  		Object.defineProperty(this, "playbackResource", {
  			get: this.getPlaybackResource,
  			set: this.setPlaybackResource
  		});
  		if(playbackResource !== false && playbackResource !== true) { this.setPlaybackResource(playbackResource); }
  
  		/**
  		 * The position of the playhead in milliseconds. This can be set while a sound is playing, paused, or stopped.
  		 *
  		 * @property position
  		 * @type {Number}
  		 * @default 0
  		 * @since 0.6.0
  		 */
  		this._position = 0;
  		Object.defineProperty(this, "position", {
  			get: this.getPosition,
  			set: this.setPosition
  		});
  
  		/**
  		 * The number of play loops remaining. Negative values will loop infinitely.
  		 *
  		 * @property loop
  		 * @type {Number}
  		 * @default 0
  		 * @public
  		 * @since 0.6.0
  		 */
  		this._loop = 0;
  		Object.defineProperty(this, "loop", {
  			get: this.getLoop,
  			set: this.setLoop
  		});
  
  		/**
  		 * Mutes or unmutes the current audio instance.
  		 *
  		 * @property muted
  		 * @type {Boolean}
  		 * @default false
  		 * @since 0.6.0
  		 */
  		this._muted = false;
  		Object.defineProperty(this, "muted", {
  			get: this.getMuted,
  			set: this.setMuted
  		});
  
  		/**
  		 * Pauses or resumes the current audio instance.
  		 *
  		 * @property paused
  		 * @type {Boolean}
  		 */
  		this._paused = false;
  		Object.defineProperty(this, "paused", {
  			get: this.getPaused,
  			set: this.setPaused
  		});
  
  
  	// Events
  		/**
  		 * The event that is fired when playback has started successfully.
  		 * @event succeeded
  		 * @param {Object} target The object that dispatched the event.
  		 * @param {String} type The event type.
  		 * @since 0.4.0
  		 */
  
  		/**
  		 * The event that is fired when playback is interrupted. This happens when another sound with the same
  		 * src property is played using an interrupt value that causes this instance to stop playing.
  		 * @event interrupted
  		 * @param {Object} target The object that dispatched the event.
  		 * @param {String} type The event type.
  		 * @since 0.4.0
  		 */
  
  		/**
  		 * The event that is fired when playback has failed. This happens when there are too many channels with the same
  		 * src property already playing (and the interrupt value doesn't cause an interrupt of another instance), or
  		 * the sound could not be played, perhaps due to a 404 error.
  		 * @event failed
  		 * @param {Object} target The object that dispatched the event.
  		 * @param {String} type The event type.
  		 * @since 0.4.0
  		 */
  
  		/**
  		 * The event that is fired when a sound has completed playing but has loops remaining.
  		 * @event loop
  		 * @param {Object} target The object that dispatched the event.
  		 * @param {String} type The event type.
  		 * @since 0.4.0
  		 */
  
  		/**
  		 * The event that is fired when playback completes. This means that the sound has finished playing in its
  		 * entirety, including its loop iterations.
  		 * @event complete
  		 * @param {Object} target The object that dispatched the event.
  		 * @param {String} type The event type.
  		 * @since 0.4.0
  		 */
  	}