define(["Tone/core/Tone", "Tone/signal/Add", "Tone/signal/Multiply", "Tone/signal/Signal"], function(Tone){

	"use strict";
	
	/**
	 *  @class  performs a linear scaling on an input signal.
	 *          Scales a normal gain input range [0,1] to between
	 *          outputMin and outputMax
	 *
	 *  @constructor
	 *  @extends {Tone.SignalBase}
	 *  @param {number} [outputMin=0]
	 *  @param {number} [outputMax=1]
	 */
	Tone.Scale = function(outputMin, outputMax){

		/** 
		 *  @private
		 *  @type {number}
		 */
		this._outputMin = this.defaultArg(outputMin, 0);

		/** 
		 *  @private
		 *  @type {number}
		 */
		this._outputMax = this.defaultArg(outputMax, 1);


		/** 
		 *  @private
		 *  @type {Tone.Multiply}
		 *  @private
		 */
		this._scale = this.input = new Tone.Multiply(1);
		
		/** 
		 *  @private
		 *  @type {Tone.Add}
		 *  @private
		 */
		this._add = this.output = new Tone.Add(0);

		this._scale.connect(this._add);
		this._setRange();
	};

	Tone.extend(Tone.Scale, Tone.SignalBase);

	/**
	 *  set the minimum output value
	 *  @param {number} min the minimum output value
	 */
	Tone.Scale.prototype.setMin = function(min){
		this._outputMin = min;
		this._setRange();
	};

	/**
	 *  set the minimum output value
	 *  @param {number} min the minimum output value
	 */
	Tone.Scale.prototype.setMax = function(max){
		this._outputMax = max;
		this._setRange();
	};

	/**
	 *  set the values
	 *  @private
	 */
	Tone.Scale.prototype._setRange = function() {
		this._add.setValue(this._outputMin);
		this._scale.setValue(this._outputMax - this._outputMin);
	};

	/**
	 *  clean up
	 */
	Tone.Scale.prototype.dispose = function(){
		Tone.prototype.dispose.call(this);
		this._add.dispose();
		this._add = null;
		this._scale.dispose();
		this._scale = null;
	}; 


	return Tone.Scale;
});

@@ -1193,36 +1193,48 @@
 ;%0A%09%7D;%0A%0A%09/**%0A%09 * 
- set
+@return %7Bnumber%7D
  the minimum out
@@ -1235,32 +1235,150 @@
 um output value%0A
+%09 */%0A%09Tone.Scale.prototype.getMin = function()%7B%0A%09%09return this._outputMin;%0A%09%7D;%0A%0A%09/**%0A%09 *  set the maximum output value%0A
 %09 *  @param %7Bnum
@@ -1379,34 +1379,34 @@
 m %7Bnumber%7D m
-in
+ax
  the m
-in
+ax
 imum output 
@@ -1504,32 +1504,162 @@
 etRange();%0A%09%7D;%0A%0A
+%09/**%0A%09 * @return %7Bnumber%7D the maximum output value%0A%09 */%0A%09Tone.Scale.prototype.getMax = function()%7B%0A%09%09return this._outputMax;%0A%09%7D;%0A%0A
 %09/**%0A%09 *  set th

Scale getter functions