非リアルタイム音声合成は、HTTP API を通じてテキストを音声に変換します。オーディオブック制作、オンライン教育のナレーション、コンテンツ作成など、遅延許容可能なシナリオ向けに設計されており、多様な音声、複数の言語、音声クローニング、音声デザインをサポートしています。
概要
HTTP API を使用して、完全なテキストを音声ファイルに変換します。出力モードには、ノンストリーミングとストリーミングの 2 種類があります。
- ノンストリーミング では、24 時間有効な音声ファイルの URL が返されます。ストリーミング では、PCM 音声データがチャンク単位で返されます。
- 中国語の方言を含む複数の言語をサポートしています。
- 音声クローニングおよび音声デザインをサポートしており、カスタム音声を作成できます。
- 命令によるコントロールをサポートしており、自然言語による命令で音声の表現力を制御できます。
低遅延ストリーミングのシナリオについては、「リアルタイム音声合成」をご参照ください。モデル選択に関する推奨事項については、「音声合成」をご参照ください。
前提条件
開始前に、以下の準備を完了してください。
- API キーを構成し、環境変数として設定します。
- (任意)DashScope SDK を介して API を呼び出す場合は、最新の SDK をインストールします。
クイックスタート
以下のタブでは、各モデルシリーズごとの音声合成方法を示します。その他の言語のサンプルや詳細なパラメーター説明については、「API リファレンス」をご参照ください。
Qwen-TTS
このセクションのすべての例は、システム音声を使用しています。
ノンストリーミング出力
ノンストリーミングモードでは、応答に合成された音声ファイルを指す url フィールドが含まれます。この URL の有効期間は 24 時間です。
Python
import os
import dashscope
# 以下はシンガポールリージョンの構成です。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
text = "Today is a wonderful day to build something people love!"
# SpeechSynthesizer インターフェイスの使用方法: dashscope.audio.qwen_tts.SpeechSynthesizer.call(...)
response = dashscope.MultiModalConversation.call(
# 命令によるコントロール機能を使用する場合は、model を qwen3-tts-instruct-flash に置き換えます。
model="qwen3-tts-flash",
# シンガポールおよび北京リージョンの API キーは異なります。API キーの取得: https://www.alibabacloud.com/help/zh/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", # 正しい発音と自然なイントネーションを得るため、テキストの言語と一致させることを推奨します。
# 命令によるコントロール機能を使用する場合は、以下の行のコメントを解除し、model を qwen3-tts-instruct-flash に置き換えます。
# instructions='Fast-paced speech with noticeable upward intonation, ideal for presenting fashion products.',
# 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.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/zh/model-studio/get-api-key
// 環境変数を構成していない場合は、次の行を Model Studio API キーに置き換えます: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model(MODEL)
.text("Today is a wonderful day to build something people love!")
.voice(AudioParameters.Voice.CHERRY)
.languageType("English") // 正しい発音と自然なイントネーションを得るため、テキストの言語と一致させることを推奨します。
// 命令によるコントロール機能を使用する場合は、以下の行のコメントを解除し、model を qwen3-tts-instruct-flash に置き換えます。
// .parameter("instructions","Fast-paced speech with noticeable upward intonation, ideal for presenting fashion products.")
// .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) {
// 以下はシンガポールリージョンの構成です。
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
# ======= 重要 =======
# 以下はシンガポールリージョンの構成です。
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得: https://www.alibabacloud.com/help/zh/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": "Today is a wonderful day to build something people love!",
"voice": "Cherry",
"language_type": "English"
}
}'
ストリーミング出力
ストリーミングモードでは、Base64 エンコードされた PCM 形式の音声データがチャンク単位で返されます。最後のパケットには、完全な音声ファイルへの 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
# or
# 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
# 以下はシンガポールリージョンの構成です。
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 = "Today is a wonderful day to build something people love!"
response = dashscope.MultiModalConversation.call(
# シンガポールおよび北京リージョンの API キーは異なります。API キーの取得: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 環境変数を構成していない場合は、次の行を Model Studio API キーに置き換えます: api_key = "sk-xxx"
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 命令によるコントロール機能を使用する場合は、model を qwen3-tts-instruct-flash に置き換えます。
model="qwen3-tts-flash",
text=text,
voice="Cherry",
language_type="English", # 正しい発音と自然なイントネーションを得るため、テキストの言語と一致させることを推奨します。
# 命令によるコントロール機能を使用する場合は、以下の行のコメントを解除し、model を qwen3-tts-instruct-flash に置き換えます。
# instructions='Fast-paced speech with noticeable upward intonation, ideal for presenting fashion products.',
# 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(f"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.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/zh/model-studio/get-api-key
// 環境変数を構成していない場合は、次の行を Model Studio API キーに置き換えます: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model(MODEL)
.text("Today is a wonderful day to build something people love!")
.voice(AudioParameters.Voice.CHERRY)
.languageType("English") // 正しい発音と自然なイントネーションを得るため、テキストの言語と一致させることを推奨します。
// 命令によるコントロール機能を使用する場合は、以下の行のコメントを解除し、model を qwen3-tts-instruct-flash に置き換えます。
// .parameter("instructions","Fast-paced speech with noticeable upward intonation, ideal for presenting fashion products.")
// .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, // フレームサイズ (バイト単位)
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) {
// 以下はシンガポールリージョンの構成です。
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
# ======= 重要 =======
# 以下はシンガポールリージョンの構成です。
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得: https://www.alibabacloud.com/help/zh/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": "Today is a wonderful day to build something people love!",
"voice": "Cherry",
"language_type": "English"
}
}'
高度な機能
命令によるコントロール
モデル別の命令仕様:
Qwen-TTS
サポートモデル: Qwen3-TTS-Instruct-Flash シリーズモデルのみサポートされています。
使用方法: 命令内容を instructions パラメーターを通じて渡します。
命令テキストでサポートされる言語: 中国語および英語のみサポートされています。
命令テキストのトークン数制限: 最大 1,600 トークン。
方言
このセクションでは、中国語の方言(河南方言や四川方言など)で音声を生成する方法について説明します。構成方法はモデルおよび音声タイプによって異なります。
Qwen-TTS
- システム音声: 方言をサポートするシステム音声を使用します。「Qwen-TTS 音声リスト」をご参照ください。
- 音声クローニング音声: 方言はサポートされていません。
- 音声デザイン音声: 方言はサポートされていません。
サポートされる方言: 「Qwen3-TTS」の各モデルの「サポート言語」セクションをご参照ください。
サポートされるモデルとリージョン
シンガポール
以下のモデルを呼び出すには、シンガポールリージョンのAPI キーを使用します。
-
Qwen-TTS:
- 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 キーを使用します。
-
Qwen-TTS:
- 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(スナップショット)
サポートされるシステム音声
モデルによってサポートされる音声は異なります。voice リクエストパラメーターを、以下の表の音声パラメーター列の値に設定します。
- Qwen-TTS 音声リスト
API リファレンス
よくある質問
Q: 音声ファイルの URL の有効期間はどのくらいですか?
A: 音声ファイルの URL は生成後 24 時間有効です。URL の有効期限が切れた場合は、再度 API を呼び出して新しい URL を取得してください。