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