テキスト音声変換_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(可选)
}
サーバーがプッシュするメッセージ形式:
- 合成の進捗:
{
"type": "synthesis_progress",
"progress": 50
}
- 合成完了:
{
"type": "synthesis_complete",
"audio_data": "Base64编码的音频数据",
"format": "mp3",
"duration": 3.5,
"size": 12345
}
- 合成エラー:
{
"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
ドキュメント