                 // AKLog("Adjusted fade out values by the ratio:", sampleRateRatio)
             }
 
-            points.append(AKParameterAutomationPoint(targetValue: Fade.minimumGain,
-                                                     startTime: timeTillFadeOut,
-                                                     rampDuration: rampDurationOut,
-                                                     rampTaper: fade.outTaper,
-                                                     rampSkew: fade.outSkew))
-        }
-
-        // Convert our curved automation to linear ramps.
-        let events = AKEvaluateAutomation(initialValue: Fade.minimumGain,
-                                          points: points,
-                                          resolution: 0.01)
-        faderNode.automateGain(events: events)
-
+            faderNode.addAutomationPoint(value: Fade.minimumGain,
+                                         at: timeTillFadeOut,
+                                         rampDuration: rampDurationOut,
+                                         taper: fade.outTaper,
+                                         skew: fade.outSkew)
+        }
     }
 
     func secondsToFrames(_ value: Double) -> AUAudioFrameCount {

    internal func scheduleFader() {
        guard let faderNode = faderNode else { return }

        var points = [AKParameterAutomationPoint]()

        if fade.inTime > 0, offsetTime < fade.inTime {
            // realtime, turn the gain off to be sure it's off before the fade starts
            faderNode.gain = Fade.minimumGain

            // add this extra point for the case where it is offline processing
            points.append(AKParameterAutomationPoint(targetValue: Fade.minimumGain,
                                                     startTime: 0,
                                                     rampDuration: 0))

            // then fade it in. fade.maximumGain is the ceiling it should fade to
            // swiftlint:disable number_separator
            points.append(AKParameterAutomationPoint(targetValue: fade.maximumGain,
                                                     startTime: 0.0001,
                                                     rampDuration: fade.inTime,
                                                     rampTaper: fade.inTaper,
                                                     rampSkew: fade.inSkew))

        } else {

            // if there isn't a fade in then turn it up now.
            points.append(AKParameterAutomationPoint(targetValue: fade.maximumGain,
                                                     startTime: 0,
                                                     rampDuration: 0))
        }

        if fade.outTime > 0 {

    }

    public func fadeOut(with duration: Double, taper: AUValue? = nil) {
        faderNode?.parameterAutomation?.stopPlayback()
        faderNode?.clearAutomationPoints()
        faderNode?.addAutomationPoint(value: Fade.minimumGain,
                                      at: 0,
                                      rampDuration: duration,
                                      taper: taper ?? fade.outTaper)
        faderNode?.parameterAutomation?.startPlayback()
    }

    override open func detach() {
