Skip to content

Commit 17f0b19

Browse files
authored
Add didStartPlaying and didFinishPlaying callbacks
1 parent eaaf187 commit 17f0b19

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

Sources/AudioPlayer.swift

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ public final class AudioPlayer: ObservableObject {
77
private let timeUpdateInterval: CMTime
88
private var task: Task<Void, Never>?
99
private var synchronizer: AudioSynchronizer?
10+
private let didStartPlaying: @Sendable () -> Void
11+
private let didFinishPlaying: @Sendable () -> Void
1012

1113
@Published public private(set) var error: AudioPlayerError?
1214
@Published public private(set) var state = AudioPlayerState.initial
@@ -24,8 +26,14 @@ public final class AudioPlayer: ObservableObject {
2426
set { synchronizer?.isMuted = newValue }
2527
}
2628

27-
public init(timeUpdateInterval: CMTime = CMTime(value: 1, timescale: 10)) {
29+
public init(
30+
timeUpdateInterval: CMTime = CMTime(value: 1, timescale: 10),
31+
didStartPlaying: @escaping @Sendable () -> Void = {},
32+
didFinishPlaying: @escaping @Sendable () -> Void = {}
33+
) {
2834
self.timeUpdateInterval = timeUpdateInterval
35+
self.didStartPlaying = didStartPlaying
36+
self.didFinishPlaying = didFinishPlaying
2937
}
3038

3139
deinit {
@@ -94,10 +102,13 @@ public final class AudioPlayer: ObservableObject {
94102
self?.setTime(time)
95103
} onError: { [weak self] error in
96104
self?.setError(error)
105+
self?.didFinishPlaying()
97106
} onComplete: { [weak self] in
98107
self?.setState(.completed)
108+
self?.didFinishPlaying()
99109
} onPlaying: { [weak self] in
100110
self?.setState(.playing)
111+
self?.didStartPlaying()
101112
} onPaused: { [weak self] in
102113
self?.setState(.paused)
103114
} onSampleBufferChanged: { [weak self] buffer in

0 commit comments

Comments
 (0)