Premiers pas
Vous préférez une API hébergée ? Les mêmes transcription, synthèse et clonage en service managé — compatible OpenAI et ElevenLabs. soniqo.audio/cloud →
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) |
WhisperASR | reconnaissance vocale (Whisper Large-v3 Turbo, CoreML) |
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.
Les shaders ciblent par défaut macOS 15.0 et Metal 3.2, même avec un SDK plus récent. Pour une compilation personnalisée, MACOSX_DEPLOYMENT_TARGET et MLX_METAL_LANGUAGE_VERSION remplacent ces valeurs ; des cibles plus récentes peuvent exclure les anciens systèmes. Les changements du compilateur, du SDK, des options, du script ou des sources invalident le cache. Un échec de compilation ou de liaison préserve la bibliothèque précédente et l’empreinte du cache.
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 |
| Whisper Large-v3 Turbo (CoreML FP16) | 1.6 GB | ~384 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