概述
目前有文本转语音的技术,可以用在配音领域,我个人因为一些需求,所以开始寻找这方面的资源,目前各大平台,比如腾讯,讯飞,阿里,百度等都有这样的API服务,我个人是是使用百度的文本转语音服务。价格比较便宜。2块钱基本可以转20000个字,基本10块钱就够我用一年了。
使用方法:
1。 首先在百度百度AI网址,开通文本转语音服务,
2。 拿到apikey
, 就可以通过python调用API,把文本传递给百度,百度返回给我们对应的配音。
代码
通过执行以下代码,我们就可以得到一个链接,点击该链接,就可以看到我们成功的把我们的文本,转为音频后的文件。
- 源代码
注意,需要将API_KEY
和SECRET_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/ulbxh8rbuload_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): idReturns: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_idheaders = {"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