前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python实现文字转语音

Python实现文字转语音

作者头像
用户7886150
修改2020-12-28 11:34:46
4.1K0
修改2020-12-28 11:34:46
举报
文章被收录于专栏:bit哲学院

参考链接: 在Python中将文本转换为语音

Python实现文字转语音

 前言创建应用获取应用的API Key和Secret Key编写python代码替换API Key和Secret Key生成的音频文件

前言 

因为该功能的实现,需要使用百度的语音合成技术,所以,首先需要注册并登陆百度AI: https://ai.baidu.com/tech/speech 

创建应用 

 点击创建应用,创建自己的应用。  按照提示填入相应内容就好。 

获取应用的API Key和Secret Key 

编写python代码 

# coding=utf-8

import sys

import json

# 保证兼容python2以及python3

IS_PY3 = sys.version_info.major == 3

if IS_PY3:

    from urllib.request import urlopen

    from urllib.request import Request

    from urllib.error import URLError

    from urllib.parse import urlencode

    from urllib.parse import quote_plus

else:

    import urllib2

    from urllib import quote_plus

    from urllib2 import urlopen

    from urllib2 import Request

    from urllib2 import URLError

    from urllib import urlencode

API_KEY = 'nu9r2plGFi3s1ugayDPSM6Mk'

SECRET_KEY = 'G62YGnq84eKTqu0mBgvdpmC6gNBzHdai'

TEXT = "三分钟前,由北京市顺义区二经路与二纬路交汇处北侧,北京首都国际机场T3航站楼 去往 东城区北三环东路36号喜来登大酒店(北京金隅店)"

TTS_URL = 'http://tsn.baidu.com/text2audio'

"""  TOKEN start """

TOKEN_URL = 'http://openapi.baidu.com/oauth/2.0/token'

"""

    获取token

"""

def fetch_token():

    params = {'grant_type': 'client_credentials',

              'client_id': API_KEY,

              'client_secret': SECRET_KEY}

    post_data = urlencode(params)

    if (IS_PY3):

        post_data = post_data.encode('utf-8')

    req = Request(TOKEN_URL, post_data)

    try:

        f = urlopen(req, timeout=5)

        result_str = f.read()

    except URLError as err:

        print('token http response http code : ' + str(err.code))

        result_str = err.read()

    if (IS_PY3):

        result_str = result_str.decode()

    result = json.loads(result_str)

    if ('access_token' in result.keys() and 'scope' in result.keys()):

        if not 'audio_tts_post' in result['scope'].split(' '):

            print ('please ensure has check the tts ability')

            exit()

        return result['access_token']

    else:

        print ('please overwrite the correct API_KEY and SECRET_KEY')

        exit()

"""  TOKEN end """

if __name__ == '__main__':

    token = fetch_token()

    tex = quote_plus(TEXT)  # 此处TEXT需要两次urlencode

    params = {'tok': token, 'tex': tex, 'cuid': "quickstart",

              'lan': 'zh', 'ctp': 1}  # lan ctp 固定参数

    data = urlencode(params)

    req = Request(TTS_URL, data.encode('utf-8'))

    has_error = False

    try:

        f = urlopen(req)

        result_str = f.read()

        headers = dict((name.lower(), value) for name, value in f.headers.items())

        has_error = ('content-type' not in headers.keys() or headers['content-type'].find('audio/') < 0)

    except  URLError as err:

        print('http response http code : ' + str(err.code))

        result_str = err.read()

        has_error = True

    save_file = "error.txt" if has_error else u'大姚的订单信息.mp3'

    with open(save_file, 'wb') as of:

        of.write(result_str)

    if has_error:

        if (IS_PY3):

            result_str = str(result_str, 'utf-8')

        print("tts api  error:" + result_str)

    print("file saved as : " + save_file)

替换API Key和Secret Key 

将上面代码中的API_KEY 和SECRET_KEY,替换成自己应用中的API Key和Secret Key,运行代码。 

生成的音频文件 

生成的音频文件名为:大姚的订单信息.mp3。打开MP3听到的声音就是上面输入的文字。 

TEXT = "三分钟前,由北京市顺义区二经路与二纬路交汇处北侧,北京首都国际机场T3航站楼 去往 东城区北三环东路36号喜来登大酒店(北京金隅店)"

上面的文字可以替换成想自己想要转语音的其他文字。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
语音合成
语音合成(Text To Speech,TTS)满足将文本转化成拟人化语音的需求,打通人机交互闭环。提供多场景、多语言的音色选择,支持 SSML 标记语言,支持自定义音量、语速等参数,让发音更专业、更符合场景需求。语音合成广泛适用于智能客服、有声阅读、新闻播报、人机交互等业务场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档