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

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

ModuleDescription
Qwen3ASRParole vers texte (Qwen3-ASR)
ParakeetASRParole vers texte (Parakeet TDT, CoreML)
Qwen3TTSTexte vers parole (Qwen3-TTS)
CosyVoiceTTSTexte vers parole (CosyVoice3, multilingue)
KokoroTTSTexte vers parole (Kokoro-82M, CoreML, compatible iOS)
Qwen3ChatChat LLM embarqué (Qwen3.5-0.8B, MLX + CoreML)
PersonaPlexParole-à-parole (PersonaPlex 7B)
SpeechVADVAD (Silero + Pyannote), diarisation, empreintes de locuteur
SpeechEnhancementSuppression de bruit (DeepFilterNet3, CoreML)
AudioCommonProtocoles 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
Important

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èleTailleUtilisation 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 VAD5,7 Mo~20 Mo pic
Silero VAD v51,2 Mo~5 Mo pic
WeSpeaker ResNet3425 Mo~50 Mo pic
DeepFilterNet3 (FP16)4,2 Mo~10 Mo pic

Prochaines étapes