Python调用科大讯飞在线语音合成API --内附完整项目

一,注册讯飞账号,并实名制。

讯飞开放平台-以语音交互为核心的人工智能开放平台 (xfyun.cn)

二、找到音频合成,按页面提示申请免费试用。

在线语音合成_免费试用-讯飞开放平台 (xfyun.cn)

三、申请免费使用后,找到API信息如下:

 四、找到开发者文档,仔细阅读

语音合成(流式版)WebAPI 文档 | 讯飞开放平台文档中心 (xfyun.cn)

这里是直接使用WebAPI的方式进行整合。到这里你可以直接下载他提供的demo代码,然后把上面我们提到的三个参数换成你自己的就可以完成简单的中文语音的合成了,实际上还是挺简单的。当然后面我也会提供给大家我整合好的demo。

 

五、根据开发者文档的python demo代码,加上你的API信息:

# -*- coding:utf-8 -*-
#
#   author: iflytek
#
#  本demo测试时运行的环境为:Windows + Python3.7
#  本demo测试成功运行时所安装的第三方库及其版本如下:
#   cffi==1.12.3
#   gevent==1.4.0
#   greenlet==0.4.15
#   pycparser==2.19
#   six==1.12.0
#   websocket==0.2.1
#   websocket-client==0.56.0
#   合成小语种需要传输小语种文本、使用小语种发音人vcn、tte=unicode以及修改文本编码方式
#  错误码链接:https://www.xfyun.cn/document/error-code (code返回错误码时必看)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
import websocket
import datetime
import hashlib
import base64
import hmac
import json
from urllib.parse import urlencode
import time
import ssl
from wsgiref.handlers import format_date_time
from datetime import datetime
from time import mktime
import _thread as thread
import osSTATUS_FIRST_FRAME = 0  # 第一帧的标识
STATUS_CONTINUE_FRAME = 1  # 中间帧标识
STATUS_LAST_FRAME = 2  # 最后一帧的标识class Ws_Param(object):# 初始化def __init__(self, APPID, APIKey, APISecret, Text):self.APPID = APPIDself.APIKey = APIKeyself.APISecret = APISecretself.Text = Text# 公共参数(common)self.CommonArgs = {"app_id": self.APPID}# 业务参数(business),更多个性化参数可在官网查看self.BusinessArgs = {"aue": "raw", "auf": "audio/L16;rate=16000", "vcn": "xiaoyan", "tte": "utf8"}self.Data = {"status": 2, "text": str(base64.b64encode(self.Text.encode('utf-8')), "UTF8")}# 使用小语种须使用以下方式,此处的unicode指的是 utf16小端的编码方式,即"UTF-16LE"”# self.Data = {"status": 2, "text": str(base64.b64encode(self.Text.encode('utf-16')), "UTF8")}# 生成urldef create_url(self):url = 'wss://tts-api.xfyun.cn/v2/tts'# 生成RFC1123格式的时间戳now = datetime.now()date = format_date_time(mktime(now.timetuple()))# 拼接字符串signature_origin = "host: " + "ws-api.xfyun.cn" + "\n"signature_origin += "date: " + date + "\n"signature_origin += "GET " + "/v2/tts " + "HTTP/1.1"# 进行hmac-sha256进行加密signature_sha = hmac.new(self.APISecret.encode('utf-8'), signature_origin.encode('utf-8'),digestmod=hashlib.sha256).digest()signature_sha = base64.b64encode(signature_sha).decode(encoding='utf-8')authorization_origin = "api_key=\"%s\", algorithm=\"%s\", headers=\"%s\", signature=\"%s\"" % (self.APIKey, "hmac-sha256", "host date request-line", signature_sha)authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')# 将请求的鉴权参数组合为字典v = {"authorization": authorization,"date": date,"host": "ws-api.xfyun.cn"}# 拼接鉴权参数,生成urlurl = url + '?' + urlencode(v)# print("date: ",date)# print("v: ",v)# 此处打印出建立连接时候的url,参考本demo的时候可取消上方打印的注释,比对相同参数时生成的url与自己代码生成的url是否一致# print('websocket url :', url)return urldef on_message(ws, message):try:message = json.loads(message)code = message["code"]sid = message["sid"]audio = message["data"]["audio"]audio = base64.b64decode(audio)status = message["data"]["status"]print(message)if status == 2:print("ws is closed")ws.close()if code != 0:errMsg = message["message"]print("sid:%s call error:%s code is:%s" % (sid, errMsg, code))else:with open('./demo.pcm', 'ab') as f:f.write(audio)except Exception as e:print("receive msg,but parse exception:", e)# 收到websocket错误的处理
def on_error(ws, error):print("### error:", error)# 收到websocket关闭的处理
def on_close(ws):print("### closed ###")# 收到websocket连接建立的处理
def on_open(ws):def run(*args):d = {"common": wsParam.CommonArgs,"business": wsParam.BusinessArgs,"data": wsParam.Data,}d = json.dumps(d)print("------>开始发送文本数据")ws.send(d)if os.path.exists('./demo.pcm'):os.remove('./demo.pcm')thread.start_new_thread(run, ())if __name__ == "__main__":# 测试时候在此处正确填写相关信息即可运行wsParam = Ws_Param(APPID='7c101e4e', APISecret='ZWZhMzBmYjUwYzY3OTNiYWI4NmQwNmI5',APIKey='b47e829623df42f4ac625ba5b8fd8618',Text="随着科技的飞速发展,教育领域也迎来了前所未有的变革。从传统的课堂教学到线上学习平台,再到虚拟现实和人工智能在教育中的应用,我们正处在一个教育模式不断演变的时代。本文将探讨未来教育的一些趋势,以及技术如何与人文相结合,共同塑造一个更加全面和高效的学习环境。")websocket.enableTrace(False)wsUrl = wsParam.create_url()ws = websocket.WebSocketApp(wsUrl, on_message=on_message, on_error=on_error, on_close=on_close)ws.on_open = on_openws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})


六、官方demo的代码,默认生成的音频是.pcm格式,如果需要转为wav格式请使用如下方法

import wavedef pcm2wav(pcm_file, wav_file, channels=1, bits=16, sample_rate=16000):# 打开 PCM 文件pcmf = open(pcm_file, 'rb')pcmdata = pcmf.read()pcmf.close()# 打开将要写入的 WAVE 文件wavfile = wave.open(wav_file, 'wb')# 设置声道数wavfile.setnchannels(channels)# 设置采样位宽wavfile.setsampwidth(bits // 8)# 设置采样率wavfile.setframerate(sample_rate)# 写入 data 部分wavfile.writeframes(pcmdata)wavfile.close()if __name__=="__main__":pcm2wav("demo.pcm", "demo.wav")


七、如果你需要将音频转为mp3格式,请使用如下代码将wav格式转为mp3格式。

from pydub import AudioSegment
song = AudioSegment.from_wav("demo.wav")
song.export("demo.mp3", format="mp3")

完整代码已经上传到CSDN,0积分下载,有需要的朋友自行下载。

Python调用科大讯飞在线语音合成API -完整代码

感谢大家的阅读,觉得有所帮助的朋友点点关注点点赞!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/17471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle Active DataGuard 启用实时应用 REDO

Oracle Active DataGuard 启用实时应用 REDO 启用 ADG Real-Time apply 模式(只要主库事务提交,备库这边即开始应用事务日志):1、将备机先退出恢复管理模式 SQL> alter database recover managed standby database cancel; 2、…

vscode远程登录阿里云服务器【使用密钥方式--后期无需再进行密码登录】【外包需要密码】

1:windows主机上生成【私钥】【公钥】 1.1生成公钥时不设置额外密码 1.2生成公钥时设置额外密码【给外包人员使用的方法】 2:在linux服务器中添加【公钥】 3:本地vscode连接linux服务器的配置 操作流程如下 1.1本地终端中【生成免密登录…

从0到100,渠道码如何成为SaaS企业增长的加速器

在当今数字化时代,企业的增长策略已不再是单一和线性的。渠道码的出现,为SaaS(软件即服务)企业提供了一种全新的、多维度的增长途径,真正实现了从0到100的快速增长。 一、渠道码的高可定制性和灵活性,为Sa…

基于.NetCore和ABP.VNext的项目实战二:Swagger

Mag.Blog.Swagger层添加Volo.Abp.AspNetCore和Swashbuckle.AspNetCore包,引用实体层.Domain 添加模块类MagBlogSwaggerModule.cs,依赖MagBlogDomainModule模块,并且重写ConfigureServices和OnApplicationInitialization方法 namespace Mag.Blog.Swagger {[DependsOn(typeof…

位置编码(三) 2D旋转位置编码

Rotary Position Embedding for Vision Transformer https://arxiv.org/abs/2403.13298 Transformer升级之路:4、二维位置的旋转式位置编码 https://kexue.fm/archives/8397 Transformer升级之路:17、多模态位置编码的简单思考 https://kexue.fm/archive…

错误提示:“由于找不到steam_api.dll,无法继续执行代码”修复方法,缺少steam_api.dll文件原因

在尝试运行某些游戏或程序时,用户可能会遇到一个常见的错误提示:“由于找不到steam_api.dll,无法继续执行代码”。这个错误信息表明,系统在启动程序或游戏时无法定位到必要的steam_api.dll文件,这是一个关键的动态链接…

第五更 | 单引号、转义符、双引号、反引号

单引号 在单引号内的都是纯字符,哪怕是空格、特殊字符 [rootyaomm yaomm]# touch ‘*.log’ ##→创建一个名称带【*】的log文件 [rootyaomm yaomm]# ls *.log ##→使用单引号也可以将其当作普通字符 *.log 转义符 转义符可以将特殊字符,例如…

香橙派 AIpro的NPU随手记体验日记

昇腾AI 技术路线 8TOPS INT8(FP16)AI算力 LPDDR4X 8GB/16GB 📅 20240525 开放了原理图和源码,功能接口就不描述了手册都有描述,新手好好学习可以从底层覆盖到应用一个载板拿下 完成香橙派AIpro上手体验 镜像安装&am…

C++学习---string模拟实现(2)

1.随机插入一个字符串 (1)insert函数插入一个字符的方法我们在之前的模拟实现里面已经搞过了,那个里面要注意的是这个全体向后挪动的循环过程,这个里面我们要实现的是插入字符串的模拟实现; (2&#xff0…

网上3d全景虚拟交互展馆沉浸式体验让客户和使用者都满意

在数字化浪潮席卷而来的今天,3D场景网站已成为众多行业展现创意与实力的新舞台。然而,传统的3D建模软件往往因其复杂性和高门槛,让许多渴望创建逼真3D场景的用户望而却步。 幸运的是,华锐视点推出了搭建3D场景网站的编辑器——一款…

怎么做图片海报二维码?扫码查看图片内容

现在很多的宣传推广海报会放入二维码中,然后将二维码分享给用户后,通过扫码的方式来查看图片内容,从而获取自己需要的信息,经常在活动宣传、商品推广、旅游攻略等场景下使用。二维码可以提供更加便捷的内容获取方式,让…

[图解]企业应用架构模式2024新译本讲解02-表数据入口

1 00:00:00,420 --> 00:00:04,330 这个案例,我们就是用书上的案例了 2 00:00:06,080 --> 00:00:08,860 收入确认的一个案例 3 00:00:09,510 --> 00:00:11,100 书上讲了,收入确认 4 00:00:13,330 --> 00:00:15,270 就是说,你给…

一文搞透常见的Python编码陷阱(下)(分析+案例)

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 一、当心多目标赋值中的可变变量 示例 扩展讲解 示例 增广赋值中的可变变量 示例 扩展讲解 示例 总…

python 遍历从重命名文件夹下的所有文件

收到一个文件包,里面的文件命名是1.png、2.png……但在手机上打开时,是按1/10/11/12这样排序的,不是按数字从小到大。因此,需要将所有的文件重命名为001.png这种带0前缀的格式。 import os import redef traverse_rename(path):f…

Python魔法之旅-魔法方法(01)

目录 一、概述 1、定义 2、作用 二、主要应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类…

品牌曝光秘籍:让更多人知道你的品牌,这些推广技巧必学

最近遇到了不少满怀激情的创业者,他们刚刚创立了自己的品牌。在品牌诞生的初期,他们满怀喜悦,但对于如何进行品牌推广却感到迷茫。 这里可以详细讲讲,对于以线上为主的新品牌来说,前期的推广策略应该从何着手&#xf…

window安装ffmpeg播放本地摄像头视频

1、安装ffmpeg ffmpeg官方网站:FFmpeg 下载后解压文件夹名为ffmpeg 2、设置环境变量 目录 1、安装ffmpeg 设置环境变量 以F:\software\after\ffmpeg\bin为例 在命令行中输入ffmpeg出现下方代表安装成功 3、通过ffmpeg播放本地电脑摄像头 鼠标右击开始按钮&…

SQL Server 查询语句详解

SQL Server 查询语句详解 SQL Server 是一个功能强大的关系型数据库管理系统,它使用 SQL(结构化查询语言)作为与数据库交互的标准语言。在 SQL Server 中,查询语句(通常称为 SELECT 语句)是最常用和最基本…

AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.04.25-2024.05.01

文章目录~ 1.Soft Prompt Generation for Domain Generalization2.Modeling Caption Diversity in Contrastive Vision-Language Pretraining3.Q-GroundCAM: Quantifying Grounding in Vision Language Models via GradCAM4.HELPER-X: A Unified Instructable Embodied Agent t…

计算机设计大赛

目录 1.1需求分析 2.1概要设计 3.1软件界面设计: 4.1代码开源 1.1需求分析 1.1 产品开发本说明: 在如今每人都会扔出许多垃圾,在一些地方大部分垃圾能得到卫生填埋、焚烧等无害化处理,而更多的垃圾则是简单的掩埋&#xff…