全部产品
Search
文档中心

大模型服务平台百炼:非实时语音合成

更新时间:May 12, 2026

非实时语音合成通过 HTTP API 将文本转换为语音,适用于有声读物、课件配音、内容生产等对延迟不敏感的场景。支持 Qwen-TTS模型系列,提供丰富音色、多语言支持、声音复刻与声音设计等能力。

概述

通过 HTTP API 将文本转换为语音文件,适用于有声读物、课件配音、内容批量生产等对延迟不敏感的场景。

  • 通过 HTTP API 调用,发送完整文本获取音频,支持流式输出(边合成边播放)

  • 覆盖多种语言,支持中文方言

  • 支持声音复刻声音设计音色定制

  • 支持指令控制,可通过自然语言指令控制语音表现力

如果您需要实时语音合成(低延迟流式输出),请参见实时语音合成-千问(WebSocket API)。如需了解各模型的选型建议,请参见语音合成

前提条件

快速开始

以下是各模型系列的语音合成示例代码。更多语言的示例代码和详细参数说明,请参见各模型的API 参考

Qwen-TTS

以下示例演示如何使用系统音色进行语音合成。

非流式输出

非流式模式下,通过返回的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 = "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 Key不同。获取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key = "sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    text=text,
    voice="Cherry",
    language_type="English", # 建议与文本语种一致,以获得正确的发音和自然的语调。
    # 如需使用指令控制功能,请取消下方注释,并将model替换为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 Key不同。获取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // 若没有配置环境变量,请用百炼API Key将下行替换为:.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","语速较快,带有明显的上扬语调,适合介绍时尚产品。")
                // .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 Key不同。获取API Key: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
#
# Installation instructions for 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

# 以下为新加坡地域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 = "Today is a wonderful day to build something people love!"
response = dashscope.MultiModalConversation.call(
    # 新加坡地域和北京地域的API Key不同。获取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # 若没有配置环境变量,请用百炼API Key将下行替换为: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='语速较快,带有明显的上扬语调,适合介绍时尚产品。',
    # 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 Key不同。获取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // 若没有配置环境变量,请用百炼API Key将下行替换为:.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","语速较快,带有明显的上扬语调,适合介绍时尚产品。")
                // .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) {
        // 以下为新加坡地域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 Key不同。获取API Key: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"
    }
}'

进阶功能

指令控制

指令控制允许您通过自然语言描述精确控制语音的表达效果,无需调整复杂的音频参数。只需用简单的文字描述,即可让合成语音呈现特定的音调、语速、情感或音色特点,无需调整复杂的音频参数。

支持的模型:仅支持千问3-TTS-Instruct-Flash-Realtime系列模型。

使用方式:通过 instruction 参数指定指令内容,例如“语速较快,带有明显的上扬语调,适合介绍时尚产品”。

指令文本支持的语言:仅支持中文和英文。

指令文本长度限制:不超过 1600 Token。

适用场景

  • 有声书和广播剧配音

  • 广告和宣传片配音

  • 游戏角色和动画配音

  • 情感化的智能语音助手

  • 纪录片和新闻播报

如何编写高质量的声音描述:

  • 核心原则:

    1. 具体而非模糊:使用能描绘具体声音特质的词语,如“低沉”、“清脆”、“语速偏快”。避免使用“好听”、“普通”等主观且缺乏信息量的词汇。

    2. 多维而非单一:好的描述通常结合多个维度(如音调、语速、情感等)。仅描述单一维度(如“高音”)过于宽泛,难以生成特色鲜明的效果。

    3. 客观而非主观:聚焦声音本身的物理和感知特征,而非个人喜好。例如,用“音调偏高,带有活力”代替“我最喜欢的声音”。

    4. 原创而非模仿:请描述声音的特质,而非要求模仿特定人物(如名人、演员)。模仿请求涉及版权风险,且模型不支持直接模仿。

    5. 简洁而非冗余:确保每个词都有意义。避免重复同义词或堆砌无意义的强调词(如”非常非常棒的声音”)。

  • 描述维度参考:组合多个维度可以创造更丰富的表达效果。

    维度

    描述示例

    音调

    高音、中音、低音、偏高、偏低

    语速

    快速、中速、缓慢、偏快、偏慢

    情感

    开朗、沉稳、温柔、严肃、活泼、冷静、治愈

    特点

    有磁性、清脆、沙哑、圆润、甜美、浑厚、有力

    用途

    新闻播报、广告配音、有声书、动画角色、语音助手、纪录片解说

  • 示例:

    • 标准播音风格:吐字清晰精准,字正腔圆

    • 情绪递进效果:音量由正常对话迅速增强至高喊,性格直率,情绪易激动且外露

    • 特殊情感状态:哭腔导致发音略微含糊,略显沙哑,带有明显哭腔的紧张感

    • 广告配音风格:音调偏高,语速中等,充满活力和感染力,适合广告配音

    • 温柔治愈风格:语速偏慢,音调温柔甜美,语气治愈温暖,像贴心朋友般关怀

适用范围

不同服务部署范围支持的模型不同:

国际

服务部署范围为国际时,模型推理计算资源在全球范围内动态调度(不含中国内地);静态数据存储于您所选的地域。该部署范围支持的地域:新加坡。

调用以下模型时,请选择新加坡地域的API Key

  • Qwen-TTS

    • 千问3-TTS-Instruct-Flash:qwen3-tts-instruct-flash(稳定版,当前等同qwen3-tts-instruct-flash-2026-01-26)、qwen3-tts-instruct-flash-2026-01-26(最新快照版)

    • 千问3-TTS-VDqwen3-tts-vd-2026-01-26(最新快照版)

    • 千问3-TTS-VCqwen3-tts-vc-2026-01-22(最新快照版)

    • 千问3-TTS-Flash:qwen3-tts-flash(稳定版,当前等同qwen3-tts-flash-2025-11-27)、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18

中国内地

服务部署范围为中国内地时,模型推理计算资源仅限于中国内地;静态数据存储于您所选的地域。该部署范围支持的地域:华北2(北京)。

调用以下模型时,请选择北京地域的API Key

  • Qwen-TTS

    • 千问3-TTS-Instruct-Flash:qwen3-tts-instruct-flash(稳定版,当前等同qwen3-tts-instruct-flash-2026-01-26)、qwen3-tts-instruct-flash-2026-01-26(最新快照版)

    • 千问3-TTS-VDqwen3-tts-vd-2026-01-26(最新快照版)

    • 千问3-TTS-VCqwen3-tts-vc-2026-01-22(最新快照版)

    • 千问3-TTS-Flash:qwen3-tts-flash(稳定版,当前等同qwen3-tts-flash-2025-11-27)、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18

    • 千问-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设置为下表中voice 参数列对应的值即可。

API 参考

常见问题

Q:音频文件链接的有效期是多久?

A:音频文件链接在生成后 24 小时内有效,过期后需重新调用接口生成。