Référence CLI

Le binaire audio 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/audio.

transcribe

Transcrit des fichiers audio en texte.

audio transcribe <fichier> [options]
OptionPar défautDescription
<fichier>Fichier audio à transcrire (WAV, M4A, MP3, CAF)
--engineqwen3Moteur ASR : qwen3, qwen3-coreml, parakeet 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
audio transcribe recording.wav

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

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

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

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

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

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

align

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

audio 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
audio align recording.wav

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

speak

Synthèse vocale (texte vers parole).

audio 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
audio speak "Hello, world!" --output hello.wav

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

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

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

# Dialogue multi-locuteurs
audio 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
audio speak "(excited) Wow, amazing! (sad) But I have to go..." \
    --engine cosyvoice -o emotion.wav

# Combiné : dialogue + émotions + clonage vocal
audio 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
audio speak "Hello world" --engine cosyvoice --cosy-instruct "Speak cheerfully" -o cheerful.wav

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

# Synthèse par lot depuis un fichier
audio 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.

audio 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
audio kokoro "Hello, world!" --voice af_heart -o hello.wav

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

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

respond

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

audio 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
audio respond --input question.wav

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

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

vad

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

audio 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.

audio 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

diarize

Diarisation de locuteurs — identifier qui a parlé quand.

audio 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)
audio diarize meeting.wav

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

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

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

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

embed-speaker

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

audio 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.

audio 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 :

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