xAIはGrok 4.3のリリースに合わせてGrok Voiceを公開しました。開発者にとって重要なのは、xAI Consoleから音声機能を無料で試せる点です。TTS、STT、リアルタイムボイスエージェント、カスタムボイスクローンを使えます。課金対象になるのは、エージェントが推論時に消費するGrok 4.3の基盤トークンです。このガイドでは、APIキー取得、音声選択、WebSocket接続、TTS呼び出し、そしてApidogでの検証手順までを実装ベースで説明します。補足として、Grok 4.3 APIガイドとGroK Voice対GPT-Realtimeも参照できます。
要約
- Grok VoiceはxAI Console(
console.x.ai)から無料で利用できます。TTS、STT、ボイスエージェント、カスタムボイスに対して、1分あたりまたはトークンあたりの音声課金はありません。 - フラッグシップモデルは
grok-voice-think-fast-1.0です。最初の音声までの時間は1秒未満で、xAIは最も近い競合製品より約5倍高速と説明しています。 - 28言語で80以上のプリセット音声を利用できます。ボイスエージェント向けにはEve、Ara、Rex、Sal、Leoの5つの組み込みペルソナがあります。
- 約1分間の音声からカスタム音声をクローンできます。2分未満で利用可能な
voice_idが返されます。 - WebSocketエンドポイントは次のとおりです。
wss://api.x.ai/v1/realtime?model=grok-voice-think-fast-1.0
- TTS、STT、カスタムボイスは同じAPIサーフェスで扱えます。
- WebSocketセッションの再生、比較、デバッグにはApidogを使うと効率的です。
Grok Voiceが無料で提供するもの
xAI ConsoleでAPIキーを発行すると、音声機能を追加料金なしで試せます。まずconsole.x.aiにサインインし、キーを作成します。
利用できる主な機能は次の4つです。
- ボイスエージェント:リアルタイムの音声対話。ツール利用、サーバーサイド音声活動検出、ターンテーキングを扱えます。
- テキスト読み上げ(TTS):28言語、80以上のプリセット音声。MP3または電話向けμ-lawで出力できます。
- 音声認識(STT):25入力言語のストリーミングおよびバッチ転写。単語レベルのタイムスタンプと話者分離を利用できます。
-
カスタムボイス:短い音声サンプルから声をクローンし、返された
voice_idをTTSとボイスエージェントで再利用できます。
注意点は、ボイスエージェントが推論にGrok 4.3を使う場合、その基盤トークン使用量はコンソールクレジットの対象になることです。プロトタイプ検証には無料クレジットを使えますが、本番利用ではプラン確認が必要です。
ステップ1:コンソールキーを取得する
console.x.aiにアクセスし、Xアカウントでサインインします。API Keysページから、voiceとchatスコープを有効にしたキーを作成します。
ローカル開発では環境変数に設定します。
export XAI_API_KEY="xai-..."
ブラウザアプリやモバイルアプリなど、クライアントに親キーを置けない場合は、サーバー側で一時トークンを発行します。コンソール設定または/v1/realtime/sessionsエンドポイントを使い、短命なトークンをクライアントに渡します。
実装方針は次のとおりです。
- サーバーで
XAI_API_KEYを保持する。 - クライアントがセッション開始を要求する。
- サーバーが一時トークンを発行する。
- クライアントは一時トークンでWebSocketに接続する。
- 親キーはサーバー外へ出さない。
ステップ2:音声を選択する
Grok Voiceでは、プリセット音声またはカスタム音声を使います。
プリセット音声を使う
ボイスエージェントには5つの名前付きペルソナがあります。
- Eve:女性、エネルギッシュ。明るいサポートフロー向け。
- Ara:女性、温かい。一般的なアシスタント向け。
- Rex:男性、自信がある。セールススクリプト向け。
- Sal:ニュートラル、滑らか。ナレーションや長文読み上げ向け。
- Leo:男性、権威的。コンプライアンスやフォーマルな案内向け。
TTS APIでは、より大きなプリセットライブラリを使えます。28言語、80以上の音声をvoiceパラメーターで指定します。
カスタムボイスを作成する
単一話者による約1分間のきれいなWAVファイルを用意します。ノイズ、BGM、複数話者は避けます。
curl https://api.x.ai/v1/custom-voices \
-H "Authorization: Bearer $XAI_API_KEY" \
-F "name=narrator-jane" \
-F "language=en" \
-F "audio=@sample.wav"
成功するとvoice_idが返ります。このIDはTTSとボイスエージェントの両方で使えます。
参照クリップの最大長は120秒ですが、長さよりも品質が重要です。静かな部屋で、一定の音量、単一話者、ワンテイクで録音してください。
ステップ3:WebSocket経由でGrokに話させる
ボイスエージェントはWebSocketセッションとして動作します。接続後にセッション設定を送り、入力音声を追加し、サーバーから返る音声イベントを処理します。
最小構成のNode.jsクライアントは次のようになります。
import WebSocket from "ws";
const ws = new WebSocket(
"wss://api.x.ai/v1/realtime?model=grok-voice-think-fast-1.0",
{
headers: {
Authorization: `Bearer ${process.env.XAI_API_KEY}`,
},
}
);
ws.on("open", () => {
ws.send(JSON.stringify({
type: "session.update",
session: {
voice: "ara",
instructions: "You are a friendly support agent. Keep replies under two sentences.",
input_audio_format: "pcm16",
output_audio_format: "pcm16",
turn_detection: {
type: "server_vad",
},
},
}));
});
ws.on("message", (raw) => {
const event = JSON.parse(raw.toString());
if (event.type === "response.audio.delta") {
process.stdout.write(Buffer.from(event.delta, "base64"));
}
if (event.type === "response.audio.done") {
console.error("response completed");
}
});
ユーザー音声は、base64エンコードしたPCM16フレームをinput_audio_buffer.appendイベントで送信します。
概念的には次の流れです。
ws.send(JSON.stringify({
type: "input_audio_buffer.append",
audio: base64Pcm16Chunk,
}));
サーバーは主に次のイベントを返します。
-
response.audio.delta:音声チャンク -
response.audio.done:音声応答の完了 -
response.function_call_arguments.done:ツール呼び出し引数の確定 -
error:エラー
ブラウザやデスクトップアプリでは24 kHz PCM16をデフォルトにすると扱いやすいです。電話システムにブリッジする場合はμ-lawを検討します。
ステップ4:ツール使用を追加する
ボイスエージェントは関数呼び出しをサポートしています。これにより、会話中に注文検索、予約確認、ユーザー情報取得などの社内APIを呼び出せます。
セッション設定でツールを宣言します。
ws.send(JSON.stringify({
type: "session.update",
session: {
tools: [
{
type: "function",
name: "lookup_order",
description: "Look up the status of a customer order by order number.",
parameters: {
type: "object",
properties: {
order_id: {
type: "string",
},
},
required: ["order_id"],
},
},
],
},
}));
モデルがツールを呼び出す場合、response.function_call_arguments.doneイベントを発行します。アプリ側では次の処理を行います。
- イベントから関数名と引数を取り出す。
- 自分のAPIまたはDBを呼び出す。
- 結果を
conversation.item.createで返す。 - モデルが会話を再開し、音声で回答する。
ツール結果を返す例です。
ws.send(JSON.stringify({
type: "conversation.item.create",
item: {
type: "function_call_output",
call_id: event.call_id,
output: JSON.stringify({
status: "shipped",
eta: "Friday",
}),
},
}));
組み込みのweb_searchツールも利用できます。独自の検索レイヤーを実装せずに、新しい情報を使って回答を補強したい場合に有効です。
ステップ5:エージェントなしでTTSを使用する
会話エージェントが不要で、アプリ内アナウンス、音声プロンプト、ポッドキャストイントロなどの読み上げだけが必要な場合は、RESTのTTSエンドポイントを使います。
curl https://api.x.ai/v1/tts \
-H "Authorization: Bearer $XAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-tts-1",
"voice": "ara",
"input": "Welcome back to your account. Your last login was Tuesday at 3pm.",
"format": "mp3"
}' \
--output greeting.mp3
出力フォーマットは次のように使い分けます。
-
mp3:アプリ、Web、ナレーション向け -
mulaw:8 kHz、電話回線向け
TTSエンドポイントは同期式です。WebSocketセッションを作成する必要はなく、レスポンスとして音声バイトが返ります。
ステップ6:Apidogで全フローをテストする
WebSocket APIはステートフルなため、ターミナルだけで検証するとイベントの追跡が難しくなります。Apidogを使うと、WebSocketメッセージを保存、再生、比較できます。
検証手順は次のとおりです。
- 新しいWebSocketリクエストを作成する。
- URLに次を設定する。
wss://api.x.ai/v1/realtime?model=grok-voice-think-fast-1.0
- 環境変数に
XAI_API_KEYを保存する。 - Authorizationヘッダーを設定する。
Authorization: Bearer {{XAI_API_KEY}}
- 送信メッセージとして
session.updateを保存する。 - フィクスチャ音声を
input_audio_buffer.appendとして送る。 -
response.createを送信して応答を開始する。 - 返ってくるイベントをツリーで確認する。
- 音声、プロンプト、ツール定義を変えて再実行し、結果を比較する。
Apidogをダウンロードすれば、TTSとSTTのRESTリクエストも同じプロジェクトで管理できます。ステートフルAPIのテスト設計については、QAエンジニア向けのAPIテストツールも参考になります。
無料枠の制限
xAI Consoleでは音声機能自体に1分あたりまたはトークンあたりの料金はありません。ただし、開発時に意識すべき制限があります。
- レート制限:悪用防止のため、各エンドポイントには1分あたりのリクエスト上限があります。開発やデモには十分ですが、本番負荷テストでは上限に注意してください。
- カスタム音声クォータ:1アカウントが保持できるカスタム音声クローン数には上限があります。不要な音声を削除してスロットを空けられます。
- 推論トークン:ボイスエージェントがGrok 4.3で推論する場合、コンソールクレジットの対象になります。無料クレジットはプロトタイプ向けであり、本番では有料プランの確認が必要です。
レート制限に当たる場合は、リクエストのバッチ化、リトライ間隔の調整、有料ティアへの移行を検討します。APIの呼び出し形式は変わらず、主に上限が変わります。
音声を比較する
本番投入前に、同じテキストを複数の音声で読み上げて比較します。音声ごとにトーンの解釈が異なるため、短いテストセットを用意するとミスマッチを早く見つけられます。
最低限、次の3種類を試してください。
- 2文の挨拶
- 確認フレーズ(例:「承知いたしました、すべて設定済みです」)
- 数字、日付、コンマを含む長い文
さらに、同じプロンプトを次の3つの指示で読み上げると、イントネーションの差を確認できます。
- 落ち着いて
- 通常
- 緊急
Grokのプリセット音声は、ベンチマークした多くのTTSエンジンよりもこの変化を扱いやすいですが、本番前には必ずユースケースごとに聴取テストを行ってください。
FAQ
APIは本当に無料ですか?隠れた上限はありますか?
音声機能(TTS、STT、ボイスエージェント、カスタムボイス)には、コンソール上で1分あたりまたはトークンあたりの音声課金はありません。ただし、ボイスエージェントが使う基盤推論モデルはコンソールクレジットの対象です。無料クレジットはプロトタイピングには十分ですが、本番利用ではプラン確認が必要です。
X(Twitter)アカウントは必要ですか?
はい。xAI ConsoleへのサインインにはXアカウントを使用します。
ブラウザからGrok Voiceを使用できますか?
はい。一時トークンを使えば可能です。サーバー側で/v1/realtime/sessionsから短命なトークンを発行し、そのトークンをブラウザに渡してWebSocket接続します。親APIキーはサーバー外に出しません。
どのような音質を期待できますか?
TTS出力は高音質MP3または8 kHz μ-lawです。ボイスエージェントは内部で24 kHz PCM16を使用します。音質は主要な商用TTSエンジンと同等であり、レイテンシーが大きな差別化要因です。
電話回線で動作しますか?
はい。μ-law出力はSIPおよびPSTNブリッジで一般的なフォーマットです。ただし、SIPプロバイダーは別途必要です。xAIは現在、独自のSIPゲートウェイを提供していません。
他のツールと比較してクローン品質はどうですか?
クローン品質は、音声の長さより参照オーディオの品質に強く依存します。静かな部屋で録音したきれいな60秒のサンプルは、ノイズの多い120秒のサンプルより良い結果になりやすいです。生成されたvoice_idは、再クローンなしでTTSとボイスエージェントの両方に使えます。
Grok VoiceをゲームのAIキャラクターに使用できますか?
はい。TTSエンドポイントはランタイム生成に使えます。カスタムボイスを使えば、キャラクターごとに異なる声を持たせられます。長いセリフではレイテンシーに注意し、必要に応じてテキストをチャンク化して生成します。
まとめ
Grok Voiceは、リアルタイムボイスエージェントを試すための実装しやすい選択肢です。xAI Consoleでは音声機能自体に1分あたりの料金がなく、プリセット音声、TTS、STT、カスタムボイス、WebSocketベースの会話セッションを一通り検証できます。
最短の検証手順は次のとおりです。
- xAI ConsoleでAPIキーを作る。
-
grok-voice-think-fast-1.0にWebSocket接続する。 -
session.updateで音声と指示を設定する。 - サンプル音声を送って応答イベントを確認する。
- Apidogでセッションを保存し、音声やプロンプトを変えて比較する。
Grok 4.3の推論APIと組み合わせる場合は、Grok 4.3 APIガイドを参照してください。OpenAIのスタックと比較したい場合は、Grok Voice vs GPT-Realtimeが参考になります。


Top comments (0)