xAI Voice (Texto al discurso)
Utiliza Texto a voz en OCI Generative AI para convertir texto en audio hablado con xAI Voice.
Puede convertir texto a voz de dos formas:
- API de voz de audio compatible con OCI OpenAI para la generación de voz basada en solicitudes.
- Transmisión de WebSocket para transmisión de entrada de texto y salida de audio.
Utilice la opción API para enviar texto y recibir un archivo de audio. Utilice la transmisión de WebSocket para enviar texto de forma incremental y recibir fragmentos de audio a medida que se generan.
Modelo admitido
El modelo de texto a voz solo está disponible en el modo bajo demanda.
| Modelo | Descripción |
|---|---|
xai.grok-tts |
Modelo de texto a voz para generar audio hablado a partir de texto. |
Regiones para este modelo
Para las regiones soportadas, los tipos de punto final (clusters de IA dedicados o bajo demanda) y el alojamiento (OCI Generative AI o llamadas externas) para este modelo, consulte la página Modelos por región. Para obtener más información sobre las regiones, consulte la página Regiones de IA generativa.
Voces
Las siguientes voces están disponibles. Los nombre de voz no distinguen entre mayúsculas y minúsculas. Por ejemplo, se aceptan ara, Ara y ARA.
| Voz | Descripción |
|---|---|
ara |
Cálido y conversacional |
eve |
Enérgico y optimista |
leo |
Autorizado y fuerte |
rex |
Claro y profesional |
sal |
Suave y equilibrado |
Opciones de acceso
Puede convertir texto a voz mediante la API de voz de audio compatible con OCI OpenAI o la transmisión de WebSocket.
| Opción de acceso | Punto final | Estilo de parámetro | Utilizar cuando |
|---|---|---|---|
| API de voz de audio compatible con OpenAI de OCI | https://inference.generativeai.{region}.oci.oraclecloud.com/openai/v1 |
Formato de solicitud de voz de audio compatible con OpenAI, con opciones específicas de xAI en extra_body |
Desea enviar texto y recibir un archivo de audio en una sola solicitud. |
| Transmisión de WebSocket | wss://inference.generativeai.{region}.oci.oraclecloud.com/xai/v1/tts |
Parámetros de transmisión de texto a voz xAI | Desea transmitir la entrada de texto y recibir fragmentos de audio a medida que se generan. |
La API de voz de audio compatible con OpenAI de OCI no admite la transmisión en tiempo real. Para transmitir texto a voz, utilice el punto final de WebSocket.
API de voz de audio compatible con OpenAI de OCI
Utiliza la API de voz de audio compatible con OpenAI de OCI para generar audio a partir de una sola solicitud.
- Punto final compatible con OpenAI de OCI
-
https://inference.generativeai.{region}.oci.oraclecloud.com/openai/v1
En la solicitud, llame al modelo xai.grok-tts y utilice una de las voces de Grok Voice que se muestran en este tema. No utilice nombres de modelo de texto a voz de OpenAI ni nombres de voz de OpenAI.
Especifique estos valores en la solicitud de voz de audio compatible con OpenAI estándar:
model:xai.grok-ttsinput: texto para convertir a vozvoice: una de las voces de voz Grok compatibles, comoara,eve,leo,rexosalresponse_format: formato de respuesta de audio, comomp3
Ponga las opciones específicas de xAI, como language y output_format, en extra_body.
Por ejemplo, utilice extra_body para valores como:
languageoutput_format.sample_rateoutput_format.bit_rate
Al utilizar la API de voz de audio compatible con OpenAI de OCI, utilice la estructura de solicitud compatible con OpenAI con el punto final de OCI, pero utilice el modelo xai.grok-tts y las voces xAI soportadas. No utilice voces solo de OpenAI, nombres de modelos de OpenAI TTS ni objetos de voz personalizados de OpenAI.
Transmisión de WebSocket
Utilice la transmisión de WebSocket para flujos de trabajo de texto a voz interactivos o en tiempo real. Con esta opción, se envía texto al servicio como mensajes y se recibe audio como fragmentos de audio codificados en base64.
- Punto final de OCI WebSocket:
-
wss://inference.generativeai.{region}.oci.oraclecloud.com/xai/v1/tts
No utilice el punto final de xAI directamente.
Configure la conexión de WebSocket con parámetros de consulta de texto a voz xAI, como:
| Parámetro | Descripción |
|---|---|
voice |
Voz para la generación de voz. |
language |
Código de idioma, como en o auto para la detección automática de idiomas. |
codec |
Codec de audio, como mp3, wav, pcm, mulaw o alaw. |
sample_rate |
Velocidad de muestreo de sonido. |
bit_rate |
Velocidad de bits MP3. Se aplica a la salida MP3. |
optimize_streaming_latency |
Se optimiza para reducir el tiempo hasta el primer audio cuando está activado. |
text_normalization |
Normaliza el texto escrito en forma oral cuando está activado. |
Después de abrir la conexión WebSocket, envíe texto mediante mensajes text.delta. Envíe text.done para indicar el final de la expresión actual.
El servicio devuelve:
| Evento | Descripción |
|---|---|
audio.delta |
fragmento de audio codificado en Base64. |
audio.done |
La generación de audio para la expresión actual ha finalizado. |
error |
Mensaje de error del servicio. |
La conexión WebSocket puede permanecer abierta después de audio.done, por lo que puede enviar otra secuencia text.delta y text.done sin volver a conectarse.
Para la transmisión de WebSocket, utilice parámetros de transmisión de texto a voz de xAI con el punto final de OCI WebSocket.
Uso de Parámetros
Los parámetros que utilice dependerán de la opción de acceso.
Para la API de voz de audio compatible con OpenAI de OCI, utilice el formato de solicitud de voz de audio compatible con OpenAI. Defina model en xai.grok-tts, utilice una voz xAI soportada y coloque la configuración específica de xAI en extra_body.
Para Transmisión de WebSocket, utilice los parámetros de transmisión de texto a voz de xAI. Configure la voz, el idioma, el códec, la frecuencia de muestreo y la velocidad de bits como parámetros de consulta de WebSocket. Envíe texto con mensajes text.delta y finalice cada expresión con text.done.
Formatos de Salida
Text to Speech es compatible con formatos de audio comunes para diferentes casos de uso.
| Formato | Casos prácticos |
|---|---|
mp3 |
Uso general y amplia compatibilidad |
wav |
Flujos de trabajo de edición y audio de mayor fidelidad |
pcm |
Audio sin procesar para procesamiento en tiempo real |
mulaw |
Flujos de trabajo de telefonía |
alaw |
Flujos de trabajo de telefonía |
Para la API de voz de audio compatible con OpenAI de OCI, defina el formato de audio en response_format y coloque la configuración de audio de xAI, como la velocidad de muestreo y la velocidad de bits, en extra_body.output_format. Para Transmisión de WebSocket, defina el formato de audio, la frecuencia de muestreo y la velocidad de bits como parámetros de consulta al abrir la conexión.
La velocidad de bits se aplica a la salida MP3.
Idiomas
Text to Speech es compatible con muchos idiomas. Utilice un código de idioma soportado, como en, o bien utilice auto para la detección automática de idiomas cuando esté soportado por el método de acceso.
Límites
Los límites de texto a voz dependen de la opción de acceso.
| Límite | API de voz de audio compatible con OpenAI de OCI | Transmisión de WebSocket |
|---|---|---|
| Límite de caracteres | Hasta 15 000 caracteres por solicitud | Hasta 15 000 caracteres por mensaje text.delta |
| Contenido más largo | Dividir el contenido en solicitudes más pequeñas y combinar la salida de audio | Dividir el contenido en varios mensajes text.delta o en expresiones independientes |
| Límite de frecuencia | 600 solicitudes por minuto o 10 solicitudes por segundo | 600 solicitudes por minuto o 10 solicitudes por segundo |
| Solicitudes o sesiones simultáneas | Hasta 100 solicitudes simultáneas | Hasta 50 sesiones simultáneas |
| Permiso de sesión TTL | No aplicable | 600 segundos |
Para texto más largo, divida el contenido en segmentos lógicos, como párrafos o frases. Esto ayuda a mantener cada solicitud o fragmento de texto dentro del límite de caracteres y hace que sea más fácil combinar el audio generado en orden.
Para el flujo de WebSocket, envíe texto mediante mensajes text.delta y envíe text.done cuando se complete la expresión actual. Cada mensaje text.delta debe estar dentro del límite de caracteres.
Fechas de lanzamiento y baja de OCI
Para conocer las fechas de lanzamiento y baja y las opciones del modelo de sustitución, consulte Model Retirement Dates (On-Demand Mode).
Enlaces de documentación externa
- Texto a voz en xAI
- Streaming TTS WebSocket en xAI
- Texto a voz en OpenAI
Ejemplos
Los siguientes ejemplos muestran las dos opciones de acceso admitidas. El ejemplo compatible con OCI OpenAI utiliza el punto final compatible con OCI OpenAI y el modelo xai.grok-tts. El ejemplo de WebSocket utiliza el punto final de WebSocket de OCI xAI y los parámetros de transmisión de xAI.
- API de voz de audio compatible con OpenAI de OCI
-
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)
- Transmisión de 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())