Transcription vocale
Source: 02_speech_transcription
Transcrit de l’audio en texte à l’aide d’un modèle Whisper local téléchargé automatiquement depuis Hugging Face au premier lancement. Deux points d’entrée : main pour l’entrée microphone en direct, fromfile pour transcrire un fichier audio existant.
Exécution
Transcription en direct depuis le microphone :
melodium run 02_speech_transcription/Compo.tomlTranscrire un fichier audio :
melodium run 02_speech_transcription/Compo.toml fromfile -- --input_file speech.wavSortie attendue :
[…] info: transcription: Hello, this is a test.
[…] info: transcription: The model is running locally.Fonctionnement
Deux modèles sont déclarés en tête de chaque point d’entrée :
model Hub() : HfHub { repo_id = "openai/whisper-tiny" }
model Speech() : Whisper {}Hub pointe vers le dépôt HuggingFace pour Whisper tiny. Speech est une configuration Whisper vide — les paramètres par défaut sont utilisés.
Séquence de chargement du modèle
Les connexions garantissent que la capture audio ne démarre qu’une fois le modèle prêt :
fetch télécharge les poids et le tokenizer ; load initialise le modèle ; load.loaded conditionne simultanément decode.ready et la source audio. Aucune primitive de synchronisation n’est nécessaire — le dataflow lui-même impose l’ordre.
Fan-out vers le journal et le fichier
Une fois qu’un segment est transcrit par Whisper, il est transmis à deux sorties simultanément grâce à la double flèche --> :
decode.transcribed --> log.messages
decode.transcribed --> write.textLes deux opérations s’exécutent en parallèle.
Point d’entrée fromfile
Le point d’entrée fromFile remplace recordMono par readLocal + decodeMono. Le traitement decodeMono(hint="wav") gère la détection du format de conteneur de manière transparente — le même pipeline fonctionne pour WAV, MP3, FLAC et d’autres formats.
Dépendances
[dependencies]
std = "0.10.1" # flux de base, journalisation, structures de données
fs = "0.10.1" # lecture/écriture de fichiers locaux
audio = "0.10.1" # décodage / encodage / rééchantillonnage audio
record = "0.10.1" # capture microphone
ml = "0.10.1" # inférence LLM, STT, TTS et modèles locaux