概述
目前有文本转语音的技术,可以用在配音领域,我个人因为一些需求,所以开始寻找这方面的资源,目前各大平台,比如腾讯,讯飞,阿里,百度等都有这样的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/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