ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-05-24 08:02:14  阅读:242  来源: 互联网

标签:女音 Python 标准音 lan TTS 男音 mp3 音色 文本


起因

近日,一个朋友给了我一张神奇的二维码:
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语音功能的程序:

#!/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

标签:女音,Python,标准音,lan,TTS,男音,mp3,音色,文本
来源: https://www.cnblogs.com/HGNET/p/16304126.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有