python文本转语音

概述

目前有文本转语音的技术,可以用在配音领域,我个人因为一些需求,所以开始寻找这方面的资源,目前各大平台,比如腾讯,讯飞,阿里,百度等都有这样的API服务,我个人是是使用百度的文本转语音服务。价格比较便宜。2块钱基本可以转20000个字,基本10块钱就够我用一年了。

使用方法:
1。 首先在百度百度AI网址,开通文本转语音服务,
2。 拿到apikey, 就可以通过python调用API,把文本传递给百度,百度返回给我们对应的配音。

代码

通过执行以下代码,我们就可以得到一个链接,点击该链接,就可以看到我们成功的把我们的文本,转为音频后的文件。
在这里插入图片描述

  • 源代码
    注意,需要将 API_KEYSECRET_KEY 改为自己在百度平台申请的key。

关于更详细的API到家可以参考: 百度官方-长文本转语音API

import requests
from dotenv import load_dotenv
from time import sleep
import json
import os

# api 地址:
# https://ai.baidu.com/ai-doc/SPEECH/ulbxh8rbu

load_dotenv(dotenv_path = ".env",override = True)

API_KEY = os.environ.get("API_KEY")
SECRET_KEY = os.environ.get("SECRET_KEY")

def create_a_task(text_2_voice):
    """传入文本,转为音频

    Args:
        text_2_voice (str or list): 文本,或者文本数组

    Returns:
        json: 包含任务id的json序列
    """

    url = (
        "https://aip.baidubce.com/rpc/2.0/tts/v1/create?access_token="
        + get_access_token()
    )

    payload = json.dumps(
        {
            "text": text_2_voice,  # 待合成的文本
            "format": "wav",  # 音频格式
            "voice": 0,  # 音库
            "lang": "zh",  # 语言,固定zh
            "speed": 5,  # 语速
            "pitch": 5,  # 音调
            "volume": 5,  # 音量
            "enable_subtitle": 2,  # 是否开启字幕时间戳,取值范围0, 1, 2
            "break": 5000,  # 段落间隔
        }
    )
    headers = {"Content-Type": "application/json", "Accept": "application/json"}

    response = requests.request("POST", url, headers=headers, data=payload)
    print(response.json())
    return response.json()


def get_task_results(task_id: list):
    """查询id是否已经完成了文本转语音

    Args:
        task_id (list): id

    Returns:
        json: 目前结果
    """
    url = (
        "https://aip.baidubce.com/rpc/2.0/tts/v1/query?access_token="
        + get_access_token()
    )

    payload = json.dumps({"task_ids": [task_id]})  # create获取的task_id
    headers = {"Content-Type": "application/json", "Accept": "application/json"}

    response = requests.request("POST", url, headers=headers, data=payload)

    return response.json()


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,
    }
    return str(requests.post(url, params=params).json().get("access_token"))


if __name__ == "__main__":
    task_id = create_a_task(["我叫龙傲天,我最爱学习", "天下无双"])["task_id"]
    while True:
        status_results = get_task_results(task_id=task_id)["tasks_info"]
        if status_results[0]["task_status"] == "Success":
            print("---------------------------------------")
            print(status_results[0]["task_result"]["speech_url"])
            print("---------------------------------------")
            break



你可能感兴趣的:(#,Python,python,dubbo,开发语言)