diff --git a/VoiceInk/Recorder.swift b/VoiceInk/Recorder.swift index 4c52cca..010dd5a 100644 --- a/VoiceInk/Recorder.swift +++ b/VoiceInk/Recorder.swift @@ -14,6 +14,7 @@ class Recorder: NSObject, ObservableObject, AVAudioRecorderDelegate { private let playbackController = PlaybackController.shared @Published var audioMeter = AudioMeter(averagePower: 0, peakPower: 0) private var audioLevelCheckTask: Task? + private var audioMeterUpdateTask: Task? private var hasDetectedAudioInCurrentSession = false enum RecorderError: Error { @@ -111,9 +112,10 @@ class Recorder: NSObject, ObservableObject, AVAudioRecorderDelegate { } audioLevelCheckTask?.cancel() + audioMeterUpdateTask?.cancel() - Task { - while recorder != nil { + audioMeterUpdateTask = Task { + while recorder != nil && !Task.isCancelled { updateAudioMeter() try? await Task.sleep(nanoseconds: 33_000_000) } @@ -149,6 +151,7 @@ class Recorder: NSObject, ObservableObject, AVAudioRecorderDelegate { func stopRecording() { audioLevelCheckTask?.cancel() + audioMeterUpdateTask?.cancel() recorder?.stop() recorder = nil audioMeter = AudioMeter(averagePower: 0, peakPower: 0) @@ -225,6 +228,8 @@ class Recorder: NSObject, ObservableObject, AVAudioRecorderDelegate { } deinit { + audioLevelCheckTask?.cancel() + audioMeterUpdateTask?.cancel() if let observer = deviceObserver { NotificationCenter.default.removeObserver(observer) }