Speech Swift : Kit vocal IA sur appareil pour Apple Silicon
Découvrez Speech Swift, un kit open source pour la reconnaissance vocale, la synthèse vocale, la traduction parole-à-parole, la détection d'activité vocale et la diarisation sur Apple Silicon avec MLX et CoreML.
Qu'est-ce que Speech Swift ?
Speech Swift est un kit vocal IA open source conçu spécifiquement pour Apple Silicon (puces série M et Neural Engine). Il offre une suite complète de capacités vocales — reconnaissance automatique de la parole (ASR), synthèse vocale (TTS), traduction parole-à-parole, détection d'activité vocale (VAD), diarisation des locuteurs, et plus encore — directement sur votre Mac ou appareil iOS. Tout le traitement se fait localement, sans dépendance au cloud, sans clé API et sans que vos données ne quittent votre appareil.
Pourquoi la parole sur appareil est importante
Exécuter des modèles vocaux sur l'appareil offre plusieurs avantages cruciaux :
- Confidentialité : Les données audio ne quittent jamais votre appareil, éliminant les préoccupations liées à l'enregistrement ou à la transcription dans le cloud.
- Latence : L'inférence locale élimine les allers-retours réseau, permettant un streaming en temps réel et des agents vocaux interactifs.
- Fonctionnement hors ligne : Fonctionne sans connexion Internet, idéal pour les voyages, les zones reculées ou les environnements sécurisés.
- Coût : Pas de frais d'utilisation d'API ni de coûts de calcul cloud.
Capacités clés et modèles
Speech Swift est organisé en cibles modulaires Swift Package Manager (SPM), vous n'importez donc que ce dont vous avez besoin. Voici un aperçu des principaux groupes de capacités :
Parole-à-texte (ASR)
- Qwen3-ASR : Parole-à-texte prenant en charge 52 langues, avec des backends hybrides MLX et CoreML. Disponible en tailles de paramètres 0,6B et 1,7B.
- WhisperASR : Implémentation CoreML native de Whisper Large-v3 Turbo d'OpenAI, optimisée pour le Neural Engine.
- Parakeet TDT : FastConformer de NVIDIA avec décodeur TDT, prenant en charge 25 langues européennes via CoreML.
- Omnilingual ASR : Modèle basé sur wav2vec2 de Meta couvrant 1 672 langues dans 32 écritures, avec des variantes CoreML (300M) et MLX (300M/1B/3B/7B). Atteint 0,28 RTF sur iPhone 16 Pro.
- Dictée en streaming : Dictée en temps réel avec résultats partiels et détection de fin d'énoncé (Parakeet-EOU-120M), atteignant 0,04 RTF sur iPhone 16 Pro.
- Nemotron Streaming : ASR en streaming à faible latence de NVIDIA avec ponctuation et capitalisation natives, disponible en variantes multilingue (40 locales linguistiques) et anglais uniquement.
Synthèse vocale (TTS)
- Qwen3-TTS : TTS en streaming de haute qualité avec prise en charge de locuteurs personnalisés, 10 langues.
- CosyVoice TTS : TTS en streaming avec clonage vocal, dialogue multi-locuteurs et balises d'émotion (9 langues).
- VoxCPM2 : TTS de qualité studio à 48 kHz avec clonage vocal et conception vocale guidée par instructions (2B paramètres, MLX bf16/int8, 30 langues).
- IndexTTS2 : Clonage vocal natif MLX à partir d'une voix de référence (classe 1,5B, anglais et mandarin).
- F5-TTS : Clonage vocal zero-shot à partir d'un court clip de référence (DiT flow matching + Vocos, MLX fp16, 24 kHz).
- Higgs TTS 3 : TTS conversationnel avec clonage vocal zero-shot et balises d'émotion/style/SFX/prosodie intégrées (Boson Higgs TTS 3, backbone Qwen3-4B, MLX bf16, 100+ langues).
- Kokoro TTS : TTS sur appareil léger (82M paramètres, CoreML/Neural Engine, 54 voix, prêt pour iOS, 10 langues) avec 0,08 RTF sur iPhone 16 Pro.
- VibeVoice TTS : TTS longue durée/multi-locuteurs pour synthèse de podcasts/audiobooks jusqu'à 90 minutes (Microsoft VibeVoice Realtime-0.5B + 1.5B, MLX, anglais et chinois).
- Magpie TTS : TTS multilingue de NVIDIA (357M paramètres, MLX INT8 ou CoreML INT8, 9 langues, 5 locuteurs intégrés).
- Supertonic TTS : TTS sur appareil par flow matching (99M paramètres, CoreML/Neural Engine, 31 langues, 10 voix, 44,1 kHz) avec 0,15 RTF sur iPhone 16 Pro.
- Chatterbox TTS : TTS multilingue avec clonage vocal zero-shot (Resemble AI, MLX fp16, 23 langues d'exécution).
- OmniVoice TTS : TTS par diffusion non autorégressif avec clonage vocal zero-shot (k2-fsa, backbone Qwen3, MLX, 600+ langues, Apache-2.0).
- Indic-Mio : TTS hindi/indic avec marqueurs d'émotion intégrés et clonage vocal optionnel par référence (MLX, 24 kHz).
LLM et traduction
- Qwen3Chat : Chat LLM sur appareil avec tokens en streaming (Qwen3.5-0.8B MLX/CoreML, plus backends MLX Qwen3 4B et Gemma 4 E2B/E4B).
- FunctionGemma : LLM sur appareil pour appels de fonctions/outils structurés (Gemma 3 270M, CoreML 8-bit palettisé, Neural Engine, ~252 tok/s sur M5 Pro, 128 tok/s sur iPhone 16 Pro).
- MADLAD-400 : Traduction multilingue dans plus de 400 langues (3B, MLX INT4 + INT8, T5 v1.1, Apache 2.0).
Parole-à-parole et agents vocaux
- Hibiki Zero-3B : Traduction parole-à-parole en streaming (français/espagnol/portugais/allemand vers anglais, MLX INT4 + INT8, pile Kyutai Moshi/Mimi).
- PersonaPlex : Parole-à-parole en duplex intégral (7B paramètres, audio entrant → audio sortant, 18 préréglages vocaux).
- Audio2Face-3D : Animation faciale pilotée par la parole pour avatars (NVIDIA Audio2Face-3D v2.3 Mark, 301 coefficients faciaux, MLX).
Amélioration, séparation et génération audio
- DeepFilterNet3 : Suppression du bruit en temps réel (2,1M paramètres, 48 kHz).
- Source Separation : Séparation de sources musicales via HTDemucs (Demucs v4) et Open-Unmix (4 pistes : voix, batterie, basse, autres).
- MAGNeT : Génération texte-à-musique (Meta MAGNeT Small 300M / Medium 1,5B, MLX INT8, clips de 30 secondes à 32 kHz).
- Stable Audio 3 : Génération texte-à-audio/musique (Stable Audio 3 Medium, MLX INT8/INT4, 44,1 kHz stéréo, durée variable).
- FlashSR : Super-résolution audio (FlashSR ICASSP 2025, MLX, 48 kHz mono, distillation en 1 étape).
Détection de tour de parole, diarisation et identité du locuteur
- Wake-word : Détection de mot-clé sur appareil (KWS Zipformer 3M, CoreML, 26× temps réel, liste de mots-clés configurable).
- VAD : Détection d'activité vocale (Silero streaming, Pyannote hors ligne, FireRedVAD 100+ langues).
- Speaker Diarization : Qui a parlé quand (pipeline Pyannote, Sortformer de bout en bout sur Neural Engine).
- Speaker Embeddings : WeSpeaker ResNet34 (256-dim), CAM++ (192-dim).
Pour commencer
Installation via Swift Package Manager
Ajoutez le package à votre Package.swift :
.package(url: "https://github.com/soniqo/speech-swift", branch: "main")
Importez ensuite uniquement les modules dont vous avez besoin :
.product(name: "ParakeetStreamingASR", package: "speech-swift"),
.product(name: "SpeechUI", package: "speech-swift"), // vues SwiftUI optionnelles
Transcrire de l'audio en 3 lignes
import ParakeetStreamingASR
let model = try await ParakeetStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000)
Streaming en direct avec résultats partiels
for await partial in model.transcribeStream(audio: samples, sampleRate: 16000) {
print(partial.isFinal ? "FINAL : \(partial.text)" : "... \(partial.text)")
}
Vue de dictée SwiftUI
import SwiftUI
import ParakeetStreamingASR
import SpeechUI
@MainActor
struct DictateView: View {
@State private var store = TranscriptionStore()
var body: some View {
TranscriptionView(finals: store.finalLines, currentPartial: store.currentPartial)
.task {
let model = try? await ParakeetStreamingASRModel.fromPretrained()
guard let model else { return }
for await p in model.transcribeStream(audio: samples, sampleRate: 16000) {
store.apply(text: p.text, isFinal: p.isFinal)
}
}
}
}
Synthèse vocale
import Qwen3TTS
import AudioCommon
let model = try await Qwen3TTSModel.fromPretrained()
let audio = model.synthesize(text: "Bonjour le monde", language: "french")
try WAVWriter.write(samples: audio, sampleRate: 24000, to: outputURL)
Détection d'activité vocale
import SpeechVAD
let vad = try await SileroVADModel.fromPretrained()
let segments = vad.detectSpeech(audio: samples, sampleRate: 16000)
for s in segments { print("\(s.startTime)s → \(s.endTime)s") }
Diarisation des locuteurs
import SpeechVAD
let diarizer = try await DiarizationPipeline.fromPretrained()
let segments = diarizer.diarize(audio: samples, sampleRate: 16000)
for s in segments { print("Locuteur \(s.speakerId) : \(s.startTime)s - \(s.endTime)s") }
Architecture et conception
Speech Swift est divisé en une cible SPM par modèle, de sorte que les consommateurs ne paient que pour ce qu'ils importent. L'infrastructure partagée réside dans AudioCommon (protocoles, entrée/sortie audio, téléchargeur HuggingFace, SentencePieceModel) et MLXCommon (chargement de poids, helpers QuantizedLinear, helper d'attention multi-tête SDPA).
Poids du modèle et mise en cache
Les poids du modèle sont téléchargés depuis HuggingFace lors de la première utilisation et mis en cache dans ~/Library/Caches/qwen3-speech/. Vous pouvez remplacer cela par QWEN3_CACHE_DIR (CLI) ou cacheDir: (API Swift). Tous les points d'entrée fromPretrained() acceptent également offlineMode: true pour ignorer le réseau lorsque les poids sont déjà en cache.
Pour les utilisateurs en Chine continentale (ou partout où huggingface.co est lent/bloqué), vous pouvez récupérer depuis un miroir en définissant HF_ENDPOINT, par exemple export HF_ENDPOINT=https://hf-mirror.com.
Prérequis
- Swift 6+, Xcode 16+ (avec Metal Toolchain)
- macOS 15+ (Sequoia) ou iOS 18+
- Apple Silicon (M1/M2/M3/M4)
L'exigence minimale macOS 15 / iOS 18 provient de MLState — l'API d'état ANE persistante d'Apple utilisée par les pipelines CoreML (Qwen3-ASR, Qwen3-Chat, Qwen3-TTS) pour maintenir les caches KV résidents sur le Neural Engine à travers les étapes de tokens.
Benchmarks de performance
Speech Swift inclut des benchmarks CoreML sur appareil iPhone 16 Pro (RTF, tokens/s, mémoire maximale) dans docs/benchmarks/ios-coreml.md. Points clés :
- Parakeet-EOU-120M : 0,04 RTF sur iPhone 16 Pro (dictée en streaming)
- Omnilingual ASR (300M) : 0,28 RTF sur iPhone 16 Pro
- Kokoro-82M : 0,08 RTF sur iPhone 16 Pro (TTS)
- Supertonic-3 (99M) : 0,15 RTF sur iPhone 16 Pro (TTS)
- FunctionGemma (270M) : ~252 tok/s sur M5 Pro, 128 tok/s sur iPhone 16 Pro
Cas d'utilisation
- Agents vocaux : Construisez des assistants conversationnels IA qui fonctionnent entièrement sur l'appareil avec des capacités parole-à-parole en temps réel.
- Transcription : Transcription multilingue de haute précision pour les réunions, conférences ou contenus médiatiques.
- Génération vocale : Générez une parole naturelle pour l'accessibilité, la création de contenu ou les applications de clonage vocal.
- Amélioration audio : Nettoyez les enregistrements bruyants, séparez les sources audio ou restaurez la parole dégradée.
Communauté et ressources
- Documentation complète : soniqo.audio
- Modèles HuggingFace : soniqo sur HuggingFace
- Blog : Plongées techniques approfondies sur l'architecture et les benchmarks
- Discord : Discussion communautaire et support
Licence
Apache 2.0
Conclusion
Speech Swift représente une étape importante pour le traitement vocal IA sur appareil Apple Silicon. En combinant la puissance de MLX et CoreML avec un package Swift modulaire et convivial pour les développeurs, il permet une nouvelle classe d'applications vocales préservant la confidentialité et à faible latence. Que vous construisiez un assistant vocal, un outil de transcription ou une application audio créative, Speech Swift fournit les éléments de base dont vous avez besoin — le tout fonctionnant localement sur votre Mac ou iPhone.