VoiceWake: track listening state for PTT
This commit is contained in:
@@ -10,6 +10,8 @@ import AppKit
|
|||||||
actor VoiceWakeRuntime {
|
actor VoiceWakeRuntime {
|
||||||
static let shared = VoiceWakeRuntime()
|
static let shared = VoiceWakeRuntime()
|
||||||
|
|
||||||
|
enum ListeningState { case idle, voiceWake, pushToTalk }
|
||||||
|
|
||||||
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "voicewake.runtime")
|
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "voicewake.runtime")
|
||||||
|
|
||||||
private var recognizer: SFSpeechRecognizer?
|
private var recognizer: SFSpeechRecognizer?
|
||||||
@@ -28,6 +30,7 @@ actor VoiceWakeRuntime {
|
|||||||
private var volatileTranscript: String = ""
|
private var volatileTranscript: String = ""
|
||||||
private var cooldownUntil: Date?
|
private var cooldownUntil: Date?
|
||||||
private var currentConfig: RuntimeConfig?
|
private var currentConfig: RuntimeConfig?
|
||||||
|
private var listeningState: ListeningState = .idle
|
||||||
|
|
||||||
// Tunables
|
// Tunables
|
||||||
// Silence threshold once we've captured user speech (post-trigger).
|
// Silence threshold once we've captured user speech (post-trigger).
|
||||||
@@ -152,6 +155,7 @@ actor VoiceWakeRuntime {
|
|||||||
self.audioEngine.inputNode.removeTap(onBus: 0)
|
self.audioEngine.inputNode.removeTap(onBus: 0)
|
||||||
self.audioEngine.stop()
|
self.audioEngine.stop()
|
||||||
self.currentConfig = nil
|
self.currentConfig = nil
|
||||||
|
self.listeningState = .idle
|
||||||
self.logger.debug("voicewake runtime stopped")
|
self.logger.debug("voicewake runtime stopped")
|
||||||
|
|
||||||
guard dismissOverlay else { return }
|
guard dismissOverlay else { return }
|
||||||
@@ -224,6 +228,7 @@ actor VoiceWakeRuntime {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func beginCapture(transcript: String, config: RuntimeConfig) async {
|
private func beginCapture(transcript: String, config: RuntimeConfig) async {
|
||||||
|
self.listeningState = .voiceWake
|
||||||
self.isCapturing = true
|
self.isCapturing = true
|
||||||
let trimmed = Self.trimmedAfterTrigger(transcript, triggers: config.triggers)
|
let trimmed = Self.trimmedAfterTrigger(transcript, triggers: config.triggers)
|
||||||
self.capturedTranscript = trimmed
|
self.capturedTranscript = trimmed
|
||||||
@@ -360,7 +365,8 @@ actor VoiceWakeRuntime {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func pauseForPushToTalk() {
|
func pauseForPushToTalk() {
|
||||||
self.stop()
|
self.listeningState = .pushToTalk
|
||||||
|
self.stop(dismissOverlay: false)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func updateHeardBeyondTrigger(withTrimmed trimmed: String) {
|
private func updateHeardBeyondTrigger(withTrimmed trimmed: String) {
|
||||||
|
|||||||
Reference in New Issue
Block a user