1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CosyVoiceってなんだ?〜Alibaba発の音声クローンAIをWindowsで完全攻略〜

Last updated at Posted at 2026-01-23

この記事の対象読者

  • Pythonの基本(pip、conda)を使える方
  • 音声合成・ボイスクローンに興味がある方
  • WindowsでAI開発をしている方
  • 「ElevenLabsは高いけど、ローカルで動かしたい」と思っている方

この記事で得られること

  • CosyVoiceの概念と、なぜ今注目されているかの理解
  • Windowsでの環境構築手順(RTX 5090対応含む)
  • 3秒の音声からボイスクローンを実行する方法
  • Whisperと連携した自動文字起こしワークフロー

この記事で扱わないこと

  • Linuxでの環境構築(公式ドキュメントを参照)
  • モデルのファインチューニング
  • 商用利用に関する法的アドバイス

1. CosyVoiceとの出会い

「3秒の音声で、誰の声でもクローンできる」

最初にこれを聞いたとき、正直信じられませんでした。
ElevenLabsやVOICEVOXは知っていましたが、たった3秒で?しかもオープンソース?

実際に試してみると、その品質に驚きました。
中国語・英語はもちろん、日本語もかなり自然に発音します。

ただ、一つ大きな問題がありました。

「Linux専用じゃん...」

私はWindows + RTX 5090という環境で開発しています。
Dockerやwslで動かすのは面倒だし、GPUのパススルー設定も煩雑です。

「なんとかWindowsネイティブで動かせないか」

そう思って格闘すること数日。
DLLエラー、torchcodecエラー、APIの破壊的変更...
一つ一つ解決して、ついにWindowsで完全動作するフォーク版を完成させました。

ここまでで、私がなぜこの記事を書いているか、なんとなく伝わったでしょうか。
次は、CosyVoiceがどんな技術なのか、その背景から見ていきましょう。


2. 前提知識の確認

本題に入る前に、この記事で使う用語を整理しておきます。

TTS(Text-to-Speech)とは

テキストを音声に変換する技術です。
VOICEVOXやCoeFont、商用ではElevenLabsが有名です。

ボイスクローンとは

既存の音声から声質を抽出し、任意のテキストをその声で読み上げる技術です。
従来は数時間分の音声データが必要でしたが、最新技術では数秒で可能になりました。

ゼロショット音声合成とは

事前学習なしで、参照音声だけから声をクローンする技術です。
CosyVoiceはこの「ゼロショット」に特化しています。

LLM(Large Language Model)ベースTTSとは

GPTのような大規模言語モデルの技術をTTSに応用したものです。
文脈を理解して、より自然なイントネーションや感情表現が可能になります。

これらの用語が押さえられたら、次に進みましょう。


3. CosyVoiceが生まれた背景

3.1 Alibaba FunAudioLLMチームの挑戦

CosyVoiceは、Alibaba CloudのFunAudioLLMチームが開発しました。
2024年7月にバージョン1.0がリリースされ、急速に進化を続けています。

バージョン リリース 特徴
CosyVoice 1.0 2024/07 初期リリース、300Mパラメータ
CosyVoice 2.0 2024/12 25Hz対応、ストリーミング
CosyVoice 3.0 2025/05 9言語対応、18方言、SOTA性能

3.2 なぜCosyVoiceが注目されているか

他のオープンソースTTSと比較してみましょう。

モデル サイズ 中国語WER↓ 英語WER↓ オープンソース
Seed-TTS 非公開 1.12 2.25 No
F5-TTS 0.3B 1.52 2.00 Yes
CosyVoice2 0.5B 1.45 2.57 Yes
CosyVoice3 0.5B 0.81 1.68 Yes

WER(Word Error Rate)は低いほど良い指標です。
CosyVoice3は、オープンソースでありながらクローズドなSeed-TTSを超える性能を達成しています。

背景がわかったところで、抽象的な概念から順に、具体的な仕組みを見ていきましょう。


4. CosyVoiceの基本概念

4.1 アーキテクチャ概要

CosyVoiceは以下の3つのコンポーネントで構成されています。

テキスト → [Text Encoder] → [LLM] → [Flow Matching Decoder] → 音声
                ↑
         [Speech Tokenizer] ← 参照音声
  1. Text Encoder: テキストを意味ベクトルに変換
  2. Speech Tokenizer: 参照音声から声質を抽出
  3. LLM: 両者を統合して音声トークンを生成
  4. Flow Matching Decoder: トークンを波形に変換

4.2 3つの推論モード

CosyVoice3は用途に応じて3つのモードを提供しています。

モード 用途 特徴
zero_shot 3秒ボイスクローン 最も高品質な声質再現
cross_lingual 多言語クローン 日本語→英語など言語をまたぐ
instruct2 自然言語制御 「優しく話して」などの指示対応

4.3 <|endofprompt|>トークンの重要性

CosyVoice3では、この特殊トークンが重要な役割を果たします。

# 悪い例(中国語っぽくなる)
text = "こんにちは、音声合成のテストです。"

# 良い例(正しく日本語で発音)
text = "こんにちは、音声合成のテストです。<|endofprompt|>"

このトークンがないと、モデルが「まだプロンプトが続く」と解釈してしまいます。
私のフォーク版では、この処理を自動化しています。

基本概念が理解できたところで、これらの抽象的な概念を具体的なコードで実装していきましょう。


5. Windowsでの環境構築

5.1 私がハマったポイント

最初に、私が遭遇したエラーとその原因を共有します。

OSError: Error loading c10.dll

「なんでDLLエラー?PyTorchは正しく入ってるのに...」

原因は、GradioがPyTorchより先にインポートされるとDLL依存関係が壊れること。
Pythonのimport順序がこんな影響を与えるとは思いませんでした。

5.2 環境構築手順

Conda環境の作成

conda create -n cosyvoice3 python=3.10 -y
conda activate cosyvoice3

PyTorchのインストール(RTX 5090対応)

RTX 5090(Blackwell / sm_120)を使う場合、PyTorch nightlyが必須です。

# RTX 5090 / RTX 50シリーズの場合(CUDA 12.8)
pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128

# RTX 40シリーズ以前の場合(CUDA 12.4)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

依存関係のインストール

# リポジトリのクローン
git clone --recursive https://github.com/hiroki-abe-58/CosyVoice-JP.git
cd CosyVoice-JP
git submodule update --init --recursive

# 依存関係
pip install -r requirements.txt

# Windows互換性のための追加パッケージ
pip install soundfile
pip install "ruamel.yaml>=0.15.0,<0.18.0"

# Whisper(自動文字起こし用)
pip install openai-whisper

5.3 設定ファイルテンプレート

以下の3種類の設定を用途に応じて使い分けてください。

開発環境用(config_dev.yaml)

# config_dev.yaml - 開発環境用(このままコピーして使える)
model:
  name: "Fun-CosyVoice3-0.5B-2512"
  local_dir: "pretrained_models/Fun-CosyVoice3-0.5B-2512"
  device: "cuda:0"
  dtype: "float16"

whisper:
  model_size: "small"  # 開発中は軽量モデルで高速化
  language: "auto"

server:
  port: 7865
  auto_open_browser: true
  debug: true  # デバッグログ出力

本番環境用(config_prod.yaml)

# config_prod.yaml - 本番環境用(高品質設定)
model:
  name: "Fun-CosyVoice3-0.5B-2512"
  local_dir: "pretrained_models/Fun-CosyVoice3-0.5B-2512"
  device: "cuda:0"
  dtype: "float16"

whisper:
  model_size: "large"  # 本番は高精度モデル
  language: "auto"

server:
  port: 8080
  auto_open_browser: false
  debug: false

低VRAMマシン用(config_lowvram.yaml)

# config_lowvram.yaml - VRAM 8GB以下のマシン用
model:
  name: "Fun-CosyVoice3-0.5B-2512"
  local_dir: "pretrained_models/Fun-CosyVoice3-0.5B-2512"
  device: "cuda:0"
  dtype: "float32"  # 安定性重視

whisper:
  model_size: "tiny"  # 軽量モデル
  language: "ja"      # 言語固定でメモリ節約

server:
  port: 7865
  auto_open_browser: true
  debug: false

5.4 モデルのダウンロード

"""
CosyVoice3モデルダウンロードスクリプト
使い方: python download_model.py
"""
from huggingface_hub import snapshot_download
import os

def download_cosyvoice3():
    """CosyVoice3モデルをダウンロード"""
    model_id = "FunAudioLLM/Fun-CosyVoice3-0.5B-2512"
    local_dir = "pretrained_models/Fun-CosyVoice3-0.5B-2512"
    
    print(f"Downloading {model_id}...")
    snapshot_download(
        model_id,
        local_dir=local_dir,
        resume_download=True  # 中断しても再開可能
    )
    print(f"Downloaded to {local_dir}")
    
    # ダウンロード確認
    if os.path.exists(os.path.join(local_dir, "config.json")):
        print("Download successful!")
    else:
        print("Download may have failed. Please check.")

if __name__ == "__main__":
    download_cosyvoice3()

5.5 起動

# ワンクリック起動(推奨)
# run.bat をダブルクリック

# または、コマンドラインから
python launcher.py

5.6 実行結果

$ python launcher.py
[INFO] Checking port 7865... Available
[INFO] Starting CosyVoice-JP WebUI...
[INFO] Loading model: Fun-CosyVoice3-0.5B-2512
[INFO] Model loaded successfully
[INFO] Opening browser in 8 seconds...
Running on local URL:  http://localhost:7865

5.7 よくあるエラーと対処法

エラー 原因 対処法
OSError: Error loading c10.dll GradioがPyTorchより先にロード フォーク版を使用(import順序修正済み)
TorchCodec is required torchaudioのAPI変更 pip install soundfile で代替
'Loader' object has no attribute 'max_depth' ruamel.yaml互換性問題 pip install "ruamel.yaml>=0.15.0,<0.18.0"
CUDA out of memory VRAM不足 config_lowvram.yaml を使用
音声が中国語っぽい endofpromptトークン欠落 フォーク版を使用(自動付与)

基本的な使い方をマスターしたので、次は応用例を見ていきましょう。


6. ユースケース別ガイド

6.1 ユースケース1: YouTubeナレーション用の声を作る

想定読者: 動画制作者、ポッドキャスター

推奨構成: 3秒ボイスクローン + 高品質設定

サンプルコード:

"""
YouTubeナレーション用の音声を生成
"""
import sys
sys.path.append(".")

from cosyvoice.cli.cosyvoice import CosyVoice
import torchaudio

def generate_narration():
    # モデル読み込み
    model = CosyVoice(
        "pretrained_models/Fun-CosyVoice3-0.5B-2512",
        load_jit=False
    )
    
    # ナレーション原稿
    script = """
    皆さんこんにちは。今日は音声合成AIの最新技術について解説します。
    たった3秒の音声から、誰の声でもクローンできる時代が来ました。
    """
    
    # 参照音声(自分の声を3秒録音したもの)
    ref_audio = "my_voice_sample.wav"
    ref_text = "これは私の声のサンプルです。"
    
    # 音声生成
    for i, result in enumerate(model.inference_zero_shot(
        tts_text=script + "<|endofprompt|>",
        prompt_text=ref_text,
        prompt_speech_16k=ref_audio
    )):
        torchaudio.save(
            f"narration_output_{i}.wav",
            result["tts_speech"],
            22050
        )
        print(f"Generated: narration_output_{i}.wav")

if __name__ == "__main__":
    generate_narration()

6.2 ユースケース2: 多言語コンテンツの制作

想定読者: 国際的なコンテンツ制作者

推奨構成: 多言語クローンモード

サンプルコード:

"""
日本語の声で英語を話させる(多言語クローン)
"""
from cosyvoice.cli.cosyvoice import CosyVoice
import torchaudio

def cross_lingual_synthesis():
    model = CosyVoice(
        "pretrained_models/Fun-CosyVoice3-0.5B-2512",
        load_jit=False
    )
    
    # 日本語の参照音声
    ref_audio = "japanese_speaker.wav"
    
    # 英語のテキストを日本語話者の声で
    english_text = "Hello everyone. Welcome to my channel.<|endofprompt|>"
    
    for result in model.inference_cross_lingual(
        tts_text=english_text,
        prompt_speech_16k=ref_audio
    ):
        torchaudio.save("english_with_japanese_voice.wav", 
                       result["tts_speech"], 22050)
        print("Generated: english_with_japanese_voice.wav")

if __name__ == "__main__":
    cross_lingual_synthesis()

6.3 ユースケース3: 感情表現のコントロール

想定読者: ゲーム開発者、オーディオブック制作者

推奨構成: 自然言語制御モード

サンプルコード:

"""
感情を指定して音声を生成
"""
from cosyvoice.cli.cosyvoice import CosyVoice
import torchaudio

def emotional_synthesis():
    model = CosyVoice(
        "pretrained_models/Fun-CosyVoice3-0.5B-2512",
        load_jit=False
    )
    
    ref_audio = "neutral_voice.wav"
    text = "今日は本当に素晴らしい一日でした。<|endofprompt|>"
    
    # 異なる感情で同じテキストを生成
    emotions = [
        "嬉しそうに、明るく話して",
        "悲しそうに、ゆっくり話して",
        "怒っているように、早口で話して",
        "囁くように、優しく話して"
    ]
    
    for i, emotion in enumerate(emotions):
        for result in model.inference_instruct2(
            tts_text=text,
            instruct_text=emotion,
            prompt_speech_16k=ref_audio
        ):
            filename = f"emotion_{i}_{emotion[:4]}.wav"
            torchaudio.save(filename, result["tts_speech"], 22050)
            print(f"Generated: {filename}")

if __name__ == "__main__":
    emotional_synthesis()

ユースケースが把握できたところで、この記事を読んだ後の学習パスを確認しましょう。


7. 学習ロードマップ

この記事を読んだ後、次のステップとして以下をおすすめします。

初級者向け(まずはここから)

  1. WebUIで遊ぶ: run.batでGUIを起動し、いろいろな音声を試す
  2. Whisperと連携: 自動文字起こし機能を使って効率的にクローン
  3. CosyVoice公式デモを試す

中級者向け(実践に進む)

  1. Pythonスクリプトで自動化: 上記のサンプルコードをカスタマイズ
  2. バッチ処理の実装: 複数のテキストを一括で音声化
  3. vLLMで高速化

上級者向け(さらに深く)

  1. CosyVoice3論文を読む
  2. ファインチューニングに挑戦
  3. TensorRT-LLMでの本番デプロイ

8. まとめ

この記事では、CosyVoiceについて以下を解説しました:

  1. CosyVoiceとは: Alibaba発のオープンソース音声クローンAI
  2. Windows対応の課題: DLLエラー、torchcodec問題などを解決
  3. 環境構築: RTX 5090含む最新GPUでの動作手順
  4. 3つの推論モード: zero_shot、cross_lingual、instruct2の使い分け
  5. 実践的なユースケース: ナレーション、多言語、感情制御

私の所感

正直、CosyVoice3の品質には驚きました。
オープンソースでここまでできるのかと。

特に日本語の発音は、商用サービスと比べても遜色ありません。
ただし、Windowsで動かすまでの道のりは険しかった...。

今回のフォーク版が、同じ悩みを持つ方の助けになれば幸いです。
お役に立ちましたら是ぜひGitHubリポジトリにスターをお願いします!


参考文献

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?