使用Python和百度对外共享的TTS接口实现文本转语音
起因
近日,一个朋友给了我一张神奇的二维码:
我扫了一下,进入了这个链接:
https://tts.baidu.com/text2audio?tex=%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C%EF%BC%81&cuid=baike&lan=ZH&ie=utf-8&ctp=1&pdt=301&vol=9&rate=32&per=0
页面里就是一个mp3文件:
自动播放了一个“你好世界”的语音
看到tts.baidu.com这种奇怪的字眼和熟悉的URL编码,我本能地去把编码解码出来,不用说你们也知道,解码结果就是你好世界!
那么,一切基本就真相大白了:
https://tts.baidu.com/text2audio使用URL的参数来进行文本转语音,返回mp3文件。
经过
再经过一段时间的摸索,我基本找到了参数的规律:
tex参数:要转为语音的文本内容
spd参数:朗读速度,取值范围 [1,9]
lan参数:语言码,取值及其含义如下表:
语言码 含义
ZH 普通话
EN 美式英语
UK 英式英语
CTE 粤语
per参数:音色码,取值及其实际音色如下表(只有普通话有音色码,其他语音只有一种标准音音色,标准音音色的音色码可以设为0):
音色码 实际音色
0 标准女音
1 标准男音
3 斯文男音
4 小萌萌
5 知性女音
6 老教授
8 葛平音
9 播音员
10 京腔
11 温柔大叔
使用表格以外的音色码或语言码可能会报错
其他参数作用未知,暂时设定朋友给的二维码里的值
这些音色码的“实际音色”其实都是我自己靠耳朵听出来,自己给那个音色起的名字。。。
希望有大神可以找出剩下参数的作用或是更多的音色码/语言码
代码
于是,我使用Python的requests库写了一个方便调用百度TTS语音功能的程序:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
#import os
def TTS(text, speed, lan, per):
"""普通话-音色:
标准女音
标准男音
斯文男音
小萌萌
知性女音
老教授
葛平音
播音员
京腔
温柔大叔
英式英语-音色:
标准音
美式英语-音色:
标准音
粤语-音色:
标准音
"""
convertTable = { #建立易读文本和音色码/语言码的关系表
'中文': ('ZH', {
'标准女音': 0,
'标准男音': 1,
'斯文男音': 3,
'小萌萌': 4,
'知性女音': 5,
'老教授': 6,
'葛平音': 8,
'播音员': 9,
'京腔': 10,
'温柔大叔': 11
}),
'英式英语': ('UK', {
'标准音': 0
}),
'美式英语': ('EN', {
'标准音': 0
}),
'粤语': ('CTE', {
'标准音': 0
})
}
data = {
'tex': text,
'spd': speed,
'lan': convertTable[lan][0],
'per': convertTable[lan][1][per],
'ctp': 1,
'cuid': 'baike',
'ie': 'UTF-8',
'pdt': 301,
'vol': 9,
'rate': 32
}
result = requests.get('https://tts.baidu.com/text2audio', params=data)
try:
result.json()
except:
return result.content
else:
raise ValueError
if __name__ == '__main__':
try:
bindata = TTS('''测试一下,你好世界!''', 5, '中文', '小萌萌')
except:
print('Error')
else:
with open('result.mp3', 'wb+') as f:
f.write(bindata) #在同级目录写入为mp3文件
#os.startfile('result.mp3') #自动运行生成的mp3
————————————————
版权声明:本文为CSDN博主「Cykinter」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Cykinter/article/details/107215464
版权声明:
作者:loyolife
链接:https://loyolife.com/687.html
来源:loyolife | 高效工作,轻松生活~ | 悠哉知识集
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论