xAI Voice (da testo a voce)
Utilizza Testo per parlare in OCI Generative AI per convertire il testo in audio parlato con xAI Voice.
È possibile convertire il testo in voce in due modi:
- API Audio Speech compatibile con OCI OpenAI per la generazione di discorsi basati su richiesta.
- Socket streaming Web per l'input di testo in streaming e l'output audio.
Utilizza l'opzione API per inviare testo e ricevere un file audio. Utilizza lo streaming WebSocket per inviare testo in modo incrementale e ricevere blocchi audio man mano che vengono generati.
Modello supportato
Il modello Text to Speech è disponibile solo in modalità on-demand.
| Modello | Descrizione |
|---|---|
xai.grok-tts |
Modello di sintesi vocale per la generazione di audio parlato da testo. |
Aree per questo modello
Per le aree supportate, i tipi di endpoint (cluster AI su richiesta o dedicati) e l'hosting (AI generativa OCI o chiamate esterne) per questo modello, vedere la pagina Modelli per area. Per informazioni dettagliate sulle aree, vedere la pagina Aree AI generative.
Voci
Sono disponibili le seguenti voci. Non viene fatta distinzione tra maiuscole e minuscole nei nomi voce. Ad esempio, ara, Ara e ARA sono accettati.
| Vocale | Descrizione |
|---|---|
ara |
Caldo e colloquiale |
eve |
Energetico e ottimista |
leo |
Autoritativo e forte |
rex |
Chiaro e professionale |
sal |
Liscio ed equilibrato |
Opzioni di accesso
È possibile convertire il testo in voce utilizzando l'API Audio Speech compatibile con OCI OpenAI o lo streaming WebSocket.
| Opzione di accesso | Endpoint | Stile parametro | Usa quando |
|---|---|---|---|
| API Audio Speech compatibile con OCI OpenAI | https://inference.generativeai.{region}.oci.oraclecloud.com/openai/v1 |
Formato di richiesta vocale audio compatibile con OpenAI, con opzioni specifiche xAI in extra_body |
Si desidera inviare testo e ricevere un file audio in una singola richiesta. |
| Streaming WebSocket | wss://inference.generativeai.{region}.oci.oraclecloud.com/xai/v1/tts |
xAI parametri di streaming text-to-speech | Si desidera eseguire lo streaming dell'input di testo e ricevere i chunk audio man mano che vengono generati. |
L'API Audio Speech compatibile con OCI OpenAI non supporta lo streaming in tempo reale. Per lo streaming di sintesi vocale, utilizzare l'endpoint WebSocket.
API vocale audio compatibile con OCI OpenAI
Utilizza l'API Audio Speech compatibile con OCI OpenAI per generare audio da una singola richiesta.
- Endpoint compatibile con OCI OpenAI
-
https://inference.generativeai.{region}.oci.oraclecloud.com/openai/v1
Nella richiesta, chiamare il modello xai.grok-tts e utilizzare una delle voci Grok Voice elencate in questo argomento. Non utilizzare nomi di modello text-to-speech OpenAI o nomi vocali OpenAI.
Specificare questi valori nella richiesta audio speech standard compatibile con OpenAI:
model:xai.grok-ttsinput: testo da convertire in sintesi vocalevoice: una delle voci Grok Voice supportate, ad esempioara,eve,leo,rexosalresponse_format: formato di risposta audio, ad esempiomp3
Posizionare le opzioni specifiche di xAI, come language e output_format, in extra_body.
Ad esempio, utilizzare extra_body per impostazioni quali:
languageoutput_format.sample_rateoutput_format.bit_rate
Quando si utilizza l'API Audio Speech compatibile con OCI OpenAI, utilizzare la struttura di richieste compatibile con OpenAI con l'endpoint OCI, ma utilizzare il modello xai.grok-tts e le voci xAI supportate. Non utilizzare voci solo OpenAI, nomi di modelli OpenAI TTS o oggetti vocali personalizzati OpenAI.
Streaming WebSocket
Utilizza lo streaming WebSocket per flussi di lavoro text-to-speech in tempo reale o interattivi. Con questa opzione, invii testo al servizio come messaggi e ricevi audio come chunk audio con codifica base64.
- Endpoint WebSocket OCI:
-
wss://inference.generativeai.{region}.oci.oraclecloud.com/xai/v1/tts
Non utilizzare direttamente l'endpoint xAI.
Impostare la connessione WebSocket con i parametri di query xAI text-to-speech, ad esempio:
| Parametro | Descrizione |
|---|---|
voice |
Voce da utilizzare per la generazione vocale. |
language |
Codice lingua, ad esempio en o auto per il rilevamento automatico della lingua. |
codec |
Codec audio, ad esempio mp3, wav, pcm, mulaw o alaw. |
sample_rate |
Frequenza di campionatura audio. |
bit_rate |
MP3 bit rate. Si applica all'output MP3. |
optimize_streaming_latency |
Ottimizza per ridurre il time-to-first-audio quando abilitato. |
text_normalization |
Normalizza il testo scritto in forma parlata quando è abilitato. |
Dopo aver aperto la connessione WebSocket, inviare il testo utilizzando i messaggi text.delta. Inviare text.done per indicare la fine dell'espressione corrente.
Il servizio restituisce:
| Evento | Descrizione |
|---|---|
audio.delta |
Chunk audio con codifica Base64. |
audio.done |
La generazione audio per l'espressione corrente è completa. |
error |
Messaggio di errore del servizio. |
La connessione WebSocket può rimanere aperta dopo audio.done, quindi è possibile inviare un'altra sequenza text.delta e text.done senza riconnettersi.
Per lo streaming WebSocket, utilizzare i parametri di streaming text-to-speech xAI con l'endpoint OCI WebSocket.
Uso parametro
I parametri utilizzati dipendono dall'opzione di accesso.
Per l'API Audio Speech di OCI OpenAI, utilizza il formato di richiesta audio speech compatibile con OpenAI. Impostare model su xai.grok-tts, utilizzare una voce xAI supportata e inserire le impostazioni specifiche di xAI in extra_body.
Per lo streaming WebSocket, utilizzare i parametri di streaming text-to-speech xAI. Configura voce, lingua, codec, frequenza di esempio e bit rate come parametri di query WebSocket. Invia il testo con i messaggi text.delta e termina ogni enunciato con text.done.
Formati output
Text to Speech supporta formati audio comuni per diversi casi d'uso.
| Formato | Caso d'uso |
|---|---|
mp3 |
Uso generale e ampia compatibilità |
wav |
Flussi di lavoro audio e di modifica ad alta fedeltà |
pcm |
Audio raw per l'elaborazione in tempo reale |
mulaw |
Flussi di lavoro telefonia |
alaw |
Flussi di lavoro telefonia |
Per l'API Audio Speech compatibile con OCI OpenAI, impostare il formato audio in response_format e inserire le impostazioni audio xAI, come la frequenza di campionamento e la bit rate, in extra_body.output_format. Per lo streaming WebSocket, impostare il formato audio, la frequenza di campionamento e la velocità bit come parametri di query durante l'apertura della connessione.
Il bit rate si applica all'output MP3.
Lingue
Text to Speech supporta molte lingue. Utilizzare un codice lingua supportato, ad esempio en, oppure utilizzare auto per il rilevamento automatico della lingua se supportato dal metodo di accesso.
Limiti
I limiti da testo a voce dipendono dall'opzione di accesso.
| Limitato | API Audio Speech compatibile con OCI OpenAI | Streaming WebSocket |
|---|---|---|
| Limite di caratteri | Fino a 15.000 caratteri per richiesta | Fino a 15.000 caratteri per ogni messaggio text.delta |
| Contenuto più lungo | Dividere il contenuto in richieste più piccole e combinare l'uscita audio | Dividi il contenuto in più messaggi text.delta o espressioni separate |
| Limite di frequenza | 600 richieste al minuto o 10 richieste al secondo | 600 richieste al minuto o 10 richieste al secondo |
| Richieste o sessioni concorrenti | Fino a 100 richieste concorrenti | Fino a 50 sessioni simultanee |
| TTL permesso sessione | Non applicabile | 600 secondi |
Per testo più lungo, suddividere il contenuto in segmenti logici, ad esempio paragrafi o frasi. Questo aiuta a mantenere ogni richiesta o blocco di testo entro il limite di caratteri e rende più facile combinare l'audio generato in ordine.
Per lo streaming WebSocket, inviare il testo utilizzando i messaggi text.delta e inviare text.done quando l'espressione corrente è completa. Ogni messaggio text.delta deve rimanere entro il limite di caratteri.
Date di rilascio e ritiro OCI
Per le date di rilascio e smobilizzo e le opzioni del modello di sostituzione, vedere Date di smobilizzo del modello (modalità su richiesta).
Collegamenti documentazione esterna
- Testo per la sintesi vocale su xAI
- Streaming di TTS WebSocket su xAI
- Dal testo al parlato su OpenAI
Esempi
Gli esempi seguenti mostrano le due opzioni di accesso supportate. L'esempio compatibile con OCI OpenAI utilizza l'endpoint compatibile con OCI OpenAI e il modello xai.grok-tts. L'esempio WebSocket utilizza l'endpoint xAI WebSocket OCI e i parametri di streaming xAI.
- API Audio Speech compatibile con 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 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())