Référence CLI

Le binaire speech est le point d'entrée principal pour toutes les tâches de traitement de la parole. Compilez avec make build, puis exécutez depuis .build/release/speech.

transcribe

Transcrit des fichiers audio en texte.

speech transcribe <fichier> [options]
OptionPar défautDescription
<fichier>Fichier audio à transcrire (WAV, M4A, MP3, CAF)
--engineqwen3Moteur ASR : qwen3, qwen3-coreml, parakeet, nemotron ou omnilingual
--model, -m0.6BVariante de modèle : 0.6B, 1.7B ou ID HuggingFace complet (qwen3 uniquement)
--languageIndication de langue (optionnel, ignoré par omnilingual)
--window10[omnilingual] Taille de fenêtre CoreML en secondes : 5 ou 10
--backendcoreml[omnilingual] Backend : coreml (Neural Engine) ou mlx (GPU Metal)
--variant300M[omnilingual mlx] Taille : 300M, 1B, 3B ou 7B
--bits4[omnilingual mlx] Bits de quantification : 4 ou 8
--streamActive la transcription en streaming avec VAD
--max-segment10Durée maximale d'un segment en secondes (streaming)
--partialÉmet des résultats partiels pendant la parole (streaming)

Exemples :

# Transcription de base
speech transcribe recording.wav

# Utiliser un modèle plus grand
speech transcribe recording.wav --model 1.7B

# Encodeur CoreML (Neural Engine + décodeur MLX)
speech transcribe recording.wav --engine qwen3-coreml

# Utiliser le moteur Parakeet (CoreML)
speech transcribe recording.wav --engine parakeet

# Omnilingual (CoreML, 1 672 langues)
speech transcribe recording.wav --engine omnilingual                              # fenêtre de 10 s
speech transcribe recording.wav --engine omnilingual --window 5                     # fenêtre de 5 s

# Omnilingual (MLX, toute longueur jusqu'à 40 s)
speech transcribe recording.wav --engine omnilingual --backend mlx                              # 300M @ 4-bit
speech transcribe recording.wav --engine omnilingual --backend mlx --variant 1B                  # 1B @ 4-bit
speech transcribe recording.wav --engine omnilingual --backend mlx --variant 3B --bits 8         # 3B @ 8-bit
speech transcribe recording.wav --engine omnilingual --backend mlx --variant 7B                  # 7B @ 4-bit

# Streaming avec VAD
speech transcribe recording.wav --stream --partial

align

Alignement forcé au niveau du mot — obtenez des horodatages précis pour chaque mot.

speech align <fichier> [options]
OptionPar défautDescription
<fichier>Fichier audio
--text, -tTexte à aligner (si omis, transcrit d'abord)
--model, -m0.6BModèle ASR pour la transcription : 0.6B, 1.7B ou ID complet
--aligner-modelID du modèle d'aligneur forcé
--languageIndication de langue

Exemples :

# Transcription automatique puis alignement
speech align recording.wav

# Alignement avec texte connu
speech align recording.wav --text "Can you guarantee that the replacement part will be shipped tomorrow?"

speak

Synthèse vocale (texte vers parole).

speech speak "<texte>" [options]
OptionPar défautDescription
<texte>Texte à synthétiser (optionnel avec --batch-file)
--engineqwen3Moteur TTS : qwen3 ou cosyvoice
--output, -ooutput.wavChemin du fichier WAV de sortie
--languageenglishLangue. Omettez pour utiliser le dialecte natif du locuteur quand --speaker est défini.
--streamActive la synthèse en streaming
--voice-sampleAudio de référence pour le clonage vocal (fonctionne avec les moteurs qwen3 et cosyvoice)
--verboseAffiche les informations détaillées de chronométrage

Options Qwen3-TTS

OptionPar défautDescription
--modelbaseVariante du modèle : base, customVoice ou ID HF complet
--speakerVoix du locuteur (nécessite --model customVoice)
--instructInstruction de style (modèle CustomVoice)
--list-speakersListe les locuteurs disponibles et quitte
--temperature0.3Température d'échantillonnage
--top-k50Échantillonnage top-k
--max-tokens500Nombre maximal de tokens (500 = ~40 s d'audio)
--batch-fileFichier avec un texte par ligne pour la synthèse par lot
--batch-size4Taille de lot maximale pour la génération parallèle
--first-chunk-frames3Trames de codec dans le premier bloc streamé
--chunk-frames25Trames de codec par bloc streamé

Options CosyVoice3

OptionPar défautDescription
--speakersMappage de locuteurs pour le dialogue multi-locuteurs : s1=alice.wav,s2=bob.wav
--cosy-instructInstruction de style (surcharge la valeur par défaut). Contrôle le style vocal pour CosyVoice3.
--turn-gap0.2Silence entre les tours de dialogue en secondes
--crossfade0.0Fondu enchaîné entre les tours en secondes
--model-idID de modèle HuggingFace

Exemples :

# TTS de base
speech speak "Hello, world!" --output hello.wav

# Clonage vocal (Qwen3-TTS)
speech speak "Hello in your voice" --voice-sample reference.wav -o cloned.wav

# Clonage vocal (CosyVoice)
speech speak "Hello in your voice" --engine cosyvoice --voice-sample reference.wav -o cloned.wav

# CosyVoice multilingue
speech speak "Hallo Welt" --engine cosyvoice --language german -o hallo.wav

# Dialogue multi-locuteurs
speech speak "[S1] Hello there! [S2] Hey, how are you?" \
    --engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o dialogue.wav

# Balises inline d'émotion/style
speech speak "(excited) Wow, amazing! (sad) But I have to go..." \
    --engine cosyvoice -o emotion.wav

# Combiné : dialogue + émotions + clonage vocal
speech speak "[S1] (happy) Great news! [S2] (surprised) Really?" \
    --engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o combined.wav

# Instruction de style personnalisée
speech speak "Hello world" --engine cosyvoice --cosy-instruct "Speak cheerfully" -o cheerful.wav

# Synthèse en streaming
speech speak "Long text here..." --stream

# Synthèse par lot depuis un fichier
speech speak --batch-file texts.txt --batch-size 4

kokoro

Synthèse vocale légère utilisant Kokoro-82M sur Neural Engine (CoreML). Non-autoregressif — passe avant unique, latence ~45 ms.

speech kokoro "<texte>" [options]
OptionPar défautDescription
<texte>Texte à synthétiser
--voiceaf_heartPréréglage de voix (50 disponibles sur 10 langues)
--languageenCode de langue : en, es, fr, hi, it, ja, pt, zh, ko, de
--output, -okokoro_output.wavChemin du fichier WAV de sortie
--list-voicesListe toutes les voix disponibles et quitte
--model, -mID de modèle HuggingFace

Exemples :

# Kokoro TTS de base
speech kokoro "Hello, world!" --voice af_heart -o hello.wav

# Voix française
speech kokoro "Bonjour le monde" --voice ff_siwis --language fr -o bonjour.wav

# Liste les 50 voix
speech kokoro --list-voices

respond

Dialogue parole-à-parole full-duplex utilisant PersonaPlex 7B.

speech respond [options]
OptionPar défautDescription
--input, -iFichier WAV audio d'entrée (mono 24 kHz) (requis)
--output, -oresponse.wavFichier WAV de réponse en sortie
--voiceNATM0Préréglage de voix (par ex. NATM0, NATF1, VARF0)
--system-promptassistantPréréglage : assistant, focused, customer-service, teacher
--system-prompt-textTexte de prompt système personnalisé (surcharge le préréglage)
--max-steps200Étapes max de génération à 12,5 Hz (~16 s)
--streamÉmet des blocs audio pendant la génération
--compileActive le transformeur compilé (préchauffage + fusion de noyaux)
--list-voicesListe les préréglages de voix disponibles
--list-promptsListe les préréglages de prompt système disponibles
--transcriptAffiche le monologue intérieur du modèle
--jsonSortie au format JSON (transcription, latence, chemin audio)
--verboseAffiche les informations détaillées de chronométrage

Surcharges d'échantillonnage

OptionPar défautDescription
--audio-temp0.8Température d'échantillonnage audio
--text-temp0.7Température d'échantillonnage texte
--audio-top-k250Candidats top-k audio
--repetition-penalty1.2Pénalité de répétition audio (1.0 = désactivé)
--text-repetition-penalty1.2Pénalité de répétition texte (1.0 = désactivé)
--repetition-window30Fenêtre de pénalité de répétition en trames
--silence-early-stop15Trames de silence avant arrêt anticipé (0 = désactivé)
--entropy-threshold0Seuil d'entropie texte pour arrêt anticipé (0 = désactivé)
--entropy-window10Étapes consécutives à faible entropie avant arrêt anticipé

Exemples :

# Parole-à-parole de base
speech respond --input question.wav

# Utiliser une voix féminine avec transformeur compilé
speech respond -i question.wav --voice NATF1 --compile

# Streamer la réponse et afficher la transcription
speech respond -i question.wav --stream --transcript --verbose

vad

Détection d'activité vocale hors ligne utilisant la segmentation Pyannote.

speech vad <fichier> [options]
OptionDescription
<fichier>Fichier audio à analyser
--model, -mID de modèle HuggingFace
--onsetSeuil de début (début de parole)
--offsetSeuil de fin (fin de parole)
--min-speechDurée minimale de parole en secondes
--min-silenceDurée minimale de silence en secondes
--jsonSortie au format JSON

vad-stream

Détection d'activité vocale en streaming utilisant Silero VAD v5. Traite l'audio par blocs de 32 ms.

speech vad-stream <fichier> [options]
OptionDescription
<fichier>Fichier audio à analyser
--engineMoteur VAD : mlx (par défaut) ou coreml
--model, -mID de modèle HuggingFace (sélection auto selon le moteur)
--onsetSeuil de début
--offsetSeuil de fin
--min-speechDurée minimale de parole en secondes
--min-silenceDurée minimale de silence en secondes
--jsonSortie au format JSON

wake

Détection de mots-clés sur appareil avec le KWS Zipformer (3,49 M paramètres, CoreML INT8, 26× temps réel, anglais uniquement).

speech wake <fichier> [options]
OptionDescription
<fichier>Fichier audio à analyser
--keywordsUn ou plusieurs mots-clés. Formats : "hey soniqo", "hey soniqo:0.15:0.5" ou "LIGHT UP|▁ L IGHT ▁UP:0.25:2.0" (style sherpa-onnx avec pièces BPE explicites)
--keywords-fileFichier de mots-clés, une entrée par ligne
--model, -mID de modèle HuggingFace. Par défaut : aufklarer/KWS-Zipformer-3M-CoreML-INT8
--jsonSortie au format JSON

diarize

Diarisation de locuteurs — identifier qui a parlé quand.

speech diarize <fichier> [options]
OptionPar défautDescription
<fichier>Fichier audio à analyser
--enginepyannoteMoteur de diarisation : pyannote (segmentation + chaînage de locuteurs) ou sortformer (CoreML bout en bout)
--target-speakerAudio d'enrôlement pour l'extraction du locuteur cible (pyannote uniquement)
--embedding-enginemlxMoteur d'empreinte de locuteur : mlx ou coreml (pyannote uniquement)
--vad-filterPré-filtrage avec Silero VAD (pyannote uniquement)
--rttmSortie au format RTTM
--jsonSortie au format JSON
--score-againstFichier RTTM de référence pour calculer le DER

Exemples :

# Diarisation de base (pyannote, par défaut)
speech diarize meeting.wav

# Sortformer bout en bout (CoreML, Neural Engine)
speech diarize meeting.wav --engine sortformer

# Sortie RTTM pour l'évaluation
speech diarize meeting.wav --rttm

# Extraction de locuteur cible (pyannote uniquement)
speech diarize meeting.wav --target-speaker enrollment.wav

# Score par rapport à une référence
speech diarize meeting.wav --score-against reference.rttm

embed-speaker

Extrait un vecteur d'empreinte de locuteur depuis l'audio.

speech embed-speaker <fichier> [options]
OptionDescription
<fichier>Fichier audio contenant la voix du locuteur
--engineMoteur d'inférence : mlx (par défaut), coreml (WeSpeaker 256 dim) ou camplusplus (CAM++ CoreML 192 dim)
--jsonSortie au format JSON

denoise

Supprime le bruit de fond en utilisant DeepFilterNet3 sur Neural Engine.

speech denoise <fichier> [options]
OptionPar défautDescription
<fichier>Fichier audio d'entrée
--output, -oinput_clean.wavChemin du fichier de sortie
--model, -mID de modèle HuggingFace

Exemple :

speech denoise noisy-recording.wav -o clean.wav

compose

Generate 30 s of music from a text prompt using MAGNeT on MLX.

speech compose <prompt> [options]
OptionDefaultDescription
<prompt>Text prompt describing the music to generate (e.g. "happy rock")
--output, -omagnet.wavOutput WAV path (32 kHz mono)
--variantsmall-int4Model variant: small-int4, small-int8, medium-int4, or medium-int8. Resolves to aufklarer/MAGNeT-{Small,Medium}-30secs-MLX-{4,8}bit.
--temperature3.0Sampling temperature, annealed linearly per stage.
--top-p0.9Nucleus sampling threshold.
--cfg-max10.0Max classifier-free guidance coefficient.
--cfg-min1.0Min CFG coefficient (annealed alongside the mask schedule).
--steps20,10,10,10Comma-separated decoding iterations per codebook (4 values).
--seedRandom seed for reproducible output.

Examples:

# Default: small-int4, ~10 s wall on M-series for a 30 s clip
speech compose "happy rock" -o happy_rock.wav

# Larger model — better prompt following, slower
speech compose "lo-fi hip hop with mellow piano" --variant medium-int4 -o lofi.wav

# Reproducible
speech compose "energetic EDM with synth lead" --seed 42 -o edm.wav