xAI Voice (Text zu Sprache)

Verwenden Sie Text to Speech in OCI Generative AI, um Text mit xAI Voice in gesprochenes Audio zu konvertieren.

Sie können Text auf zwei Arten in Sprache konvertieren:

  • OCI OpenAI-kompatible Audio Speech API für die anforderungsbasierte Spracherzeugung.
  • WebSocket-Streaming für das Streaming von Texteingabe und Audioausgabe.

Verwenden Sie die API-Option, um Text weiterzuleiten und eine Audiodatei zu erhalten. Verwenden Sie WebSocket-Streaming, um Text inkrementell zu senden und Audio-Chunks zu empfangen, während sie generiert werden.

Unterstütztes Model

Hinweis

Das Text-to-Speech-Modell ist nur im On-Demand-Modus verfügbar.

Modell Beschreibung
xai.grok-tts Text-to-Speech-Modell zur Erzeugung von gesprochenem Audio aus Text.

Regionen für dieses Modell

Wichtig

Informationen zu unterstützten Regionen, Endpunkttypen (On-Demand- oder dedizierte KI-Cluster) und Hosting (OCI Generative AI oder externe Aufrufe) für dieses Modell finden Sie auf der Seite Modelle nach Region. Details zu den Regionen finden Sie auf der Seite Regionen für generative KI.

Stimmen

Folgende Stimmen stehen zur Verfügung. Bei Sprachnamen wird die Groß-/Kleinschreibung nicht beachtet. Beispiel: ara, Ara und ARA werden akzeptiert.

Sprache Beschreibung
ara Warm und gesprächig
eve Energetisch und fröhlich
leo Autoritativ und stark
rex Klar und professionell
sal Glatt und ausgewogen

Barrierefreiheitsoptionen

Sie können Text mit der OCI OpenAI-kompatiblen Audio Speech API oder dem WebSocket-Streaming in Sprache konvertieren.

Access-Option Endpunkt Parameterstil Verwenden wenn
OCI OpenAI-kompatible Audio Speech-API https://inference.generativeai.{region}.oci.oraclecloud.com/openai/v1 OpenAI-kompatibles Audio-Sprachanforderungsformat, mit xAI-spezifischen Optionen in extra_body Sie möchten Text einreichen und eine Audiodatei in einer einzigen Anfrage erhalten.
WebSocket-Streaming wss://inference.generativeai.{region}.oci.oraclecloud.com/xai/v1/tts xAI-Streamingparameter für Text-zu-Sprache Sie möchten Texteingaben streamen und Audio-Chunks empfangen, während sie generiert werden.

Die OCI OpenAI-kompatible Audio Speech API unterstützt kein Echtzeit-Streaming. Verwenden Sie für das Streaming von Text-zu-Sprache den WebSocket-Endpunkt.

OCI OpenAI-kompatible Audio Speech-API

Verwenden Sie die OCI OpenAI-kompatible Audio Speech API, um Audio aus einer einzigen Anforderung zu generieren.

OCI OpenAI-kompatibler Endpunkt
https://inference.generativeai.{region}.oci.oraclecloud.com/openai/v1

Rufen Sie in der Anforderung das Modell xai.grok-tts an, und verwenden Sie eine der in diesem Thema aufgeführten Grok Voice-Stimmen. Verwenden Sie keine OpenAI-Text-zu-Sprache-Modellnamen oder OpenAI-Sprachnamen.

Geben Sie die folgenden Werte in der standardmäßigen OpenAI-kompatiblen Audio-Sprachanforderung an:

  • model: xai.grok-tts
  • input: Text für die Konvertierung in Sprache
  • voice: Eine der unterstützten Grok Voice-Stimmen, wie ara, eve, leo, rex oder sal
  • response_format: Audioantwortformat, wie mp3

Setzen Sie xAI-spezifische Optionen, wie language und output_format, in extra_body.

Beispiel: Verwenden Sie extra_body für Einstellungen wie:

  • language
  • output_format.sample_rate
  • output_format.bit_rate
Hinweis

Verwenden Sie bei Verwendung der OCI OpenAI-kompatiblen Audio Speech-API die OpenAI-kompatible Anforderungsstruktur mit dem OCI-Endpunkt, verwenden Sie jedoch das xai.grok-tts-Modell und unterstützte xAI-Stimmen. Verwenden Sie keine OpenAI-Stimmen, OpenAI TTS-Modellnamen oder benutzerdefinierten OpenAI-Sprachobjekte.

WebSocket-Streaming

Verwenden Sie WebSocket-Streaming für Echtzeit- oder interaktive Text-zu-Sprache-Workflows. Mit dieser Option senden Sie Text als Nachrichten an den Dienst und empfangen Audio als base64-codierte Audio-Chunks.

OCI WebSocket-Endpunkt:
wss://inference.generativeai.{region}.oci.oraclecloud.com/xai/v1/tts

Verwenden Sie den xAI-Endpunkt nicht direkt.

Richten Sie die WebSocket-Verbindung mit xAI-Abfrageparametern für Text-zu-Sprache ein, wie:

Parameter Beschreibung
voice Sprache für die Sprachgenerierung.
language Sprachcode, wie en oder auto, für die automatische Spracherkennung.
codec Audio-Codec, wie mp3, wav, pcm, mulaw oder alaw.
sample_rate Audiosamplerate.
bit_rate MP3 Bitrate. Gilt für MP3-Ausgabe.
optimize_streaming_latency Optimiert für kürzere Time-to-First-Audio, wenn aktiviert.
text_normalization Normalisiert geschriebenen Text in gesprochener Form, wenn aktiviert.

Nachdem Sie die WebSocket-Verbindung geöffnet haben, senden Sie Text mit text.delta-Nachrichten. Senden Sie text.done, um das Ende der aktuellen Äußerung anzugeben.

Der Service gibt Folgendes zurück:

Ereignis Beschreibung
audio.delta Base64-codierter Audio-Chunk.
audio.done Die Audiogenerierung für die aktuelle Äußerung ist abgeschlossen.
error Fehlermeldung vom Service.

Die WebSocket-Verbindung kann nach audio.done geöffnet bleiben, sodass Sie eine weitere text.delta- und text.done-Sequenz senden können, ohne erneut eine Verbindung herzustellen.

Hinweis

Verwenden Sie für WebSocket-Streaming xAI-Streamingparameter für Text-zu-Sprache mit dem OCI WebSocket-Endpunkt.

Parameterverwendung

Welche Parameter Sie verwenden, hängt von der Zugriffsoption ab.

Verwenden Sie für die OCI OpenAI-kompatible Audio Speech API das OpenAI-kompatible Audio-Sprachanforderungsformat. Setzen Sie model auf xai.grok-tts, verwenden Sie eine unterstützte xAI-Sprache, und legen Sie xAI-spezifische Einstellungen in extra_body ab.

Verwenden Sie für WebSocket-Streaming xAI-Streamingparameter für Text-zu-Sprache. Konfigurieren Sie Sprach-, Sprach-, Codec-, Beispiel- und Bitrate als WebSocket-Abfrageparameter. Senden Sie Text mit text.delta-Nachrichten, und beenden Sie jede Äußerung mit text.done.

Ausgabeformate

Text to Speech unterstützt gängige Audioformate für verschiedene Anwendungsfälle.

Format Anwendungsfall
mp3 Allgemeine Verwendung und breite Kompatibilität
wav Audio- und Bearbeitungsworkflows mit höherer Genauigkeit
pcm Raw-Audio für Echtzeitverarbeitung
mulaw Telefonie-Workflows
alaw Telefonie-Workflows
Hinweis

Legen Sie für die OCI OpenAI-kompatible Audio Speech API das Audioformat in response_format fest, und legen Sie xAI-Audioeinstellungen, wie Abtastrate und Bitrate, in extra_body.output_format fest. Legen Sie für WebSocket-Streaming das Audioformat, die Abtastrate und die Bitrate beim Öffnen der Verbindung als Abfrageparameter fest.

Hinweis

Die Bitrate gilt für den MP3-Ausgang.

Sprachen

Text to Speech unterstützt viele Sprachen. Verwenden Sie einen unterstützten Sprachcode, wie en, oder verwenden Sie auto zur automatischen Spracherkennung, wenn dies von der Zugriffsmethode unterstützt wird.

Limits

Die Beschränkung von Text zu Sprache hängt von der Zugriffsoption ab.

Limit OCI OpenAI-kompatible Audio Speech-API WebSocket-Streaming
Zeichengrenzwert Bis zu 15.000 Zeichen pro Anforderung Bis zu 15.000 Zeichen pro text.delta-Nachricht
Längere Inhalte Inhalt in kleinere Anforderungen aufteilen und Audioausgabe kombinieren Inhalt in mehrere text.delta-Nachrichten oder separate Äußerungen aufteilen
Ratenbegrenzung 600 Anforderungen pro Minute oder 10 Anforderungen pro Sekunde 600 Anforderungen pro Minute oder 10 Anforderungen pro Sekunde
Hintergrundprozesse oder Sessions Bis zu 100 Hintergrundprozesse Bis zu 50 nebenläufige Sessions
Sessiongenehmigung TTL Nicht anwendbar 600 Sekunden

Teilen Sie den Inhalt bei längerem Text in logische Segmente wie Absätze oder Sätze auf. Dies hilft, jede Anfrage oder jeden Text-Chunk innerhalb der Zeichengrenze zu halten und erleichtert das Kombinieren der generierten Audiodaten in der richtigen Reihenfolge.

Senden Sie für WebSocket-Streaming Text mit text.delta-Nachrichten, und senden Sie text.done, wenn die aktuelle Äußerung abgeschlossen ist. Jede text.delta-Nachricht muss innerhalb der Zeichenbegrenzung bleiben.

Beispiele

Die folgenden Beispiele zeigen die beiden unterstützten Zugriffsoptionen. Das OCI OpenAI-kompatible Beispiel verwendet den OCI OpenAI-kompatiblen Endpunkt und das xai.grok-tts-Modell. Im WebSocket-Beispiel werden der OCI xAI WebSocket-Endpunkt und die xAI-Streamingparameter verwendet.

OCI OpenAI-kompatible Audio Speech-API
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)
WebSocket-Streaming
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())