2025-08-22 09:44:05 +08:00
|
|
|
|
import base64
|
|
|
|
|
import uuid
|
2025-08-22 09:47:15 +08:00
|
|
|
|
|
2025-08-22 09:44:05 +08:00
|
|
|
|
import requests
|
|
|
|
|
|
|
|
|
|
from Config.Config import HS_APP_ID, HS_ACCESS_TOKEN, HS_CLUSTER_ID, HS_VOICE_TYPE
|
|
|
|
|
|
|
|
|
|
appid = HS_APP_ID
|
|
|
|
|
access_token= HS_ACCESS_TOKEN
|
|
|
|
|
cluster = HS_CLUSTER_ID
|
|
|
|
|
|
|
|
|
|
voice_type = HS_VOICE_TYPE
|
|
|
|
|
host = "openspeech.bytedance.com"
|
|
|
|
|
api_url = f"https://{host}/api/v1/tts"
|
|
|
|
|
|
|
|
|
|
header = {"Authorization": f"Bearer;{access_token}"}
|
|
|
|
|
|
|
|
|
|
request_json = {
|
|
|
|
|
"app": {
|
|
|
|
|
"appid": appid,
|
|
|
|
|
"token": "access_token",
|
|
|
|
|
"cluster": cluster
|
|
|
|
|
},
|
|
|
|
|
"user": {
|
|
|
|
|
"uid": "388808087185088"
|
|
|
|
|
},
|
|
|
|
|
"audio": {
|
|
|
|
|
"voice_type": voice_type,
|
|
|
|
|
"encoding": "mp3",
|
|
|
|
|
"speed_ratio": 1.0,
|
|
|
|
|
"volume_ratio": 1.0,
|
|
|
|
|
"pitch_ratio": 1.0,
|
|
|
|
|
},
|
|
|
|
|
"request": {
|
|
|
|
|
"reqid": str(uuid.uuid4()),
|
2025-08-22 09:44:23 +08:00
|
|
|
|
"text": "我是小何啊,这是什么鬼~",
|
2025-08-22 09:44:05 +08:00
|
|
|
|
"text_type": "plain",
|
|
|
|
|
"operation": "query",
|
|
|
|
|
"with_frontend": 1,
|
|
|
|
|
"frontend_type": "unitTson"
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
try:
|
2025-08-22 09:46:58 +08:00
|
|
|
|
resp = requests.post(api_url, json=request_json, headers=header)
|
|
|
|
|
print(f"resp body: {resp.json()}")
|
|
|
|
|
|
|
|
|
|
# 检查响应状态
|
|
|
|
|
if resp.status_code == 200:
|
|
|
|
|
resp_data = resp.json()
|
|
|
|
|
if resp_data.get("code") == 3000 and "data" in resp_data:
|
|
|
|
|
data = resp_data["data"]
|
|
|
|
|
|
|
|
|
|
# 检查data是否为空
|
|
|
|
|
if data:
|
|
|
|
|
try:
|
|
|
|
|
# 解码Base64数据
|
|
|
|
|
audio_data = base64.b64decode(data)
|
|
|
|
|
|
|
|
|
|
# 保存为MP3文件
|
|
|
|
|
output_file = "test_tts_output.mp3"
|
|
|
|
|
with open(output_file, "wb") as f:
|
|
|
|
|
f.write(audio_data)
|
|
|
|
|
print(f"音频文件已成功保存为: {output_file}")
|
|
|
|
|
except Exception as decode_error:
|
|
|
|
|
print(f"Base64解码或文件保存失败: {str(decode_error)}")
|
|
|
|
|
# 打印数据前100个字符,以便调试
|
|
|
|
|
print(f"数据前100个字符: {data[:100]}")
|
|
|
|
|
else:
|
|
|
|
|
print("错误: 返回的data字段为空")
|
|
|
|
|
else:
|
|
|
|
|
print(f"API返回错误: code={resp_data.get('code')}, message={resp_data.get('message')}")
|
|
|
|
|
else:
|
|
|
|
|
print(f"HTTP请求失败: 状态码={resp.status_code}")
|
2025-08-22 09:44:05 +08:00
|
|
|
|
except Exception as e:
|
2025-08-22 09:46:58 +08:00
|
|
|
|
print(f"发生异常: {str(e)}")
|
|
|
|
|
import traceback
|
|
|
|
|
traceback.print_exc()
|