Skip to main content
Glama
shuhei1101
by shuhei1101
README.md
# VoiceBox API Server

VOICEVOX音声合成を提供するFastAPI HTTPサーバー。  
ずんだもん、春日部つむぎ、四国めたんなどのキャラクターボイスでテキストを読み上げます。

**🚀 すぐに始めたい方は [QUICKSTART.md](QUICKSTART.md) をご覧ください**

## 特徴

- **FastAPI ベース**: 高速で軽量なHTTPサーバー
- **どこからでも呼び出し可能**: curl、Python、任意のHTTPクライアントから利用可能
- **1つのサーバーで複数プロジェクト対応**: 常駐型サーバーで効率的
- **バックグラウンド実行**: リクエストは即座にレスポンスを返す
- **複数の話者をサポート**: キャラクターごとに速度設定可能
- **macOS / Linux / Windows 対応**

## セットアップ

### 1. VOICEVOXアプリの起動

VOICEVOX公式サイトからアプリをダウンロード・インストールし、起動しておく。  
デフォルトで `http://localhost:50021` にAPIサーバーが立ち上がる。

### 2. 依存パッケージのインストール

```bash
python -m venv venv
source venv/bin/activate   # Windows: venv\Scripts\activate
pip install -r requirements.txt
```

### 3. サーバー起動

```bash
./start_server.sh
```

または直接起動:

```bash
python api_server.py
```

サーバーが起動すると `http://127.0.0.1:8767` でアクセス可能になります。

## 設定

### 環境変数(オプション)

`.env` ファイルを作成して以下を設定できます:

| 変数名 | 説明 | デフォルト値 |
|--------|------|-------------|
| `VOICEVOX_BASE_URL` | VOICEVOXサーバーURL | `http://localhost:50021` |
| `DEFAULT_SPEAKER` | デフォルト話者名 | `zundamon` |

### 話者設定

`yomiage-svr/config.py` で話者(キャラクター)を設定できます。

**利用可能な話者:**

| 話者名 | キャラクター | スタイル | 速度 |
|--------|------------|---------|-----|
| `zundamon` | ずんだもん | ノーマル | 1.2 |
| `tsumugi` | 春日部つむぎ | ノーマル | 1.2 |
| `metan` | 四国めたん | ノーマル | 1.2 |

話者を追加・変更するには、`yomiage-svr/config.py` の `SPEAKERS` 辞書を編集してください。

## API仕様

### エンドポイント

#### `POST /speech`
テキストを音声合成して読み上げ

**リクエストボディ:**
```json
{
  "text": "読み上げるテキスト",
  "speaker_name": "zundamon"  // 省略可
}
```

**レスポンス:**
```json
{
  "status": "accepted",
  "message": "音声合成を開始しました: ...",
  "speaker_name": "zundamon"
}
```

#### `GET /speakers`
利用可能な話者一覧を取得

**レスポンス:**
```json
{
  "zundamon": {
    "name": "zundamon",
    "display_name": "ずんだもん(ノーマル)",
    "style": "ノーマル",
    "speed_scale": 1.2
  },
  ...
}
```

#### `GET /health`
ヘルスチェック

**レスポンス:**
```json
{
  "status": "ok"
}
```

## 使い方

### curlコマンドで呼び出し

```bash
# デフォルト話者で読み上げ
curl -X POST http://127.0.0.1:8767/speech \
  -H "Content-Type: application/json" \
  -d '{"text": "こんにちは、音声合成のテストです"}'

# 話者を指定して読み上げ
curl -X POST http://127.0.0.1:8767/speech \
  -H "Content-Type: application/json" \
  -d '{"text": "春日部つむぎです", "speaker_name": "tsumugi"}'

# 利用可能な話者一覧を取得
curl http://127.0.0.1:8767/speakers
```

### Pythonから呼び出し

`client_example.py` を参照:

```python
import requests

# 音声合成リクエスト
response = requests.post(
    "http://127.0.0.1:8767/speech",
    json={"text": "こんにちは", "speaker_name": "zundamon"}
)
print(response.json())
```

詳細な使用例:

```bash
python client_example.py
```

### 他のプロジェクトから呼び出し

任意のプロジェクトから、HTTPリクエストでVoiceBox APIを呼び出せます:

```python
# あなたのプロジェクトのコード
import requests

def speak(text: str, speaker: str = "zundamon"):
    requests.post(
        "http://127.0.0.1:8767/speech",
        json={"text": text, "speaker_name": speaker}
    )

# 使用例
speak("処理が完了しました")
speak("エラーが発生しました", speaker="metan")
```

### 直接実行

```bash
python server.py
```

## プロジェクト構成

```
VoiceBox-API/
├── api_server.py               # FastAPIサーバー本体
├── server.py                   # MCPサーバー(旧版・オプション)
├── start_server.sh             # サーバー起動スクリプト
├── client_example.py           # クライアント使用例
├── yomiage-svr/
│   ├── __init__.py
│   ├── config.py               # 話者設定
│   ├── services/
│   │   ├── __init__.py
│   │   ├── voicevox_service.py # VOICEVOX HTTP API音声合成サービス
│   │   └── audio_service.py    # 音声再生サービス
│   └── tools/
│       ├── __init__.py
│       └── speech_tool.py      # Speechツール実装
├── requirements.txt            # 依存パッケージ
├── .env.example               # 環境変数サンプル
└── README.md                  # このファイル
```

## MCPサーバー版(GitHub Copilot / Claude Desktop から呼び出し)

### MCPとは?

**MCP (Model Context Protocol)** は、AIエージェント(GitHub Copilot、Claude Desktopなど)がツールを呼び出すための標準プロトコルです。MCPサーバーとして起動することで、AIエージェントから直接音声合成を実行できます。

### セットアップ

#### 1. MCP設定ファイルの配置

`.vscode/mcp.json` が既に配置されています:

```json
{
  "mcpServers": {
    "yomiage": {
      "command": "${workspaceFolder}/venv/bin/python",
      "args": ["mcp_server.py"],
      "cwd": "${workspaceFolder}",
      "env": {
        "PYTHONPATH": "${workspaceFolder}"
      }
    }
  }
}
```

#### 2. Claude Desktop での設定(オプション)

Claude Desktopから利用する場合は、`~/Library/Application Support/Claude/claude_desktop_config.json` に追加:

```json
{
  "mcpServers": {
    "voicevox-speech": {
      "command": "python",
      "args": ["/path/to/yomiage-svr/mcp_server.py"],
      "cwd": "/path/to/yomiage-svr"
    }
  }
}
```

### MCPサーバーとして起動

```bash
# stdio transport(標準入出力での通信)
python mcp_server.py
```

### 提供されるツール

#### 1. `speak` - 音声合成&読み上げ
```
テキストを音声合成してキャラクターボイスで読み上げ
引数:
  - text: 読み上げるテキスト
  - speaker_name: 話者名(zundamon, tsumugi, metan)。省略時は自動選択
  - transform_tone: 口調変換の有無(デフォルト: true)
```

#### 2. `list_available_speakers` - 話者一覧取得
```
利用可能な話者(キャラクター)の一覧を取得
戻り値: 話者情報のリスト(名前、スタイル、速度など)
```

#### 3. `transform_character_tone` - 口調変換のみ
```
テキストをキャラクターの口調に変換(音声合成なし、文字列のみ)
引数:
  - text: 変換するテキスト
  - speaker_name: 話者名
戻り値: 元テキストと変換後テキスト
```

### GitHub Copilot / Claude Desktop からの使用例

**GitHub Copilot:**
```
#yomiage タスクが完了しました、と読み上げて
```

**Claude Desktop:**
```
「処理が完了しました」をずんだもんの声で読み上げて
```

AIエージェントが自動的に適切なツールを呼び出し、音声で通知してくれます。

### HTTPサーバーとMCPサーバーの使い分け

| 用途 | 推奨サーバー | 起動方法 |
|------|------------|---------|
| curl / Python から呼び出し | FastAPI HTTPサーバー | `./start_server.sh` |
| GitHub Copilot / Claude Desktop から呼び出し | MCPサーバー | `.vscode/mcp.json` で自動起動 |
| 常駐サーバーとして複数プロジェクトから利用 | FastAPI HTTPサーバー | `./start_server.sh` |

**両方同時に起動することも可能です**(ポートが異なるため競合しません)。

## ライセンス・クレジット

VOICEVOX利用時は「VOICEVOX:ずんだもん」等のクレジット表記が必要です。  
詳細は [VOICEVOX利用規約](https://voicevox.hiroshiba.jp/term/) をご確認ください。