すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Model Studio:リアルタイム音声・動画翻訳 - Qwen

最終更新日:Mar 25, 2026

qwen3-livetranslate-flash-realtime は、18 の言語間でリアルタイムに翻訳を行う視覚拡張モデルです。リアルタイムのビデオストリームまたはローカルのビデオファイルから音声と画像の両方の入力を処理し、視覚的なコンテキストを使用して精度を向上させ、高品質の翻訳テキストと音声を出力します。

オンラインデモについては、「Function Compute を使用したワンクリックデプロイ」をお試しください。

特徴

  • 多言語サポート:中国語、英語、フランス語、ドイツ語、ロシア語、日本語、韓国語、および標準語、広東語、四川語を含む 18 の言語と 6 つの中国語方言をサポートします。

  • 視覚拡張:視覚的なコンテキストを使用して翻訳精度を向上させます。このモデルは、唇の動き、ジェスチャー、画面上のテキストなどの視覚的な手がかりを分析し、ノイズの多い環境や複数の意味を持つ単語に対して、より正確な翻訳を生成します。

  • 3 秒の遅延:わずか 3 秒で同時通訳を実現します。

  • 無損失同時通訳:意味単位予測を使用して言語間の語順の違いを解決し、オフライン翻訳に匹敵するリアルタイムの翻訳品質を提供します。

  • 自然な音声:ソース音声に合わせてイントネーションと感情を自動的に調整し、人間のような自然な音声を生成します。

  • ホットワード設定:特定の用語の翻訳精度を向上させるためのホットワード設定を提供します。

操作手順

1. 接続の構成

qwen3-livetranslate-flash-realtime モデルは WebSocket プロトコルを使用して接続します。接続を確立するには、次のものが必要です。

パラメーター

説明

エンドポイント

中国本土:wss://dashscope.aliyuncs.com/api-ws/v1/realtime

国際:wss://dashscope-intl.aliyuncs.com/api-ws/v1/realtime

クエリパラメーター

クエリパラメーターは model です。これをアクセスしたいモデルの名前に設定します。例:?model=qwen3-livetranslate-flash-realtime

メッセージヘッダー

認証にはベアラートークンを使用します:Authorization: Bearer DASHSCOPE_API_KEY

DASHSCOPE_API_KEY は、Model Studio から取得する API キーです。

次の Python サンプルは、接続を確立する方法を示しています。

WebSocket 接続の Python サンプルコード

# pip install websocket-client
import json
import websocket
import os

API_KEY=os.getenv("DASHSCOPE_API_KEY")
API_URL = "wss://dashscope-intl.aliyuncs.com/api-ws/v1/realtime?model=qwen3-livetranslate-flash-realtime"

headers = [
    "Authorization: Bearer " + API_KEY
]

def on_open(ws):
    print(f"Connected to server: {API_URL}")
def on_message(ws, message):
    data = json.loads(message)
    print("Received event:", json.dumps(data, indent=2))
def on_error(ws, error):
    print("Error:", error)

ws = websocket.WebSocketApp(
    API_URL,
    header=headers,
    on_open=on_open,
    on_message=on_message,
    on_error=on_error
)

ws.run_forever()

2. 言語、出力モダリティ、音声の構成

session.update クライアントイベントを送信します。

  • 言語

    • 入力言語: session.input_audio_transcription.language パラメーターを使用します。

      デフォルト値は en (英語)です。
    • 翻訳先の言語: session.translation.language パラメーターを使用します。

      デフォルト値は en (英語) です。

    サポートされている値については、「サポートされている言語」をご参照ください。

  • ソース言語認識結果の出力

    この機能を設定するには、session.input_audio_transcription.model パラメーターを使用します。qwen3-asr-flash-realtime にパラメーターを設定すると、サーバーは入力音声の音声認識結果(ソース言語の原文)を翻訳と一緒に返します。

    この機能が有効になると、サーバーは次のイベントを返します。

    • conversation.item.input_audio_transcription.text: 音声認識結果をストリーミングします。

    • conversation.item.input_audio_transcription.completed:音声認識が完了したときに最終結果を返します。

  • 出力モダリティ

    session.modalities パラメーターを ["text"](テキストのみ)または ["text","audio"](テキストと音声)に設定します。

  • 音声

    これは session.voice パラメーターで設定します。詳細については、「サポートされている音声」をご参照ください。

  • ホットワード

    session.translation.corpus.phrases」パラメーターを使用して、ホットワードを設定します。ホットワードは、ソース言語の用語をターゲット言語の翻訳にマップするキーと値のペアを指定することにより、特定の用語の翻訳精度を向上させます。

    たとえば、"人工智能""Artificial Intelligence" にマップできます。

3. 音声と画像の入力

input_audio_buffer.append および input_image_buffer.append イベントを使用して、Base64 エンコードされた音声 (必須) と画像 (オプション) を送信します。

ローカルファイルの画像を使用するか、ビデオストリームからリアルタイムでキャプチャできます。
サーバーは音声入力の開始と終了を自動的に検出し、モデルに応答をトリガーします。

4. モデルの応答の受信

サーバーが音声入力の終了を検出すると、モデルは応答を開始します。応答形式は、構成された出力モダリティによって異なります。

  • テキストのみの出力

    サーバーは、response.text.done イベントで完全な翻訳テキストを返します。

  • テキストと音声の出力

    • テキスト

      サーバーは、response.audio_transcript.done イベントで完全な翻訳テキストを返します。

    • 音声

      サーバーは、response.audio.delta イベントで、インクリメンタルな Base64 エンコードされた音声データを返します。

サポートされているモデル

パラメーター

バージョン

コンテキストウィンドウ

最大入力

最大出力

(トークン)

qwen3-livetranslate-flash-realtime

qwen3-livetranslate-flash-realtime-2025-09-22 と同等

安定版

53,248

49,152

4,096

qwen3-livetranslate-flash-realtime-2025-09-22

スナップショット版

クイックスタート

  1. 環境の準備

    Python 3.10 以降が必要です。

    まず、pyaudio をインストールします。

    macOS

    brew install portaudio && pip install pyaudio

    Debian/Ubuntu

    sudo apt-get install python3-pyaudio
    
    or
    
    pip install pyaudio

    CentOS

    sudo yum install -y portaudio portaudio-devel && pip install pyaudio

    Windows

    pip install pyaudio

    次に、WebSocket の依存関係をインストールします。

    pip install websocket-client==1.8.0 websockets
  2. クライアントの作成

    次の内容で、livetranslate_client.py という名前のファイルを作成します:

    クライアントコード - livetranslate_client.py

    import os
    import time
    import base64
    import asyncio
    import json
    import websockets
    import pyaudio
    import queue
    import threading
    import traceback
    
    class LiveTranslateClient:
        def __init__(self, api_key: str, target_language: str = "en", voice: str | None = "Cherry", *, audio_enabled: bool = True):
            if not api_key:
                raise ValueError("API key cannot be empty.")
                
            self.api_key = api_key
            self.target_language = target_language
            self.audio_enabled = audio_enabled
            self.voice = voice if audio_enabled else "Cherry"
            self.ws = None
            self.api_url = "wss://dashscope-intl.aliyuncs.com/api-ws/v1/realtime?model=qwen3-livetranslate-flash-realtime"
            
            # マイクからの音声入力設定
            self.input_rate = 16000
            self.input_chunk = 1600
            self.input_format = pyaudio.paInt16
            self.input_channels = 1
            
            # 再生用の音声出力設定
            self.output_rate = 24000
            self.output_chunk = 2400
            self.output_format = pyaudio.paInt16
            self.output_channels = 1
            
            # 状態管理
            self.is_connected = False
            self.audio_player_thread = None
            self.audio_playback_queue = queue.Queue()
            self.pyaudio_instance = pyaudio.PyAudio()
    
        async def connect(self):
            """翻訳サービスへの WebSocket 接続を確立します。"""
            headers = {"Authorization": f"Bearer {self.api_key}"}
            try:
                self.ws = await websockets.connect(self.api_url, additional_headers=headers)
                self.is_connected = True
                print(f"Successfully connected to the server: {self.api_url}")
                await self.configure_session()
            except Exception as e:
                print(f"Connection failed: {e}")
                self.is_connected = False
                raise
    
        async def configure_session(self):
            """翻訳セッションを構成し、ターゲット言語、音声、その他のパラメーターを設定します。"""
            config = {
                "event_id": f"event_{int(time.time() * 1000)}",
                "type": "session.update",
                "session": {
                    # 'modalities' は出力タイプを制御します。
                    # ["text", "audio"]: 翻訳されたテキストと合成された音声の両方を返します (推奨)。
                    # ["text"]: 翻訳されたテキストのみを返します。
                    "modalities": ["text", "audio"] if self.audio_enabled else ["text"],
                    **({"voice": self.voice} if self.audio_enabled and self.voice else {}),
                    "input_audio_format": "pcm",
                    "output_audio_format": "pcm",
                    # 'input_audio_transcription' はソース言語の認識を構成します。
                    # 'model' を 'qwen3-asr-flash-realtime' に設定すると、ソース言語の認識結果も出力されます。
                    # "input_audio_transcription": {
                    #     "model": "qwen3-asr-flash-realtime",
                    #     "language": "zh"  # ソース言語、デフォルトは 'en'
                    # },
                    "translation": {
                        "language": self.target_language,
                        # 'corpus' はホットワード (カスタム語彙) を構成し、特定の用語の翻訳精度を向上させます。
                        # "corpus": {
                        #     "phrases": {
                        #         "人工智能": "Artificial Intelligence",
                        #         "机器学习": "Machine Learning"
                        #     }
                        # }
                    }
                }
            }
            print(f"Sending session configuration: {json.dumps(config, indent=2, ensure_ascii=False)}")
            await self.ws.send(json.dumps(config))
    
        async def send_audio_chunk(self, audio_data: bytes):
            """音声チャンクをエンコードしてサーバーに送信します。"""
            if not self.is_connected:
                return
                
            event = {
                "event_id": f"event_{int(time.time() * 1000)}",
                "type": "input_audio_buffer.append",
                "audio": base64.b64encode(audio_data).decode()
            }
            await self.ws.send(json.dumps(event))
    
        async def send_image_frame(self, image_bytes: bytes, *, event_id: str | None = None):
            """画像フレームをサーバーに送信します。"""
            if not self.is_connected:
                return
    
            if not image_bytes:
                raise ValueError("image_bytes cannot be empty")
    
            # Base64 にエンコード
            image_b64 = base64.b64encode(image_bytes).decode()
    
            event = {
                "event_id": event_id or f"event_{int(time.time() * 1000)}",
                "type": "input_image_buffer.append",
                "image": image_b64,
            }
    
            await self.ws.send(json.dumps(event))
    
        def _audio_player_task(self):
            stream = self.pyaudio_instance.open(
                format=self.output_format,
                channels=self.output_channels,
                rate=self.output_rate,
                output=True,
                frames_per_buffer=self.output_chunk,
            )
            try:
                while self.is_connected or not self.audio_playback_queue.empty():
                    try:
                        audio_chunk = self.audio_playback_queue.get(timeout=0.1)
                        if audio_chunk is None: # 終了シグナル
                            break
                        stream.write(audio_chunk)
                        self.audio_playback_queue.task_done()
                    except queue.Empty:
                        continue
            finally:
                stream.stop_stream()
                stream.close()
    
        def start_audio_player(self):
            """音声プレーヤースレッドを開始します (音声出力が有効な場合のみ)。"""
            if not self.audio_enabled:
                return
            if self.audio_player_thread is None or not self.audio_player_thread.is_alive():
                self.audio_player_thread = threading.Thread(target=self._audio_player_task, daemon=True)
                self.audio_player_thread.start()
    
        async def handle_server_messages(self, on_text_received):
            """サーバーからの受信メッセージを処理します。"""
            try:
                async for message in self.ws:
                    event = json.loads(message)
                    event_type = event.get("type")
                    if event_type == "response.audio.delta" and self.audio_enabled:
                        audio_b64 = event.get("delta", "")
                        if audio_b64:
                            audio_data = base64.b64decode(audio_b64)
                            self.audio_playback_queue.put(audio_data)
    
                    elif event_type == "response.done":
                        print("\n[INFO] Response round complete.")
                        usage = event.get("response", {}).get("usage", {})
                        if usage:
                            print(f"[INFO] token usage: {json.dumps(usage, indent=2, ensure_ascii=False)}")
                    # ソース言語の認識結果を処理します (input_audio_transcription.model の有効化が必要)
                    # elif event_type == "conversation.item.input_audio_transcription.text":
                    #     stash = event.get("stash", "")  # 保留中の認識テキスト
                    #     print(f"[Recognizing] {stash}")
                    # elif event_type == "conversation.item.input_audio_transcription.completed":
                    #     transcript = event.get("transcript", "")  # 完全な認識結果
                    #     print(f"[Source language] {transcript}")
                    elif event_type == "response.audio_transcript.done":
                        print("\n[INFO] Text translation complete.")
                        text = event.get("transcript", "")
                        if text:
                            print(f"[INFO] Translated text: {text}")
                    elif event_type == "response.text.done":
                        print("\n[INFO] Text translation complete.")
                        text = event.get("text", "")
                        if text:
                            print(f"[INFO] Translated text: {text}")
    
            except websockets.exceptions.ConnectionClosed as e:
                print(f"[WARNING] Connection closed: {e}")
                self.is_connected = False
            except Exception as e:
                print(f"[ERROR] An unknown error occurred while processing messages: {e}")
                traceback.print_exc()
                self.is_connected = False
    
        async def start_microphone_streaming(self):
            """マイクから音声をキャプチャし、サーバーにストリーミングします。"""
            stream = self.pyaudio_instance.open(
                format=self.input_format,
                channels=self.input_channels,
                rate=self.input_rate,
                input=True,
                frames_per_buffer=self.input_chunk
            )
            print("Microphone is on. Start speaking...")
            try:
                while self.is_connected:
                    audio_chunk = await asyncio.get_event_loop().run_in_executor(
                        None, stream.read, self.input_chunk
                    )
                    await self.send_audio_chunk(audio_chunk)
            finally:
                stream.stop_stream()
                stream.close()
    
        async def close(self):
            """接続を正常に閉じ、リソースを解放します。"""
            self.is_connected = False
            if self.ws:
                await self.ws.close()
                print("WebSocket connection closed.")
            
            if self.audio_player_thread:
                self.audio_playback_queue.put(None) # 終了シグナルを送信
                self.audio_player_thread.join(timeout=1)
                print("Audio player thread stopped.")
                
            self.pyaudio_instance.terminate()
            print("PyAudio instance released.")
  3. モデルとの対話

    livetranslate_client.py」と同じディレクトリ内に、「main.py」という名前のファイルを作成し、以下の内容を記述します:

    main.py

    import os
    import asyncio
    from livetranslate_client import LiveTranslateClient
    
    def print_banner():
        print("=" * 60)
        print("  Powered by Qwen qwen3-livetranslate-flash-realtime")
        print("=" * 60 + "\n")
    
    def get_user_config():
        """ユーザーに設定を促し、構成を返します。"""
        print("モードを選択してください:")
        print("1. 音声 + テキスト [デフォルト] | 2. テキストのみ")
        mode_choice = input("選択肢を入力してください (音声 + テキストの場合は Enter を押してください):").strip()
        audio_enabled = (mode_choice != "2")
    
        if audio_enabled:
            lang_map = {
                "1": "en", "2": "zh", "3": "ru", "4": "fr", "5": "de", "6": "pt",
                "7": "es", "8": "it", "9": "ko", "10": "ja", "11": "yue"
            }
            print("ターゲットの翻訳言語を選択してください (音声 + テキストモード):")
            print("1. 英語 | 2. 中国語 | 3. ロシア語 | 4. フランス語 | 5. ドイツ語 | 6. ポルトガル語 | 7. スペイン語 | 8. イタリア語 | 9. 韓国語 | 10. 日本語 | 11. 広東語")
        else:
            lang_map = {
                "1": "en", "2": "zh", "3": "ru", "4": "fr", "5": "de", "6": "pt", "7": "es", "8": "it",
                "9": "id", "10": "ko", "11": "ja", "12": "vi", "13": "th", "14": "ar",
                "15": "yue", "16": "hi", "17": "el", "18": "tr"
            }
            print("ターゲットの翻訳言語を選択してください (テキストのみモード):")
            print("1. 英語 | 2. 中国語 | 3. ロシア語 | 4. フランス語 | 5. ドイツ語 | 6. ポルトガル語 | 7. スペイン語 | 8. イタリア語 | 9. インドネシア語 | 10. 韓国語 | 11. 日本語 | 12. ベトナム語 | 13. タイ語 | 14. アラビア語 | 15. 広東語 | 16. ヒンディー語 | 17. ギリシャ語 | 18. トルコ語")
    
        choice = input("選択肢を入力してください (最初のオプションがデフォルトです):").strip()
        target_language = lang_map.get(choice, next(iter(lang_map.values())))
    
        voice = None
        if audio_enabled:
            print("\n音声合成の声を選択してください:")
            voice_map = {"1": "Cherry", "2": "Nofish", "3": "Sunny", "4": "Jada", "5": "Dylan", "6": "Peter", "7": "Eric", "8": "Kiki"}
            print("1. Cherry (女性) [デフォルト] | 2. Nofish (男性) | 3. Sunny (四川女性) | 4. Jada (上海女性) | 5. Dylan (北京男性) | 6. Peter (天津男性) | 7. Eric (四川男性) | 8. Kiki (広東女性)")
            voice_choice = input("選択肢を入力してください (Cherry の場合は Enter を押してください):").strip()
            voice = voice_map.get(voice_choice, "Cherry")
        return target_language, voice, audio_enabled
    
    async def main():
        """メインプログラムのエントリーポイント。"""
        print_banner()
        
        api_key = os.environ.get("DASHSCOPE_API_KEY")
        if not api_key:
            print("[ERROR] The DASHSCOPE_API_KEY environment variable is not set.")
            print("  For example: export DASHSCOPE_API_KEY='your_api_key_here'")
            return
            
        target_language, voice, audio_enabled = get_user_config()
        print("\n構成が完了しました:")
        print(f"  - ターゲット言語:{target_language}")
        if audio_enabled:
            print(f"  - 合成音声:{voice}")
        else:
            print("  - 出力モード:テキストのみ")
        
        client = LiveTranslateClient(api_key=api_key, target_language=target_language, voice=voice, audio_enabled=audio_enabled)
        
        # コールバック関数を定義
        def on_translation_text(text):
            print(text, end="", flush=True)
    
        try:
            print("翻訳サービスに接続しています...")
            await client.connect()
            
            # 音声プレーヤースレッドを開始します。再生は音声出力が有効な場合にのみ行われます。
            client.start_audio_player()
            
            print("\n" + "-" * 60)
            print("接続に成功しました!マイクに向かって話してください。")
            print("プログラムはあなたの発話をリアルタイムで翻訳し、結果を再生します。Ctrl+C を押して終了します。")
            print("-" * 60 + "\n")
    
            # メッセージ処理とマイク録音を同時に実行
            message_handler = asyncio.create_task(client.handle_server_messages(on_translation_text))
            tasks = [message_handler]
            # 音声出力が有効かどうかにかかわらず、翻訳のためにマイクから音声をキャプチャ
            microphone_streamer = asyncio.create_task(client.start_microphone_streaming())
            tasks.append(microphone_streamer)
    
            await asyncio.gather(*tasks)
    
        except KeyboardInterrupt:
            print("\n\nユーザーが中断しました。終了しています...")
        except Exception as e:
            print(f"\n重大なエラーが発生しました:{e}")
        finally:
            print("\nリソースをクリーンアップしています...")
            await client.close()
            print("プログラムが終了しました。")
    
    if __name__ == "__main__":
        asyncio.run(main())

    main.py を実行し、マイクに向かって話してください。このモデルは、翻訳された音声およびテキストをリアルタイムで出力します。システムが音声を自動的に検出し、サーバーに送信します。

画像による翻訳精度の向上

qwen3-livetranslate-flash-realtime モデルは、画像を使用して音声翻訳を改善します。この機能は、同音異義語や稀な固有名詞があるシナリオに最適です。1 秒あたり 2 枚以下の画像を送信することを推奨します。

次のサンプル画像をダウンロードしてください:medical mask.png および masquerade mask.png

以下のコードを livetranslate_client.py と同じディレクトリにダウンロードして実行します。マイクに向かって "What is mask?" と言います。このモデルは、提供されたイメージを使用して「mask」という単語の曖昧さを解消します。たとえば、medical mask.png を使用すると、このフレーズは「什么是口罩?」に翻訳され、masquerade mask.png を使用すると、「什么是面具?」に翻訳されます。

import os
import time
import json
import asyncio
import contextlib
import functools

from livetranslate_client import LiveTranslateClient

IMAGE_PATH = "medical mask.png"
# IMAGE_PATH = "masquerade mask.png"

def print_banner():
    print("=" * 60)
    print("  Powered by Qwen qwen3-livetranslate-flash-realtime - Single-turn interaction example (mask)")
    print("=" * 60 + "\n")

async def stream_microphone_once(client: LiveTranslateClient, image_bytes: bytes):
    pa = client.pyaudio_instance
    stream = pa.open(
        format=client.input_format,
        channels=client.input_channels,
        rate=client.input_rate,
        input=True,
        frames_per_buffer=client.input_chunk,
    )
    print(f"[INFO] Recording started. Please speak...")
    loop = asyncio.get_event_loop()
    last_img_time = 0.0
    frame_interval = 0.5  # 2 fps
    try:
        while client.is_connected:
            data = await loop.run_in_executor(None, stream.read, client.input_chunk)
            await client.send_audio_chunk(data)

            # 0.5 秒ごとに画像フレームを追加
            now = time.time()
            if now - last_img_time >= frame_interval:
                await client.send_image_frame(image_bytes)
                last_img_time = now
    finally:
        stream.stop_stream()
        stream.close()

async def main():
    print_banner()
    api_key = os.environ.get("DASHSCOPE_API_KEY")
    if not api_key:
        print("[ERROR] First, configure the API KEY in the DASHSCOPE_API_KEY environment variable.")
        return

    client = LiveTranslateClient(api_key=api_key, target_language="zh", voice="Cherry", audio_enabled=True)

    def on_text(text: str):
        print(text, end="", flush=True)

    try:
        await client.connect()
        client.start_audio_player()
        message_task = asyncio.create_task(client.handle_server_messages(on_text))
        with open(IMAGE_PATH, "rb") as f:
            img_bytes = f.read()
        await stream_microphone_once(client, img_bytes)
        await asyncio.sleep(15)
    finally:
        await client.close()
        if not message_task.done():
            message_task.cancel()
            with contextlib.suppress(asyncio.CancelledError):
                await message_task

if __name__ == "__main__":
    asyncio.run(main())

ワンクリックデプロイ

コンソールではオンラインデモは利用できません。ワンクリックでアプリケーションをデプロイするには、次の手順に従ってください。

  1. Function Compute テンプレートを開き、API キーを入力して、[デフォルト環境の作成とデプロイ] をクリックします。

  2. 1 分ほど待ちます。[環境の詳細] > [環境コンテキスト] で、エンドポイントを取得し、URL のプロトコルを http から https に変更し (たとえば、https://qwen-livetranslate-flash-realtime-intl.fcv3.xxx.ap-southeast-1.fc.devsapp.net/)、そのリンクを使用してアプリケーションにアクセスします。

    重要

    このリンクは自己署名証明書を使用しており、一時的なテスト専用です。初めてアクセスすると、ブラウザにセキュリティ警告が表示されます。これは予期された動作です。このリンクを本番環境で使用しないでください。続行するには、[詳細設定] → [(安全でない)に進む] などの画面の指示に従ってください。

Resource Access Management (RAM) の権限を付与する必要がある場合は、画面の指示に従ってください。
プロジェクトのソースコードを表示するには、[リソース情報] > [関数リソース] に移動します。
Function ComputeAlibaba Cloud Model Studio の両方で、新規ユーザーには簡単なデバッグに十分な無料クォータが提供されます。無料クォータを使い切った後は、サービスにアクセスしたときにのみ従量課金が発生します。

インタラクションフロー

リアルタイム音声翻訳は、標準的な WebSocket イベント駆動モデルに従います。サーバーは自動的に発話の境界を検出し、応答します。

ライフサイクル

クライアントイベント

サーバーイベント

セッションの初期化

session.update

セッション構成

session.created

セッションが作成されました

session.updated

セッション構成が更新されました

ユーザーの音声入力

input_audio_buffer.append

バッファーに音声を追加

input_image_buffer.append

バッファーに画像を追加

なし

サーバーの音声出力

なし

response.created

サーバーが応答の生成を開始したことを示します。

response.output_item.added

新しい出力項目が利用可能であることを示します。

response.content_part.added

アシスタントメッセージに新しいコンテンツ部分が追加されたことを示します。

response.audio_transcript.text

テキストトランスクリプトへのインクリメンタルな更新が含まれます。

response.audio.delta

合成された音声のインクリメンタルなチャンクが含まれます。

response.audio_transcript.done

完全なテキストトランスクリプトが完了したことを示します。

response.audio.done

合成された音声が完了したことを示します。

response.content_part.done

アシスタントメッセージのテキストまたは音声コンテンツ部分が完了したことを示します。

response.output_item.done

アシスタントメッセージの出力項目全体が完了したことを示します。

response.done

応答全体が完了したことを示します。

API リファレンス

詳細については、「Qwen-Livetranslate-Realtime」をご参照ください。

課金

  • 音声:音声入力または出力の 1 秒ごとに 12.5 トークンを消費します。

  • 画像:28×28 ピクセルごとに 0.5 トークンを消費します。

  • テキスト:ソース言語の音声認識が有効な場合、サービスは翻訳に加えて入力音声のトランスクリプト (元のソース言語のテキスト) を返します。このトランスクリプトは出力トークンとして課金されます。

トークンの価格については、「モデルリスト」をご参照ください。

サポートされている言語

ソース言語とターゲット言語を指定するには、次の言語コードを使用します。

一部のターゲット言語はテキスト出力のみをサポートします。

言語コード

言語

出力

en

英語

音声 + テキスト

zh

中国語

音声 + テキスト

ru

ロシア語

音声 + テキスト

fr

フランス語

音声 + テキスト

de

ドイツ語

音声 + テキスト

pt

ポルトガル語

音声 + テキスト

es

スペイン語

音声 + テキスト

it

イタリア語

音声 + テキスト

id

インドネシア語

テキスト

ko

韓国語

音声 + テキスト

ja

日本語

音声 + テキスト

vi

ベトナム語

テキスト

th

タイ語

テキスト

ar

アラビア語

テキスト

yue

広東語

音声 + テキスト

hi

ヒンディー語

テキスト

el

ギリシャ語

テキスト

tr

トルコ語

テキスト

サポートされている音声

名前

voice パラメーター

サンプル

説明

言語

Cherry

Cherry

明るくポジティブなトーンの、フレンドリーで会話的な女性の声。

中国語、英語、フランス語、ドイツ語、ロシア語、イタリア語、スペイン語、ポルトガル語、日本語、韓国語

Nofish

Nofish

非そり舌の標準語アクセントを持つカジュアルな男性の声。

中国語、英語、フランス語、ドイツ語、ロシア語、イタリア語、スペイン語、ポルトガル語、日本語、韓国語

Jada

Jada

上海アクセントを持つエネルギッシュな女性の声。

中国語

Dylan

Dylan

北京アクセントを持つ若い男性の声。

中国語

Sunny

Sunny

四川アクセントを持つ温かく甘い女性の声。

中国語

Peter

Peter

天津アクセントを持つ男性のコメディックな声。

中国語

Kiki

Kiki

広東語の甘い女性の声。

広東語

Eric

Eric

成都 (四川) アクセントを持つ明るい男性の声。

中国語