     }
 
     public func fadeOut(with duration: Double, taper: AUValue? = nil) {
-
-        let point = AKParameterAutomationPoint(targetValue: Fade.minimumGain,
-                                               startTime: 0,
-                                               rampDuration: duration,
-                                               rampTaper: taper ?? fade.outTaper,
-                                               rampSkew: fade.outSkew)
-
-        let events = AKEvaluateAutomation(initialValue: faderNode?.gain ?? 0,
-                                          points: [point],
-                                          resolution: 0.01)
-
-        // Setting new automation will cancel any previous scheduled automation.
-        faderNode?.automateGain(events: events)
+        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() {

    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 {

                // AKLog("Adjusted fade out values by the ratio:", sampleRateRatio)
            }

            faderNode.addAutomationPoint(value: Fade.minimumGain,
                                         at: timeTillFadeOut,
                                         rampDuration: rampDurationOut,
                                         taper: fade.outTaper,
                                         skew: fade.outSkew)
        }
    }

    func secondsToFrames(_ value: Double) -> AUAudioFrameCount {
