使用Python+百度AI把文字转成语音

随着AI技术的发展,音视频的自动生成转换技术已经被越来越多的应用,很多内容网站都在文章内容页面嵌入了语音朗读功能,AI合成主播也开始在新闻媒体中应用。

知乎文章页面的朗读功能
新华社的AI合成主播

这个就是新华社联合搜狗公司在京发布全新升级的站立式AI合成主播,如果不预先说明的话,猛然看去还看真的有点难分真假。

以现在的发展趋势,AI技术将是所有行业竞争的核心能力,甚至是国家、政策之间竞争的关键因素。现在BAT大厂都有自己的AI开放平台,开放一些AI接口给企业或个人使用,一方面可以让AI技术更加快速的普及,另一方面也可以通过用户反馈进行算法的优化和迭代。

最近与业务部门沟通,聊到可能需要制作大量的短视频内容,有些培训类的可以采用PPT动画+配音的方式来实现。按照通常的做法,要么边讲边录,再后期剪辑,要么先制作PPT动画,再找专业人员配音合成。这两种方式都需要耗费大量的时间精力,那是否可以在制作完成PPT动画之后,采用文字转语音的方式生成配音文件,再进行合成呢?

我用Python+百度AI的方式做了个简单的测试,是可以的:

百度AI开放平台的网址:

​ai.baidu.com

在百度AI开放平台的开放能力中,进入语音技术,可以看到【语音合成】

点击【语音合成】后,会看到下面的页面,再点击【立即使用】,进入到管理中心页面。

百度AI语音合成

在管理中心页面可以看到,很多服务接口都是免费的,或者提供了足够多了免费调用次数,除非是做商用,一般的测试甚至是解决一点企业内部的需求用免费的就够了。

百度AI的语音技术服务有很多免费

要使用服务,首先要创建一个应用:

在百度AI平台创建应用

创建应用很简单,跟着提示简单填写一下应用名称之类就可以了,完成后就会得到APIKey,SecretKey了,这两个调用服务的必填参数:

在百度AI平台创建好的应用

到这一步为止,需要在百度AI平台上要做的事情已经结束了,平台上有技术文档,也有demo供参考,接下来就可以用自己熟悉的任何语言调用接口服务达到我们想要的目的了。我这里用的是Python,主要还是用到request模块,调用接口并把服务生成的音频数据以mp3的格式保存到本地电脑上,完整代码如下:

# -*- coding: utf-8 -*-
""" Created on Fri May 22 16:01:26 2020
功能:调用百度AI语音接口,把文字转换为mp3格式的语音
@author: zxz ​
"""
import time
import requests
import urllib.parse
import urllib.request ​ ​
def fetch_token(): # 提交请求,拿到
token api_key = "KPDENK867fZG************" # 使用百度AI平台管理中心中创建的应用的API Key
 secret_key = "YtdRTsQuLgZkO680m3db************" # 使用百度AI平台管理中心中创建的应用的Secret Key
 token_url = "https://openapi.baidu.com/oauth/2.0/token"
 # print("fetch token begin")
params = {"grant_type": "client_credentials", "client_id": api_key, "client_secret": secret_key}
r = requests.get(url=token_url, params=params)
if r.status_code == 200:
     rstr = r.json() # print(r.status_code)
     # print(rstr) # print(r.text)
     # print(rstr['access_token'])
    tok = rstr['access_token']
     return(tok)

else: print(r.text)
print('请求错误!') ​ ​
""" TOKEN end """ ​ ​
if __name__ == '__main__':
    token = fetch_token()
    TTS_URL = "https://tsn.baidu.com/text2audio"
    # text = u"莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马。谁怕?一蓑烟雨任平生。料峭春风吹酒醒,微冷,山头斜照却相迎。回首向来萧瑟处,归去。也无风雨也无晴。".encode('utf8')
text = u"如今,有关品牌的闲谈远比精准的广告宣传更为可信。社交圈子接过了外部营销交流和个人喜好的火炬,成为影响力的主要来源。用户在选择品牌时倾向于听取朋友的经验,好像在建起一座社交圈子筑成的堡垒,免受虚假品牌宣传和营销手段的欺骗。".encode('utf8')
# 发音人选择, 基础音库:0为度小美,1为度小宇,3为度逍遥,4为度丫丫,
# 精品音库:5为度小娇,103为度米朵,106为度博文,110为度小童,111为度小萌,默认为度小美 PER = 106 # 语速,取值0-15,默认为5中语速
SPD = 5 # 音调,取值0-15,默认为5中语调
PIT = 5 # 音量,取值0-9,默认为5中音量
VOL = 5 # 下载的文件格式, 3:mp3(default) 4: pcm-16k 5: pcm-8k 6. wav AUE = 3 ​
FORMATS = {3: "mp3", 4: "pcm", 5: "pcm", 6: "wav"}
FORMAT = FORMATS[AUE]
data = urllib.parse.urlencode({'tex': text, 'per': PER, 'tok': token, 'cuid': '20009514', 'ctp': 1, 'lan': 'zh', 'aue': AUE})
# print('test on Web Browser' + TTS_URL + '?' + data) ​
req = requests.post(TTS_URL, data) ​ print(req.status_code)
if req.status_code == 200:
    # print(req.content)
    result_str = req.content
    save_file = time.strftime("%Y%m%d%H%M%S", time.localtime()) + '.' + FORMAT
with open(save_file, 'wb') as of:
    of.write(result_str)
    print('success!')
else: 
    print('has error!')

以上代码在python3.8环境下完美运行通过,执行的结果会以“日期时间数字.mp3”为文件名把生成的语音文件保存在代码的同目录中。这段代码只是为了测试实现调用百度AI语音接口把文字生成语音的过程,没有太多考虑代码的结构优化、错误处理等问题,可以在此基础上进行完善。

小结:

百度语音合成服务目前有基础音库和精品音库两种,共9种语音,可以根据需要进行合成。我在代码中测试了两条中文,一条是诗词、一条是论述。从生成的结果对比来看,基础音库和精品音库只是音色不同,在自然流畅度的效果上没有感觉出有太大差异。

合成的语音在切词方面比较自然,但在连贯性和轻重音方面会有一点显得不那么自然。所以,如果是需要输出一些说明文、论述文、教程类文字的语音,用这种方式还是可以接受的,即快又省啊。但如果是需要有感情地朗读的内容,我觉得目前的算法还是有待改进的,不知道其它平台怎么样?如果有类似经验的朋友可以留言交流一下。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343