                     self.frequency = Double(value)
                 } else if address == self.amplitudeParameter!.address {
                     self.amplitude = Double(value)
+                } else if address == self.detuningParameter!.address {
+                    self.detuning = Double(value)
                 }
             }
         }
         internalAU?.frequency = Float(frequency)
         internalAU?.amplitude = Float(amplitude)
+        internalAU?.detuning  = Float(detuning)
     }
 
     /// Function create an identical new node for use in creating polyphonic instruments
     public override func copy() -> AKVoice {
-        let copy = AKOscillator(waveform: self.waveform!, frequency: self.frequency, amplitude: self.amplitude)
+        let copy = AKOscillator(waveform: self.waveform!, frequency: self.frequency, amplitude: self.amplitude, detuning:  self.detuning)
         return copy
     }
 

    ///
    /// - parameter frequency: Frequency in cycles per second
    /// - parameter amplitude: Output Amplitude.
    ///
    public init(
        waveform: AKTable = AKTable(.Sine),
        frequency: Double = 440,
        amplitude: Double = 1) {


        self.waveform = waveform
        self.frequency = frequency
        self.amplitude = amplitude

        var description = AudioComponentDescription()
        description.componentType         = kAudioUnitType_Generator


        frequencyParameter = tree.valueForKey("frequency") as? AUParameter
        amplitudeParameter = tree.valueForKey("amplitude") as? AUParameter
        detuningParameter  = tree.valueForKey("detuning")  as? AUParameter

        token = tree.tokenByAddingParameterObserver {
            address, value in
