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

テキスト音声変換_TTS--インターフェース説明

概要

TTS モジュールは REST API と WebSocket インターフェースを提供し、ストリーミング合成と一括合成を含むテキスト音声変換機能に対応しています。

REST API

基本情報

  • Base URL: http://localhost:8003
  • すべての API エンドポイントが CORS に対応しています

1. ヘルスチェック

GET /health

サービスの稼働状態を確認します

GET /health

レスポンス:

{
  "status": "healthy",
  "tts_client": true,
  "config_loaded": true
}

2. 設定情報の取得

GET /config

サービスの設定情報を取得します

GET /config

レスポンス:

{
  "default_voice": "zh_female_shuangkuaisisi_emo_v2_mars_bigtts",
  "supported_formats": ["mp3", "wav", "flac"],
  "max_text_length": 5000,
  "audio_processing": true
}

3. テキスト音声変換

POST /synthesize

テキストを音声に変換します

POST /synthesize
Content-Type: application/json

{
  "text": "要转换的文本内容",
  "voice": "音色ID(可选)",
  "speed": 1.0,  // 语速 0.5-2.0(可选)
  "volume": 1.0, // 音量 0.5-2.0(可选)
  "format": "mp3" // 音频格式 mp3/wav/flac(可选)
}

レスポンス:

{
  "audio_data": "Base64编码的音频数据",
  "format": "mp3",
  "duration": 3.5
}

またはエラーレスポンス:

{
  "success": false,
  "error": "错误信息"
}

WebSocket API

リアルタイム ストリーミング音声合成

WebSocket /ws

リアルタイムのストリーミング音声合成に使用します

接続:

ws://localhost:8003/ws

クライアントが送信するメッセージ形式:

{
  "text": "要转换的文本内容",
  "voice": "音色ID(可选)",
  "speed": 1.0,  // 语速 0.5-2.0(可选)
  "volume": 1.0, // 音量 0.5-2.0(可选)
  "format": "mp3" // 音频格式 mp3/wav/flac(可选)
}

サーバーがプッシュするメッセージ形式:

  1. 合成の進捗:
{
  "type": "synthesis_progress",
  "progress": 50
}
  1. 合成完了:
{
  "type": "synthesis_complete",
  "audio_data": "Base64编码的音频数据",
  "format": "mp3",
  "duration": 3.5,
  "size": 12345
}
  1. 合成エラー:
{
  "type": "synthesis_error",
  "error": "错误信息"
}

静的リソース

フロントエンド画面

GET /

Web 画面を取得します

GET /

レスポンス: HTML ページ

静的ファイル

GET /static/

静的リソースファイルにアクセスします

GET /static/index.html
GET /static/css/style.css
GET /static/js/app.js

エラー処理

すべての API エンドポイントは標準の HTTP ステータスコードに従います:

  • 200: 成功
  • 400: リクエストパラメータのエラー
  • 500: サーバー内部エラー
  • 503: サービス利用不可

エラーレスポンスの形式:

{
  "detail": "错误描述"
}

WebSocket のエラーは synthesis_error タイプのメッセージで返されます。

使用例

Python クライアントの例

import requests
import base64
import json

# 文本转语音
data = {
    "text": "你好,世界!",
    "voice": "zh_female_shuangkuaisisi_emo_v2_mars_bigtts",
    "speed": 1.2,
    "format": "mp3"
}

response = requests.post('http://localhost:8003/synthesize', json=data)
result = response.json()

# 保存音频文件
if 'audio_data' in result:
    audio_data = base64.b64decode(result['audio_data'])
    with open('output.mp3', 'wb') as f:
        f.write(audio_data)

JavaScript WebSocket の例

const ws = new WebSocket('ws://localhost:8003/ws');

ws.onopen = function() {
    console.log('WebSocket连接已建立');

    // 发送合成请求
    ws.send(JSON.stringify({
        text: '你好,世界!',
        voice: 'zh_female_shuangkuaisisi_emo_v2_mars_bigtts',
        speed: 1.2,
        format: 'mp3'
    }));
};

ws.onmessage = function(event) {
    const data = JSON.parse(event.data);

    if (data.type === 'synthesis_progress') {
        console.log('合成进度:', data.progress + '%');
    } else if (data.type === 'synthesis_complete') {
        console.log('合成完成,音频大小:', data.size, '字节');
        // 播放音频
        const audio = new Audio("data:audio/" + data.format + ";base64," + data.audio_data);
        audio.play();
    } else if (data.type === 'synthesis_error') {
        console.error('合成错误:', data.error);
    }
};

ws.onclose = function() {
    console.log('WebSocket连接已断开');
};

cURL コマンドの例

# 文本转语音
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"text": "你好,世界!", "voice": "zh_female_shuangkuaisisi_emo_v2_mars_bigtts"}' \
  http://localhost:8003/synthesize