HumansXドキュメントセンター 公式サイトへ ↗

テキスト音声変換_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                 # 项目说明

データフロー

テキスト音声変換の流れ

  1. ユーザーが Web 画面からテキストを入力します
  2. FastAPI がリクエストを受け取り、TTS クライアントに渡します
  3. TTS クライアントが火山引擎への WebSocket 接続を確立します
  4. テキスト合成リクエストを送信します
  5. ストリーミング音声データを受信します
  6. 音声データをフロントエンドに返します
  7. フロントエンドで音声を再生またはダウンロードします

WebSocket ストリーミング合成の流れ

  1. ユーザーが合成ボタンをクリックします
  2. ブラウザが WebSocket でサーバーに接続します
  3. TTS クライアントが火山引擎への WebSocket 接続を確立します
  4. テキストとパラメータ設定を送信します
  5. 音声データストリームをリアルタイムで受信します
  6. WebSocket で音声データをプッシュします
  7. フロントエンドの 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服务

パフォーマンス最適化

  1. 接続管理: WebSocket 接続を再利用し、頻繁な接続確立を回避します
  2. エラー処理: 充実した例外処理とリトライ機構
  3. リソース解放: アプリケーション終了時に接続リソースを正しく解放します
  4. 設定の最適化: 環境変数による上書きに対応し、デプロイを容易にします