テキスト音声変換_TTS--_アーキテクチャ設計
概要
TTS(テキスト音声変換)モジュールは、FastAPI をベースにした Web アプリケーションで、テキストを音声に変換する機能を提供します。本モジュールは音声合成のコアエンジンとして火山引擎(Volcano Engine)の TTS サービスを使用し、中国語・英語の多様な音色と音声フォーマットに対応しています。
システムアーキテクチャ
+-------------------+
| Web浏览器前端 |
+-------------------+
|
HTTP/WebSocket
|
+-------------------+
| FastAPI服务器 |
+-------------------+
|
+-----+-----+
| |
| TTS核心 |<---> 配置管理
| 服务模块 |
+-----------+
|
火山引擎TTS
语音合成服务
コアコンポーネント
1. メインアプリケーション (main.py)
- FastAPI アプリケーションのエントリーポイント
- WebSocket エンドポイントによるストリーミング合成の処理
- HTTP エンドポイントによるテキスト合成リクエストの処理
- アプリケーションのライフサイクル管理
- WebSocket 接続管理
2. TTS コアサービス (tts/client.py)
- テキスト音声変換機能
- WebSocket 接続管理
- 火山引擎 TTS プロトコルの実装
- 音声フォーマット対応(MP3, WAV, FLAC)
- ストリーミング合成と一括合成に対応
3. プロトコル実装 (tts/protocols.py)
- 火山引擎 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 クライアントが火山引擎への WebSocket 接続を確立します
- テキスト合成リクエストを送信します
- ストリーミング音声データを受信します
- 音声データをフロントエンドに返します
- フロントエンドで音声を再生またはダウンロードします
WebSocket ストリーミング合成の流れ
- ユーザーが合成ボタンをクリックします
- ブラウザが WebSocket でサーバーに接続します
- TTS クライアントが火山引擎への WebSocket 接続を確立します
- テキストとパラメータ設定を送信します
- 音声データストリームをリアルタイムで受信します
- WebSocket で音声データをプッシュします
- フロントエンドの JavaScript が音声を受信して再生します
技術スタック
- Web フレームワーク: FastAPI
- 音声合成: 火山引擎 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 接続を再利用し、頻繁な接続確立を回避します
- エラー処理: 充実した例外処理とリトライ機構
- リソース解放: アプリケーション終了時に接続リソースを正しく解放します
- 設定の最適化: 環境変数による上書きに対応し、デプロイを容易にします
ドキュメント