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

Alibaba Cloud Model Studio:Speech synthesis - Qwen

最終更新日:Mar 01, 2026

Qwen 音声合成モデルは、自然な表現力を持つ人間のような音声を提供します。複数の言語と方言をサポートし、単一の音声で多言語コンテンツを生成し、複雑なテキストに対応するためにトーンを自動的に調整します。

主な特徴

  • 音声の合成と再生を同時に行うためのストリーミング出力をサポートします。

  • 複数の言語と中国語の方言をサポートします。

  • 多様なシナリオに対応する幅広い音声オプションを提供します。

  • 音声カスタマイズのための音声クローンおよび音声デザインをサポートします。

  • 自然言語を使用して音声の表現力を正確に制御するための命令コントロールをサポートします。

適用範囲

サポートされるモデル

国際

国際デプロイメントモードでは、エンドポイントとデータストレージは両方ともシンガポールリージョンに配置されます。モデル推論のコンピューティングリソースは、グローバルに (中国本土を除く) 動的にスケジュールされます。

以下のモデルを呼び出す際には、シンガポールリージョンの API キーを使用してください:

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash (安定版、現在は qwen3-tts-instruct-flash-2026-01-26 と同等)、qwen3-tts-instruct-flash-2026-01-26 (最新スナップショット)

  • Qwen3-TTS-VD: qwen3-tts-vd-2026-01-26 (最新スナップショット)

  • Qwen3-TTS-VC: qwen3-tts-vc-2026-01-22 (最新スナップショット)

  • Qwen3-TTS-Flash: qwen3-tts-flash (安定版、現在は qwen3-tts-flash-2025-11-27 と同等)、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18

中国本土

中国本土デプロイメントモードでは、エンドポイントとデータストレージは両方とも中国 (北京) リージョンに配置されます。モデル推論のコンピューティングリソースは中国本土に限定されます。

以下のモデルを呼び出す際には、中国 (北京) リージョンの API キーを使用してください:

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash (安定版、現在は qwen3-tts-instruct-flash-2026-01-26 と同等)、qwen3-tts-instruct-flash-2026-01-26 (最新スナップショット)

  • Qwen3-TTS-VD: qwen3-tts-vd-2026-01-26 (最新スナップショット)

  • Qwen3-TTS-VC: qwen3-tts-vc-2026-01-22 (最新スナップショット)

  • Qwen3-TTS-Flash: qwen3-tts-flash (安定版、現在は qwen3-tts-flash-2025-11-27 と同等)、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18

  • Qwen-TTS: qwen-tts (安定版、現在は qwen-tts-2025-04-10 と同等)、qwen-tts-latest (最新バージョン、現在は qwen-tts-2025-05-22 と同等)、qwen-tts-2025-05-22 (スナップショットバージョン)、qwen-tts-2025-04-10 (スナップショットバージョン)

詳細については、「モデルリスト」をご参照ください。

モデルの選択

シナリオ

推奨モデル

理由

ブランディング、独占音声、またはシステム音声の拡張のための音声カスタマイズ (テキスト記述に基づく)

qwen3-tts-vd-2026-01-26

音声デザインをサポートし、音声サンプルなしでテキスト記述からカスタム音声を作成できます。ブランド独自の音声をゼロからデザインするのに最適です。

ブランディング、独占音声、またはシステム音声の拡張のための音声カスタマイズ (音声サンプルに基づく)

qwen3-tts-vc-2026-01-22

音声クローンをサポートし、音声サンプルから音声を複製し、高い忠実度でリアルなブランドボイスプリントを作成できます。

感情豊かなコンテンツ制作 (オーディオブック、ラジオドラマ、ゲーム/アニメの吹き替え)

qwen3-tts-instruct-flash

命令コントロールをサポートし、自然言語を使用してピッチ、話速、感情、キャラクターの個性を正確に調整できます。豊かな表現力が求められるシナリオに最適です。

モバイルナビゲーションや通知アナウンス

qwen3-tts-flash

文字ごとのシンプルな課金。短文で高頻度のシナリオに適しています。

E ラーニングコースのナレーション

qwen3-tts-flash

地域ごとの教育ニーズに対応するため、複数の言語と方言をサポートします。

オーディオブックのバッチ制作

qwen3-tts-flash

表現力豊かなコンテンツのための豊富な音声オプションを備え、コスト効率が高いです。

詳細については、「モデル機能の比較」をご参照ください。

はじめに

前提条件

  • API キーを設定し、API キーを環境変数としてエクスポートしていること。

  • DashScope SDK を使用するには、最新の SDK をインストールしてください。DashScope Java SDK はバージョン 2.21.9 以降、DashScope Python SDK はバージョン 1.24.6 以降である必要があります。

    説明

    DashScope Python SDK では、SpeechSynthesizer インターフェイスは MultiModalConversation に置き換えられました。新しいインターフェイスを使用するには、名前を置き換えるだけです。他のすべてのパラメーターは完全に互換性があります。

システム音声を使用した音声合成

以下の例は、システム音声を使用して音声合成を行う方法を示しています。

非ストリーミング出力

返された url を使用して、合成された音声を取得します。URL は 24 時間有効です。

Python

import os
import dashscope

# これはシンガポールリージョンの URL です。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

text = "今日は人々が愛するものを作るのに素晴らしい日です!"
# SpeechSynthesizer インターフェイスを使用する場合:dashscope.audio.qwen_tts.SpeechSynthesizer.call(...)
response = dashscope.MultiModalConversation.call(
    # 命令コントロールを使用するには、モデルを qwen3-tts-instruct-flash に置き換えてください。
    model="qwen3-tts-flash",
    # シンガポールリージョンと中国 (北京) リージョンでは API キーが異なります。API キーの取得方法:https://www.alibabacloud.com/help/model-studio/get-api-key
    # 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:api_key = "sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    text=text,
    voice="Cherry",
    language_type="English", # 正しい発音と自然なイントネーションを確保するために、テキストの言語と一致させることを推奨します。
    # 命令コントロールを使用するには、以下の行のコメントを解除し、モデルを qwen3-tts-instruct-flash に置き換えてください。
    # instructions='ファッション製品の紹介に適した、顕著な上昇イントネーションで速く話す。',
    # optimize_instructions=True,
    stream=False
)
print(response)

Java

Gson 依存関係をインポートする必要があります。Maven または Gradle を使用している場合は、次のように依存関係を追加できます:

Maven

pom.xml に以下の内容を追加します:

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.13.1</version>
</dependency>

Gradle

build.gradle に以下の内容を追加します:

// https://mvnrepository.com/artifact/com.google.code.gson/gson
implementation("com.google.code.gson:gson:2.13.1")
import com.alibaba.dashscope.aigc.multimodalconversation.AudioParameters;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.protocol.Protocol;
import com.alibaba.dashscope.utils.Constants;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;

public class Main {
    // 命令コントロールを使用するには、MODEL を qwen3-tts-instruct-flash に置き換えてください。
    private static final String MODEL = "qwen3-tts-flash";
    public static void call() throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // シンガポールリージョンと中国 (北京) リージョンでは API キーが異なります。API キーの取得方法:https://www.alibabacloud.com/help/model-studio/get-api-key
                // 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model(MODEL)
                .text("今日は人々が愛するものを作るのに素晴らしい日です!")
                .voice(AudioParameters.Voice.CHERRY)
                .languageType("English") // 正しい発音と自然なイントネーションを確保するために、テキストの言語と一致させることを推奨します。
                // 命令コントロールを使用するには、以下の行のコメントを解除し、モデルを qwen3-tts-instruct-flash に置き換えてください。
                // .parameter("instructions","ファッション製品の紹介に適した、顕著な上昇イントネーションで速く話す。")
                // .parameter("optimize_instructions",true)
                .build();
        MultiModalConversationResult result = conv.call(param);
        String audioUrl = result.getOutput().getAudio().getUrl();
        System.out.print(audioUrl);

        // 音声ファイルをローカルにダウンロード
        try (InputStream in = new URL(audioUrl).openStream();
             FileOutputStream out = new FileOutputStream("downloaded_audio.wav")) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = in.read(buffer)) != -1) {
                out.write(buffer, 0, bytesRead);
            }
            System.out.println("\n音声ファイルがローカルパスにダウンロードされました:downloaded_audio.wav");
        } catch (Exception e) {
            System.out.println("\n音声ファイルのダウンロード中にエラーが発生しました:" + e.getMessage());
        }
    }
    public static void main(String[] args) {
        // これはシンガポールリージョンの URL です。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
        Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
        try {
            call();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

cURL

# ======= 重要 =======
# これはシンガポールリージョンの URL です。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
# シンガポールリージョンと中国 (北京) リージョンでは API キーが異なります。API キーの取得方法:https://www.alibabacloud.com/help/model-studio/get-api-key
# === 実行前にこのコメントを削除してください ===

curl -X POST 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3-tts-flash",
    "input": {
        "text": "今日は人々が愛するものを作るのに素晴らしい日です!",
        "voice": "Cherry",
        "language_type": "English"
    }
}'

ストリーミング出力

Base64 形式で音声データをストリーミングします。最後のパケットには、完全な音声ファイルの URL が含まれています。

Python

# coding=utf-8
#
# pyaudio のインストール手順:
# APPLE Mac OS X
#   brew install portaudio
#   pip install pyaudio
# Debian/Ubuntu
#   sudo apt-get install python-pyaudio python3-pyaudio
#   または
#   pip install pyaudio
# CentOS
#   sudo yum install -y portaudio portaudio-devel && pip install pyaudio
# Microsoft Windows
#   python -m pip install pyaudio

import os
import dashscope
import pyaudio
import time
import base64
import numpy as np

# これはシンガポールリージョンの URL です。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

p = pyaudio.PyAudio()
# オーディオストリームを作成
stream = p.open(format=pyaudio.paInt16,
                channels=1,
                rate=24000,
                output=True)


text = "今日は人々が愛するものを作るのに素晴らしい日です!"
response = dashscope.MultiModalConversation.call(
    # シンガポールリージョンと中国 (北京) リージョンでは API キーが異なります。API キーの取得方法:https://www.alibabacloud.com/help/model-studio/get-api-key
    # 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:api_key = "sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 命令コントロールを使用するには、モデルを qwen3-tts-instruct-flash に置き換えてください。
    model="qwen3-tts-flash",
    text=text,
    voice="Cherry",
    language_type="English", # 正しい発音と自然なイントネーションを確保するために、テキストの言語と一致させることを推奨します。
    # 命令コントロールを使用するには、以下の行のコメントを解除し、モデルを qwen3-tts-instruct-flash に置き換えてください。
    # instructions='ファッション製品の紹介に適した、顕著な上昇イントネーションで速く話す。',
    # optimize_instructions=True,
    stream=True
)

for chunk in response:
    if chunk.output is not None:
      audio = chunk.output.audio
      if audio.data is not None:
          wav_bytes = base64.b64decode(audio.data)
          audio_np = np.frombuffer(wav_bytes, dtype=np.int16)
          # 音声データを直接再生
          stream.write(audio_np.tobytes())
      if chunk.output.finish_reason == "stop":
          print("finish at: {} ", chunk.output.audio.expires_at)
time.sleep(0.8)
# リソースをクリーンアップ
stream.stop_stream()
stream.close()
p.terminate()

Java

Gson 依存関係をインポートする必要があります。Maven または Gradle を使用している場合は、次のように依存関係を追加できます:

Maven

pom.xml に以下の内容を追加します:

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.13.1</version>
</dependency>

Gradle

build.gradle に以下の内容を追加します:

// https://mvnrepository.com/artifact/com.google.code.gson/gson
implementation("com.google.code.gson:gson:2.13.1")
// 最新バージョンの DashScope SDK をインストール
import com.alibaba.dashscope.aigc.multimodalconversation.AudioParameters;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.protocol.Protocol;
import com.alibaba.dashscope.utils.Constants;
import io.reactivex.Flowable;
import javax.sound.sampled.*;
import java.util.Base64;

public class Main {
    // 命令コントロールを使用するには、MODEL を qwen3-tts-instruct-flash に置き換えてください。
    private static final String MODEL = "qwen3-tts-flash";
    public static void streamCall() throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // シンガポールリージョンと中国 (北京) リージョンでは API キーが異なります。API キーの取得方法:https://www.alibabacloud.com/help/model-studio/get-api-key
                // 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model(MODEL)
                .text("今日は人々が愛するものを作るのに素晴らしい日です!")
                .voice(AudioParameters.Voice.CHERRY)
                .languageType("English") // 正しい発音と自然なイントネーションを確保するために、テキストの言語と一致させることを推奨します。
                // 命令コントロールを使用するには、以下の行のコメントを解除し、モデルを qwen3-tts-instruct-flash に置き換えてください。
                // .parameter("instructions","ファッション製品の紹介に適した、顕著な上昇イントネーションで速く話す。")
                // .parameter("optimize_instructions",true)
                .build();
        Flowable<MultiModalConversationResult> result = conv.streamCall(param);
        result.blockingForEach(r -> {
            try {
                // 1. Base64 エンコードされた音声データを取得
                String base64Data = r.getOutput().getAudio().getData();
                byte[] audioBytes = Base64.getDecoder().decode(base64Data);

                // 2. 音声フォーマットを設定 (API から返されるフォーマットに基づいて調整)
                AudioFormat format = new AudioFormat(
                        AudioFormat.Encoding.PCM_SIGNED,
                        24000, // サンプルレート (API から返されるフォーマットと一致させる必要があります)
                        16,    // オーディオビット深度
                        1,     // サウンドチャンネル数
                        2,     // フレームサイズ (ビット深度 / 8)
                        24000, // データ転送レート (サンプルレートと一致させる必要があります)
                        false  // 圧縮されているか
                );

                // 3. 音声データをリアルタイムで再生
                DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
                try (SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info)) {
                    if (line != null) {
                        line.open(format);
                        line.start();
                        line.write(audioBytes, 0, audioBytes.length);
                        line.drain();
                    }
                }
            } catch (LineUnavailableException e) {
                e.printStackTrace();
            }
        });
    }
    public static void main(String[] args) {
        // これはシンガポールリージョンの URL です。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
        Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
        try {
            streamCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

cURL

# ======= 重要 =======
# これはシンガポールリージョンの URL です。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
# シンガポールリージョンと中国 (北京) リージョンでは API キーが異なります。API キーの取得方法:https://www.alibabacloud.com/help/model-studio/get-api-key
# === 実行前にこのコメントを削除してください ===

curl -X POST 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-H 'X-DashScope-SSE: enable' \
-d '{
    "model": "qwen3-tts-flash",
    "input": {
        "text": "今日は人々が愛するものを作るのに素晴らしい日です!",
        "voice": "Cherry",
        "language_type": "Chinese"
    }
}'

音声クローンを使用した音声合成

音声クローンはプレビュー音声を提供しません。クローンされた音声を音声合成に適用して結果を評価してください。

以下の例では、クローンされた音声を使用して音声合成を行います。これらの例は、システム音声用の非ストリーミング出力コードを応用し、voice パラメーターをクローンされた音声に置き換えています。

  • 重要な原則:音声クローンに使用されるモデル (target_model) は、音声合成に使用されるモデル (model) と一致する必要があります。一致しない場合、合成は失敗します。

  • この例では、音声クローンにローカル音声ファイル voice.mp3 を使用します。コードを実行する際には、このパスを置き換えてください。

Python

import os
import requests
import base64
import pathlib
import dashscope

# ======= 定数設定 =======
DEFAULT_TARGET_MODEL = "qwen3-tts-vc-2026-01-22"  # 音声クローンと音声合成に同じモデルを使用
DEFAULT_PREFERRED_NAME = "guanyu"
DEFAULT_AUDIO_MIME_TYPE = "audio/mpeg"
VOICE_FILE_PATH = "voice.mp3"  # 音声クローンに使用するローカル音声ファイルの相対パス


def create_voice(file_path: str,
                 target_model: str = DEFAULT_TARGET_MODEL,
                 preferred_name: str = DEFAULT_PREFERRED_NAME,
                 audio_mime_type: str = DEFAULT_AUDIO_MIME_TYPE) -> str:
    """
    音声を作成し、voice パラメーターを返す。
    """
    # シンガポールリージョンと北京リージョンでは API キーが異なります。API キーの取得方法:https://www.alibabacloud.com/help/model-studio/get-api-key
    # 環境変数を設定していない場合は、次の行を置き換えてください:api_key = "sk-xxx"
    api_key = os.getenv("DASHSCOPE_API_KEY")

    file_path_obj = pathlib.Path(file_path)
    if not file_path_obj.exists():
        raise FileNotFoundError(f"音声ファイルが存在しません:{file_path}")

    base64_str = base64.b64encode(file_path_obj.read_bytes()).decode()
    data_uri = f"data:{audio_mime_type};base64,{base64_str}"

    # 以下の URL はシンガポールリージョン用です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization に置き換えてください
    url = "https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization"
    payload = {
        "model": "qwen-voice-enrollment", # この値は変更しないでください
        "input": {
            "action": "create",
            "target_model": target_model,
            "preferred_name": preferred_name,
            "audio": {"data": data_uri}
        }
    }
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }

    resp = requests.post(url, json=payload, headers=headers)
    if resp.status_code != 200:
        raise RuntimeError(f"音声の作成に失敗しました:{resp.status_code}, {resp.text}")

    try:
        return resp.json()["output"]["voice"]
    except (KeyError, ValueError) as e:
        raise RuntimeError(f"音声応答の解析に失敗しました:{e}")


if __name__ == '__main__':
    # 以下の URL はシンガポールリージョン用です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
    dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

    text = "今日の天気はどうですか?"
    # SpeechSynthesizer インターフェイスの使用法:dashscope.audio.qwen_tts.SpeechSynthesizer.call(...)
    response = dashscope.MultiModalConversation.call(
        model=DEFAULT_TARGET_MODEL,
        # シンガポールリージョンと北京リージョンでは API キーが異なります。API キーの取得方法:https://www.alibabacloud.com/help/model-studio/get-api-key
        # 環境変数を設定していない場合は、次の行を置き換えてください:api_key = "sk-xxx"
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        text=text,
        voice=create_voice(VOICE_FILE_PATH), # voice パラメーターをクローンで生成されたカスタム音声に置き換え
        stream=False
    )
    print(response)

Java

Gson 依存関係を追加します。Maven または Gradle を使用している場合は、次のように依存関係を追加します:

Maven

pom.xml に以下の内容を追加します:

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.13.1</version>
</dependency>

Gradle

build.gradle に以下の内容を追加します:

// https://mvnrepository.com/artifact/com.google.code.gson/gson
implementation("com.google.code.gson:gson:2.13.1")
重要

音声クローンで生成されたカスタム音声を使用して音声合成を行う場合、次のように音声を指定します:

MultiModalConversationParam param = MultiModalConversationParam.builder()
                .parameter("voice", "your_voice") // voice パラメーターをクローンで生成されたカスタム音声に置き換え
                .build();
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.utils.Constants;
import com.google.gson.Gson;
import com.google.gson.JsonObject;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.*;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class Main {
    // ===== 定義 =====
    // 音声クローンと音声合成に同じモデルを使用
    private static final String TARGET_MODEL = "qwen3-tts-vc-2026-01-22";
    private static final String PREFERRED_NAME = "guanyu";
    // 音声クローンに使用するローカル音声ファイルの相対パス
    private static final String AUDIO_FILE = "voice.mp3";
    private static final String AUDIO_MIME_TYPE = "audio/mpeg";

    // データ URI を生成
    public static String toDataUrl(String filePath) throws IOException {
        byte[] bytes = Files.readAllBytes(Paths.get(filePath));
        String encoded = Base64.getEncoder().encodeToString(bytes);
        return "data:" + AUDIO_MIME_TYPE + ";base64," + encoded;
    }

    // API を呼び出して音声を作成
    public static String createVoice() throws Exception {
        // シンガポールリージョンと北京リージョンでは API キーが異なります。API キーの取得方法:https://www.alibabacloud.com/help/model-studio/get-api-key
        // 環境変数を設定していない場合は、次の行を置き換えてください:String apiKey = "sk-xxx"
        String apiKey = System.getenv("DASHSCOPE_API_KEY");

        String jsonPayload =
                "{"
                        + "\"model\": \"qwen-voice-enrollment\"," // この値は変更しないでください
                        + "\"input\": {"
                        +     "\"action\": \"create\","
                        +     "\"target_model\": \"" + TARGET_MODEL + "\","
                        +     "\"preferred_name\": \"" + PREFERRED_NAME + "\","
                        +     "\"audio\": {"
                        +         "\"data\": \"" + toDataUrl(AUDIO_FILE) + "\""
                        +     "}"
                        + "}"
                        + "}";

        // 以下の URL はシンガポールリージョン用です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization に置き換えてください
        String url = "https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization";
        HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
        con.setRequestMethod("POST");
        con.setRequestProperty("Authorization", "Bearer " + apiKey);
        con.setRequestProperty("Content-Type", "application/json");
        con.setDoOutput(true);

        try (OutputStream os = con.getOutputStream()) {
            os.write(jsonPayload.getBytes(StandardCharsets.UTF_8));
        }

        int status = con.getResponseCode();
        System.out.println("HTTP ステータスコード: " + status);

        try (BufferedReader br = new BufferedReader(
                new InputStreamReader(status >= 200 && status < 300 ? con.getInputStream() : con.getErrorStream(),
                        StandardCharsets.UTF_8))) {
            StringBuilder response = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                response.append(line);
            }
            System.out.println("応答内容: " + response);

            if (status == 200) {
                JsonObject jsonObj = new Gson().fromJson(response.toString(), JsonObject.class);
                return jsonObj.getAsJsonObject("output").get("voice").getAsString();
            }
            throw new IOException("音声の作成に失敗しました: " + status + " - " + response);
        }
    }

    public static void call() throws Exception {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // シンガポールリージョンと北京リージョンでは API キーが異なります。API キーの取得方法:https://www.alibabacloud.com/help/model-studio/get-api-key
                // 環境変数を設定していない場合は、次の行を置き換えてください:.apikey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model(TARGET_MODEL)
                .text("今日の天気はどうですか?")
                .parameter("voice", createVoice()) // voice パラメーターをクローンで生成されたカスタム音声に置き換え
                .build();
        MultiModalConversationResult result = conv.call(param);
        String audioUrl = result.getOutput().getAudio().getUrl();
        System.out.print(audioUrl);

        // 音声ファイルをローカルにダウンロード
        try (InputStream in = new URL(audioUrl).openStream();
             FileOutputStream out = new FileOutputStream("downloaded_audio.wav")) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = in.read(buffer)) != -1) {
                out.write(buffer, 0, bytesRead);
            }
            System.out.println("\n音声ファイルがローカルにダウンロードされました:downloaded_audio.wav");
        } catch (Exception e) {
            System.out.println("\n音声ファイルのダウンロード中にエラーが発生しました:" + e.getMessage());
        }
    }
    public static void main(String[] args) {
        try {
            // 以下の URL はシンガポールリージョン用です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
            Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
            call();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

音声デザインのトーンを使用した音声合成

音声デザインはプレビュー音声を返します。プレビューを聴いて期待どおりであることを確認してから、合成に使用してコストを削減してください。

  1. カスタム音声を生成し、結果をプレビューします。結果に満足したら、次のステップに進みます。そうでなければ、再度生成します。

    Python

    import requests
    import base64
    import os
    
    def create_voice_and_play():
        # シンガポールリージョンと北京リージョンでは API キーが異なります。API キーの取得方法:https://www.alibabacloud.com/help/model-studio/get-api-key
        # 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えてください:api_key = "sk-xxx"
        api_key = os.getenv("DASHSCOPE_API_KEY")
        
        if not api_key:
            print("エラー:DASHSCOPE_API_KEY 環境変数が見つかりません。まず API キーを設定してください。")
            return None, None, None
        
        # リクエストデータを準備
        headers = {
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        }
        
        data = {
            "model": "qwen-voice-design",
            "input": {
                "action": "create",
                "target_model": "qwen3-tts-vd-2026-01-26",
                "voice_prompt": "A composed middle-aged male announcer with a deep, rich and magnetic voice, a steady speaking speed and clear articulation, is suitable for news broadcasting or documentary commentary.",
                "preview_text": "Dear listeners, hello everyone. Welcome to the evening news.",
                "preferred_name": "announcer",
                "language": "en"
            },
            "parameters": {
                "sample_rate": 24000,
                "response_format": "wav"
            }
        }
        
        # 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization に置き換えてください
        url = "https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization"
        
        try:
            # リクエストを送信
            response = requests.post(
                url,
                headers=headers,
                json=data,
                timeout=60  # タイムアウト設定を追加
            )
            
            if response.status_code == 200:
                result = response.json()
                
                # 音声名を取得
                voice_name = result["output"]["voice"]
                print(f"音声名:{voice_name}")
                
                # プレビュー音声データを取得
                base64_audio = result["output"]["preview_audio"]["data"]
                
                # Base64 音声データをデコード
                audio_bytes = base64.b64decode(base64_audio)
                
                # 音声ファイルをローカルに保存
                filename = f"{voice_name}_preview.wav"
                
                # 音声データをローカルファイルに書き込み
                with open(filename, 'wb') as f:
                    f.write(audio_bytes)
                
                print(f"音声がローカルファイルに保存されました:{filename}")
                print(f"ファイルパス:{os.path.abspath(filename)}")
                
                return voice_name, audio_bytes, filename
            else:
                print(f"リクエストがステータスコードで失敗しました:{response.status_code}")
                print(f"応答内容:{response.text}")
                return None, None, None
                
        except requests.exceptions.RequestException as e:
            print(f"ネットワークリクエストエラーが発生しました:{e}")
            return None, None, None
        except KeyError as e:
            print(f"応答データ形式エラー、必須フィールドがありません:{e}")
            print(f"応答内容:{response.text if 'response' in locals() else '応答なし'}")
            return None, None, None
        except Exception as e:
            print(f"不明なエラーが発生しました:{e}")
            return None, None, None
    
    if __name__ == "__main__":
        print("音声の作成を開始します...")
        voice_name, audio_data, saved_filename = create_voice_and_play()
        
        if voice_name:
            print(f"\n音声 '{voice_name}' の作成に成功しました")
            print(f"音声ファイルは '{saved_filename}' として保存されました")
            print(f"ファイルサイズ:{os.path.getsize(saved_filename)} バイト")
        else:
            print("\n音声の作成に失敗しました")

    Java

    Gson 依存関係をインポートする必要があります。Maven または Gradle を使用している場合は、次のように依存関係を追加します:

    Maven

    pom.xml に以下の内容を追加します:

    <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.13.1</version>
    </dependency>

    Gradle

    build.gradle に以下の内容を追加します:

    // https://mvnrepository.com/artifact/com.google.code.gson/gson
    implementation("com.google.code.gson:gson:2.13.1")
    重要

    音声デザインで生成されたカスタム音声を使用して音声合成を行う場合、次のように音声を指定する必要があります:

    MultiModalConversationParam param = MultiModalConversationParam.builder()
                    .parameter("voice", "your_voice") // voice パラメーターを音声デザインで生成されたカスタム音声に置き換え
                    .build();
    import com.google.gson.JsonObject;
    import com.google.gson.JsonParser;
    import java.io.*;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.Base64;
    
    public class Main {
        public static void main(String[] args) {
            Main example = new Main();
            example.createVoice();
        }
    
        public void createVoice() {
            // シンガポールリージョンと北京リージョンでは API キーが異なります。API キーの取得方法:https://www.alibabacloud.com/help/model-studio/get-api-key
            // 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えてください:String apiKey = "sk-xxx"
            String apiKey = System.getenv("DASHSCOPE_API_KEY");
    
            // JSON リクエストボディ文字列を作成
            String jsonBody = "{\n" +
                    "    \"model\": \"qwen-voice-design\",\n" +
                    "    \"input\": {\n" +
                    "        \"action\": \"create\",\n" +
                    "        \"target_model\": \"qwen3-tts-vd-2026-01-26\",\n" +
                    "        \"voice_prompt\": \"A composed middle-aged male announcer with a deep, rich and magnetic voice, a steady speaking speed and clear articulation, is suitable for news broadcasting or documentary commentary.\",\n" +
                    "        \"preview_text\": \"Dear listeners, hello everyone. Welcome to the evening news.\",\n" +
                    "        \"preferred_name\": \"announcer\",\n" +
                    "        \"language\": \"en\"\n" +
                    "    },\n" +
                    "    \"parameters\": {\n" +
                    "        \"sample_rate\": 24000,\n" +
                    "        \"response_format\": \"wav\"\n" +
                    "    }\n" +
                    "}";
    
            HttpURLConnection connection = null;
            try {
                // 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization に置き換えてください
                URL url = new URL("https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization");
                connection = (HttpURLConnection) url.openConnection();
    
                // リクエストメソッドとヘッダーを設定
                connection.setRequestMethod("POST");
                connection.setRequestProperty("Authorization", "Bearer " + apiKey);
                connection.setRequestProperty("Content-Type", "application/json");
                connection.setDoOutput(true);
                connection.setDoInput(true);
    
                // リクエストボディを送信
                try (OutputStream os = connection.getOutputStream()) {
                    byte[] input = jsonBody.getBytes("UTF-8");
                    os.write(input, 0, input.length);
                    os.flush();
                }
    
                // 応答を取得
                int responseCode = connection.getResponseCode();
                if (responseCode == HttpURLConnection.HTTP_OK) {
                    // 応答内容を読み取り
                    StringBuilder response = new StringBuilder();
                    try (BufferedReader br = new BufferedReader(
                            new InputStreamReader(connection.getInputStream(), "UTF-8"))) {
                        String responseLine;
                        while ((responseLine = br.readLine()) != null) {
                            response.append(responseLine.trim());
                        }
                    }
    
                    // JSON 応答を解析
                    JsonObject jsonResponse = JsonParser.parseString(response.toString()).getAsJsonObject();
                    JsonObject outputObj = jsonResponse.getAsJsonObject("output");
                    JsonObject previewAudioObj = outputObj.getAsJsonObject("preview_audio");
    
                    // 音声名を取得
                    String voiceName = outputObj.get("voice").getAsString();
                    System.out.println("音声名: " + voiceName);
    
                    // Base64 エンコードされた音声データを取得
                    String base64Audio = previewAudioObj.get("data").getAsString();
    
                    // Base64 音声データをデコード
                    byte[] audioBytes = Base64.getDecoder().decode(base64Audio);
    
                    // 音声をローカルファイルに保存
                    String filename = voiceName + "_preview.wav";
                    saveAudioToFile(audioBytes, filename);
    
                    System.out.println("音声がローカルファイルに保存されました: " + filename);
    
                } else {
                    // エラー応答を読み取り
                    StringBuilder errorResponse = new StringBuilder();
                    try (BufferedReader br = new BufferedReader(
                            new InputStreamReader(connection.getErrorStream(), "UTF-8"))) {
                        String responseLine;
                        while ((responseLine = br.readLine()) != null) {
                            errorResponse.append(responseLine.trim());
                        }
                    }
    
                    System.out.println("リクエストがステータスコードで失敗しました: " + responseCode);
                    System.out.println("エラー応答: " + errorResponse.toString());
                }
    
            } catch (Exception e) {
                System.err.println("リクエスト中にエラーが発生しました: " + e.getMessage());
                e.printStackTrace();
            } finally {
                if (connection != null) {
                    connection.disconnect();
                }
            }
        }
    
        private void saveAudioToFile(byte[] audioBytes, String filename) {
            try {
                File file = new File(filename);
                try (FileOutputStream fos = new FileOutputStream(file)) {
                    fos.write(audioBytes);
                }
                System.out.println("音声が保存されました: " + file.getAbsolutePath());
            } catch (IOException e) {
                System.err.println("音声ファイルの保存中にエラーが発生しました: " + e.getMessage());
                e.printStackTrace();
            }
        }
    }
  2. 前のステップで生成したカスタム音声を使用して、非ストリーミング音声合成を行います。

    この例は、システム音声を使用した音声合成のための DashScope SDK の「非ストリーミング出力」サンプルコードを参照しています。voice パラメーターを音声デザインで生成されたカスタム音声に置き換えています。単方向ストリーミング合成については、「音声合成 - Qwen」をご参照ください。

    重要な原則:音声デザインに使用されるモデル (target_model) は、後続の音声合成に使用されるモデル (model) と同じでなければなりません。そうでない場合、合成は失敗します。

    Python

    import os
    import dashscope
    
    
    if __name__ == '__main__':
        # 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
        dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
    
        text = "今日の天気はどうですか?"
        # SpeechSynthesizer インターフェイスの使用方法:dashscope.audio.qwen_tts.SpeechSynthesizer.call(...)
        response = dashscope.MultiModalConversation.call(
            model="qwen3-tts-vd-2026-01-26",
            # シンガポールリージョンと北京リージョンでは API キーが異なります。API キーの取得方法:https://www.alibabacloud.com/help/model-studio/get-api-key
            # 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えてください:api_key = "sk-xxx"
            api_key=os.getenv("DASHSCOPE_API_KEY"),
            text=text,
            voice="myvoice", # voice パラメーターを音声デザインで生成されたカスタム音声に置き換え
            stream=False
        )
        print(response)

    Java

    import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
    import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
    import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
    import com.alibaba.dashscope.exception.ApiException;
    import com.alibaba.dashscope.exception.NoApiKeyException;
    import com.alibaba.dashscope.exception.UploadFileException;
    
    import com.alibaba.dashscope.utils.Constants;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.net.URL;
    
    public class Main {
        private static final String MODEL = "qwen3-tts-vd-2026-01-26";
        public static void call() throws ApiException, NoApiKeyException, UploadFileException {
            MultiModalConversation conv = new MultiModalConversation();
            MultiModalConversationParam param = MultiModalConversationParam.builder()
                    // シンガポールリージョンと北京リージョンでは API キーが異なります。API キーの取得方法:https://www.alibabacloud.com/help/model-studio/get-api-key
                    // 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
                    .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                    .model(MODEL)
                    .text("今日は人々が愛するものを作るのに素晴らしい日です!")
                    .parameter("voice", "myvoice") // voice パラメーターを音声デザインで生成されたカスタム音声に置き換え
                    .build();
            MultiModalConversationResult result = conv.call(param);
            String audioUrl = result.getOutput().getAudio().getUrl();
            System.out.print(audioUrl);
    
            // 音声ファイルをローカルにダウンロード
            try (InputStream in = new URL(audioUrl).openStream();
                 FileOutputStream out = new FileOutputStream("downloaded_audio.wav")) {
                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = in.read(buffer)) != -1) {
                    out.write(buffer, 0, bytesRead);
                }
                System.out.println("\n音声ファイルがローカルにダウンロードされました:downloaded_audio.wav");
            } catch (Exception e) {
                System.out.println("\n音声ファイルのダウンロード中にエラーが発生しました:" + e.getMessage());
            }
        }
        public static void main(String[] args) {
            try {
                // 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
                Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
                call();
            } catch (ApiException | NoApiKeyException | UploadFileException e) {
                System.out.println(e.getMessage());
            }
            System.exit(0);
        }
    }

命令コントロール

命令コントロールは、自然言語を使用して、複雑な音声パラメーターを調整することなく、ピッチ、速度、感情、音色などの表現効果を正確に制御します。

サポートされるモデル:Qwen3-TTS-Instruct-Flash シリーズのみ。

使用方法instructions パラメーターで命令を指定します。例:「ファッション製品に適した、上昇イントネーションで速いペース」。

サポートされる言語:中国語と英語のみ。

長さ制限:最大 1600 トークン。

シナリオ

  • オーディオブックとラジオドラマのナレーション

  • 広告およびプロモーションビデオのナレーション

  • ゲームの役柄とアニメーションのナレーション

  • 感情知能音声アシスタント

  • ドキュメンタリーとニュース放送

高品質な音声記述の書き方

  • 基本原則

    1. 具体的にする:「深い」「鮮明な」「速いペース」などの記述的な言葉を使用します。「良い」「普通」などの曖昧な言葉は避けてください。

    2. 多次元的にする:ピッチ、速度、感情などの複数の次元を組み合わせます。「高音」などの単一次元の記述は広すぎます。

    3. 客観的にする:個人的な好みではなく、物理的および知覚的な特徴に焦点を当てます。「私のお気に入りの音」ではなく、「高音でエネルギッシュ」を使用してください。

    4. 独創的にする:特定の人々の模倣を要求するのではなく、音質を記述します。モデルは直接の模倣をサポートしていません。

    5. 簡潔にする:すべての単語が目的を果たすようにします。反復的な同義語や無意味な強調語は避けてください。

  • 次元記述リファレンス:複数の次元を組み合わせて、より豊かな視覚効果を作成できます。

    ディメンション

    記述例

    ピッチ

    高い、中くらい、低い、高音、低音

    速度

    速い、中くらい、遅い、速いペース、遅いペース

    感情

    陽気、穏やか、優しい、真面目、活発、落ち着いた、癒し

    特徴

    磁力的、鮮明、かすれた、まろやか、甘い、深い、力強い

    用途

    ニュース放送、広告ナレーション、オーディオブック、アニメーションの役、音声アシスタント、ドキュメンタリーナレーション

    • 標準的な放送スタイル:明瞭で正確な発音、丸みのある発音。

    • 段階的な感情効果:通常の会話から叫び声へと音量が急激に増加し、率直な性格で興奮しやすく、表現豊かな感情。

    • 特別な感情状態:すすり泣くようなトーンで、発音がわずかに不明瞭でかすれ、泣き声に顕著な緊張感がある。

    • 広告ナレーションスタイル:高音で中程度の速度、エネルギーと魅力に満ち、広告ナレーションに適している。

    • 優しく癒しのあるスタイル:ゆっくりとしたペースで、優しく甘いピッチ、そして思いやりのある友人のような癒しと温かみのあるトーン。

API リファレンス

音声合成 - Qwen API リファレンス

音声クローン API リファレンス

音声デザイン API リファレンス

モデル機能の比較

機能/属性

Qwen3-TTS-Instruct-Flash

Qwen3-TTS-VD

Qwen3-TTS-VC

Qwen3-TTS-Flash

Qwen-TTS

サポートされる言語

音声によって異なります:中国語 (標準語)、英語、スペイン語、ロシア語、イタリア語、フランス語、韓国語、日本語、ドイツ語、ポルトガル語

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

音声によって異なります:中国語 (標準語、上海語、北京方言、四川方言、南京方言、陝西方言、閩南語、天津方言)、広東語、英語、フランス語、ドイツ語、ロシア語、イタリア語、スペイン語、ポルトガル語、日本語、韓国語

音声によって異なります:中国語 (標準語、上海語、北京方言、四川方言)、英語

音声フォーマット

  • wav: 非ストリーミング出力用

  • pcm: ストリーミング出力用、Base64 エンコード

音声サンプリングレート

24 kHz

音声クローン

非対応

対応

非対応

音声デザイン

非対応

対応

非対応

SSML

非対応

LaTeX

非対応

音量コントロール

対応

命令コントロールを使用して調整できます。

非対応

話速コントロール

対応

命令コントロールを使用して設定を調整できます。

非対応

ピッチコントロール

対応

命令コントロールを使用して設定を調整できます。

非対応

ビットレートコントロール

非対応

タイムスタンプ

非対応

命令コントロール (Instruct)

対応

非対応

ストリーミング入力

非対応

ストリーミング出力

対応

レート制限

RPM: 180

RPM: 180

RPM: 180

RPM はモデルによって異なります:

  • qwen3-tts-flash, qwen3-tts-flash-2025-11-27: 180

  • qwen3-tts-flash-2025-09-18: 10

RPM: 10

TPM (入出力トークンを含む): 100,000

接続タイプ

Java/Python SDK, WebSocket API

料金

国際:10,000 文字あたり 0.115 米ドル

中国本土:10,000 文字あたり 0.115 米ドル

国際:10,000 文字あたり 0.115 米ドル

中国本土:10,000 文字あたり 0.115 米ドル

国際:10,000 文字あたり 0.115 米ドル

中国本土:10,000 文字あたり 0.115 米ドル

国際:10,000 文字あたり 0.1 米ドル

中国本土:10,000 文字あたり 0.114682 米ドル

中国本土:

  • 入力コスト:1,000 トークンあたり 0.230 米ドル

  • 出力コスト:1,000 トークンあたり 1.434 米ドル

音声のトークン変換ルール:音声 1 秒あたり 50 トークン。音声の長さが 1 秒未満の場合は、50 トークンとしてカウントされます。

サポートされるシステム音声

サポートされる音声はモデルによって異なります。voice リクエストパラメーターを音声リストのvoice パラメーター列の値に設定してください。

voice パラメーター

詳細

サポートされる言語

サポートされるモデル

Cherry

音声名:Cherry

説明:明るく、ポジティブで、フレンドリーで自然な若い女性 (女性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, qwen3-tts-flash-2025-09-18

  • Qwen-TTS: qwen-tts, qwen-tts-2025-04-10, qwen-tts-latest, qwen-tts-2025-05-22

Serena

音声名:Serena

説明:優しい若い女性 (女性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

  • Qwen-TTS: qwen-tts, qwen-tts-2025-04-10, qwen-tts-latest, qwen-tts-2025-05-22

Ethan

音声名:Ethan

説明:わずかに北方のアクセントがある標準中国語。明るく、温かく、エネルギッシュで活気がある (男性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, qwen3-tts-flash-2025-09-18

  • Qwen-TTS: qwen-tts, qwen-tts-2025-04-10, qwen-tts-latest, qwen-tts-2025-05-22

Chelsie

音声名:Chelsie

説明:二次元のバーチャル彼女 (女性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

  • Qwen-TTS: qwen-tts, qwen-tts-2025-04-10, qwen-tts-latest, qwen-tts-2025-05-22

Momo

音声名:Momo

説明:遊び心があり、いたずら好きで、あなたを元気づける (女性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Vivian

音声名:Vivian

説明:自信があり、かわいくて、少し気性が荒い (女性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Moon

音声名:Moon

説明:月白 (つきしろ) という名の、大胆でハンサムな男性 (男性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Maia

音声名:Maia

説明:知性と優しさを兼ね備えている (女性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Kai

音声名:Kai

説明:耳のための癒しのオーディオスパ (男性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Nofish

音声名:Nofish

説明:そり舌音が発音できないデザイナー (男性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, qwen3-tts-flash-2025-09-18

Bella

音声名:Bella

説明:お酒は飲むけど、酔っても決して手は出さない女の子 (女性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Jennifer

音声名:Jennifer

説明:プレミアムで映画品質のアメリカ英語の女性の声 (女性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, qwen3-tts-flash-2025-09-18

Ryan

音声名:Ryan

説明:リズムに満ち、ドラマチックな才能にあふれ、本物らしさと緊張感のバランスが取れている (男性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, qwen3-tts-flash-2025-09-18

Katerina

音声名:Katerina

説明:豊かで記憶に残るリズムを持つ成熟した女性の声 (女性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, qwen3-tts-flash-2025-09-18

Aiden

音声名:Aiden

説明:料理が得意なアメリカ英語の若い男性 (男性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Eldric Sage

音声名:Eldric Sage

説明:穏やかで賢い長老—松の木のように風化しているが、鏡のように明晰な心を持つ (男性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Mia

音声名:Mia

説明:春の水のように優しく、新雪のように従順 (女性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Mochi

音声名:Mochi

説明:賢く、機転の利く若者—子供のような無邪気さが残りつつも、知恵が光る (男性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Bellona

音声名:Bellona

説明:キャラクターに命を吹き込む力強くクリアな声—血が沸き立つほど感動的。英雄的な壮大さと完璧な発音で、この声は人間の表現の全スペクトルを捉えます。

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Vincent

音声名:Vincent

説明:独特のかすれたスモーキーな声—一言で軍隊と英雄的な物語を思い起こさせる (男性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Bunny

音声名:Bunny

説明:「かわいさ」あふれる小さな女の子 (女性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Neil

音声名:Neil

説明:平坦なベースラインのイントネーションと正確でクリアな発音—最もプロフェッショナルなニュースアンカー (男性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Elias

音声名:Elias

説明:学術的な厳密さを保ちながら、物語の技法を用いて複雑な知識を消化しやすい学習モジュールに変える (女性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, qwen3-tts-flash-2025-09-18

Arthur

音声名:Arthur

説明:時間とタバコの煙に浸された素朴で土の香りがする声—村の物語や珍しい話をゆっくりと展開する (男性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Nini

音声名:Nini

説明:甘い餅のように柔らかく、甘えん坊な声—「お兄ちゃん」という長引く呼び声は骨まで溶けるほど甘い (女性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Ebona

音声名:Ebona

説明:彼女のささやきは、心の最も暗い隅で錆びた鍵がゆっくりと回るようなもの—子供時代の影と未知の恐怖が隠れている場所 (女性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Seren

音声名:Seren

説明:早く眠りにつくための優しく癒しのある声。おやすみなさい、良い夢を (女性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Pip

音声名:Pip

説明:子供らしい好奇心に満ちた、遊び心のあるいたずら好きな男の子—これはあなたのしんちゃんの記憶ですか? (男性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Stella

音声名:Stella

説明:普段は甘ったるく、ぼんやりしたティーンエイジャーの女の子の声—しかし、「月に代わっておしおきよ!」と叫ぶと、揺るぎない愛と正義を瞬時に放つ (女性)

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

  • Qwen3-TTS-Instruct-Flash: qwen3-tts-instruct-flash, qwen3-tts-instruct-flash-2026-01-26

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Bodega

音声名:Bodega

説明:情熱的なスペイン人男性 (男性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Sonrisa

音声名:Sonisa

説明:陽気で社交的なラテンアメリカの女性 (女性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Alek

音声名:Alek

説明:ロシアの魂のように冷たいが、ウールのコートの裏地のように温かい (男性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Dolce

音声名:Dolce

説明:のんびりしたイタリア人男性 (男性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Sohee

音声名:Sohee

説明:温かく、陽気で、感情表現豊かな韓国のお姉さん (女性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Ono Anna

音声名:Ono Anna

説明:賢く、元気な幼なじみ (女性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Lenn

音声名:Lenn

説明:心は合理的、細部は反抗的—スーツを着てポストパンクを聴くドイツの若者

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Emilien

音声名:Emilien

説明:ロマンチックなフランスのお兄さん (男性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Andre

音声名:Andre

説明:魅力的で、自然で、安定した男性の声

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Radio Gol

音声名:Radio Gol

説明:サッカーの詩人、ラジオ・ゴル!今日は私の名前を使ってサッカーを解説します (男性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27

Jada

音声名:上海 - Jada

説明:速いペースでエネルギッシュな上海のおばさん (女性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, qwen3-tts-flash-2025-09-18

  • Qwen-TTS: qwen-tts-latest, qwen-tts-2025-05-22

Dylan

音声名:北京 - Dylan

説明:北京の胡同で育った若者 (男性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, qwen3-tts-flash-2025-09-18

  • Qwen-TTS: qwen-tts-latest, qwen-tts-2025-05-22

Li

音声名:南京 - Li

説明:忍耐強いヨガの先生 (男性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, qwen3-tts-flash-2025-09-18

Marcus

音声名:陝西 - Marcus

説明:広い顔、少ない言葉、誠実な心、深い声—本物の陝西の味 (男性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, qwen3-tts-flash-2025-09-18

Roy

音声名:閩南 - Roy

説明:ユーモラスで、率直で、活発な台湾の男性 (男性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, qwen3-tts-flash-2025-09-18

Peter

音声名:天津 - Peter

説明:天津スタイルの漫才、プロのツッコミ役 (男性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, and qwen3-tts-flash-2025-09-18

Sunny

音声名:四川 - Sunny

説明:心を溶かすほど甘い四川の女の子 (女性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, qwen3-tts-flash-2025-09-18

  • Qwen-TTS: qwen-tts-latest, qwen-tts-2025-05-22

Eric

音声名:四川 - Eric

説明:日常生活で際立つ成都出身の四川人男性 (男性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, qwen3-tts-flash-2025-09-18

Rocky

音声名:広東 - Rocky

説明:ライブチャットを提供するユーモラスで機知に富んだタケシ (男性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, and qwen3-tts-flash-2025-09-18

Kiki

音声名:広東 - Kiki

説明:甘い香港の女の子の親友 (女性)

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

  • Qwen3-TTS-Flash: qwen3-tts-flash, qwen3-tts-flash-2025-11-27, and qwen3-tts-flash-2025-09-18

よくある質問

Q:音声ファイルの URL はどのくらいの期間有効ですか?

A:音声ファイルの URL は 24 時間後に有効期限が切れます。