实现步骤
所有文档

          语音技术

          实现步骤

          实现步骤

          只需三步1小时内即可完成语音合成接口的调用,让您的应用“开口说话”。

          Step1:成为百度AI开放平台的开发者

          要调用百度AI开放平台的语音合成能力先要成为百度AI开放平台的开发者,首先让我们花5分钟来注册百度AI开放平台的开发者,并新建一个百度语音合成应用。

          先点击此处注册百度账户进入 如下图 的页面快速的建立一个百度账号吧。

          图片

          我们有账号之后登录,并且点击此处创建一个应用如下图 image.png image.png image.png

          然后就能看到创建完的应用和 API KEY 以及 Secret KEY

          image.png

          Step2:领取免费额度

          创建完应用后,可以到概览页领取语音合成的免费额度。免费额度说明详见语音合成免费额度文档 image.png

          Step3:准备数据

          语音合成是将文本转换为可以播放的音频文件的服务,我们从大姚的订单库中找一段订单信息的文本如下:

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

          Step4: 编写一个示例程序

          第一步API KEY 以及 Secret KEY第二步领取的免费额度,以及第三步的数据,我们就可以写一个示例代码调用百度AI开放平台的语音合成能力

          准备开发环境

          大姚选择用python来快速搭建一个原型,那我们就安装一下python。可以参考下表列出的不同操作系统的安装方法进行安装。

          Python的官方下载地址:下载python

          Windows 快速测试包

          windows平台的用户如果对上述的python安装感到困难,可以下载我们的一键测试包,下载地址:windows测试包

          解压zip文件后,双击run.bat即可测试。

          编写代码

          新建一个 main.py

          粘贴以下内容,不要忘记替换你的 API_KEY 以及 SECRET_KEY

          # 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
          API_KEY = 'nu9r2plGFi3s1ugayDPSM6Mk'
          
          # 替换你的 SECRET_KEY
          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)

          运行代码

          在命令行中运行python main.py

          结果

          代码运行成功后,在main.py的同级目录中会产生一个 大姚的订单信息.mp3 文件,大姚打开一听觉得这就是他想要的效果,让我们一起来听听看:

          上一篇
          订单播报类APP开发案例
          下一篇
          了解更多