| | |
| | | |
| | | import ( |
| | | "fmt" |
| | | "time" |
| | | "voicesnap/internal/config" |
| | | "voicesnap/internal/language" |
| | | "voicesnap/internal/logger" |
| | |
| | | // HardwareInfo returns a human-readable description of the hardware backend being used. |
| | | HardwareInfo() string |
| | | // Close releases engine resources. |
| | | Close() |
| | | } |
| | | |
| | | // StreamingEngine is implemented by engines that can expose partial results |
| | | // while audio is still being captured. |
| | | type StreamingEngine interface { |
| | | NewStreamingSession() (StreamingSession, error) |
| | | } |
| | | |
| | | // ReleaseTailCaptureEngine is implemented by engines that need a short audio |
| | | // capture grace period after the user releases the recording hotkey. |
| | | type ReleaseTailCaptureEngine interface { |
| | | ReleaseTailCaptureDelay() time.Duration |
| | | } |
| | | |
| | | // HoldPreCaptureEngine is implemented by engines that should start capturing |
| | | // audio immediately on hold-to-talk key down, before the activation delay has |
| | | // confirmed that the hotkey was not part of a key combination. |
| | | type HoldPreCaptureEngine interface { |
| | | HoldPreCaptureEnabled() bool |
| | | } |
| | | |
| | | // StreamingSession receives incremental 16kHz mono PCM and returns the current |
| | | // best transcript for the active utterance. |
| | | type StreamingSession interface { |
| | | Accept(samples []float32) (string, error) |
| | | Finish() (string, error) |
| | | Close() |
| | | } |
| | | |
| | |
| | | |
| | | func isSupportedBackend(backend string) bool { |
| | | switch backend { |
| | | case model.BackendSenseVoice, model.BackendMoonshine, model.BackendNemoTransducer, model.BackendQwen3ASR, model.BackendXASRStreaming: |
| | | case model.BackendSenseVoice, model.BackendMoonshine, model.BackendTransducer, model.BackendNemoTransducer, model.BackendQwen3ASR, model.BackendXASRStreaming: |
| | | return true |
| | | default: |
| | | return false |