すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Model Studio:リアルタイム音声合成 — CosyVoice

最終更新日:Feb 12, 2026

音声合成(Text-to-Speech:TTS)は、テキストを自然な音声に変換する技術です。本ドキュメントでは、リアルタイム音声合成でサポートされるモデル、呼び出し方法、およびパラメーター構成について説明します。

主な特徴

  • 中国語および英語を含む複数言語での自然な発音を実現する高品質な音声をリアルタイムで生成します。

  • 音声クローン機能により、迅速に個別化された音色をカスタマイズできます。

  • 低遅延のレスポンスを実現し、リアルタイム対話向けのストリーミング入力および出力をサポートします。

  • 音声の話速、ピッチ、ボリューム、ビットレートを調整することで、細かい制御が可能です。

  • 最大48 kHzのサンプルレートに対応した主要なオーディオフォーマットをサポートします。

サポート対象モデル

サポート対象モデル:

国際

国際デプロイメントモード」では、アクセスポイントおよびデータストレージはシンガポールリージョンに配置されます。モデル推論の計算リソースは、中国本土を除く世界中で動的にスケジュールされます。

以下のモデルを呼び出す場合、シンガポールリージョン用のAPI キーを選択してください:

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

中国本土

中国本土デプロイメントモード」では、アクセスポイントおよびデータストレージは北京リージョンに配置されます。モデル推論の計算リソースは、中国本土内に限定されます。

以下のモデルを呼び出す場合、北京リージョン用のAPI キーを選択してください:

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

詳細については、「モデル一覧」をご参照ください。

モデル選択

利用シーン

推奨

理由

補足情報

ブランド音声のカスタマイズ/パーソナライズされた音声クローンサービス

cosyvoice-v3-plus

最も強力な音声クローン機能を備えており、48 kHzの高品質オーディオ出力をサポートします。高品質な音声と音声クローンにより、人間らしいブランドボイスプリントを実現できます。

コストが高め($0.286706/10,000 文字)。コアとなる利用シーンにご使用ください。

インテリジェントカスタマーサポート/音声アシスタント

cosyvoice-v3-flash

最もコスト効率が高く($0.14335/10,000 文字)、ストリーミング対話および感情表現をサポートし、高速なレスポンスと優れたコストパフォーマンスを実現します。

方言放送システム

cosyvoice-v3-flash、cosyvoice-v3-plus

東北官話や閩南語など複数の方言をサポートしており、地域向けコンテンツ放送に適しています。

cosyvoice-v3-plus はコストが高め($0.286706/10,000 文字)です。

教育用途(数式読み上げを含む)

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

LaTeX 数式から音声への変換をサポートしており、数学・物理・化学などの授業での解説に適しています。

cosyvoice-v2 および cosyvoice-v3-plus はコストが高め($0.286706/10,000 文字)です。

構造化された音声放送(ニュース/アナウンス)

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 キーの取得および環境変数への API キーの設定を行う必要があります。SDK を使用して呼び出しを行う場合は、さらにDashScope SDK のインストールも必要です。

CosyVoice

合成音声をファイルに保存

Python

# coding=utf-8

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

# シンガポールリージョンと北京リージョンでは API キーが異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: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: {} , first packet delay: {} milliseconds'.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 キーが異なります。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) // モデル
                        .voice(voice) // 音声
                        .build();

        // 同期モード:コールバックを無効化(第2パラメーターを 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()
                            + ", first packet delay (milliseconds): "
                            + 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 大規模言語モデル(qwen-turbo)から得られるリアルタイムテキストを、オンプレミス端末上で再生する方法を示しています。

Python

Python のサンプルを実行する前に、pip を使用してサードパーティ製のオーディオ再生ライブラリをインストールしてください。

# coding=utf-8
# pyaudio のインストール手順:
# APPLE Mac OS X
#   brew install portaudio
#   pip install pyaudio
# Debian/Ubuntu
#   sudo apt-get install python-pyaudio python3-pyaudio
#   または
#   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 キーは異なります。API キーの取得方法については、https://www.alibabacloud.com/help/zh/model-studio/get-api-key をご参照ください。
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: 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",  # 結果フォーマットを 'message' に設定
        stream=True,  # ストリーム出力を有効化
        incremental_output=True,  # 増分出力を有効化 
    )
    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

オーディオサンプルレート

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

音声クローン

非対応

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/10,000 文字

$0.13/10,000 文字

中国本土

中国本土デプロイメントモード」では、エンドポイントおよびデータストレージはどちらも北京リージョンに配置されます。モデル推論の計算リソースは、中国本土内に制限されます。

機能

cosyvoice-v3-plus

cosyvoice-v3-flash

cosyvoice-v2

サポート言語

システム音声(音声ごとに異なります):中国語(標準語、東北官話、閩南語、陝西話)、英語、日本語、韓国語

クローン音声:中国語(標準語、広東語、東北官話、甘粛、貴州、河南、湖北、江西、閩南、寧夏、山西、陝西、山東、上海、四川、天津、雲南)、英語、フランス語、ドイツ語、日本語、韓国語、ロシア語

システム音声(音声ごとに異なります):中国語(標準語)、英語

クローン音声:中国語(標準語、広東語、東北官話、甘粛、貴州、河南、湖北、江西、閩南、寧夏、山西、陝西、山東、上海、四川、天津、雲南)、英語、フランス語、ドイツ語、日本語、韓国語、ロシア語

システム音声(音声ごとに異なります):中国語(標準語)、英語、韓国語、日本語

クローン音声:中国語(標準語)、英語

オーディオフォーマット

pcm、wav、mp3、opus

オーディオサンプルレート

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

音声クローン

対応

詳細については、「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/10,000 文字

$0.14335/10,000 文字

$0.286706/10,000 文字

サポート対象のシステム音声

CosyVoice 音声一覧

よくある質問

Q:音声合成で単語の発音が正しくない場合、どうすればよいですか? 同音異義語の発音を制御するにはどうすればよいですか?

  • 多音字を同じ読みの文字に置き換えることで、発音の問題を迅速に修正できます。

  • SSML マークアップ言語を使用して発音を制御できます。

Q:クローン音声で生成された音声に音が出ない場合、どのようにトラブルシューティングすればよいですか?

  1. 音声のステータスを確認

    特定の音声を照会するインターフェイスを呼び出して、音声モデルの statusOK であるかどうかを確認します。

  2. モデルバージョンの整合性を確認

    音声クローンに使用した target_model パラメーターと、音声合成に使用した model パラメーターが同一であることを確認します。たとえば:

    • cosyvoice-v3-plus をクローンに使用します。

    • 合成にも必ず cosyvoice-v3-plus を使用します。

  3. ソース音声の品質を確認

    音声クローンに使用するソース音声が音声要件を満たしているか確認します:

    • 音声の長さ:10~20 秒

    • 明瞭な音質

    • バックグラウンドノイズなし

  4. リクエストパラメーターを確認

    音声合成のリクエストパラメーター voice がクローン音声の ID に設定されていることを確認します。

Q: 音声クローン後の合成音声の効果が不安定であったり、音声が途中で途切れたりする場合は、どうすればよいですか?

音声クローン後の合成音声で以下のような問題が発生した場合:

  • 音声の再生が不完全で、テキストの一部しか読み上げられない。

  • 合成効果が不安定または品質が一貫していない。

  • 音声に異常な一時停止や無音区間が含まれている。

考えられる原因:ソース音声の品質が要件を満たしていないことです。

解決策:ソース音声が要件を満たしているか確認してください。推奨事項として、録音ガイドに従って再録音することをお勧めします。

  • 音声の連続性を確認:ソース音声の内容が連続していることを確認します。長い一時停止や無音区間(2 秒以上)を避けてください。音声に明確な空白区間が含まれている場合、モデルがその無音やノイズを音声特性の一部と解釈し、生成品質に影響を与える可能性があります。

  • 音声活動率を確認:有効な音声が全音声時間の 60% を超えるようにしてください。過度なバックグラウンドノイズや非音声セグメントは、音声特性の抽出を妨げる可能性があります。

  • 音声品質の詳細を確認:

    • 音声の長さ:10~20 秒(15 秒が推奨)

    • 明瞭な発音、安定した話速

    • バックグラウンドノイズ、反響、雑音なし

    • 集中した音声エネルギー、長い無音区間なし