fix: avoid audio tap isolation crash
parent
daca3a5fc9
commit
a7d3619ec4
|
|
@ -1419,15 +1419,13 @@ final class VoiceWakeTester {
|
||||||
|
|
||||||
recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
|
recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
|
||||||
recognitionRequest?.shouldReportPartialResults = true
|
recognitionRequest?.shouldReportPartialResults = true
|
||||||
|
let request = recognitionRequest
|
||||||
|
|
||||||
let inputNode = audioEngine.inputNode
|
let inputNode = audioEngine.inputNode
|
||||||
let format = inputNode.outputFormat(forBus: 0)
|
let format = inputNode.outputFormat(forBus: 0)
|
||||||
inputNode.removeTap(onBus: 0)
|
inputNode.removeTap(onBus: 0)
|
||||||
inputNode.installTap(onBus: 0, bufferSize: 2048, format: format) { [weak self] buffer, _ in
|
inputNode.installTap(onBus: 0, bufferSize: 2048, format: format) { [weak request] buffer, _ in
|
||||||
guard let self else { return }
|
request?.append(buffer)
|
||||||
Task { @MainActor in
|
|
||||||
self.recognitionRequest?.append(buffer)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
audioEngine.prepare()
|
audioEngine.prepare()
|
||||||
|
|
@ -1439,12 +1437,13 @@ final class VoiceWakeTester {
|
||||||
guard let request = recognitionRequest else { return }
|
guard let request = recognitionRequest else { return }
|
||||||
|
|
||||||
recognitionTask = recognizer.recognitionTask(with: request) { [weak self] result, error in
|
recognitionTask = recognizer.recognitionTask(with: request) { [weak self] result, error in
|
||||||
guard let self else { return }
|
|
||||||
let text = result?.bestTranscription.formattedString ?? ""
|
let text = result?.bestTranscription.formattedString ?? ""
|
||||||
let matched = Self.matches(text: text, triggers: triggers)
|
let matched = Self.matches(text: text, triggers: triggers)
|
||||||
|
let isFinal = result?.isFinal ?? false
|
||||||
let errorMessage = error?.localizedDescription
|
let errorMessage = error?.localizedDescription
|
||||||
Task { @MainActor in
|
Task { @MainActor [weak self] in
|
||||||
self.handleResult(matched: matched, text: text, isFinal: result?.isFinal ?? false, errorMessage: errorMessage, onUpdate: onUpdate)
|
guard let self else { return }
|
||||||
|
self.handleResult(matched: matched, text: text, isFinal: isFinal, errorMessage: errorMessage, onUpdate: onUpdate)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue