         self.file = file
         schedule(at: when)
     }
+    
+    /// Sets the player's audio file to a certain time in the track (in seconds)
+    /// and respects the players current play state
+    /// - Parameters:
+    ///   - time seconds into the audio file to set playhead
+    public func seek(time: Float){
+        let wasPlaying = self.isPlaying
+        self.playerNode.stop()
+        if let audioFile = self.file {
+            let sampleLength = audioFile.length
+            let processingFormat = audioFile.processingFormat
+            let sampleRate = Float(processingFormat.sampleRate)
+            let startSample = floor(time * sampleRate)
+            let lengthSamples = Float(sampleLength) - startSample
+            
+            self.playerNode.scheduleSegment(audioFile,
+                                   startingFrame: AVAudioFramePosition(startSample),
+                                   frameCount: AVAudioFrameCount(lengthSamples),
+                                   at: nil,
+                                   completionHandler: {
+                                    self.playerNode.pause()
+                                   })
+            self.segmentStartTime = TimeInterval(time)
+        }
+        if wasPlaying && !isPaused {
+            self.playerNode.play()
+        } else {
+            self.stoppedTime = TimeInterval(time)
+        }
+    }
 }

    /// Stop audio player. This won't generate a callback event
    public func stop() {
        guard isPlaying else { return }
        isPlaying = false
        playerNode.stop()
        scheduleTime = nil

    public var duration: TimeInterval {
        bufferDuration ?? file?.duration ?? 0
    }
    
    /// Time in audio file where track was started (allows retrieval of playback time after playerNode is seeked)
    private var segmentStartTime: TimeInterval = 0.0
    
    /// Time in audio file where track was stopped (allows retrieval of playback time after playerNode is paused)
    private var stoppedTime: TimeInterval = 0.0

    /// Completion handler to be called when file or buffer is done playing.
    /// This also will be called when looping from disk,
