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 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!