synthèse vocale en Python

Aperçu

Il existe actuellement une technologie de synthèse vocale qui peut être utilisée dans le domaine du doublage. Personnellement, j'ai commencé à chercher des ressources dans ce domaine en raison de certains besoins. Actuellement, de grandes plateformes telles que Tencent, iFlytek, Alibaba, Baidu, etc. tous disposent de tels services API. J'utilise personnellement le service de synthèse vocale de Baidu. Le prix est relativement bon marché. 2 yuans peuvent essentiellement transférer 20 000 mots, et 10 yuans me suffisent pour l'utiliser pendant un an.

Utilisation :
1. Tout d'abord, activez le service de synthèse vocale sur le site Web BaiduBaidu AI,
2. Après avoir obtenu apikey, vous pouvez appeler l'API via python et transmettre le texte à Baidu, et Baidu nous renverra le doublage correspondant.

code

En exécutant le code suivant, nous pouvons obtenir un lien. Cliquez sur le lien et vous pouvez voir que nous avons réussi à convertir notre texte en fichier audio.
Insérer la description de l'image ici

  • Code source
    Notez que vous devez remplacer API_KEY et SECRET_KEY par les clés que vous avez demandées sur Baidu. plate-forme.

Pour des informations plus détaillées sur l'API, veuillez vous référer à : API officielle de synthèse vocale longue de Baidu

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



Je suppose que tu aimes

Origine blog.csdn.net/sexyluna/article/details/133832246
conseillé
Classement