非リアルタイム音声合成 (Qwen-TTS) API のリクエストパラメーターと応答フィールドについて説明します。
リクエスト本文 |
DashScope Python SDK の Copy Copy Copy
DashScope Python SDK の Copy Copy Copy |
modelstring(必須)モデル名。詳細については、「対応モデル」をご参照ください。 | |
inputobject(必須)入力パラメーター。
プロパティ text string (必須)合成するテキスト。複数言語を混在させた入力をサポートします。最大入力長は 600 文字です。voice string (必須)使用する音声。「対応システム音声」をご参照ください。language_type string (オプション)合成されるオーディオの言語。デフォルトは Auto です。
|
応答オブジェクト (ストリーミング形式と非ストリーミング形式は同一) | Copy |
status_code integerRFC 9110 で定義されている HTTP ステータスコード。一般的な値:• 200:リクエスト成功。• 400:リクエストパラメーターが無効。• 401:認証失敗。• 404:リソースが見つかりません。• 500:内部サーバーエラー。 | |
request_id stringこのリクエストの一意の識別子。トラブルシューティングに使用します。 | |
code string失敗時に返されるエラーコード。「エラーコード」をご参照ください。 | |
message string失敗時に返されるエラーメッセージ。「エラーコード」をご参照ください。 | |
outputobjectモデルの出力。
プロパティ text string常に null。このフィールドは無視してください。choicesstring常に null。このフィールドは無視してください。finish_reasonstring生成ステータス:
objectモデルからのオーディオ出力。
プロパティ url string完全なオーディオファイルの URL。有効期間は 24 時間です。非ストリーミングモードでは、応答で直接返されます。ストリーミングモードでは、SSE ストリームの最終チャンクでのみ返されます (中間チャンクにはこのフィールドは含まれません)。data stringBase64 エンコードされたオーディオデータ。非ストリーミングモードでは、このフィールドは常に空の文字列です (完全なオーディオファイルを取得するには url を使用してください)。ストリーミングモードでは、中間チャンクには Base64 エンコードされたオーディオセグメントが含まれ、最終チャンクは空の文字列を返します (完全なオーディオを取得するには url を使用してください)。id stringオーディオの一意の識別子。expires_at integerURL の有効期限 (UNIX タイムスタンプ)。 | |
usage objectこのリクエストの文字数使用量。
プロパティ output_tokens integer出力オーディオによって消費されたトークン数。Qwen3-TTS-Flash モデルの場合、このフィールドは常に 0 です。input_tokens integer入力テキストによって消費されたトークン数。Qwen3-TTS-Flash モデルの場合、このフィールドは常に 0 です。characters integer入力テキストの文字数。Qwen3-TTS-Flash モデルによってのみ返されます。 | |
request_id stringこのリクエストの一意の識別子。トラブルシューティングに使用します。 |
音声のダウンロードと再生
例を実行する前に、API キーを取得して設定し、DashScope SDK をインストールしてください。Python の再生例には PyAudio と NumPy も必要です。PyAudio のインストール方法はコード内のコメントを参照し、NumPy はpip install numpy でインストールしてください。
音声のダウンロード(Java)
Gson 依存関係をインポートする必要があります。Maven または Gradle を使用して追加します。- Maven
- Gradle
pom.xml に以下を追加します。Copy
<!-- 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>
build.gradle に以下を追加します。Copy
// https://mvnrepository.com/artifact/com.google.code.gson/gson
implementation("com.google.code.gson:gson:2.13.1")
Copy
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 {
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") // 正しい発音と自然なイントネーションを得るため、テキストの言語と一致させることを推奨します。
.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);
}
}
ストリーミング再生
- Python
- Java
Copy
# 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
# 以下はシンガポールリージョンの構成です。{WorkspaceId} を実際のワークスペース ID に置き換えてください。region の値はリージョンによって異なります。
client = dashscope.Client(
# シンガポールおよび北京リージョンの 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"),
workspace="{WorkspaceId}",
region="ap-southeast-1",
)
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!"
for chunk in client.audio.tts.http.stream(
text,
model="qwen3-tts-flash",
voice="Cherry",
language_type="English", # 正しい発音と自然なイントネーションを得るため、テキストの言語と一致させることを推奨します。
):
if chunk.audio:
# 音声データを直接再生します(chunk.audio にはデコード済みの音声データ (bytes) が含まれます)
stream.write(chunk.audio)
if chunk.is_final:
print(f"finish at: {chunk.expires_at}")
time.sleep(0.8)
# リソースをクリーンアップ
stream.stop_stream()
stream.close()
p.terminate()
Gson 依存関係をインポートする必要があります。Maven または Gradle を使用して追加します。
- Maven
- Gradle
pom.xml に以下を追加します。Copy
<!-- 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>
build.gradle に以下を追加します。Copy
// https://mvnrepository.com/artifact/com.google.code.gson/gson
implementation("com.google.code.gson:gson:2.13.1")
Copy
// 最新バージョンの 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 {
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") // 正しい発音と自然なイントネーションを得るため、テキストの言語と一致させることを推奨します。
.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);
}
}