Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python:TTS语音合成技术,市场各大平台对比以及实现

Python:TTS语音合成技术,市场各大平台对比以及实现

作者头像
Python疯子
发布于 2019-03-15 02:17:45
发布于 2019-03-15 02:17:45
4.1K10
代码可运行
举报
文章被收录于专栏:Python疯子Python疯子
运行总次数:0
代码可运行

TTS

前景提要:在线的实时合成TTS技术,巴拉巴拉... 此处省略3千字 市场的TTS平台:讯飞语音百度智能语音开放平台阿里云腾讯云思必驰捷通华声(灵云)等。

TTS的合成简单来说就三大步: 1️⃣创建应用 2️⃣发起请求 3️⃣解析音频数据,合成音频文件

咱们废话不说一个一个来: 一、讯飞,音频届的老大哥

支持多种语言开发,选择适合自己的,我这里选的是WebAPI:

多种语言开发

01、创建应用

创建应用

说明: 1和3: 是在代码中具体使用到的 鉴权码 2:表示试用期间的每天使用次数 4:请求IP要添加白名单,不添加白名单会请求失败 5:可以选择不同的发音人:(分初级和高级,高级的另收费)

code:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def tts_xunfei(text):
  # API请求地址、API KEYAPP ID等参数,提前填好备用
  api_url = "http://api.xfyun.cn/v1/service/v1/tts"
  API_KEY = "API_KEY"
  APP_ID = "APP_ID"
  OUTPUT_FILE = "讯飞.wav"  # 输出音频的保存路径,请根据自己的情况替换
  TEXT = text

# 构造输出音频配置参数custom_skill.py3
  Param = {"auf": "audio/L16;rate=16000",  # 音频采样率
      "aue": "raw",  # 音频编码,raw(生成wav)或lame(生成mp3)
      "voice_name": "x_xiaoyuan", "speed": "50",  # 语速[0,100]
      "volume": "77",  # 音量[0,100]
      "pitch": "50",  # 音高[0,100]
      "engine_type": "aisound"  # 引擎类型。aisound(普通效果),intp65(中文),intp65_en(英文)
    }
  # 配置参数编码为base64字符串,过程:字典→明文字符串→utf8编码→base64(bytes)→base64字符串
  Param_str = json.dumps(Param)  # 得到明文字符串
  Param_utf8 = Param_str.encode('utf8')  # 得到utf8编码(bytes类型)
  Param_b64 = base64.b64encode(Param_utf8)  # 得到base64编码(bytes类型)
  Param_b64str = Param_b64.decode('utf8')  # 得到base64字符串

  # 构造HTTP请求的头部
  time_now = str(int(time.time()))
  checksum = (API_KEY + time_now + Param_b64str).encode('utf8')
  checksum_md5 = hashlib.md5(checksum).hexdigest()
  header = {"X-Appid": APP_ID, "X-CurTime": time_now, "X-Param": Param_b64str, "X-CheckSum": checksum_md5}

  # 构造HTTP请求Body
  body = {"text": TEXT}
  body_urlencode = urllib.parse.urlencode(body)
  body_utf8 = body_urlencode.encode('utf8')

  # 发送HTTP POST请求
  req = urllib.request.Request(api_url, data=body_utf8, headers=header)
  response = urllib.request.urlopen(req)

  # 读取结果
  response_head = response.headers['Content-Type']
  if (response_head == "audio/mpeg"):
      data = response.read()  # a 'bytes' object
      save_wav(data, OUTPUT_FILE)
  else:
      print(response.read().decode('utf8'))

注意:将上面的APP_ID和API_KEY更换为自己的即可,另外记得添加IP白名单

二、阿里平台 用户鉴权有有效期,到期了要重新获取token

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def tts_ali(text):

    # 获取存储的access_token, token_expireTime  两个同时更新
    token_expireTime = 1551513046
    access_token = "9fcdcd2a190f49cb926dc5c2e24043c8"

    # 当前的时间戳 和 token有效期对比,如果过期则重新生成
    local_time = int(time.time())
    if local_time >= token_expireTime:
        # 重新生成并存储
        access_token, token_expireTime = get_token()

    headers = {
        "Content-Type": "application/json;charset=UTF-8",
        "X-NLS-Token":access_token,
        }

    data_info = {
        "appkey":"5dz4RRvAJufMAB6g",
        "text":text,
        "token":access_token,
        "format":"wav",
        "voice":"yina",
        "sample_rate":"16000",  # 音频采样率,默认是16000
        "volume":"50", # 音量,范围是0~100,默认50
        "speech_rate":"45", # 语速,范围是-500~500,默认是0
        "pitch_rate":"0", # 语调,范围是-500~500,默认是0

        # 试听发音人:https://ai.aliyun.com/nls/tts?spm=5176.8142029.388261.47.f8ed6d3e0NhBch
        # 发音人参数:https://help.aliyun.com/document_detail/84435.html?spm=a2c4g.11186623.6.581.69a853d5E4c3vM
        # 推荐:小梦 思悦 小美 伊娜
        }

    data = json.dumps(data_info)

    ret = requests.post(ALI_URL, headers=headers, data=data, timeout=5)
    save_wav(ret.content, "ali2.wav")

提醒: token的获取我代码里有完整的 另外开发测试期间,开发文档会提供简易的不过期token,方便测试

三、百度 调用方式简单,开发文档里有说明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 百度
def tts_baidu(text):
    baidu_url = "http://tsn.baidu.com/text2audio?lan=zh&ctp=1&cuid=abcdxxx&tok=24.ed4dfdxxxxxff0af259fc.2592000.1553756573.282335-15631432&tex={}&vol=9&per=0&spd=5&pit=5&aue=6".format(text)

    ret = requests.get(baidu_url, timeout=5)
    save_wav(ret.content, "siyue.wav")

四、腾讯 正在开发测试阶段,直接舍弃了

五、标贝

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 标贝
def tts_biaobei(text):
    """获取tts语音"""
    tts_url = "http://1.203.80.138:8001/tts?user_id=xxx&domain=1&volume=0&language=zh&speed=5&audiotype=5&text=" + text
    f = requests.get(tts_url)
    voice = f.content
    return voice

六、思必驰

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 # 思必驰
def tts_dui(text):
    data_dict = {
        "context": {"productId": "productId"},
        "request": {"requestId": "tryRequestId",
        "audio": {"audioType": "WAV", "sampleRate": 16000, "channel": 1, "sampleBytes": 2},
            "tts": {
            "text": text,
            "textType": "text",
            "voiceId": "lili1f_shangwu"}}}
    data = json.dumps(data_dict)

    headers = {
        'content-type': 'application/json',
        'User-Agent': 'Mozilla/5.0 '}

    r = requests.post(DUI_URL, data=data, headers=headers, timeout=5)
    print(r)

    # 写入文件生成音频
    save_wav(r.content, "DUI.wav")

七、捷通华声(灵云)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 # 灵云
def tts_lingyun(text):

    linghyun_URL = "http://api.hcicloud.com:8880/tts/synthtext"
    request_data = "2014-6-18 10:10:11"

    data = request_data + "应用参数"
    md5 = hashlib.md5()
    md5.update(data.encode('utf-8'))  # 注意转码
    res = md5.hexdigest()

    headers = {"x-app-key": "c95d54cf", "x-sdk-version": "3.9", "x-request-date": request_data,
        "x-task-config": "capkey=tts.cloud.xiaokun,audioformat=mp3,speed=2,volume=9.99", "x-session-key": res,
        "x-udid": "101:1234567890"}

    r = requests.post(linghyun_URL, headers=headers,
                  data=text.encode('utf-8'),
                  timeout=5)

    # 获取音频数据
    ret = r.content
    ret = ret[ret.find(b'</ResponseInfo>') + 15:]

    # 写入文件生成音频
    save_wav(bytes(ret), "aasdasd.mp3")

没有python示例代码,返回参数比较变态,解析出音频耗了我大量时间(因为我技术不佳)

使用过程中:百度无人回复,没给报价,思必驰没找到任何公司人员 各平台均有使用,每天限次数,可以开发试听一下, 效果比较个人感觉: 标贝 > 讯飞 > 阿里 > 百度 > 思必驰 > 灵云

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.03.05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
请问可以提供一下完整的代码吗?
请问可以提供一下完整的代码吗?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
腾讯云语音合成TTS试用
随着人工智能技术的飞速发展,人机交互的方式也在不断革新。腾讯云语音合成(TTS)技术,作为AI领域的一项重要应用,正在以前所未有的速度改变我们的生活和工作方式。大家好,我是AI大眼萌,今天就让我们一起探索这项技术的魅力和潜力!
AI大眼萌
2024/06/30
1.8K0
腾讯云语音合成TTS试用
基于http的百度语音 REST api
什么是REST api? -- REpresentational State Transfer REST api是基于http请求的一种api,就百度语音识别的实例来讲,通过百度提供的url加上经过编码的音频文件,向百度服务器发出请求,然后百度服务器返回识别的内容。结束。
Mshu
2018/10/31
2.2K0
从零开始搭建一个语音对话机器人
最近在研究语音识别方向,看了很多的语音识别的资料和文章,了解了一下语音识别的前世今生,其中包含了很多算法的演变,目前来说最流行的语音识别算法主要是依赖于深度学习的神经网络算法,其中RNN扮演了非常重要的作用,深度学习的应用真正让语音识别达到了商用级别。然后我想动手自己做一个语音识别系统,从GitHub上下载了两个流行的开源项目MASR和ASRT来进行复现,发现语音识别的效果没有写的那么好,其中如果要从零来训练自己的语言模型势必会非常耗时。
好好学java
2019/08/23
12.1K1
从零开始搭建一个语音对话机器人
Python实现文字转语音
前言创建应用获取应用的API Key和Secret Key编写python代码替换API Key和Secret Key生成的音频文件
用户7886150
2020/12/28
5K0
Python 语音录制与识别
本文介绍一些 Python 中常用的语音能力的包,以及如何通过调用云服务商的 API 进行语音识别
dandelion1990
2024/03/22
4650
语音对话机器人
那么它一定得回复我们,对吧。为了能够智能点,我们就用到了图灵得接口图灵真的非常好用能够 查天气语音**讲故事**讲笑话 下面附上第三步的代码
大发明家
2021/12/06
4.4K0
利用Node中间层,对接讯飞实现h5页面文章tts(自动朗读)功能
调研发现,竞品h5是app原生实现,而我司都是h5实现文章阅读,所以开始进行h5的调研
super.x
2019/04/12
1.3K0
利用Node中间层,对接讯飞实现h5页面文章tts(自动朗读)功能
文字转语音——这招你学到了吗
我喜欢上了看小说,不知道为什么,这是一个谜,(因为我是谜一样的男人,哈哈),看着看着感觉眼皮在打架,突然我想,要是有一个人可以阅读就好了(这里我们明显感觉小编与世界脱轨),那不如写一个自动阅读的软件好了,然后就有了语音阅读神器。
大家一起学编程
2021/03/29
2.8K0
基于树莓派的语音识别和语音合成
语音识别技术即Automatic Speech Recognition(简称ASR),是指将人说话的语音信号转换为可被计算机程序所识别的信息,从而识别说话人的语音指令及文字内容的技术。目前语音识别被广泛的应用于客服质检,导航,智能家居等领域。树莓派自问世以来,受众多计算机发烧友和创客的追捧,曾经一“派”难求。别看其外表“娇小”,内“心”却很强大,视频、音频等功能通通皆有,可谓是“麻雀虽小,五脏俱全”。本文采用百度云语音识别API接口,在树莓派上实现低于60s音频的语音识别,也可以用于合成文本长度小于1024字节的音频。 此外,若能够结合snowboy离线语音唤醒引擎可实现离线语音唤醒,实现语音交互。
全栈程序员站长
2022/09/13
4.3K0
您的百科管家“ChatGPT”
ChatGPT 是一种基于自然语言处理技术的人工智能对话系统,使用 GPT(Generative Pre-trained Transformer)算法架构进行训练。它可以生成自然语言响应以回答各种问题,并能够在多个领域进行应用,例如客户服务、语言翻译、自动化问答系统等。我们可以将其看成一个加强版的搜索引擎,通过其可以帮助我们快速找到想要的答案。
Jean
2023/09/01
3200
您的百科管家“ChatGPT”
C# 10分钟完成百度语音技术(语音识别与合成)——入门篇
我们现在就基于百度Ai开放平台进行语音技术的相关操作,demo使用的是C#控制台应用程序。
梁规晓
2019/08/09
4.4K0
C# 10分钟完成百度语音技术(语音识别与合成)——入门篇
基于avconv转码工具的微信小程序语音识别功能实现~
“ 最近在做基于微信小程序【垃圾分类引导指南】的语音识别功能模块时,遇到了一个比较头疼得事情,由于腾讯AI开放平台的接口只支持PCM、WAV、AMR和SILK四种音频格式,而微信小程序录音的音频文件是mp3格式的(此处就是踩得第一大坑了,刚开始看到开发文档是的时候心里还暗喜了一波,因为微信小程序录音文件就可以设置为SILK格式,这样岂不是可以不费吹灰之力就搞定了想想有点头疼的语音识别啦~然而我们终究还是太年轻~折腾了半天,在真机测试的时候发现木有半点反应,调试发现没有生成录音文件,真的是丈二和尚摸不着头脑的赶脚,最后查了一番资料才知道微信小程序在真机上只能设置成acc和mp3格式的),那么这里就不得不进行音频格式转化了。”
用户2619822
2022/06/10
9230
基于avconv转码工具的微信小程序语音识别功能实现~
Python粉丝数实时播报程序
源码: import requests import time import sys from playsound import _playsoundWin # 保证兼容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 i
MoyiTech
2023/02/02
3750
开发案例| 基于Vue3+SpringBoot+腾讯云语音合成TTS+混元大模型的音频祝福小助手项目
可以从这里进入:https://console.cloud.tencent.com/cam/capi
后台技术汇
2024/11/15
5730
开发案例| 基于Vue3+SpringBoot+腾讯云语音合成TTS+混元大模型的音频祝福小助手项目
ROS与科大讯飞语音库集成:实现语音控制机器人小车
从这篇文章开始,我们学习机器人语音的交互,我们将在ROS上集成科大讯飞的中文语音库,实现语音控制机器人小车运动。 关于语音识别和语音合成的原理 ,这里就不在赘述,有兴趣的朋友可以自己利用时间去学习和深究。这里提醒,本文的测试环境是ubuntu20.04 + ros noetic 。
芯动大师
2025/05/19
1890
ROS与科大讯飞语音库集成:实现语音控制机器人小车
【玩转腾讯云】【腾讯云语音合成TTS】短视频批量生成器
疫情期间发现一个有趣的现象,有一类短视频父母刷抖音的时候经常会看到,这类视频只有一个或多个简单的背景图片,配合一段文字录音,讲一段新闻、故事、或者鸡汤。我想可能是他们对纯文本或者纯语音的内容都不感兴趣,更容易接受短视频这样简单的内容形式。又想到腾讯云有语音合成的产品,加上ffmpeg等视频处理工具,是不是可以批量生成一些这类短视频呢。
01player
2020/05/04
7.8K2
python语音识别
语音识别技术,也被称为自动语音识别,目标是以电脑自动将人类的语音内容转换为相应的文字。应用包括语音拨号、语音导航、室内设备控制、语音文档检索、简单的听写数据录入等。
py3study
2018/08/03
18.4K3
python语音识别
Unity 接入科大讯飞语音识别及语音合成
首先需要到科大讯飞官网开发者控制台创建一个应用,创建成功后获得服务接口认证信息,我们只需用到其中的AppID。
CoderZ
2022/08/29
3.9K1
Unity 接入科大讯飞语音识别及语音合成
Python爬虫入门教程 56-100 python爬虫高级技术之验证码篇2-开放平台OCR技术
今天你要学习的验证码采用通过第三方AI平台开放的OCR接口实现,OCR文字识别技术目前已经比较成熟了,而且第三方比较多,今天采用的是百度的。
梦想橡皮擦
2019/04/18
1.3K0
Python爬虫入门教程 56-100 python爬虫高级技术之验证码篇2-开放平台OCR技术
python自制有声小说
最近工作中测试ASR,语音识别系统。人工读太累,想自动化来实现。给一段text,能给我发出正确的声音,然后按住按钮,产品能够录制下来并且正常识别。
赵云龙龙
2020/08/13
4.5K1
推荐阅读
相关推荐
腾讯云语音合成TTS试用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档