Clonage vocal à la volée
Mis à jour le 29 juillet 2026
Cloner sans sauvegarder
La leçon précédente reposait sur une voix sauvegardée, créée au préalable via l’API Voices et désignée par son voice_id. Voxtral propose une seconde voie, le clonage à la volée (on-the-fly), où la voix de référence est fournie directement dans la requête de génération. Aucun objet n’est créé dans votre compte : l’échantillon sert à cette requête, puis il est oublié.
Concrètement, vous remplacez voice_id par ref_audio, qui attend l’échantillon audio encodé en base64. Le reste de l’appel ne change pas.
import base64
from pathlib import Path
from mistralai.client import Mistral
client = Mistral(api_key="votre-cle-api")
# Encoder l'audio de référence
ref_audio_b64 = base64.b64encode(
Path("reference.mp3").read_bytes()
).decode()
# Générer avec clonage à la volée
response = client.audio.speech.complete(
model="voxtral-mini-tts-2603",
input="Cette parole va ressembler à la voix de référence.",
ref_audio=ref_audio_b64,
response_format="wav",
)
audio_bytes = base64.b64decode(response.audio_data)
Path("sortie-clonee.wav").write_bytes(audio_bytes)
print("Audio généré avec clonage à la volée !")
Trois situations où cette approche s’impose
La première est le prototypage. Quand vous cherchez le bon échantillon de référence, vous en essayez dix, quinze, parfois davantage : autant de voix créées dans votre compte qu’il faudra ensuite retrouver et supprimer une à une. Avec ref_audio, la boucle de test ne laisse aucune trace côté serveur, et vous comparez les rendus en écoutant les fichiers produits.
# Tester rapidement plusieurs échantillons
echantillons = ["sample1.mp3", "sample2.mp3", "sample3.mp3"]
for fichier in echantillons:
ref_b64 = base64.b64encode(Path(fichier).read_bytes()).decode()
response = client.audio.speech.complete(
model="voxtral-mini-tts-2603",
input="Ceci est un test de qualité vocale.",
ref_audio=ref_b64,
response_format="mp3",
)
sortie = f"test-{Path(fichier).stem}.mp3"
Path(sortie).write_bytes(base64.b64decode(response.audio_data))
print(f"Généré : {sortie}")
La deuxième est l’usage ponctuel. Un message d’anniversaire personnalisé avec la voix d’un proche, une démonstration client préparée pour une réunion précise : la voix ne servira qu’une fois, il n’y a aucune raison de l’installer durablement dans votre compte.
La troisième est la confidentialité. L’audio de référence transmis via ref_audio n’est pas stocké côté serveur. Si vous manipulez la voix d’un patient, d’un témoin ou d’un dirigeant, cette différence n’est pas cosmétique : elle change ce que vous devez déclarer dans votre registre de traitement et ce que vous avez à effacer en cas de demande.
voice_id ou ref_audio : ce qui les sépare
| Critère | voice_id | ref_audio |
|---|---|---|
| Persistance | Voix sauvegardée dans le compte | Aucune persistance |
| Réutilisation | Illimitée | À chaque requête |
| Latence | Légèrement plus rapide (voix déjà traitée) | Légèrement plus lent (traitement à chaque appel) |
| Gestion | CRUD complet (modifier, supprimer) | Rien à gérer |
| Coût réseau | Juste le voice_id (quelques octets) | Audio complet à chaque requête |
| Confidentialité | Audio stocké dans le cloud | Audio non stocké |
La règle de décision se résume à la fréquence d’usage. Une voix qui sert tous les jours — la narration d’une application, le porte-parole d’une marque — mérite d’être créée avec client.audio.voices.create() : vous économisez la bande passante d’un envoi d’échantillon à chaque appel, et vous gagnez le temps de traitement de la référence. Une voix que vous testez ou que vous n’utiliserez qu’une fois passe par ref_audio, et vous n’aurez rien à nettoyer.
Enchaîner les deux approches
Les deux méthodes ne s’excluent pas ; le flux de travail le plus efficace les met à la suite. Vous cherchez d’abord le bon échantillon avec ref_audio, en écoutant chaque résultat. Quand un candidat vous satisfait, vous réutilisez la même chaîne base64 — déjà en mémoire — pour créer la voix définitive, avec son nom, ses langues et son genre.
# Phase 1 : test rapide avec ref_audio
ref_b64 = base64.b64encode(Path("ma-voix.mp3").read_bytes()).decode()
response = client.audio.speech.complete(
model="voxtral-mini-tts-2603",
input="Test de qualité.",
ref_audio=ref_b64,
response_format="mp3",
)
# Écouter le résultat...
# Phase 2 : satisfait ? Sauvegarder la voix
voice = client.audio.voices.create(
name="ma-voix-validee",
sample_audio=ref_b64,
sample_filename="ma-voix.mp3",
languages=["fr"],
gender="male",
)
print(f"Voix sauvegardée : {voice.id}")
Entraînez-vous sur trois enregistrements de votre propre voix, faits dans trois conditions différentes — micro casque, téléphone, pièce réverbérante. Générez la même phrase avec chacun via ref_audio, écoutez, puis ne sauvegardez que le gagnant. Vous aurez appris en dix minutes ce qui distingue un bon échantillon d’un mauvais, sans laisser trois voix inutiles derrière vous.
Points clés à retenir
- Le paramètre
ref_audiopermet de cloner une voix sans la sauvegarder - L’audio de référence est encodé en base64 et envoyé directement dans la requête
- Le clonage à la volée est idéal pour les tests, les usages ponctuels et la confidentialité
- Pour une utilisation régulière, préférez une voix sauvegardée (moins de latence, moins de bande passante)
- Vous pouvez tester avec
ref_audiopuis sauvegarder la voix une fois satisfait