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 writtenFonctionnement
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 StudioFrontiè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.questionTrois 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