xAI Voice (texte à la parole)
Utilisez Texte pour parler dans OCI Generative AI pour convertir du texte en audio parlé avec xAI Voice.
Vous pouvez convertir du texte en discours de deux manières :
- API Audio Speech compatible avec OCI OpenAI pour la génération vocale basée sur les demandes.
- Diffusion en continu de socket Web pour la transmission en continu d'entrée de texte et de sortie audio.
Utilisez l'option API pour soumettre du texte et recevoir un fichier audio. Utilisez WebSocket Streaming pour envoyer du texte de manière incrémentielle et recevoir des morceaux audio au fur et à mesure qu'ils sont générés.
Modèle pris en charge
Le modèle Text to Speech est disponible uniquement en mode à la demande.
| Modèle | Description |
|---|---|
xai.grok-tts |
Modèle de synthèse vocale pour générer de l'audio parlé à partir de texte. |
Régions pour ce modèle
Pour les régions prises en charge, les types d'adresse (clusters d'IA dédiés ou à la demande) et l'hébergement (appels externes ou OCI Generative AI) pour ce modèle, reportez-vous à la page Modèles par région. Pour plus de détails sur les régions, reportez-vous à la page Régions d'IA générative.
Voix
Les voix suivantes sont disponibles. Les noms vocaux ne distinguent pas les majuscules des minuscules. Par exemple, ara, Ara et ARA sont acceptés.
| Voix | Description |
|---|---|
ara |
Chaleureux et conversationnel |
eve |
Énergique et optimiste |
leo |
Autorisée et forte |
rex |
Clair et professionnel |
sal |
Lisse et équilibré |
Options d'accès
Vous pouvez convertir du texte en texte vocal à l'aide de l'API Audio Speech compatible avec OCI OpenAI ou de la diffusion en continu de sockets Web.
| Option d'accès | Adresse | Style de paramètre | Utiliser quand |
|---|---|---|---|
| API audio Speech compatible avec OCI OpenAI | https://inference.generativeai.{region}.oci.oraclecloud.com/openai/v1 |
Format de requête audio vocale compatible avec OpenAI, avec des options spécifiques à xAI dans extra_body |
Vous voulez soumettre du texte et recevoir un fichier audio en une seule demande. |
| Streaming de socket Web | wss://inference.generativeai.{region}.oci.oraclecloud.com/xai/v1/tts |
Paramètres de transmission en continu du texte vers la parole xAI | Vous souhaitez diffuser des entrées de texte et recevoir des blocs audio au fur et à mesure de leur génération. |
L'API Audio Speech compatible avec OCI OpenAI ne prend pas en charge la diffusion en temps réel. Pour diffuser du texte dans la synthèse vocale, utilisez l'adresse WebSocket.
API OCI OpenAI-Compatible Audio Speech
Utilisez l'API Audio Speech compatible avec OCI OpenAI pour générer de l'audio à partir d'une seule demande.
- Adresse compatible avec OCI OpenAI
-
https://inference.generativeai.{region}.oci.oraclecloud.com/openai/v1
Dans la demande, appelez le modèle xai.grok-tts et utilisez l'une des voix Grok Voice répertoriées dans cette rubrique. N'utilisez pas de noms de modèles de synthèse vocale ou de noms de voix OpenAI.
Indiquez les valeurs suivantes dans la requête vocale audio standard compatible OpenAI :
model:xai.grok-ttsinput: texte à convertir en discoursvoice: l'une des voix Grok prises en charge, telle queara,eve,leo,rexousalresponse_format: format de réponse audio, tel quemp3
Placez les options propres à xAI, telles que language et output_format, dans extra_body.
Par exemple, utilisez extra_body pour des paramètres tels que :
languageoutput_format.sample_rateoutput_format.bit_rate
Lorsque vous utilisez l'API Audio Speech compatible avec OCI OpenAI, utilisez la structure de demande compatible avec OpenAI avec l'adresse OCI, mais utilisez le modèle xai.grok-tts et les voix xAI prises en charge. N'utilisez pas les voix ouvertes uniquement, les noms de modèle TTS OpenAI ou les objets vocaux personnalisés OpenAI.
Streaming de socket Web
Utilisez WebSocket Streaming pour les workflows de synthèse vocale en temps réel ou interactifs. Avec cette option, vous envoyez du texte au service sous forme de messages et recevez de l'audio sous forme de blocs audio codés en base64.
- Adresse OCI WebSocket :
-
wss://inference.generativeai.{region}.oci.oraclecloud.com/xai/v1/tts
N'utilisez pas directement l'adresse xAI.
Configurez la connexion WebSocket à l'aide de paramètres de requête de synthèse vocale xAI, tels que :
| Paramètre | Description |
|---|---|
voice |
Voix à utiliser pour la génération de la parole. |
language |
Code de langue, tel que en ou auto pour la détection automatique du langage. |
codec |
Codec audio, tel que mp3, wav, pcm, mulaw ou alaw. |
sample_rate |
Fréquence d'échantillonnage audio. |
bit_rate |
Débit binaire MP3. S'applique à la sortie MP3. |
optimize_streaming_latency |
Optimise l'audio pour réduire le délai d'accès au premier son lorsque cette option est activée. |
text_normalization |
Normalise le texte écrit sous forme orale lorsqu'il est activé. |
Après avoir ouvert la connexion WebSocket, envoyez du texte à l'aide de messages text.delta. Envoyez text.done pour indiquer la fin de la variation en cours.
Le service renvoie :
| Evénement | Description |
|---|---|
audio.delta |
Bloc audio encodé en Base64. |
audio.done |
La génération audio de la variation en cours est terminée. |
error |
Message d'erreur du service. |
La connexion WebSocket peut rester ouverte après audio.done. Vous pouvez donc envoyer une autre séquence text.delta et text.done sans vous reconnecter.
Pour la diffusion en continu de socket Web, utilisez les paramètres de transmission en continu de texte à parole xAI avec l'adresse OCI WebSocket.
Utilisation des paramètres
Les paramètres que vous utilisez dépendent de l'option d'accès.
Pour l'API Audio Speech compatible avec OCI OpenAI, utilisez le format de demande audio vocale compatible avec OpenAI. Définissez model sur xai.grok-tts, utilisez une voix xAI prise en charge et placez les paramètres propres à xAI dans extra_body.
Pour la diffusion en continu de sockets Web, utilisez les paramètres de transmission en continu de texte à parole xAI. Configurez la voix, la langue, le codec, le taux d'échantillonnage et le débit en tant que paramètres de requête WebSocket. Envoyez du texte avec des messages text.delta et terminez chaque variation par text.done.
Formats de sortie
Text to Speech prend en charge les formats audio courants pour différents cas d'utilisation.
| Format | Cas d'emploi |
|---|---|
mp3 |
Usage général et large compatibilité |
wav |
Flux de travail audio et d'édition haute fidélité |
pcm |
Audio brut pour le traitement en temps réel |
mulaw |
Flux de travail de téléphonie |
alaw |
Flux de travail de téléphonie |
Pour l'API Audio Speech compatible OCI OpenAI, définissez le format audio dans response_format et placez les paramètres audio xAI, tels que le débit d'échantillonnage et le débit binaire, dans extra_body.output_format. Pour WebSocket Streaming, définissez le format audio, le débit d'échantillon et le débit en tant que paramètres de requête lors de l'ouverture de la connexion.
Le débit binaire s'applique à la sortie MP3.
Langues
Text to Speech prend en charge de nombreuses langues. Utilisez un code de langue pris en charge, tel que en, ou utilisez auto pour la détection automatique du langage lorsque la méthode d'accès le prend en charge.
Limites
Les limites de texte à parole dépendent de l'option d'accès.
| Limite | API audio Speech compatible avec OCI OpenAI | Streaming de socket Web |
|---|---|---|
| Limite de caractères | Jusqu'à 15 000 caractères par demande | Jusqu'à 15 000 caractères par message text.delta |
| Contenu plus long | Diviser le contenu en plus petites demandes et combiner la sortie audio | Diviser le contenu en plusieurs messages text.delta ou en différentes variations |
| Limite de débit | 600 demandes par minute ou 10 demandes par seconde | 600 demandes par minute ou 10 demandes par seconde |
| Demandes simultanées ou sessions | Jusqu'à 100 demandes simultanées | Jusqu'à 50 sessions simultanées |
| Durée de vie du permis de session | Non applicable | 600 secondes |
Pour un texte plus long, divisez le contenu en segments logiques, tels que des paragraphes ou des phrases. Cela permet de maintenir chaque demande ou bloc de texte dans la limite de caractères et facilite la combinaison de l'audio généré dans l'ordre.
Pour la diffusion en continu de socket Web, envoyez du texte à l'aide de messages text.delta et envoyez text.done lorsque la variation en cours est terminée. Chaque message text.delta doit rester dans la limite de caractères.
Dates de publication et de retrait OCI
Pour les dates de déblocage et de sortie et les options de modèle de remplacement, voir Dates de sortie du modèle (mode à la demande).
Liens de documentation externe
- du texte à la parole sur xAI
- Socket Web TTS Streaming sur xAI
- du texte à la parole sur OpenAI
Exemples
Les exemples suivants présentent les deux options d'accès prises en charge. L'exemple compatible avec OCI OpenAI utilise l'adresse compatible avec OCI OpenAI et le modèle xai.grok-tts. L'exemple de socket Web utilise l'adresse de socket Web OCI xAI et les paramètres de transmission en continu xAI.
- API audio Speech compatible avec OCI OpenAI
-
from openai import OpenAI from oci_openai import OciSessionAuth client = OpenAI( api_key="<not-used>", base_url="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1", http_client=httpx.Client( auth=OciSessionAuth(profile_name=<profile>), headers={"CompartmentId": <compartment_id>} ), ) speech = client.audio.speech.create( model="xai.grok-tts", input="hello", voice="ara", response_format="mp3", extra_body={ "language": "en", "output_format": { "sample_rate": 44100, "bit_rate": 192000 } } ) audio_file = f"output.mp3" with open(audio_file, "wb") as f: f.write(speech.content)
- Streaming de socket Web
-
import asyncio import base64 import inspect import json from datetime import datetime, timezone from pathlib import Path from urllib.parse import urlencode import websockets CONFIG = { "endpoint": "wss://inference.generativeai.us-chicago-1.oci.oraclecloud.com/xai/v1/tts", "api_key": "<YOUR GENAI API KEY>", "text": "Hi, this is an audio sample.", "voice": "eve", "language": "en", "codec": "mp3", "sample_rate": 24000, "bit_rate": 128000, "output_dir": "./", } def tts_url(): params = { "language": CONFIG["language"], "voice": CONFIG["voice"], "codec": CONFIG["codec"], "sample_rate": CONFIG["sample_rate"], } if CONFIG["codec"] == "mp3": params["bit_rate"] = CONFIG["bit_rate"] return "{}?{}".format(CONFIG["endpoint"], urlencode(params)) def output_file(): folder = Path(CONFIG["output_dir"]).expanduser() folder.mkdir(parents=True, exist_ok=True) timestamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ") return folder / "grok_tts_{}.{}".format(timestamp, CONFIG["codec"]) async def main(): if CONFIG["api_key"] == "<YOUR GENAI API KEY>": raise ValueError("Set api_key before running this sample.") path = output_file() headers = {"Authorization": "Bearer {}".format(CONFIG["api_key"])} header_arg = ( "additional_headers" if "additional_headers" in inspect.signature(websockets.connect).parameters else "extra_headers" ) async with websockets.connect(tts_url(), **{header_arg: headers}) as ws: await ws.send(json.dumps({"type": "text.delta", "delta": CONFIG["text"]})) await ws.send(json.dumps({"type": "text.done"})) with open(str(path), "wb") as audio_file: async for message in ws: event = json.loads(message) if event["type"] == "audio.delta": audio_file.write(base64.b64decode(event["delta"])) elif event["type"] == "audio.done": print("Saved audio to {}".format(path)) break elif event["type"] == "error": raise RuntimeError(event.get("message", message)) if __name__ == "__main__": asyncio.run(main())