音声合成(TTS)- アーキテクチャ設計
概要
TTS(Text-to-Speech)モジュールは、音声合成機能を提供する FastAPI ベースの Web アプリケーションです。中核となる音声合成エンジンとして Volcano Engine の TTS サービスを使用し、多様な中国語・英語の声質と音声フォーマットに対応しています。
システムアーキテクチャ
+-------------------+
| Web浏览器前端 |
+-------------------+
|
HTTP/WebSocket
|
+-------------------+
| FastAPI服务器 |
+-------------------+
|
+-----+-----+
| |
| TTS核心 |<---> 配置管理
| 服务模块 |
+-----------+
|
火山引擎TTS
语音合成服务
コアコンポーネント
1. メインアプリケーション(main.py)
- FastAPI アプリケーションのエントリーポイント
- ストリーミング合成を処理する WebSocket エンドポイント
- テキスト合成リクエストを処理する HTTP エンドポイント
- アプリケーションのライフサイクル管理
- WebSocket 接続管理
2. TTS コアサービス(tts/client.py)
- 音声合成機能
- WebSocket 接続管理
- Volcano Engine TTS プロトコルの実装
- 音声フォーマットのサポート(MP3、WAV、FLAC)
- ストリーミング合成と一括合成のサポート
3. プロトコルの実装(tts/protocols.py)
- Volcano Engine TTS V3 プロトコルの実装
- メッセージタイプとイベントの定義
- WebSocket メッセージのエンコード/デコード
- 接続とセッションの管理
4. エラー処理(tts/errors.py)
- TTS エラーコードの定義
- 例外クラスの実装
- エラー処理とリトライの仕組み
- クォータ超過時の処理
5. 設定管理(config/)
- YAML 設定ファイルの解析(
config/tts_config.yaml) - 設定クラスの定義と検証(
config/config_manager.py) - 環境変数のサポート
- デフォルト設定の生成
6. フロントエンド画面(static/)
- HTML ユーザーインターフェース(
static/index.html) - JavaScript クライアントロジック(
static/js/app.js) - CSS スタイル(
static/css/style.css) - WebSocket によるリアルタイム通信
- 音声の再生とダウンロード
実際のコード構成
tts/
├── config/
│ ├── config_manager.py # 配置管理器
│ └── tts_config.yaml # 配置文件
├── docs/ # 文档
├── static/ # 前端静态资源
│ ├── css/
│ ├── js/
│ └── index.html
├── tests/ # 测试文件
├── tts/
│ ├── client.py # TTS客户端实现
│ ├── protocols.py # 协议定义
│ └── errors.py # 错误处理
├── main.py # 应用入口
├── requirements.txt # 依赖包
└── README.md # 项目说明
データフロー
音声合成の処理フロー
- ユーザーが Web 画面からテキストを入力します
- FastAPI がリクエストを受け取り、TTS クライアントに渡します
- TTS クライアントが Volcano Engine への WebSocket 接続を確立します
- テキスト合成リクエストを送信します
- ストリーミング音声データを受信します
- 音声データをフロントエンドに返します
- フロントエンドで音声を再生またはダウンロードします
WebSocket ストリーミング合成の処理フロー
- ユーザーが「合成」ボタンをクリックします
- ブラウザが WebSocket でサーバーに接続します
- TTS クライアントが Volcano Engine への WebSocket 接続を確立します
- テキストとパラメーター設定を送信します
- 音声データストリームをリアルタイムで受信します
- WebSocket で音声データをプッシュします
- フロントエンドの JavaScript が音声を受信して再生します
技術スタック
- Web フレームワーク:FastAPI
- 音声合成:Volcano Engine TTS サービス
- プロトコル:WebSocket V3 双方向ストリーミングプロトコル
- 音声処理:pydub、numpy
- フロントエンド:HTML、CSS、JavaScript(ネイティブ実装、フレームワークなし)
- 設定:PyYAML
- 非同期処理:Python asyncio
- 環境変数:python-dotenv
音声処理の詳細
対応フォーマット
- MP3:デフォルトのフォーマット。圧縮率が高い
- WAV:可逆フォーマット。ファイルサイズが大きい
- FLAC:可逆圧縮フォーマット。品質とサイズのバランスが良い
パラメーター調整
- 話速:0.5~2.0 倍の範囲で調整
- 音量:0.5~2.0 倍の範囲で調整
- 声質:多様な中国語・英語の声質から選択
- 感情:感情表現付きの音声合成に対応
デプロイアーキテクチャ
客户端浏览器
↓ HTTP/WebSocket
负载均衡器 (可选)
↓
TTS应用服务器
↓
火山引擎TTS服务
パフォーマンス最適化
- 接続管理:WebSocket 接続を再利用し、頻繁な接続確立を回避します
- エラー処理:充実した例外処理とリトライの仕組み
- リソースのクリーンアップ:アプリケーション終了時に接続リソースを適切に解放します
- 設定の最適化:環境変数による設定の上書きに対応し、デプロイを容易にします
ドキュメント