Aller au contenu principal

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èrevoice_idref_audio
PersistanceVoix sauvegardée dans le compteAucune persistance
RéutilisationIllimitéeÀ chaque requête
LatenceLégèrement plus rapide (voix déjà traitée)Légèrement plus lent (traitement à chaque appel)
GestionCRUD complet (modifier, supprimer)Rien à gérer
Coût réseauJuste le voice_id (quelques octets)Audio complet à chaque requête
ConfidentialitéAudio stocké dans le cloudAudio 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_audio permet 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_audio puis sauvegarder la voix une fois satisfait