target_language, puis resynthétisé
avec la voix que vous avez choisie. Ce guide couvre le streaming avec le
SDK Python.
Vous hésitez sur l'API à utiliser ?
La vue d’ensemble compare
s2s_realtime, s2s_stream et le helper
bufferisé s2s.Démarrage rapide
Le chemin le plus court : ouvrez un gestionnaire de contextes2s_realtime, envoyez des fragments audio et itérez pour recevoir
l’audio et le texte en sortie.
pcm est en PCM mono 16 bits signé
à 48 kHz. D’autres formats sont pris en charge, voir
Paramètres de configuration.
Choisir l’API du SDK
Le SDK Python propose trois façons de piloter le S2S via l’endpoint WebSocket. Toutes communiquent avecwss://api.gradium.ai/api/speech/s2s :
choisissez selon la forme de votre source audio.
La configuration se passe en arguments nommés pour
s2s_realtime et
sous forme de dict pour s2s_stream / s2s. Le message setup
envoyé sur le réseau est le même dans tous les cas.
Envoi en temps réel : s2s_realtime
Utilisez s2s_realtime lorsque l’audio est produit en direct (micro,
téléphonie, agent conversationnel) et que vous avez besoin de l’audio et
du texte de sortie dès qu’ils arrivent. C’est un gestionnaire de contexte
asynchrone : envoyez l’audio avec send_audio() et itérez sur le même
objet pour recevoir tous les types de messages.
send_audio() accepte des bytes ou un tableau numpy 1-D (int16 ou
float32) lorsque input_format est une variante de pcm. Dans
l’itérateur, les messages audio contiennent déjà des bytes décodés
dans msg["audio"].
Mode pull : s2s_stream
Utilisez s2s_stream lorsque vous disposez déjà de l’audio (un fichier
ou un buffer complet en mémoire) mais souhaitez tout de même recevoir la
sortie en flux au fur et à mesure de sa production. La fonction consomme
votre itérable audio et renvoie un S2SStream.
iter_audio() produit les octets audio de sortie et collecte les
segments de texte au passage. Pour traiter vous-même chaque message du
serveur (audio comme text, sous forme de dicts, avec les champs
audio décodés), utilisez plutôt iter_events().
Bufferisé : s2s
Utilisez s2s lorsque vous n’avez pas besoin des résultats au fil de
l’eau : passez-lui un buffer audio complet et récupérez un S2SResult
contenant l’audio de sortie complet et la transcription.
audio peut être des bytes bruts, un tableau numpy 1-D
(int16/float32, entrée pcm uniquement, sample_rate=24000
obligatoire) ou un générateur asynchrone de fragments d’octets. Le
S2SResult renvoyé expose raw_data, sample_rate, output_format,
request_id, text et text_with_timestamps ; pcm16() / pcm()
convertissent la sortie PCM en tableaux numpy.
Paramètres de configuration
model_name: le modèle S2S à utiliser. Utilisez"s2s-translate"pour la traduction en direct, le seul modèle actuellement pris en charge.stt_model_name: modèle de transcription utilisé pour transcrire l’entrée. Indiquez"stt-translate"pour la traduction en direct.tts_model_name: modèle de synthèse vocale utilisé pour synthétiser la sortie. Indiquez"default"pour la traduction en direct.voice_id(obligatoire) : UID de la voix utilisée pour la sortie synthétisée. Il doit s’agir d’une voix dans la même langue quetarget_language. Voir Voix.input_format: format audio de l’entrée. Valeurs prises en charge :"pcm": PCM brut, 24 kHz, 16 bits signé little-endian, mono. Envoyez des fragments de 1920 échantillons (80 ms) pour de meilleurs résultats."pcm_8000","pcm_16000","pcm_22050","pcm_24000","pcm_44100","pcm_48000": PCM brut à la fréquence d’échantillonnage indiquée (16 bits signé little-endian, mono)."wav": un fichier WAV valide contenant des données PCM."opus": flux Opus encapsulé dans Ogg."ulaw_8000"(alias"mulaw_8000") : PCM encodé en mu-law à 8 kHz."alaw_8000": PCM encodé en A-law à 8 kHz.
output_format: format audio de la sortie. Mêmes valeurs possibles queinput_format. Pour"pcm", la sortie est en 48 kHz, 16 bits signé little-endian, mono.json_config: définisseztarget_language(par ex."en") sur la langue dans laquelle traduire la parole. Levoice_iddoit correspondre à une voix dans cette langue. Voir Paramètres Speech-to-Speech.
Types de messages
Lorsque vous itérez sur une sessions2s_realtime, vous recevez tous
les messages envoyés par le serveur :
ready: connexion acceptée ; contient lesample_rateet leframe_sizede la sortie. Accessible vias2s.readylorsque vous passezwait_for_ready_on_start=True.text: un segment de transcription traduit (danstarget_language) avec les horodatagesstart_s/stop_s.audio: un fragment audio de sortie. Dans l’itérateur du SDK, le champaudiocontient déjà desbytesdécodés.end_of_stream: message final aprèssend_eos().
WebSocket direct
Si vous ne souhaitez pas utiliser le SDK gradium, par exemple parce que vous appelez l’API depuis un runtime autre que Python, ou que vous voulez un contrôle total sur les échanges, vous pouvez dialoguer directement avec le protocole WebSocket. La forme des messages est identique à celle qu’envoie le SDK. Pour explorer de manière interactive depuis un terminal,wscat est le moyen le plus
rapide de vérifier la connectivité et d’envoyer les messages un à un à
la main :
websockets en
Python) :
Étapes suivantes
Référence WebSocket S2S
Schéma complet au niveau du protocole : chaque type de message, chaque
champ, chaque code d’erreur.
Paramètres S2S
voice_id, target_language, choix des modèles internes, formats.Voix
Choisissez la voix utilisée pour la sortie synthétisée.
Erreurs
Contrats d’erreur pour REST, WebSocket et les réponses en streaming.