     private var baseTime: AVAudioTime?
 
     /// The current time in the timeline (seconds).
-    public var currentTime: Double {
+    open var currentTime: Double {
         get { return time(atAudioTime: nil) }
         set { setTime(newValue) }
     }
 
     /// Sets the current time in the timeline (seconds).
-    func setTime(_ time: Double) {
+    open func setTime(_ time: Double) {
         stop()
         idleTime = time
     }

        baseTime = audioTime?.offset(seconds: -idleTime).extrapolateTimeShimmed(fromAnchor: lastRenderTime)
        baseTime = baseTime ?? lastRenderTime.offset(seconds: AKSettings.ioBufferDuration)
    }
    var isPlaying: Bool {
        return baseTime != nil
    }

    /// Start playback immediately.
    func play() {
        play(at: nil)
    }

    /// Stops playback immediately.
    func stop() {
        guard let baseTime = baseTime else {
            return
        }

}

/// An AKTiming implementation that uses a node for it's render time info.
open class AKNodeTiming: NSObject, AKTiming {

    /// An output node used for tming info.
    open weak var node: AKOutput?

    // Used to hold current time when not playing.
    private var idleTime = Double()
