PYTHON调离线语音合成并实时播放

1、资源下载(可以去讯飞官网控制台下载)

2、实现代码

# Python调普通离线合成并实时播放
import wave
from ctypes import *
import pyaudio"""
1、 在Python中某些时候需要C做效率上的补充,Python中的ctypes模块可以很方便的调用Windows的DLL(也包括Linux下的SO等文件)
2、播放库下载地址:
https://www.lfd.uci.edu/    ~gohlke/pythonlibs/#pyaudio
"""def msp_login(dll):login_params = b'appid = 你的APPID, work_dir = ...'ret = dll.MSPLogin(None, None, login_params)if ret != 0:print(f'调用失败,错误码 {ret}')else:print('调用登录成功...')def tts_session_begin(dll, voice_name):  # 开始会话voice_name = voice_namesession_begin_params = f'engine_type = local, voice_name = {voice_name}, text_encoding = UTF-8, ' f'tts_res_path = fo|res/tts/{voice_name}.jet;fo|res/tts/common.jet, sample_rate = 16000, ' f'speed = 50, volume = 50, pitch = 50, rdn = 2'session_begin_params_bytes = bytes(session_begin_params, 'UTF-8')error_code = c_int()dll.QTTSSessionBegin.restype = c_char_p  # 设置原生函数返回值为char指针return_session_id = dll.QTTSSessionBegin(session_begin_params_bytes, byref(error_code))print(f'{return_session_id}  {type(return_session_id)}')if error_code.value != 0:print(f'调用失败,错误码 {error_code.value}')else:print(f'开启会话成功...')return return_session_iddef tts_text_put(dll, method_text):method_text = method_text.encode('UTF-8')ret = dll.QTTSTextPut(session_id, method_text, len(method_text), None)if ret != 0:print(f'写入合成调用失败,错误码 {ret}')else:print('写入合成文本成功...')def tts_audio_get(dll, temp_session_id, store_file):audio_len, synth_status, return_ret = c_int(), c_int(), c_int()dll.QTTSAudioGet.restype = c_void_p  # 设置原生函数返回为void指针return_data_buffer = bytes()while True:return_data = python_dll.QTTSAudioGet(temp_session_id, byref(audio_len), byref(synth_status), byref(return_ret))if return_ret.value != 0:print(f'调用失败,错误码:{return_ret}')breakelse:if return_data:return_data_buffer = return_data_buffer + string_at(return_data, audio_len.value)store_file.writeframes(string_at(return_data, audio_len.value))if synth_status.value == 2:  # 说明返回完毕breakreturn return_data_bufferdef tts_session_end(dll, temp_session_id):ret = dll.QTTSSessionEnd(temp_session_id, '正常结束会话...')if ret != 0:print(f'结束会话调用失败,错误码 {ret}')else:print('结束会话成功...')def msp_logout(dll):ret = dll.MSPLogout()if ret != 0:print(f'调用失败,错误码 {ret}')else:print('调用退出成功...')if __name__ == '__main__':# 0、加载dll或sopython_dll = CDLL('dll/msc_x64.dll')# 1、登录msp_login(python_dll)# 2、开启会话session_id = tts_session_begin(python_dll, 'xiaoyuan')# 3、放入文本text = '科大讯飞是中国最大的语音技术提供商'tts_text_put(python_dll, text)# 4、存储文件temp_file = wave.open('tts_sample.wav', 'wb')temp_file.setnchannels(1)temp_file.setsampwidth(2)temp_file.setframerate(16000)return_bytes = tts_audio_get(python_dll, session_id, temp_file)temp_file.close()# 5、同步实时播放py_audio = pyaudio.PyAudio()stream = py_audio.open(format=py_audio.get_format_from_width(width=2), channels=1, rate=16000,output=True)stream.write(return_bytes)# 6、关闭会话tts_session_end(python_dll, session_id)# 7、退出登录msp_logout(python_dll)

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

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

相关文章

csv文件转换成list 代码

hb [] h open("your_file.csv","r",encoding "utf-8") data h.read() #print(type(data)) rows data.split("\n") # 数据切分,以换行(“\n”)为基准,形成一个list,每一行…

【Qt 学习笔记】Day1 | Qt 背景介绍

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Day1 | Qt 背景介绍 文章编号:Qt 学习笔记 / 01 文章目录…

C/C++语言实现简易通讯录 [含文件操作,循环双链表]

文章目录 C/C语言实现简易通讯录概要基本功能运行截图展示主要代码展示 🎖 博主的CSDN主页:Ryan.Alaskan Malamute 📜 博主的代码仓库主页 [ Gitee ]:ryanala [GitHub]: Ryan-Ala C/C语言实现简易通讯录 ⚠⚠⚠ …

话题通信的python实现

一、发布者Publisher的python实现 step1:在scripts文件夹中创建py节点 step2:第一行是为了指定解释器,Ubuntu20.04是python3,比他低的版本是python。第二行是为了指定编码方式。第五行中,引用index.ros.org中数据类型…

RVM安装ruby笔记

环境 硬件:Macbook Pro 系统:macOS 14.1 安装公钥 通过gpg安装公钥失败,报错如下: 换了几个公钥地址(hkp://subkeys.pgp.net,hkp://keys.gnupg.net,hkp://pgp.mit.edu),…

论文笔记:Retrieval-Augmented Generation forAI-Generated Content: A Survey

北大202402的RAG综述 1 intro 1.1 AICG 近年来,人们对人工智能生成内容(AIGC)的兴趣激增。各种内容生成工具已经精心设计,用于生产各种模态下的多样化对象 文本&代码:大型语言模型(LLM)…

MySQL分表后,如何做分页查询?

参考: https://blog.csdn.net/qq_44732146/article/details/127616258 user.sql 完整的执行一遍,可以做到分表和分页 数据是实时的,往一张子表里插入之后,all表就能立刻查询到 在这里实现分页查询的是MyIsam引擎,这个引擎不支持…

Java:链表

一、链表简介 1、链表与顺序表的区别 上一篇博客我介绍了顺序表,这次我们来认识认识链表!先来看看二者的区别: 顺序表:由于顺序表实际上是一个数组,因此它在物理上是连续的,逻辑上也是连续的! …

HJ5 进制转换

目录 问题描述 输入描述: 输出描述: 示例 解释 思路 代码实现 问题描述 写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。 输入描述: 输入一个十六进制的数值字符串 输出描述: 输出该数…

【IDEA】使用debug方式去运行java程序

什么是debug工具? 调试工具(debug工具)是一种用于帮助程序员识别和修复程序中的错误的工具。它们提供了一系列的功能,帮助程序员在代码执行的过程中跟踪和检测问题,例如查看变量的值、检查函数的调用栈、设置断点来停…

Spring学习——什么是循环依赖及其解决方式

文章目录 前言一、什么是循环依赖二、解决思路1、循环依赖分类2、对象初始化步骤及对象分类3、spring是如何解决的4、图解5、三级缓存1、区别2、ObjectFactory是什么 三、源码debug1、spring创建对象过程1、dubug第一步——找到getBean2、dubug第二步——getBean与doGetBean3、…

腾讯 tendis 替代 redis linux安装使用

下载地址 Tendis存储版 点击下载 linux 解压 tar -zxvf 安装包.tgz cd 解压安装包/scripts 启动 ./start.sh 停止 ./stop.sh 详细配置 修改 /scripts tendisplus.conf # tendisplus configuration for testing # 绑定本机IIP bind 192.168.31.112 port 51002 #设…

MySQL的安装配置 及 MySQL配置,服务管理,基本使用,性能优化,安全性,监控与日志管理,扩展与高可用,备份与恢复,版本升级与迁移注意事项

MySQL的安装配置可以分为几个主要步骤,包括安装MySQL、验证安装是否成功、配置环境变量以及进行MySQL的配置。以下是详细的教程: 一、安装MySQL 首先,从MySQL官网下载MySQL安装包。进入官网后,找到“DOWNLOADS”部分&#xff0c…

海格里斯助推实体制造业转型升级 “算法定义硬件”解题AIoT市场

随着自动化的发展,电子商务和智能制造推动了自动化立体仓库的快速发展与创新,产生了“密集仓储”的概念。对于一个实体企业来讲,其数智物流转型正在趋向于“去伪存真”,企业追求高ROI与真实经济价值,具有降本增效的业务…

代码随想录算法训练营第三十三天|leetcode70、509、746题

一、leetcode第509题 本题要求斐波那契数列的通式,通过定义dp数组,确定dp[i]dp[i-1]dp[i-2]的递推式,从而确定dp数组的含义为第i个数的大小。 具体代码如下: class Solution { public:int fib(int n) {if(n0){return 0;}if(n1)…

JavaEE 初阶篇-深入了解多线程安全问题(出现线程不安全的原因与解决线程不安全的方法)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 多线程安全问题概述 1.1 线程不安全的实际例子 2.0 出现线程不安全的原因 2.1 线程在系统中是随机调度且抢占式执行的模式 2.2 多个线程同时修改同一个变量 2.3 线…

游戏行业行业竞争越来越激烈,遇到DDoS攻击遭受严重损失该如何解决

近年来,我们见证了数字化的快速发展,随着这样的发展,网络的威胁也逐渐增多,在网络攻击门槛不断降低,行业竞争越来越激烈,游戏行业的DDoS攻击如雨点般密集,在整个DDoS攻击的份额中,游…

SpringAMQP-Exchange交换机

1、Fanout-Exchange的特点是:和它绑定的消费者都会收到信息 交换机的作用是什么? 接收publisher发送的消息将消息按照规则路由到与之绑定的队列不能缓存消息,路由失败,消息丢失FanoutExchange的会将消息路由到每个绑定的队列 声明队列、交…

【实验报告】--基础VLAN

【VLAN实验报告】 一、项目背景 (为 Jan16 公司创建部门 VLAN) Jan16 公司现有财务部、技术部和业务部,出于数据安全的考虑,各部门的计算机需进 行隔离,仅允许部门内部相互通信。公司拓扑如图 1 所示, …

http和https的工作原理是什么?

HTTP(HyperText Transfer Protocol)和HTTPS(HyperText Transfer Protocol Secure)是两种用于在互联网上传输数据的主要协议,它们均用于在客户端(通常是Web浏览器)与服务器之间交换信息。尽管它们…