xAI Voice (Texte à la parole)
Utilisez le service Texte pour la parole dans le service d'intelligence artificielle générative pour OCI pour convertir du texte en audio parlé avec la voix xAI.
Vous pouvez convertir le texte en discours de deux manières :
- API de reconnaissance de la parole audio compatible OCI OpenAI pour la génération de la parole basée sur une demande.
- Service de diffusion en continu WebSocket pour la diffusion en continu d'entrées de texte et de sorties audio.
Utilisez l'option API pour soumettre du texte et recevoir un fichier audio. Utilisez la diffusion en continu WebSocket pour envoyer du texte de manière incrémentielle et recevoir des fragments audio au fur et à mesure de leur génération.
Modèle pris en charge
Le modèle Texte pour la parole n'est disponible qu'en mode sur demande.
| Modèle | Description |
|---|---|
xai.grok-tts |
Modèle text-to-speech 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 de point d'extrémité (grappes d'IA sur demande ou dédiées) et l'hébergement (IA générative pour OCI ou appels externes) pour ce modèle, voir la page Modèles par région. Pour plus de détails sur les régions, consultez la page Régions du service d'intelligence artificielle générative.
Voix
Les voix suivantes sont disponibles. Les noms vocaux ne sont pas sensibles à la casse. Par exemple, ara, Ara et ARA sont acceptés.
| Messagerie vocale | Description |
|---|---|
ara |
Chaleureux et conversationnel |
eve |
Énergétique et optimiste |
leo |
Autorisé et fort |
rex |
Clair et professionnel |
sal |
Lisse et équilibrée |
Options d'accès
Vous pouvez convertir du texte en discours à l'aide de l'API de reconnaissance de la parole audio compatible avec OCI OpenAI ou de la diffusion en continu WebSocket.
| Option d'accès | Point d'extrémité | Style de paramètre | Utiliser lorsque |
|---|---|---|---|
| API de reconnaissance de la parole audio compatible avec OCI OpenAI | https://inference.generativeai.{region}.oci.oraclecloud.com/openai/v1 |
Format de demande audio compatible OpenAI, avec options propres à xAI dans extra_body |
Vous souhaitez soumettre du texte et recevoir un fichier audio en une seule demande. |
| Diffusion WebSocket | wss://inference.generativeai.{region}.oci.oraclecloud.com/xai/v1/tts |
xAI paramètres de diffusion de texte à parole | Vous souhaitez diffuser du texte en continu et recevoir des fragments audio au fur et à mesure qu'ils sont générés. |
L'API de reconnaissance de la parole audio compatible avec OCI OpenAI ne prend pas en charge la diffusion en continu en temps réel. Pour diffuser du texte à la parole en continu, utilisez le point d'extrémité WebSocket.
API de reconnaissance de la parole audio compatible avec OCI OpenAI
Utilisez l'API de reconnaissance de la parole audio compatible avec OCI OpenAI pour générer de l'audio à partir d'une seule demande.
- Point d'extrémité 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èle de synthèse vocale OpenAI ou de noms vocaux OpenAI.
Spécifiez ces valeurs dans la demande de parole audio compatible OpenAI standard :
model:xai.grok-ttsinput: Texte à convertir en parolevoice: Une des voix vocales Grok prises en charge, par exempleara,eve,leo,rexousalresponse_format: Format de réponse audio, par exemplemp3
Placez les options propres à xAI, telles que language et output_format, dans extra_body.
Par exemple, utilisez extra_body pour les paramètres tels que :
languageoutput_format.sample_rateoutput_format.bit_rate
Lors de l'utilisation de l'API de reconnaissance de la parole audio compatible avec OCI OpenAI, utilisez la structure de demande compatible OpenAI avec le point d'extrémité OCI, mais utilisez le modèle xai.grok-tts et les voix xAI prises en charge. N'utilisez pas de voix uniquement OpenAI, de noms de modèle OpenAI TTS ou d'objets vocaux personnalisés OpenAI.
Diffusion en continu WebSocket
Utilisez la diffusion en continu WebSocket pour les flux de travail 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 encodés en base64.
- Point d'extrémité OCI WebSocket :
-
wss://inference.generativeai.{region}.oci.oraclecloud.com/xai/v1/tts
N'utilisez pas le point d'extrémité xAI directement.
Configurez la connexion WebSocket avec des paramètres d'interrogation de synthèse vocale xAI tels que :
| Paramètre | Description |
|---|---|
voice |
Voix à utiliser pour la génération vocale. |
language |
Code de langue, par exemple en ou auto pour la détection automatique de la langue. |
codec |
Codec audio, tel que mp3, wav, pcm, mulaw ou alaw. |
sample_rate |
Fréquence d'échantillonnage. |
bit_rate |
débit MP3. S'applique à la sortie MP3. |
optimize_streaming_latency |
Optimise le délai d'accès à la première lecture lorsqu'elle 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. Envoyer text.done pour indiquer la fin de l'énoncé courant.
Le service retourne :
| Événement | Description |
|---|---|
audio.delta |
Bloc audio encodé en Base64. |
audio.done |
La génération audio de l'énoncé courant 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 le service de diffusion en continu WebSocket, utilisez les paramètres de diffusion en continu du texte à la parole xAI avec le point d'extrémité WebSocket pour OCI.
Utilisation du paramètre
Les paramètres que vous utilisez dépendent de l'option d'accès.
Pour l'API de reconnaissance de la parole audio compatible OCI OpenAI, utilisez le format de demande de parole audio compatible OpenAI. Réglez model à 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 WebSocket, utilisez les paramètres de diffusion de texte à parole xAI. Configurez la voix, le langage, le codec, le taux d'échantillonnage et le débit binaire en tant que paramètres d'interrogation WebSocket. Envoyez du texte avec des messages text.delta et terminez chaque énoncé avec text.done.
Formats de sortie
Text to Speech prend en charge les formats audio courants pour différents cas d'utilisation.
| Format | Cas d'utilisation |
|---|---|
mp3 |
Utilisation générale et compatibilité étendue |
wav |
Flux de travail audio et d'édition de 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 de reconnaissance de la parole audio compatible OCI OpenAI, réglez le format audio dans response_format et placez les paramètres audio xAI, tels que le taux d'échantillonnage et le débit binaire, dans extra_body.output_format. Pour la diffusion en continu de WebSocket, définissez le format audio, le taux d'échantillonnage et le débit binaire en tant que paramètres d'interrogation lors de l'ouverture de la connexion.
Le débit s'applique à la sortie MP3.
Langages
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 de langue lorsqu'il est pris en charge par la méthode d'accès.
Limites
Les limites de texte à parole dépendent de l'option d'accès.
| Limite | API de reconnaissance de la parole audio compatible avec OCI OpenAI | Diffusion WebSocket |
|---|---|---|
| Limite de caractères | Jusqu'à 15 000 caractères par demande | Jusqu'à 15 000 caractères par message text.delta |
| Contenu plus long | Fractionner le contenu en demandes plus petites et combiner la sortie audio | Fractionner le contenu en plusieurs messages text.delta ou en énoncés distincts |
| Limite de débit | 600 demandes par minute ou 10 demandes par seconde | 600 demandes par minute ou 10 demandes par seconde |
| Demandes ou sessions concurrentes | Jusqu'à 100 demandes concurrentes | Jusqu'à 50 sessions concurrentes |
| Durée de vie du permis de session | Non applicable | 600 seconde |
Pour un texte plus long, fractionnez le contenu en segments logiques, tels que des paragraphes ou des phrases. Cela permet de maintenir chaque requête ou fragment de texte dans la limite des caractères et facilite la combinaison de l'audio généré dans l'ordre.
Pour la diffusion en continu de WebSocket, envoyez du texte à l'aide de messages text.delta et envoyez text.done lorsque l'énoncé courant est terminé. Chaque message text.delta doit rester dans la limite de caractères.
Dates de version et de mise hors service OCI
Pour les dates de lancement et de mise hors service et les options de modèle de remplacement, voir : Dates de mise hors service de modèle (mode sur demande).
Liens vers la documentation externe
- Text to Speech sur xAI
- Diffusion en continu de TTS WebSocket sur xAI
- Text to Speech sur OpenAI
Exemples
Les exemples suivants montrent les deux options d'accès prises en charge. L'exemple compatible OCI OpenAI utilise le point d'extrémité compatible OCI OpenAI et le modèle xai.grok-tts. L'exemple WebSocket utilise le point d'extrémité xAI WebSocket pour OCI et les paramètres de diffusion en continu xAI.
- API de reconnaissance de la parole audio 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)
- Diffusion en continu WebSocket
-
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())