@@ -78,7 +78,8 @@ class SpeechManager: ObservableObject {
7878
7979 recognitionRequest. shouldReportPartialResults = true
8080
81- recognitionTask = speechRecognizer? . recognitionTask ( with: recognitionRequest) { result, error in
81+ recognitionTask = speechRecognizer? . recognitionTask ( with: recognitionRequest) { [ weak self] result, error in
82+ guard let self = self else { return }
8283 if let result = result {
8384 let segments = result. bestTranscription. segments
8485
@@ -98,14 +99,16 @@ class SpeechManager: ObservableObject {
9899 }
99100
100101 if error != nil || ( result? . isFinal ?? false ) {
101- self . stopListening ( )
102+ DispatchQueue . main. async {
103+ self . stopListening ( )
104+ }
102105 }
103106 }
104107
105108 let recordingFormat = inputNode. outputFormat ( forBus: 0 )
106109 inputNode. removeTap ( onBus: 0 )
107- inputNode. installTap ( onBus: 0 , bufferSize: 1024 , format: recordingFormat) { buffer, _ in
108- self . recognitionRequest? . append ( buffer)
110+ inputNode. installTap ( onBus: 0 , bufferSize: 1024 , format: recordingFormat) { [ weak self ] buffer, _ in
111+ self ? . recognitionRequest? . append ( buffer)
109112 }
110113
111114 audioEngine. prepare ( )
@@ -120,6 +123,10 @@ class SpeechManager: ObservableObject {
120123 audioEngine. inputNode. removeTap ( onBus: 0 )
121124 recognitionTask = nil
122125 recognitionRequest = nil
123- isListening = false
126+ if Thread . isMainThread {
127+ isListening = false
128+ } else {
129+ DispatchQueue . main. async { self . isListening = false }
130+ }
124131 }
125132}
0 commit comments