Skip to Content
Mélodium 0.10.1 is now available!
DocsExemplesPipeline vocal complet

Pipeline vocal complet

Source: 08_full_voice_pipeline

Une boucle parole-entrée / parole-sortie complète utilisant trois APIs cloud : lit un fichier audio, le transcrit avec OpenAI Whisper, génère une réponse avec GPT-4o, synthétise la réponse en parole avec ElevenLabs, et écrit le fichier audio de sortie.

Exécution

melodium run 08_full_voice_pipeline/Compo.toml \ --input_file question.wav \ --openai_key sk-... \ --elevenlabs_key el-... \ --elevenlabs_voice JBFqnCBsd6RMkjVDRZzb
[…] info: pipeline: starting voice pipeline… […] info: pipeline: answer written

Fonctionnement

Trois modèles couvrent les trois étapes d’API :

model stt: Stt(openai_key=openai_key) model llm: Llm(openai_key=openai_key) model tts: Tts(elevenlabs_key=elevenlabs_key, voice=elevenlabs_voice)

Le traitement principal les connecte séquentiellement via des sous-traitements :

See in Compositeur Studio

Frontière Block/Stream à la sortie STT

transcribe (STT distant) retourne un Block<string> — une valeur pour l’ensemble du fichier audio. Le traitement llmRespond en aval attend une entrée Stream<string>. L’adaptateur stream<string>() effectue ce pont :

transcribe.transcript -> transcriptAsStream.block,stream -> llmRespond.question

Trois sous-traitements, une interface chacun

Chaque étape est isolée dans son propre sous-traitement avec une signature claire Stream<T> en entrée / Stream<T> en sortie. Cela garde la gestion des erreurs co-localisée avec l’étape qui peut en produire, et rend chaque étape indépendamment remplaçable.

Sortie TTS

synthesize de RemoteTts émet les octets audio sous forme de Stream<byte>, écrits directement dans le fichier de sortie. Le format audio (MP3 par défaut pour ElevenLabs) est déterminé par le backend TTS.

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