ModeTranscription.swift 34 lignes · 1291 octets
import Foundation
import Speech

/// Mode de transcription des notes vocales.
enum ModeTranscription: String {
    /// Transcription on-device via SFSpeechRecognizer (fr_FR, données non transmises).
    case appareil
    /// Transcription déléguée au serveur (upload audio, transcription côté serveur).
    case serveur
}

/// Préférence locale du mode de transcription (UserDefaults).
enum PreferencesAudio {
    private static let cleMode = "transcription_mode"

    /// `true` si SFSpeechRecognizer est disponible pour fr_FR sur cet appareil.
    /// Lorsque `false`, le mode est forcé à `.serveur`.
    static var speechRecognitionDisponible: Bool {
        SFSpeechRecognizer(locale: Locale(identifier: "fr_FR"))?.isAvailable == true
    }

    /// Mode persisté. Retourne toujours `.serveur` si la reconnaissance vocale est indisponible.
    static var modeTranscription: ModeTranscription {
        get {
            if !speechRecognitionDisponible { return .serveur }
            let raw = UserDefaults.standard.string(forKey: cleMode)
                ?? ModeTranscription.appareil.rawValue
            return ModeTranscription(rawValue: raw) ?? .appareil
        }
        set {
            UserDefaults.standard.set(newValue.rawValue, forKey: cleMode)
        }
    }
}