TranscripteurLocal.swift 35 lignes · 1325 octets
import Foundation

/// État du moteur de transcription locale.
enum EtatTranscripteur {
    /// Le moteur est disponible et autorisé.
    case disponible
    /// Le moteur est absent, non autorisé, ou indisponible sur cet appareil.
    case indisponible
}

/// Interface de transcription locale (ASR sur l'appareil).
///
/// Implémentée par `TranscripteurSpeech` (SFSpeechRecognizer on-device).
/// Un faux (`FakeTranscripteurLocal`) est fourni dans les tests.
///
/// Quand SFSpeechRecognizer est indisponible ou que la permission est refusée,
/// `etat` vaut `.indisponible` et l'UI doit proposer le mode serveur.
///
/// Port direct de `TranscripteurLocal.kt` (Android).
protocol TranscripteurLocal: AnyObject {
    /// État courant du moteur de transcription.
    var etat: EtatTranscripteur { get }

    /// Alimente le moteur avec un buffer PCM capturé par AudioNoteRecorder.
    /// Appelé sur le thread de capture.
    /// - Returns: Résultat partiel si disponible, `nil` sinon.
    func accepterEchantillons(_ data: [Int16]) -> String?

    /// Retourne le résultat final après la fin de l'enregistrement.
    /// - Returns: Le texte transcrit (peut être vide).
    func finaliser() -> String

    /// Réinitialise l'état interne pour une nouvelle session d'enregistrement.
    func reinitialiser()
}