Fix audio meter Task memory leak
This commit is contained in:
parent
85aa0905bd
commit
c67fdeb73c
@ -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<Void, Never>?
|
||||
private var audioMeterUpdateTask: Task<Void, Never>?
|
||||
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)
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user