fix: stop voice wake tester after short post-trigger silence

This commit is contained in:
Peter Steinberger
2025-12-07 23:43:50 +01:00
parent 5d321c4dac
commit 629f2e0043

View File

@@ -161,15 +161,17 @@ final class VoiceWakeTester {
private func holdUntilSilence(onUpdate: @escaping @Sendable (VoiceWakeTestState) -> Void) {
Task { [weak self] in
guard let self else { return }
let start = self.detectionStart ?? Date()
let deadline = start.addingTimeInterval(10)
let detectedAt = Date()
let hardStop = detectedAt.addingTimeInterval(3) // cap overall listen after trigger
let silenceWindow: TimeInterval = 0.8
while !self.isStopping {
let now = Date()
if now >= deadline { break }
if let last = self.lastHeard, now.timeIntervalSince(last) >= 1 {
if now >= hardStop { break }
if let last = self.lastHeard, now.timeIntervalSince(last) >= silenceWindow {
break
}
try? await Task.sleep(nanoseconds: 250_000_000)
try? await Task.sleep(nanoseconds: 200_000_000)
}
if !self.isStopping {
self.stop()