python展开代码import requests
import json
import os
from tqdm import tqdm
import time
class FishAudioTTS:
def __init__(self, api_key, reference_id):
"""
初始化Fish Audio TTS客户端
Args:
api_key (str): Fish Audio API密钥
reference_id (str): 参考音频ID
"""
self.api_key = api_key
self.reference_id = reference_id
self.base_url = "https://api.fish.audio/v1/tts"
self.headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json',
'model': 's1' # 使用s1模型
}
def text_to_speech(self, text, output_file="output.wav", **kwargs):
"""
将文本转换为语音
Args:
text (str): 要转换的文本
output_file (str): 输出音频文件名
**kwargs: 其他API参数
"""
# 默认参数
default_params = {
"text": text,
"reference_id": self.reference_id, # 使用参考音频ID
"temperature": 0.7,
"top_p": 0.7,
"chunk_length": 200,
"normalize": True,
"format": "wav",
"sample_rate": 44100,
"latency": "normal"
}
# 合并用户提供的参数
params = {**default_params, **kwargs}
print(f"🎵 开始文本转语音...")
print(f"📝 文本内容: {text[:50]}{'...' if len(text) > 50 else ''}")
print(f"🎯 参考音频ID: {self.reference_id}")
print(f"🤖 使用模型: s1")
try:
# 发送请求
with tqdm(desc="🚀 发送请求到Fish Audio API", unit="req") as pbar:
response = requests.post(
self.base_url,
headers=self.headers,
json=params,
timeout=60
)
pbar.update(1)
# 检查响应状态
if response.status_code == 200:
print("✅ API请求成功!")
# 保存音频文件
with tqdm(desc="💾 保存音频文件", unit="B", unit_scale=True) as pbar:
with open(output_file, "wb") as f:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
pbar.update(len(chunk))
print(f"🎉 音频文件已保存到: {output_file}")
print(f"📊 文件大小: {os.path.getsize(output_file)} 字节")
return True
elif response.status_code == 401:
print("❌ 认证失败: API密钥无效")
return False
elif response.status_code == 402:
print("❌ 支付失败: 账户余额不足")
return False
elif response.status_code == 422:
print("❌ 请求参数错误")
try:
error_info = response.json()
print(f"错误详情: {error_info}")
except:
print(f"响应内容: {response.text}")
return False
else:
print(f"❌ 请求失败: HTTP {response.status_code}")
print(f"响应内容: {response.text}")
return False
except requests.exceptions.Timeout:
print("❌ 请求超时,请检查网络连接")
return False
except requests.exceptions.RequestException as e:
print(f"❌ 网络请求错误: {e}")
return False
except Exception as e:
print(f"❌ 未知错误: {e}")
return False
def main():
"""主函数 - 演示Fish Audio TTS的使用"""
# 配置信息
API_KEY = "xx"
REFERENCE_ID = "ef45348243c74d0d83ceb0f2f90c2d38" # 参考音频ID
# 创建TTS客户端
tts_client = FishAudioTTS(API_KEY, REFERENCE_ID)
# 测试文本
test_text = "你好,这是一个使用Fish Audio API的文本转语音测试。今天天气真不错,希望你能喜欢这个声音效果!"
print("=" * 60)
print("🎤 Fish Audio 文本转语音测试")
print("=" * 60)
# 执行文本转语音
success = tts_client.text_to_speech(
text=test_text,
output_file="fish_audio_output.wav",
# 可以自定义参数
temperature=0.8,
top_p=0.8,
format="wav",
sample_rate=44100
)
if success:
print("\n🎉 文本转语音完成!")
print(f"📁 输出文件: fish_audio_output.wav")
else:
print("\n❌ 文本转语音失败,请检查错误信息")
if __name__ == "__main__":
main()


本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!