全部产品
Search
文档中心

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

更新时间:Feb 11, 2026

语音合成,又称文本转语音(Text-to-Speech,TTS),是将文本转换为自然语音的技术。该技术基于机器学习算法,通过学习大量语音样本,掌握语言的韵律、语调和发音规则,从而在接收到文本输入时生成真人般自然的语音内容。

核心功能

  • 实时生成高保真语音,支持中英等多语种自然发声

  • 提供声音复刻能力,快速定制个性化音色

  • 支持流式输入输出,低延迟响应实时交互场景

  • 可调节语速、语调、音量与码率,精细控制语音表现

  • 兼容主流音频格式,最高支持48kHz采样率输出

适用范围

支持的模型:

国际

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

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

  • CosyVoice:cosyvoice-v3-plus、cosyvoice-v3-flash

中国内地

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

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

  • CosyVoice:cosyvoice-v3-plus、cosyvoice-v3-flash、cosyvoice-v2

更多信息请参见模型列表

模型选型

场景

推荐模型

理由

注意事项

品牌形象语音定制/个性化语音克隆服务

cosyvoice-v3-plus

声音复刻能力最强,支持48kHz高音质输出,高音质+声音复刻,打造拟人化品牌声纹

成本较高($0.286706/万字符),建议用于核心场景

智能客服 / 语音助手

cosyvoice-v3-flash

成本最低($0.14335/万字符),支持流式交互、情感表达,响应快,性价比高

方言广播系统

cosyvoice-v3-flash、cosyvoice-v3-plus

支持东北话、闽南语等多种方言,适合地方内容播报

cosyvoice-v3-plus成本较高($0.286706/万字符

教育类应用(含公式朗读)

cosyvoice-v2、cosyvoice-v3-flash、cosyvoice-v3-plus

支持LaTeX公式转语音,适合数理化课程讲解

cosyvoice-v2和cosyvoice-v3-plus成本较高($0.286706/万字符

结构化语音播报(新闻/公告)

cosyvoice-v3-plus、cosyvoice-v3-flash、cosyvoice-v2

支持SSML控制语速、停顿、发音等,提升播报专业度

需额外开发 SSML 生成逻辑,不支持设置情感

语音与文本精准对齐(如字幕生成、教学回放、听写训练)

cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2

支持时间戳输出,可实现合成语音与原文同步

需显式启用时间戳功能,默认关闭

多语言出海产品

cosyvoice-v3-flash、cosyvoice-v3-plus

支持多语种

Sambert不支持流式输入,价格高于cosyvoice-v3-flash

不同地域和模型的能力存在差异,请仔细阅读模型功能特性对比后再选择使用

快速开始

下面是调用API的示例代码。更多常用场景的代码示例,请参见GitHub

您需要已获取API Key配置API Key到环境变量。如果通过SDK调用,还需要安装DashScope SDK

CosyVoice

将合成音频保存为文件

Python

# coding=utf-8

import os
import dashscope
from dashscope.audio.tts_v2 import *

# 新加坡地域和北京地域的API Key不同。获取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 若没有配置环境变量,请用百炼API Key将下行替换为:dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

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

# 模型
# 不同模型版本需要使用对应版本的音色:
# cosyvoice-v3-flash/cosyvoice-v3-plus:使用longanyang等音色。
# cosyvoice-v2:使用longxiaochun_v2等音色。
# 每个音色支持的语言不同,合成日语、韩语等非中文语言时,需选择支持对应语言的音色。详见CosyVoice音色列表。
model = "cosyvoice-v3-flash"
# 音色
voice = "longanyang"

# 实例化SpeechSynthesizer,并在构造方法中传入模型(model)、音色(voice)等请求参数
synthesizer = SpeechSynthesizer(model=model, voice=voice)
# 发送待合成文本,获取二进制音频
audio = synthesizer.call("今天天气怎么样?")
# 首次发送文本时需建立 WebSocket 连接,因此首包延迟会包含连接建立的耗时
print('[Metric] requestId为:{},首包延迟为:{}毫秒'.format(
    synthesizer.get_last_request_id(),
    synthesizer.get_first_package_delay()))

# 将音频保存至本地
with open('output.mp3', 'wb') as f:
    f.write(audio)

Java

import com.alibaba.dashscope.audio.ttsv2.SpeechSynthesisParam;
import com.alibaba.dashscope.audio.ttsv2.SpeechSynthesizer;
import com.alibaba.dashscope.utils.Constants;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;

public class Main {
    // 模型
    // 不同模型版本需要使用对应版本的音色:
    // cosyvoice-v3-flash/cosyvoice-v3-plus:使用longanyang等音色。
    // cosyvoice-v2:使用longxiaochun_v2等音色。
    // 每个音色支持的语言不同,合成日语、韩语等非中文语言时,需选择支持对应语言的音色。详见CosyVoice音色列表。
    private static String model = "cosyvoice-v3-flash";
    // 音色
    private static String voice = "longanyang";

    public static void streamAudioDataToSpeaker() {
        // 请求参数
        SpeechSynthesisParam param =
                SpeechSynthesisParam.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) // 模型
                        .voice(voice) // 音色
                        .build();

        // 同步模式:禁用回调(第二个参数为null)
        SpeechSynthesizer synthesizer = new SpeechSynthesizer(param, null);
        ByteBuffer audio = null;
        try {
            // 阻塞直至音频返回
            audio = synthesizer.call("今天天气怎么样?");
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            // 任务结束关闭websocket连接
            synthesizer.getDuplexApi().close(1000, "bye");
        }
        if (audio != null) {
            // 将音频数据保存到本地文件“output.mp3”中
            File file = new File("output.mp3");
            // 首次发送文本时需建立 WebSocket 连接,因此首包延迟会包含连接建立的耗时
            System.out.println(
                    "[Metric] requestId为:"
                            + synthesizer.getLastRequestId()
                            + "首包延迟(毫秒)为:"
                            + synthesizer.getFirstPackageDelay());
            try (FileOutputStream fos = new FileOutputStream(file)) {
                fos.write(audio.array());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }

    public static void main(String[] args) {
        // 以下为新加坡地域url,若使用北京地域的模型,需将url替换为:wss://dashscope.aliyuncs.com/api-ws/v1/inference
        Constants.baseWebsocketApiUrl = "wss://dashscope-intl.aliyuncs.com/api-ws/v1/inference";
        streamAudioDataToSpeaker();
        System.exit(0);
    }
}

将LLM生成的文本实时转成语音并通过扬声器播放

以下代码展示通过本地设备播放千问大语言模型(qwen-turbo)实时返回的文本内容。

Python

运行Python示例前,需要通过pip安装第三方音频播放库。

# 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 pyaudio
import dashscope
from dashscope.audio.tts_v2 import *


from http import HTTPStatus
from dashscope import Generation

# 新加坡地域和北京地域的API Key不同。获取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 若没有配置环境变量,请用百炼API Key将下行替换为:dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

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

# 不同模型版本需要使用对应版本的音色:
# cosyvoice-v3-flash/cosyvoice-v3-plus:使用longanyang等音色。
# cosyvoice-v2:使用longxiaochun_v2等音色。
# 每个音色支持的语言不同,合成日语、韩语等非中文语言时,需选择支持对应语言的音色。详见CosyVoice音色列表。
model = "cosyvoice-v3-flash"
voice = "longanyang"


class Callback(ResultCallback):
    _player = None
    _stream = None

    def on_open(self):
        print("websocket is open.")
        self._player = pyaudio.PyAudio()
        self._stream = self._player.open(
            format=pyaudio.paInt16, channels=1, rate=22050, output=True
        )

    def on_complete(self):
        print("speech synthesis task complete successfully.")

    def on_error(self, message: str):
        print(f"speech synthesis task failed, {message}")

    def on_close(self):
        print("websocket is closed.")
        # stop player
        self._stream.stop_stream()
        self._stream.close()
        self._player.terminate()

    def on_event(self, message):
        print(f"recv speech synthsis message {message}")

    def on_data(self, data: bytes) -> None:
        print("audio result length:", len(data))
        self._stream.write(data)


def synthesizer_with_llm():
    callback = Callback()
    synthesizer = SpeechSynthesizer(
        model=model,
        voice=voice,
        format=AudioFormat.PCM_22050HZ_MONO_16BIT,
        callback=callback,
    )

    messages = [{"role": "user", "content": "请介绍一下你自己"}]
    responses = Generation.call(
        model="qwen-turbo",
        messages=messages,
        result_format="message",  # set result format as 'message'
        stream=True,  # enable stream output
        incremental_output=True,  # enable incremental output 
    )
    for response in responses:
        if response.status_code == HTTPStatus.OK:
            print(response.output.choices[0]["message"]["content"], end="")
            synthesizer.streaming_call(response.output.choices[0]["message"]["content"])
        else:
            print(
                "Request id: %s, Status code: %s, error code: %s, error message: %s"
                % (
                    response.request_id,
                    response.status_code,
                    response.code,
                    response.message,
                )
            )
    synthesizer.streaming_complete()
    print('requestId: ', synthesizer.get_last_request_id())


if __name__ == "__main__":
    synthesizer_with_llm()

Java

API参考

模型功能特性对比

国际

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

功能/特性

cosyvoice-v3-plus

cosyvoice-v3-flash

支持语言

系统音色而异:中文(普通话、东北话、闽南话、陕西话)、英文、日语、韩语

系统音色而异:中文(普通话)、英文

音频格式

pcm、wav、mp3、opus

音频采样率

8kHz、16kHz、22.05kHz、24kHz、44.1kHz、48kHz

声音复刻

不支持

SSML

支持

该功能适用于复刻音色,以及音色列表中已标记为支持 SSML 的系统音色
使用方法请参见SSML标记语言介绍

LaTeX

支持

使用方法请参见LaTeX 公式转语音

音量调节

支持

使用方法请参见请求参数volume

语速调节

支持

使用方法请参见请求参数speech_rate
在 Java SDK 中,该参数为speechRate

语调(音高)调节

支持

使用方法请参见请求参数pitch_rate
在 Java SDK 中,该参数为pitchRate

码率调节

支持

仅opus格式音频支持该功能
使用方法请参见请求参数bit_rate
在 Java SDK 中,该参数为pitchRate

时间戳

支持 默认关闭,可开启

该功能适用于复刻音色,以及音色列表中已标记为支持时间戳的系统音色
使用方法请参见请求参数word_timestamp_enabled
在 Java SDK 中,该参数为enableWordTimestamp

指令控制(Instruct)

支持

该功能适用于复刻音色,以及音色列表中已标记为支持 Instruct 的系统音色
使用方法请参见请求参数instruction

流式输入

支持

流式输出

支持

限流(RPS)

3

接入方式

Java/Python SDK、WebSocket API

价格

$0.26/万字符

$0.13/万字符

中国内地

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

功能/特性

cosyvoice-v3-plus

cosyvoice-v3-flash

cosyvoice-v2

支持语言

系统音色(因音色而异):中文(普通话、东北话、闽南话、陕西话)、英文、日语、韩语

复刻音色:中文(普通话、广东话、东北话、甘肃话、贵州话、河南话、湖北话、江西话、闽南话、宁夏话、山西话、陕西话、山东话、上海话、四川话、天津话、云南话)、英文、法语、德语、日语、韩语、俄语

系统音色(因音色而异):中文(普通话)、英文

复刻音色:中文(普通话、广东话、东北话、甘肃话、贵州话、河南话、湖北话、江西话、闽南话、宁夏话、山西话、陕西话、山东话、上海话、四川话、天津话、云南话)、英文、法语、德语、日语、韩语、俄语

系统音色(因音色而异):中文(普通话)、英文、韩语、日语

复刻音色:中文(普通话)、英文

音频格式

pcm、wav、mp3、opus

音频采样率

8kHz、16kHz、22.05kHz、24kHz、44.1kHz、48kHz

声音复刻

支持

使用方法请参见CosyVoice声音复刻API
声音复刻支持的语言如下:
cosyvoice-v2:中文(普通话)、英文
cosyvoice-v3-flash、cosyvoice-v3-plus:中文(普通话、广东话、东北话、甘肃话、贵州话、河南话、湖北话、江西话、闽南话、宁夏话、山西话、陕西话、山东话、上海话、四川话、天津话、云南话)、英文、法语、德语、日语、韩语、俄语

SSML

支持

该功能适用于复刻音色,以及音色列表中已标记为支持 SSML 的系统音色
使用方法请参见SSML标记语言介绍

LaTeX

支持

使用方法请参见LaTeX 公式转语音

音量调节

支持

使用方法请参见请求参数volume

语速调节

支持

使用方法请参见请求参数speech_rate
在 Java SDK 中,该参数为speechRate

语调(音高)调节

支持

使用方法请参见请求参数pitch_rate
在 Java SDK 中,该参数为pitchRate

码率调节

支持

仅opus格式音频支持该功能
使用方法请参见请求参数bit_rate
在 Java SDK 中,该参数为pitchRate

时间戳

支持 默认关闭,可开启

该功能适用于复刻音色,以及音色列表中已标记为支持时间戳的系统音色
使用方法请参见请求参数word_timestamp_enabled
在 Java SDK 中,该参数为enableWordTimestamp

指令控制(Instruct)

支持

该功能适用于复刻音色,以及音色列表中已标记为支持 Instruct 的系统音色
使用方法请参见请求参数instruction

不支持

流式输入

支持

流式输出

支持

限流(RPS)

3

接入方式

Java/Python SDK、WebSocket API

价格

$0.286706/万字符

$0.14335/万字符

$0.286706/万字符

支持的系统音色

CosyVoice音色列表

常见问题

Q:语音合成的发音读错怎么办?多音字如何控制发音?

  • 将多音字替换成同音的其他汉字,快速解决发音问题。

  • 使用SSML标记语言控制发音。

Q:使用复刻音色生成的音频无声音如何排查?

  1. 确认音色状态

    调用查询指定音色接口,查看音色status是否为OK

  2. 检查模型版本一致性

    确保复刻音色时使用的target_model参数与语音合成时的model参数完全一致。例如:

    • 复刻时使用cosyvoice-v3-plus

    • 合成时也必须使用cosyvoice-v3-plus

  3. 验证源音频质量

    检查复刻音色时使用的源音频是否符合音频要求

    • 音频时长:10-20秒

    • 音质清晰

    • 无背景噪音

  4. 检查请求参数

    确认语音合成时请求参数voice设置为复刻音色的ID。

Q:声音复刻后合成效果不稳定或语音不完整如何处理?

如果复刻音色后合成的语音出现以下问题:

  • 语音播放不完整,只读出部分文字

  • 合成效果不稳定,时好时坏

  • 语音中包含异常停顿或静音段

可能原因:源音频质量不符合要求

解决方案:检查源音频是否符合如下要求,建议按照录音操作指南重新录制

  • 检查音频连续性:确保源音频中语音内容连续,避免长时间停顿或静音段(超过2秒)。如果音频中存在明显的空白段,会导致模型将静音或噪声作为音色特征的一部分,影响生成效果

  • 检查语音活动比例:确保有效语音占音频总时长的60%以上。如果背景噪声、非语音段过多,会干扰音色特征提取

  • 验证音频质量细节:

    • 音频时长:10-20秒(推荐15秒左右)

    • 发音清晰,语速平稳

    • 无背景噪音、回音、杂音

    • 语音能量集中,无长时间静音段