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

音声合成(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                 # 项目说明

データフロー

音声合成の処理フロー

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

WebSocket ストリーミング合成の処理フロー

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

パフォーマンス最適化

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