Kokoro-82M TTS導入しました

# はじめに

こんにちは、しゅんです。

今回は、Hugging Face で提供されている最先端の TTS (Text-to-Speech) モデル **Kokoro-82M** について紹介します。

現在、公式の [Hugging Face スペース](https://huggingface.co/spaces/hexgrad/Kokoro-TTS) では体験版のみが公開されており、日本語対応についての仕様はまだ正式に公開されていません。v0.23 で日本語対応の計画が発表されましたが、現時点ではモデルのダウンロードや日本語の利用はできません。

## Kokoro-82M とは？

**Kokoro-82M** は、わずか **82Mパラメータ** で高品質なTTSを実現するモデルで、以下の特徴があります：

- **軽量で高精度**：従来のTTSモデルと比較して、少ないデータとパラメータで高い性能を発揮。
- **オープンソース**：Apache 2.0 ライセンスのもとで公開。
- **英語の対応**：アメリカ英語、イギリス英語をサポート。

## 日本語対応の現状

現在、Kokoro v0.23 は以下の制限が存在します：

- **日本語対応の正式リリースは未定。**
- **Hugging Face のデモスペースのみで日本語の試験的対応が提供されている。**
- **CJK（中国語、日本語、韓国語）のトークナイザーは英字を適切に処理できないため、英字の削除が必要。**

公式の発表によると、日本語対応モデルの正式リリース時期はまだ未定です。

---

## 環境構築手順

### 自分の環境
- **OS:** Ubuntu 24.04
- **GPU:** RTX3080LAPTOP（CUDA対応推奨）

### 1. 手順（英語モデルのみ対応）

```bash
# 仮想環境の作成と有効化
python3 -m venv .venv
source .venv/bin/activate

# Git LFSのインストールとリポジトリのクローン
git lfs install
git clone https://huggingface.co/hexgrad/Kokoro-82M
cd Kokoro-82M

# 依存ライブラリのインストール
sudo apt -qq -y install espeak-ng > /dev/null 2>&1
pip install -q phonemizer torch transformers scipy munch

# オーディオ再生用のツール
sudo apt update
sudo apt install sox
```

### 2. Pythonスクリプトの作成（英語用）

以下の内容で `test.py` を作成します：

```python
import torch
import soundfile as sf
from models import build_model
from kokoimport torch
import soundfile as sf
from models import build_model
from kokoro import generate

# デバイスの設定 (CUDA or CPU)
device = 'cuda' if torch.cuda.is_available() else 'cpu'

# 2️⃣ モデルの構築とボイスパックの読み込み
MODEL = build_model('kokoro-v0_19.pth', device)

VOICE_NAME = [
    'af',  # デフォルトのボイス (Bella & Sarah の50-50)
    'af_bella', 'af_sarah', 'am_adam', 'am_michael',
    'bf_emma', 'bf_isabella', 'bm_george', 'bm_lewis',
    'af_nicole', 'af_sky',
][0]

VOICEPACK = torch.load(f'voices/{VOICE_NAME}.pt', weights_only=True).to(device)
print(f'Loaded voice: {VOICE_NAME}')

# 3️⃣ 音声生成の実行
text = "Hello, my name is Syun. I am a 25-year-old Taiwanese. Let me say this first—I’m quite a strange person. I transitioned from electrical and electronics to AI. Currently planning an RPG game and involved in AI and robotics. I have strong biases and a wide range of hobbies. Nice to meet you!"

audio, out_ps = generate(MODEL, text, VOICEPACK, lang=VOICE_NAME[0])

# 言語は VOICE_NAME の最初の文字に基づいて決定
# 🇺🇸 'a' => American English => en-us
# 🇬🇧 'b' => British English => en-gb

# 4️⃣ 生成された音声の保存と再生
output_audio_path = "output_audio.wav"
sf.write(output_audio_path, audio, 24000)
print("Audio saved as 'output_audio.wav'")

# 音声ファイルを再生 (Windows/macOS/Linux 対応)
import os
if os.name == 'nt':  # Windows
    os.system(f'start {output_audio_path}')
elif os.uname().sysname == 'Darwin':  # macOS
    os.system(f'afplay {output_audio_path}')
else:  # Linux
    os.system(f'play {output_audio_path}')

# 生成された音素の表示
print("Phonemes used in the generation:")
print(out_ps)
print(text)

```

### 3. スクリプトの実行

```bash
python3 test.py
```

---

## まとめ

Kokoro-82M は、将来的に多言語対応が期待される TTS モデルですが、**現在日本語は利用できず、正式なリリース待ちの状態です。**

Hugging Face のデモスペースを通じて、日本語の試験的な音声合成を試すことができますが、モデルのダウンロードは未対応です。今後のアップデートを待ちましょう。

## 動作
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Kokoro-82Mを使って自己紹介しました <a href="https://t.co/Vp5W2e60Mj">pic.twitter.com/Vp5W2e60Mj</a></p>&mdash; SYUN@色々と頑張ってます (@syun88AI) <a href="https://twitter.com/syun88AI/status/1881309892562313695?ref_src=twsrc%5Etfw">January 20, 2025</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

### 参考リンク
- [Hugging Face Kokoro-82M デモ](https://huggingface.co/spaces/hexgrad/Kokoro-TTS)
- [Kokoro-82M リポジトリ](https://huggingface.co/hexgrad/Kokoro-82M)


---

最後までお読みいただきありがとうございました！