import base64
import requests
import json

API_KEY = 'YOUR_API_KEY'
SECRET_KEY = 'YOUR_SECRET_KEY'
# 通过AK、SK获取token或通过安全认证中心获取IAM APIKEY两种鉴权方式二选一
IAM_API_KEY='YOUR_IAM_API_KEY'

def baidu_voice_clone():
    token = get_access_token()
    # API接口地址
    if "bce-v3" in IAM_API_KEY:
        url = "https://aip.baidubce.com/rest/2.0/speech/publiccloudspeech/v1/voice/clone/create"
    else:
        url = f"https://aip.baidubce.com/rest/2.0/speech/publiccloudspeech/v1/voice/clone/create?access_token={token}"

    # 将本地音频文件转换成base64格式
    audio_file_path = "音频路径"  # 建议填写本地音频文件的绝对路径
    with open(audio_file_path, "rb") as f:
        base64_audio = base64.b64encode(f.read()).decode('utf-8')

    # 请求头
    headers = {
        "Content-Type": "application/json",
        "Authorization": 'Bearer ' + IAM_API_KEY
    }

    # 请求体参数
    payload = {
        "voice_name":"XXX",
        "audio_url": "注册音频链接",
        # 音频链接和音频内容二选一
        "audio_file":f"{base64_audio}"
    }

    # 发送POST请求
    response = requests.post(url, headers=headers, json=payload, timeout=30)
    # 输出返回日志
    print(json.dumps(response.json(), ensure_ascii=False, indent=2))

def get_access_token():
    """
    使用 AK，SK 生成鉴权签名（Access Token）
    :return: access_token，或是None(如果错误)
    """
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {
        "grant_type": "client_credentials",
        "client_id": API_KEY,
        "client_secret": SECRET_KEY
    }
    response = requests.post(url, params=params)
    token_data = response.json()
    return token_data.get("access_token")

if __name__ == "__main__":
    # 运行前请先安装依赖：pip install requests
    baidu_voice_clone()