Premiers pas
speech-swift fournit un traitement vocal IA embarqué pour macOS et iOS sur Apple Silicon. Les modèles s'exécutent localement via MLX (GPU Metal) et CoreML (Neural Engine).
Prérequis
- macOS 15+ (Sequoia ou ultérieur)
- Apple Silicon (séries M1, M2, M3, M4)
- Xcode 16+ / Swift 6.0+
- 8 Go de RAM minimum (16 Go recommandés pour les modèles plus grands)
Installation
Homebrew (CLI)
Le moyen le plus rapide d'essayer speech-swift sur macOS. Installe à la fois la CLI speech et le serveur HTTP/WebSocket speech-server (endpoint /v1/realtime compatible OpenAI). Nécessite Homebrew ARM natif (/opt/homebrew).
brew install speech
Après installation, les deux binaires sont dans votre PATH :
speech transcribe recording.wav
speech speak "Hello, world!" --output hello.wav
speech-server --port 8080 # serveur HTTP / WebSocket local
Swift Package Manager
Ajoutez speech-swift aux dépendances de votre Package.swift :
dependencies: [
.package(url: "https://github.com/soniqo/speech-swift", branch: "main")
]
Puis ajoutez les modules dont vous avez besoin à votre cible :
.target(
name: "MyApp",
dependencies: [
.product(name: "Qwen3ASR", package: "speech-swift"),
.product(name: "Qwen3TTS", package: "speech-swift"),
.product(name: "SpeechVAD", package: "speech-swift"),
// ... ajoutez tous les modules dont vous avez besoin
]
)
Modules disponibles
| Module | Description |
|---|---|
Qwen3ASR | Parole vers texte (Qwen3-ASR) |
ParakeetASR | Parole vers texte (Parakeet TDT, CoreML) |
Qwen3TTS | Texte vers parole (Qwen3-TTS) |
CosyVoiceTTS | Texte vers parole (CosyVoice3, multilingue) |
KokoroTTS | Texte vers parole (Kokoro-82M, CoreML, compatible iOS) |
Qwen3Chat | Chat LLM embarqué (Qwen3.5-0.8B, MLX + CoreML) |
PersonaPlex | Parole-à-parole (PersonaPlex 7B) |
SpeechVAD | VAD (Silero + Pyannote), diarisation, empreintes de locuteur |
SpeechEnhancement | Suppression de bruit (DeepFilterNet3, CoreML) |
AudioCommon | Protocoles partagés, E/S audio, téléchargeur HuggingFace |
Compilation depuis les sources
Clonez le dépôt et compilez :
git clone https://github.com/soniqo/speech-swift.git
cd speech-swift
make build
make build compile automatiquement la bibliothèque de shaders MLX Metal. Sans elle, l'inférence GPU est environ 5× plus lente à cause de la compilation JIT des shaders.
Démarrage rapide : transcrire de l'audio
CLI
# Transcrire un fichier WAV
.build/release/speech transcribe recording.wav
API Swift
import Qwen3ASR
let model = try await Qwen3ASRModel.fromPretrained()
// audioSamples: [Float] PCM at 16 kHz (e.g. decoded from a WAV)
let text = model.transcribe(audio: audioSamples, sampleRate: 16000)
print(text)
Les modèles sont téléchargés automatiquement depuis HuggingFace à la première utilisation et mis en cache dans ~/Library/Caches/qwen3-speech/.
Démarrage rapide : synthèse vocale
CLI
# Générer de la parole
.build/release/speech speak "Hello, world!" --output hello.wav
API Swift
import Qwen3TTS
import AudioCommon
let model = try await Qwen3TTSModel.fromPretrained()
let audio = model.synthesize(text: "Hello, world!", language: "english")
try WAVWriter.write(samples: audio, sampleRate: 24000, to: URL(filePath: "hello.wav"))
Téléchargements des modèles
Tous les modèles sont téléchargés depuis HuggingFace à la première utilisation. Tailles approximatives :
| Modèle | Taille | Utilisation RAM |
|---|---|---|
| Qwen3-ASR 0.6B (4-bit MLX) | 680 MB | ~1.0 GB peak |
| Qwen3-ASR 0.6B (8-bit MLX) | 1.0 GB | ~1.3 GB peak |
| Qwen3-ASR 0.6B (CoreML INT8) | 180 MB | ~1.4 GB peak |
| Qwen3-ASR 1.7B (4-bit MLX) | 2.1 GB | ~3 GB peak |
| Qwen3-ASR 1.7B (8-bit MLX) | 3.2 GB | ~2.7 GB peak |
| Parakeet-TDT v3 (CoreML INT8) | 500 MB | ~900 MB peak |
| Omnilingual CTC 300M (4-bit MLX) | 193 MB | ~400 MB peak |
| Omnilingual CTC 300M (CoreML INT8) | 312 MB | ~550 MB peak |
| Qwen3-TTS 0.6B (4 bits) | 1,7 Go | ~2 Go pic |
| Qwen3-TTS 1.7B (4 bits) | 3,2 Go | ~4 Go pic |
| CosyVoice3 (LLM 4 bits) | 1,2 Go | ~1,5 Go pic |
| Kokoro-82M (CoreML INT8) | 89 Mo | ~200 Mo pic |
| Qwen3.5-Chat 0.8B (INT4 MLX) | 418 Mo | ~700 Mo pic |
| Qwen3.5-Chat 0.8B (INT8 CoreML) | 981 Mo | ~1,2 Go pic |
| PersonaPlex 7B (8 bits) recommandé | 9,1 Go | ~11 Go pic |
| PersonaPlex 7B (4 bits) | 4,9 Go | ~6,5 Go pic |
| Pyannote VAD | 5,7 Mo | ~20 Mo pic |
| Silero VAD v5 | 1,2 Mo | ~5 Mo pic |
| WeSpeaker ResNet34 | 25 Mo | ~50 Mo pic |
| DeepFilterNet3 (FP16) | 4,2 Mo | ~10 Mo pic |
Prochaines étapes
- Référence CLI — toutes les commandes et options disponibles
- Guide Qwen3-ASR — documentation détaillée de la parole vers texte
- Guide Qwen3-TTS — documentation détaillée de la synthèse vocale
- API et protocoles — protocoles et types partagés