Ariver
2026-06-14 e86df221fa8f9d6796fb7fe59020767d7c806fac
privatevoice.src/internal/engine/engine_darwin.go
@@ -16,11 +16,15 @@
const (
   asrSampleRate          = 16000
   xasrHeadPaddingSamples = asrSampleRate / 4
   xasrTailPaddingSamples = asrSampleRate + asrSampleRate/2
   xasrReleaseTailDelay   = 300 * time.Millisecond
)
var xasrTailPadding = make([]float32, xasrTailPaddingSamples)
var (
   xasrHeadPadding = make([]float32, xasrHeadPaddingSamples)
   xasrTailPadding = make([]float32, xasrTailPaddingSamples)
)
type sherpaEngine struct {
   recognizer *sherpa.OfflineRecognizer
@@ -34,10 +38,11 @@
}
type xasrStreamingSession struct {
   engine   *xasrStreamingEngine
   stream   *sherpa.OnlineStream
   lastText string
   finished bool
   engine             *xasrStreamingEngine
   stream             *sherpa.OnlineStream
   lastText           string
   hasAcceptedSamples bool
   finished           bool
}
func newPlatformEngine(resolved model.ResolvedModel) (Engine, error) {
@@ -235,6 +240,10 @@
   if s.stream == nil || s.finished {
      return s.lastText, nil
   }
   if !s.hasAcceptedSamples {
      samples = xasrSamplesWithHeadPadding(samples)
      s.hasAcceptedSamples = true
   }
   s.engine.mu.Lock()
   defer s.engine.mu.Unlock()
@@ -295,6 +304,13 @@
   return nextText
}
func xasrSamplesWithHeadPadding(samples []float32) []float32 {
   padded := make([]float32, 0, len(xasrHeadPadding)+len(samples))
   padded = append(padded, xasrHeadPadding...)
   padded = append(padded, samples...)
   return padded
}
func (e *sherpaEngine) HardwareInfo() string {
   return e.hwInfo
}
@@ -307,6 +323,10 @@
   return xasrReleaseTailDelay
}
func (e *xasrStreamingEngine) HoldPreCaptureEnabled() bool {
   return true
}
func (e *sherpaEngine) Close() {
   if e.recognizer != nil {
      sherpa.DeleteOfflineRecognizer(e.recognizer)