AI.Demo/src/md/ali-audio-tts.md

70 KiB
Raw Blame History

语音合成-千问提供多种拟人音色,支持多语言及方言,并可在同一音色下输出多语言内容。系统可自适应语气,流畅处理复杂文本。

核心功能

  • 支持流式输出,可以边合成边播放

  • 覆盖多种语言,包含中文方言

  • 提供丰富音色,满足场景需求

  • 提供声音复刻声音设计两种音色定制方式

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

适用范围

支持的模型:

中国内地

中国内地部署模式下,接入点与数据存储均位于北京地域,模型推理计算资源仅限于中国内地。

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

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

  • 千问3-TTS-VD****qwen3-tts-vd-2026-01-26最新快照版

  • 千问3-TTS-VC****qwen3-tts-vc-2026-01-22最新快照版

  • 千问3-TTS-Flashqwen3-tts-flash稳定版当前等同qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18

  • 千问-TTSqwen-tts稳定版当前等同qwen-tts-2025-04-10、qwen-tts-latest最新版当前等同qwen-tts-2025-05-22、qwen-tts-2025-05-22快照版、qwen-tts-2025-04-10快照版

国际

国际部署模式下,接入点与数据存储均位于新加坡地域,模型推理计算资源在全球范围内动态调度(不含中国内地)。

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

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

  • 千问3-TTS-VD****qwen3-tts-vd-2026-01-26最新快照版

  • 千问3-TTS-VC****qwen3-tts-vc-2026-01-22最新快照版

  • 千问3-TTS-Flashqwen3-tts-flash稳定版当前等同qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18

更多信息请参见模型列表

模型选型

场景 推荐模型 推荐理由
品牌形象、专属声音、扩展系统音色等语音定制(基于文本描述) qwen3-tts-vd-2026-01-26 支持声音设计,无需音频样本,通过文本描述创建定制化音色,适合从零开始设计品牌专属声音
品牌形象、专属声音、扩展系统音色等语音定制(基于音频样本) qwen3-tts-vc-2026-01-22 支持声音复刻,基于真实音频样本快速复刻音色,打造拟人化品牌声纹,确保音色高度还原与一致性
情感化内容生产(有声书、广播剧、游戏/动画配音) qwen3-tts-instruct-flash 支持指令控制,通过自然语言描述精确控制音调、语速、情感、角色性格,适合需要丰富表现力和角色塑造的场景
移动端导航/通知播报 qwen3-tts-flash 按字符计费简单透明,适合短文本高频调用场景
在线教育课件配音 qwen3-tts-flash 支持多语种与方言,满足地域化教学需求
有声读物批量生产 qwen3-tts-flash 成本可控,多音色选择丰富内容表现力

更多说明请参见模型功能特性对比

快速开始

准备工作

  • 配置 API Key配置API Key到环境变量

  • 如果通过 DashScope SDK 进行调用,需要安装最新版SDK。DashScope Java SDK 版本需要不低于 2.21.9DashScope Python SDK 版本需要不低于 1.24.6。

    说明

    DashScope Python SDK中的SpeechSynthesizer接口已统一为MultiModalConversation,使用新接口只需替换接口名称即可,其他参数完全兼容。

使用系统音色进行语音合成

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

非流式输出

通过返回的url来获取合成的语音。URL 有效期为24 小时。

Python

import os
import dashscope

# 以下为北京地域url若使用新加坡地域的模型需将url替换为https://dashscope-intl.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope.aliyuncs.com/api/v1'

text = "那我来给大家推荐一款T恤这款呢真的是超级好看这个颜色呢很显气质而且呢也是搭配的绝佳单品大家可以闭眼入真的是非常好看对身材的包容性也很好不管啥身材的宝宝呢穿上去都是很好看的。推荐宝宝们下单哦。"
# SpeechSynthesizer接口使用方法dashscope.audio.qwen_tts.SpeechSynthesizer.call(...)
response = dashscope.MultiModalConversation.call(
    # 如需使用指令控制功能请将model替换为qwen3-tts-instruct-flash
    model="qwen3-tts-flash",
    # 新加坡和北京地域的API Key不同。获取API Keyhttps://help.aliyun.com/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="Chinese", # 建议与文本语种一致,以获得正确的发音和自然的语调。
    # 如需使用指令控制功能请取消下方注释并将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 Keyhttps://help.aliyun.com/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) {
        try {
            // 以下为北京地域url若使用新加坡地域的模型需将url替换为https://dashscope-intl.aliyuncs.com/api/v1
            Constants.baseHttpApiUrl = "https://dashscope.aliyuncs.com/api/v1";
            call();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

cURL

# ======= 重要提示 =======
# 以下为北京地域url若使用新加坡地域的模型需将url替换为https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# 新加坡地域和北京地域的API Key不同。获取API Keyhttps://help.aliyun.com/zh/model-studio/get-api-key
# === 执行时请删除该注释 ===

curl -X POST 'https://dashscope.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": "那我来给大家推荐一款T恤这款呢真的是超级好看这个颜色呢很显气质而且呢也是搭配的绝佳单品大家可以闭眼入真的是非常好看对身材的包容性也很好不管啥身材的宝宝呢穿上去都是很好看的。推荐宝宝们下单哦。",
        "voice": "Cherry",
        "language_type": "Chinese"
    }
}'

流式输出

可以流式地将音频数据以 Base64 格式进行输出,此时最后一个数据包中包含完整音频的 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-intl.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope.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 Key不同。获取API Keyhttps://help.aliyun.com/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="Chinese",  # 建议与文本语种一致,以获得正确的发音和自然的语调。
    # 如需使用指令控制功能请取消下方注释并将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")
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 Keyhttps://help.aliyun.com/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-intl.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl = "https://dashscope.aliyuncs.com/api/v1";
        try {
            streamCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

cURL

# ======= 重要提示 =======
# 以下为北京地域url若使用新加坡地域的模型需将url替换为https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# 新加坡地域和北京地域的API Key不同。获取API Keyhttps://help.aliyun.com/zh/model-studio/get-api-key
# === 执行时请删除该注释 ===

curl -X POST 'https://dashscope.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": "那我来给大家推荐一款T恤这款呢真的是超级好看这个颜色呢很显气质而且呢也是搭配的绝佳单品大家可以闭眼入真的是非常好看对身材的包容性也很好不管啥身材的宝宝呢穿上去都是很好看的。推荐宝宝们下单哦。",
        "voice": "Cherry",
        "language_type": "Chinese"
    }
}'

使用声音复刻音色进行语音合成

声音复刻服务不提供预览音频。需将复刻生成的音色应用于语音合成后,才能试听并评估效果。

以下示例演示了如何在语音合成中使用声音复刻生成的专属音色实现与原音高度相似的输出效果。这里参考了使用系统音色进行语音合成DashScope SDK的“非流式输出”示例代码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 Key不同。获取API Keyhttps://help.aliyun.com/zh/model-studio/get-api-key
    # 若没有配置环境变量请用百炼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-intl.aliyuncs.com/api/v1/services/audio/tts/customization
    url = "https://dashscope.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"创建 voice 失败: {resp.status_code}, {resp.text}")

    try:
        return resp.json()["output"]["voice"]
    except (KeyError, ValueError) as e:
        raise RuntimeError(f"解析 voice 响应失败: {e}")


if __name__ == '__main__':
    # 以下为北京地域url若使用新加坡地域的模型需将url替换为https://dashscope-intl.aliyuncs.com/api/v1
    dashscope.base_http_api_url = 'https://dashscope.aliyuncs.com/api/v1'

    text = "今天天气怎么样?"
    # SpeechSynthesizer接口使用方法dashscope.audio.qwen_tts.SpeechSynthesizer.call(...)
    response = dashscope.MultiModalConversation.call(
        model=DEFAULT_TARGET_MODEL,
        # 新加坡和北京地域的API Key不同。获取API Keyhttps://help.aliyun.com/zh/model-studio/get-api-key
        # 若没有配置环境变量请用百炼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";

    // 生成 data 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 创建 voice
    public static String createVoice() throws Exception {
        // 新加坡和北京地域的API Key不同。获取API Keyhttps://help.aliyun.com/zh/model-studio/get-api-key
        // 若没有配置环境变量请用百炼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-intl.aliyuncs.com/api/v1/services/audio/tts/customization
        String url = "https://dashscope.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 Key不同。获取API Keyhttps://help.aliyun.com/zh/model-studio/get-api-key
                // 若没有配置环境变量请用百炼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-intl.aliyuncs.com/api/v1
            Constants.baseHttpApiUrl = "https://dashscope.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 Key不同。获取API Keyhttps://help.aliyun.com/zh/model-studio/get-api-key
        # 若没有配置环境变量请用百炼API Key将下行替换为api_key = "sk-xxx"
        api_key = os.getenv("DASHSCOPE_API_KEY")
    
        if not api_key:
            print("错误: 未找到DASHSCOPE_API_KEY环境变量请先设置API Key")
            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": "沉稳的中年男性播音员,音色低沉浑厚,富有磁性,语速平稳,吐字清晰,适合用于新闻播报或纪录片解说。",
                "preview_text": "各位听众朋友,大家好,欢迎收听晚间新闻。",
                "preferred_name": "announcer",
                "language": "zh"
            },
            "parameters": {
                "sample_rate": 24000,
                "response_format": "wav"
            }
        }
    
        # 以下为北京地域url若使用新加坡地域的模型需将url替换为https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization
        url = "https://dashscope.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 'No response'}")
            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 Key不同。获取API Keyhttps://help.aliyun.com/zh/model-studio/get-api-key
            // 若没有配置环境变量请用百炼API Key将下行替换为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\": \"沉稳的中年男性播音员,音色低沉浑厚,富有磁性,语速平稳,吐字清晰,适合用于新闻播报或纪录片解说。\",\n" +
                    "        \"preview_text\": \"各位听众朋友,大家好,欢迎收听晚间新闻。\",\n" +
                    "        \"preferred_name\": \"announcer\",\n" +
                    "        \"language\": \"zh\"\n" +
                    "    },\n" +
                    "    \"parameters\": {\n" +
                    "        \"sample_rate\": 24000,\n" +
                    "        \"response_format\": \"wav\"\n" +
                    "    }\n" +
                    "}";
    
            HttpURLConnection connection = null;
            try {
                // 以下为北京地域url若使用新加坡地域的模型需将url替换为https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization
                URL url = new URL("https://dashscope.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参数替换为声音设计生成的专属音色进行语音合成。单向流式合成请参见语音合成-千问

    关键原则:声音设计时使用的模型 (target_model) 必须与后续进行语音合成时使用的模型 (model) 保持一致,否则会导致合成失败。

    Python

    import os
    import dashscope
    
    
    if __name__ == '__main__':
        # 以下为北京地域url若使用新加坡地域的模型需将url替换为https://dashscope-intl.aliyuncs.com/api/v1
        dashscope.base_http_api_url = 'https://dashscope.aliyuncs.com/api/v1'
    
        text = "今天天气怎么样?"
        # SpeechSynthesizer接口使用方法dashscope.audio.qwen_tts.SpeechSynthesizer.call(...)
        response = dashscope.MultiModalConversation.call(
            model="qwen3-tts-vd-2026-01-26",
            # 新加坡和北京地域的API Key不同。获取API Keyhttps://help.aliyun.com/zh/model-studio/get-api-key
            # 若没有配置环境变量请用百炼API Key将下行替换为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 Key不同。获取API Keyhttps://help.aliyun.com/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!")
                    .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-intl.aliyuncs.com/api/v1
                Constants.baseHttpApiUrl = "https://dashscope.aliyuncs.com/api/v1";
                call();
            } catch (ApiException | NoApiKeyException | UploadFileException e) {
                System.out.println(e.getMessage());
            }
            System.exit(0);
        }
    }
    

指令控制

指令控制是一项高级语音合成功能,通过自然语言描述的方式精确控制语音的表达效果。您可以使用简单的文字描述,让合成语音呈现出特定的音调、语速、情感、音色特点,无需调整复杂的音频参数。

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

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

支持语言:描述文本仅支持中文和英文。

长度限制:长度不得超过 1600 Token。

适用场景

  • 有声书和广播剧配音

  • 广告和宣传片配音

  • 游戏角色和动画配音

  • 情感化的智能语音助手

  • 纪录片和新闻播报

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

  • 核心原则:

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

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

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

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

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

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

    维度 描述示例
    音调 高音、中音、低音、偏高、偏低
    语速 快速、中速、缓慢、偏快、偏慢
    情感 开朗、沉稳、温柔、严肃、活泼、冷静、治愈
    特点 有磁性、清脆、沙哑、圆润、甜美、浑厚、有力
    用途 新闻播报、广告配音、有声书、动画角色、语音助手、纪录片解说
  • 示例:

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

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

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

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

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

API 参考

语音合成-千问API参考

声音复刻-API参考

声音设计-API参考

模型功能特性对比

功能/特性 千问3-TTS-Instruct-Flash 千问3-TTS-VD 千问3-TTS-VC 千问3-TTS-Flash 千问-TTS
支持语言 音色而异:中文(普通话)、英文、西班牙语、俄语、意大利语、法语、韩语、日语、德语、葡萄牙语 中文(普通话)、英文、西班牙语、俄语、意大利语、法语、韩语、日语、德语、葡萄牙语 音色而异:中文(普通话、上海话、北京话、四川话、南京话、陕西话、闽南语、天津话)、粤语、英文、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 音色而异:中文(普通话、上海话、北京话、四川话)、英文
音频格式 - wav非流式输出时 - pcm流式输出时Base64编码
音频采样率 24kHz
声音复刻 不支持 支持 不支持
声音设计 不支持 支持 不支持
SSML 不支持
LaTeX 不支持
音量调节 支持 > 可通过指令控制调节 不支持
语速调节 支持 > 可通过指令控制调节 不支持
语调(音高)调节 支持 > 可通过指令控制调节 不支持
码率调节 不支持
时间戳 不支持
指令控制Instruct 支持 不支持
流式输入 不支持
流式输出 支持
限流 每分钟调用次数RPM180 每分钟调用次数RPM180 每分钟调用次数RPM180 每分钟调用次数RPM因模型而异 - qwen3-tts-flash、qwen3-tts-flash-2025-11-27180 - qwen3-tts-flash-2025-09-1810 每分钟调用次数RPM10 每分钟消耗Token数TPM含输入与输出Token100,000
接入方式 Java/Python SDK、WebSocket API
价格 中国内地0.8元/万字符 国际0.8元/万字符 中国内地0.8元/万字符 国际0.8元/万字符 中国内地0.8元/万字符 国际0.8元/万字符 中国内地0.8元/万字符 国际0.733924元/万字符 中国内地: - 输入成本0.0016元/千Token - 输出成本0.01元/千Token 音频转换为 Token 的规则每1秒的音频对应 50个 Token ;若音频时长不足1秒则按 50个 Token 计算

支持的系统音色

不同模型支持的音色有所差异,使用时将请求参数voice设置为音色列表中voice参数列对应的值。

| **voice**参数 | 详情 | 支持语种 | 支持模型 | | Cherry | 音色名:芊悦 描述:阳光积极、亲切自然小姐姐(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 - 千问-TTSqwen-tts、qwen-tts-2025-04-10、qwen-tts-latest、qwen-tts-2025-05-22 | | Serena | 音色名:苏瑶 描述:温柔小姐姐(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 - 千问-TTSqwen-tts、qwen-tts-2025-04-10、qwen-tts-latest、qwen-tts-2025-05-22 | | Ethan | 音色名:晨煦 描述:标准普通话,带部分北方口音。阳光、温暖、活力、朝气(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 - 千问-TTSqwen-tts、qwen-tts-2025-04-10、qwen-tts-latest、qwen-tts-2025-05-22 | | Chelsie | 音色名:千雪 描述:二次元虚拟女友(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 - 千问-TTSqwen-tts、qwen-tts-2025-04-10、qwen-tts-latest、qwen-tts-2025-05-22 | | Momo | 音色名:茉兔 描述:撒娇搞怪,逗你开心(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Vivian | 音色名:十三 描述:拽拽的、可爱的小暴躁(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Moon | 音色名:月白 描述:率性帅气的月白(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Maia | 音色名:四月 描述:知性与温柔的碰撞(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Kai | 音色名:凯 描述耳朵的一场SPA男性 | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Nofish | 音色名:不吃鱼 描述:不会翘舌音的设计师(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 | | Bella | 音色名:萌宝 描述:喝酒不打醉拳的小萝莉(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Jennifer | 音色名:詹妮弗 描述:品牌级、电影质感般美语女声(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 | | Ryan | 音色名:甜茶 描述:节奏拉满,戏感炸裂,真实与张力共舞(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 | | Katerina | 音色名:卡捷琳娜 描述:御姐音色,韵律回味十足(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 | | Aiden | 音色名:艾登 描述:精通厨艺的美语大男孩(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Eldric Sage | 音色名:沧明子 描述:沉稳睿智的老者,沧桑如松却心明如镜(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Mia | 音色名:乖小妹 描述:温顺如春水,乖巧如初雪(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Mochi | 音色名:沙小弥 描述:聪明伶俐的小大人,童真未泯却早慧如禅(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Bellona | 音色名:燕铮莺 描述:声音洪亮,吐字清晰,人物鲜活,听得人热血沸腾;金戈铁马入梦来,字正腔圆间尽显千面人声的江湖(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Vincent | 音色名:田叔 描述:一口独特的沙哑烟嗓,一开口便道尽了千军万马与江湖豪情(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Bunny | 音色名:萌小姬 描述:“萌属性”爆棚的小萝莉(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Neil | 音色名:阿闻 描述:平直的基线语调,字正腔圆的咬字发音,这就是最专业的新闻主持人(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Elias | 音色名:墨讲师 描述:既保持学科严谨性,又通过叙事技巧将复杂知识转化为可消化的认知模块(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 | | Arthur | 音色名:徐大爷 描述:被岁月和旱烟浸泡过的质朴嗓音,不疾不徐地摇开了满村的奇闻异事(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Nini | 音色名:邻家妹妹 描述:糯米糍一样又软又黏的嗓音,那一声声拉长了的“哥哥”,甜得能把人的骨头都叫酥了(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Ebona | 音色名:诡婆婆 描述:她的低语像一把生锈的钥匙,缓慢转动你内心最深处的幽暗角落——那里藏着所有你不敢承认的童年阴影与未知恐惧(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Seren | 音色名:小婉 描述:温和舒缓的声线,助你更快地进入睡眠,晚安,好梦(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Pip | 音色名:顽屁小孩 描述:调皮捣蛋却充满童真的他来了,这是你记忆中的小新吗(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Stella | 音色名:少女阿月 描述:平时是甜到发腻的迷糊少女音,但在喊出“代表月亮消灭你”时,瞬间充满不容置疑的爱与正义(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Instruct-Flashqwen3-tts-instruct-flash、qwen3-tts-instruct-flash-2026-01-26 - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Bodega | 音色名:博德加 描述:热情的西班牙大叔(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Sonrisa | 音色名:索尼莎 描述:热情开朗的拉美大姐(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Alek | 音色名:阿列克 描述:一开口,是战斗民族的冷,也是毛呢大衣下的暖(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Dolce | 音色名:多尔切 描述:慵懒的意大利大叔(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Sohee | 音色名:素熙 描述:温柔开朗,情绪丰富的韩国欧尼(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Ono Anna | 音色名:小野杏 描述:鬼灵精怪的青梅竹马(女性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Lenn | 音色名:莱恩 描述:理性是底色,叛逆藏在细节里——穿西装也听后朋克的德国青年(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Emilien | 音色名:埃米尔安 描述:浪漫的法国大哥哥(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Andre | 音色名:安德雷 描述:声音磁性,自然舒服、沉稳男生(男性) | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Radio Gol | 音色名:拉迪奥·戈尔 描述足球诗人Rádio Gol今天我要用名字为你们解说足球男性 | 中文(普通话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27 | | Jada | 音色名:上海-阿珍 描述:风风火火的沪上阿姐(女性) | 中文(上海话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 - 千问-TTSqwen-tts-latest、qwen-tts-2025-05-22 | | Dylan | 音色名:北京-晓东 描述:北京胡同里长大的少年(男性) | 中文(北京话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 - 千问-TTSqwen-tts-latest、qwen-tts-2025-05-22 | | Li | 音色名:南京-老李 描述:耐心的瑜伽老师(男性) | 中文(南京话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 | | Marcus | 音色名:陕西-秦川 描述:面宽话短,心实声沉——老陕的味道(男性) | 中文(陕西话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 | | Roy | 音色名:闽南-阿杰 描述:诙谐直爽、市井活泼的台湾哥仔形象(男性) | 中文(闽南语)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 | | Peter | 音色名:天津-李彼得 描述:天津相声,专业捧哏(男性) | 中文(天津话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 | | Sunny | 音色名:四川-晴儿 描述:甜到你心里的川妹子(女性) | 中文(四川话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 - 千问-TTSqwen-tts-latest、qwen-tts-2025-05-22 | | Eric | 音色名:四川-程川 描述:一个跳脱市井的四川成都男子(男性) | 中文(四川话)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 | | Rocky | 音色名:粤语-阿强 描述:幽默风趣的阿强,在线陪聊(男性) | 中文(粤语)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 | | Kiki | 音色名:粤语-阿清 描述:甜美的港妹闺蜜(女性) | 中文(粤语)、英语、法语、德语、俄语、意大利语、西班牙语、葡萄牙语、日语、韩语 | - 千问3-TTS-Flashqwen3-tts-flash、qwen3-tts-flash-2025-11-27、qwen3-tts-flash-2025-09-18 |

常见问题

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

A24小时后音频文件链接将失效。

/* 让引用上下间距调小,避免内容显示过于稀疏 */ .unionContainer .markdown-body blockquote { margin: 4px 0; } .aliyun-docs-content table.qwen blockquote { border-left: none; /* 添加这一行来移除表格里的引用文字的左侧边框 */ padding-left: 5px; /* 左侧内边距 */ margin: 4px 0; } /* 支持吸顶 */ div:has(.aliyun-docs-content), .aliyun-docs-content .markdown-body { overflow: visible; } .stick-top { position: sticky; top: 46px; }

span.aliyun-docs-icon { color: transparent !important; font-size: 0 !important; } span.aliyun-docs-icon:before { color: black; font-size: 16px; } span.aliyun-docs-icon.icon-size-20:before { font-size: 20px; } span.aliyun-docs-icon.icon-size-22:before { font-size: 22px; } span.aliyun-docs-icon.icon-size-24:before { font-size: 24px; } span.aliyun-docs-icon.icon-size-26:before { font-size: 26px; } span.aliyun-docs-icon.icon-size-28:before { font-size: 28px; }