当前位置:   article > 正文

使用Python和百度对外共享的TTS接口实现文本转语音

text2audio

起因

近日,一个朋友给了我一张神奇的二维码:Alt
我扫了一下,进入了这个链接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文件:Alt
自动播放了一个“你好世界”的语音


看到tts.baidu.com这种奇怪的字眼和熟悉的URL编码,我本能地去把编码解码出来,不用说你们也知道,解码结果就是你好世界!Alt
那么,一切基本就真相大白了:

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语音功能的程序:

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import requests
  4. #import os
  5. def TTS(text, speed, lan, per):
  6. """普通话-音色:
  7. 标准女音
  8. 标准男音
  9. 斯文男音
  10. 小萌萌
  11. 知性女音
  12. 老教授
  13. 葛平音
  14. 播音员
  15. 京腔
  16. 温柔大叔
  17. 英式英语-音色:
  18. 标准音
  19. 美式英语-音色:
  20. 标准音
  21. 粤语-音色:
  22. 标准音
  23. """
  24. convertTable = { #建立易读文本和音色码/语言码的关系表
  25. '中文': ('ZH', {
  26. '标准女音': 0,
  27. '标准男音': 1,
  28. '斯文男音': 3,
  29. '小萌萌': 4,
  30. '知性女音': 5,
  31. '老教授': 6,
  32. '葛平音': 8,
  33. '播音员': 9,
  34. '京腔': 10,
  35. '温柔大叔': 11
  36. }),
  37. '英式英语': ('UK', {
  38. '标准音': 0
  39. }),
  40. '美式英语': ('EN', {
  41. '标准音': 0
  42. }),
  43. '粤语': ('CTE', {
  44. '标准音': 0
  45. })
  46. }
  47. data = {
  48. 'tex': text,
  49. 'spd': speed,
  50. 'lan': convertTable[lan][0],
  51. 'per': convertTable[lan][1][per],
  52. 'ctp': 1,
  53. 'cuid': 'baike',
  54. 'ie': 'UTF-8',
  55. 'pdt': 301,
  56. 'vol': 9,
  57. 'rate': 32
  58. }
  59. result = requests.get('https://tts.baidu.com/text2audio', params=data)
  60. try:
  61. result.json()
  62. except:
  63. return result.content
  64. else:
  65. raise ValueError
  66. if __name__ == '__main__':
  67. try:
  68. bindata = TTS('''测试一下,你好世界!''', 5, '中文', '小萌萌')
  69. except:
  70. print('Error')
  71. else:
  72. with open('result.mp3', 'wb+') as f:
  73. f.write(bindata) #在同级目录写入为mp3文件
  74. #os.startfile('result.mp3') #自动运行生成的mp3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/961874
推荐阅读
相关标签
  

闽ICP备14008679号