全部產品
Search
文件中心

Alibaba Cloud Model Studio:即時語音合成-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 Host配置API Key到環境變數(準備下線,併入配置 API Key)。如果通過SDK調用,還需要安裝DashScope SDK。請將範例程式碼中的 DASHSCOPE_API_HOST 替換為擷取的 API Host。

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秒左右)

    • 發音清晰,語速平穩

    • 無背景雜音、迴音、雜音

    • 語音能量集中,無長時間靜音段