Python实现语音合成功能详解

作者:车厘子@ 时间:2023-11-28 16:09:17 

导语

今天就给大家带来个语言识别跟语言赚文字的小工具感兴趣的铁汁萌可以往下滑了

1.直接使用

在1.2官网注册后拿到APISecret和APIKey,直接复制文章2.4demo代码,保存为online_tts.py,在命令行执行

python online_tts.py -client_secret=你的client_secret -client_id=你的client_id -file_save_path=test.wav --text=今天天气不错

2. 获取权限

Python调用标贝科技语音合成接口,实现文字转语音

2.1 环境准备:

Python 3

2.2 获取权限

标贝科技 https://ai.data-baker.com/#/?source=qwer12

2.2.1 登录

点击产品地址进行登录,支持短信、密码、微信三种方式登录。

Python实现语音合成功能详解

2.2.2 创建新应用

登录后进入【首页概览】,各位开发者可以进行创建多个应用。包括一句话识别、长语音识别、录音文件识别;在线合成、离线合成、长文本合成。

Python实现语音合成功能详解

2.2.3 选择服务

进入【已创建的应用】,左侧选择您需调用的AI技术服务,右侧展示对应服务页面概览(您可查询用量、管理套餐、购买服务量、自主获取授权、预警管理)。

Python实现语音合成功能详解

2.2.4 获取Key&Secret

通过服务 / 授权管理,获取对应参数,进行开发配置(获取访问令牌可进群咨询)

Python实现语音合成功能详解

拿到Key和Secret就可以正式使用啦!

3. 代码实现

3.1 获取access_token

在拿到Key和Secret后,我们还需要调用授权接口获取access_token,这个access_token有效时长是24小时。

# 获取access_token用于鉴权
def get_access_token(client_secret, client_id):
   grant_type = "client_credentials"
   url = "https://openapi.data-baker.com/oauth/2.0/token?grant_type={}&client_secret={}&client_id={}".format(grant_type, client_secret, client_id)
   response = requests.post(url)
   access_token = json.loads(response.text).get('access_token')

return access_token

3.2 获取转换后音频

拿到access_token后,调用语音合成接口,就可以获得生成的音频

# 获取转换后音频
def get_audio(data):
   url = "https://openapi.data-baker.com/tts?access_token={}&domain={}&language={}&voice_name={}&text={}&audiotype={}".format(data['access_domain'], data['domain'], data['language'], data['voice_name'], data['text'], data['audiotype'])
   response = requests.post(url)
   content_type = response.headers['Content-Type']
   if 'audio' not in content_type:
       raise Exception(response.text)
   return response.content

3.3 配置接口参数

client_secret和client_id:在文章1.2的官网获取,必填

file_save_path:文件保存路径,必填

text:需要转换的文本内容

audiotype:音频类型,默认16K采样率wav格式

domain:所属领域,默认1

language:合成后文本语言,默认中文“zh"

voice_name:发音人选择,默认“Lingling",

其他发音人详见

https://www.data-baker.com/#/specs/file/tts_voice_list

# 获取命令行输入参数
def get_args():
   text = '欢迎使用标贝开发平台。'
   parser = argparse.ArgumentParser(description='ASR')
   parser.add_argument('-client_secret', type=str, required=True)
   parser.add_argument('-client_id', type=str, required=True)
   parser.add_argument('-file_save_path', type=str, required=True)
   parser.add_argument('--text', type=str, default=text)
   parser.add_argument('--audiotype', type=str, default='6')
   parser.add_argument('--domain', type=str, default='1')
   parser.add_argument('--language', type=str, default='zh')
   parser.add_argument('--voice_name', type=str, default='Lingling')
   args = parser.parse_args()

return args

3.4 完整demo

#!/usr/bin/env python
# coding: utf-8
import requests
import json
import argparse

# 获取access_token用于鉴权
def get_access_token(client_secret, client_id):
   grant_type = "client_credentials"
   url = "https://openapi.data-baker.com/oauth/2.0/token?grant_type={}&client_secret={}&client_id={}".format(grant_type, client_secret, client_id)
   response = requests.post(url)
   access_token = json.loads(response.text).get('access_token')

return access_token

# 获取转换后音频
def get_audio(data):
   url = "https://openapi.data-baker.com/tts?access_token={}&domain={}&language={}&voice_name={}&text={}&audiotype={}".format(data['access_domain'], data['domain'], data['language'], data['voice_name'], data['text'], data['audiotype'])
   response = requests.post(url)
   content_type = response.headers['Content-Type']
   if 'audio' not in content_type:
       raise Exception(response.text)
   return response.content

# 获取命令行输入参数
def get_args():
   text = '欢迎使用标贝开发平台。'
   parser = argparse.ArgumentParser(description='ASR')
   parser.add_argument('-client_secret', type=str, required=True)
   parser.add_argument('-client_id', type=str, required=True)
   parser.add_argument('-file_save_path', type=str, required=True)
   parser.add_argument('--text', type=str, default=text)
   parser.add_argument('--audiotype', type=str, default='6')
   parser.add_argument('--domain', type=str, default='1')
   parser.add_argument('--language', type=str, default='zh')
   parser.add_argument('--voice_name', type=str, default='Lingling')
   args = parser.parse_args()

return args

if __name__ == '__main__':
   try:
       args = get_args()

# 获取access_token
       client_secret = args.client_secret
       client_id = args.client_id
       access_token = get_access_token(client_secret, client_id)

# 读取参数
       audiotype = args.audiotype
       domain = args.domain
       language = args.language
       voice_name = args.voice_name
       text = args.text
       data = {'access_domain': access_token, 'audiotype': audiotype, 'domain': domain, 'language': language,
               'voice_name': voice_name, 'text': text}
       content = get_audio(data)

#保存音频文件
       with open('test.wav', 'wb') as audio:
           audio.write(content)
       print("task finished successfully")
   except Exception as e:
       print(e)

3.5 执行

复制所有代码,保存为online_tts.py,在命令行执行

python online_tts.py -client_secret=你的client_secret -client_id=你的client_id -file_save_path=test.wav --text=今天天气不错

来源:https://blog.csdn.net/L010409/article/details/122636800

标签:Python,语音,合成
0
投稿

猜你喜欢

  • Python采集电影评论实战示例

    2022-02-25 22:14:37
  • flash与asp/php/asp.net通信的方法第1/3页

    2023-11-15 03:43:03
  • mysql索引必须了解的几个重要问题

    2024-01-27 17:58:54
  • 微信小程序滑动选择器的实现代码

    2024-05-09 10:34:48
  • Django框架 信号调度原理解析

    2022-05-14 20:04:46
  • javascript DOM实用学习资料第1/3页

    2024-04-25 13:09:44
  • golang监听文件变化的实例

    2024-05-08 10:24:34
  • Python socket编程实例详解

    2022-02-21 09:26:03
  • Python通过websocket与js客户端通信示例分析

    2021-03-23 08:35:49
  • python使用自定义user-agent抓取网页的方法

    2021-12-27 03:09:56
  • 查看vue-cli脚手架的版本号和vue真实版本号及详细操作命令

    2023-07-02 17:04:20
  • Matplotlib 绘制饼图解决文字重叠的方法

    2023-06-12 22:23:06
  • Python实现双色球号码随机生成

    2023-10-24 23:56:22
  • Python中try excpet BaseException(异常处理捕获)的使用

    2023-07-30 16:21:37
  • 基于OpenCV4.2实现单目标跟踪

    2022-04-06 07:58:17
  • 用JavaScript判断字符串长度

    2009-10-29 12:15:00
  • SQL Server 存储过程遇到“表 ''#TT'' 没有标识属性无法执行 SET 操作”错误

    2024-01-24 00:07:57
  • Python中ini配置文件读写的实现

    2021-03-15 09:52:01
  • MySQL5.7.18主从复制搭建(一主一从)教程详解

    2024-01-25 12:55:03
  • 基于Python编写一个ISBN查询工具

    2022-02-22 09:43:21
  • asp之家 网络编程 m.aspxhome.com