• 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
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
  • 相关阅读:
    红黑树的由来及其底层原理
    vite.config.js或者vue.config.js配置
    手写Ribbon基本原理
    Java:学习Java的最好方法
    input上传图片,并预览
    pointpillars训练的输出信息
    EPS创建三维模型-(osgb数据在EPS中的转换数据)
    如何重新训练模型?
    Go语言函数进阶:值传递、引用传递、函数式编程
    为什么Git的教程都那么繁杂?
  • 原文地址:https://blog.csdn.net/sexyluna/article/details/133832246