【原创】基于websocket的实时文本转语音功能

 功能实现,将长文本分段实时转成音频流,达到边转换边播放的效果,减少等待效果,像豆包通义千问chatgpt差不多也是这样实现的,

下面的效果展示

20240930_084035_哔哩哔哩_bilibili【原创】基于websocket的实时文本转语音功能功能实现,将长文本分段实时转成音频流,达到边转换边播放的效果,减少等待效果,像豆包通义千问chatgpt的app差不多也是这样实现的,, 视频播放量 0、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 三哥的锅, 作者简介 三块钱,三哥,三哥的锅,qq364345866,相关视频:ESP-AI 官方固件烧录(零代码/不搞环境配置/不下载包),带有情绪控制的TTS文字转语音软件EmotiVoice整合包下载,免费文本转语音工具,用 llama3 和 whisper 大模型搭建语音助手, 使用whisper.cpp项目及C++调用Windows原生tts_科技杂谈,ESP-AI 内测版抢先体验(ESP32 最强AI对话助手),免费配音工具:不限制字数,稳定自用,文字转语音,配音新选择!,ESP-AI开发者平台服务配置教程(小白一样玩转智能助手 硬件+软件),天问 asrpro 唤醒 ESP-AI教程,【AI主播-TTS篇】对接 CosyVoice API Win 0819,整体很简单,懂得不看也没啥问题,【开源项目】Mini-Omni 一个开源的多模态大型语言模型,可以边听边说边思考。具有实时端到端语音输入和流式音频输出会话功能。,【AI主播-TTS篇】对接 GPT-SOVITS V2 API,使用整合包版本为0821,版本不同导致的接口不一致问题可以自行修改适配,也可以下单定制icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1gCxmegE5x/

Z:\026-实时语音转文字>python ss实时播放.py
{'event': 'sentence_start', 'sentence_start_result': {'readable_text': '财联社9月28日电,2024清华五道口首席经济学家论坛于9月28日在北京举行。'}, 'code': 0, 'message': ''}
{'event': 'sentence_end', 'code': 0, 'message': ''}
{'event': 'sentence_start', 'sentence_start_result': {'readable_text': '中国人民银行调查统计司原司长盛松成建议,降低中低收入群体个税。'}, 'code': 0, 'message': ''}
{'event': 'sentence_end', 'code': 0, 'message': ''}
{'event': 'sentence_start', 'sentence_start_result': {'readable_text': '提高个税起征点和调降中低收入税率。'}, 'code': 0, 'message': ''}
{'event': 'sentence_end', 'code': 0, 'message': ''}
{'event': 'sentence_start', 'sentence_start_result': {'readable_text': '“短期内虽然会减少税收,但从长期看,随着经济增长和居民收入提高,税收收入也 将增加”,他说。'}, 'code': 0, 'message': ''}
{'event': 'sentence_end', 'code': 0, 'message': ''}
{'event': 'sentence_start', 'sentence_start_result': {'readable_text': '第一,盛松成提出,提高个税起征点至8000元/月,据其测算,税收每年减少约300亿 元,这仅为2023年税收总额的0.17%。'}, 'code': 0, 'message': ''}
{'event': 'sentence_end', 'code': 0, 'message': ''}
{'event': 'sentence_start', 'sentence_start_result': {'readable_text': '“对财政没有多大影响的,但是这个钱是实实在在的低收入人群的收入,对促进消费 是特别有益的”。'}, 'code': 0, 'message': ''}
{'event': 'sentence_end', 'code': 0, 'message': ''}
{'event': 'sentence_start', 'sentence_start_result': {'readable_text': '第二,调降中低收入税率方面,盛松成建议,年收入10万-35万元个税税率降低5个百 分点,目前年收入10万-20万、20万-35万分别按10%和20%的税率累进征收个税,建议分别下降至5%和15%。'}, 'code': 0, 'message': ''}
{'event': 'sentence_end', 'code': 0, 'message': ''}
{'event': '', 'code': 710010701, 'message': 'connection timeout'}
An error occurred: received 1000 (OK); then sent 1000 (OK)
import asyncio
import websockets
import json
from pydub import AudioSegment
from pydub.playback import play
from io import BytesIO
import re# 自定义请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 SamanthaDoubao/1.25.3","Origin": "chrome-extension://obk*****","Sec-WebSocket-Key": "*****==","Sec-WebSocket-Extensions": "permessage-deflate; client_max_window_bits","Cookie": "******"
}# 使用 pydub 从内存流中播放音频
async def play_audio_stream(audio_data):try:audio = AudioSegment.from_file(BytesIO(audio_data), format="aac")play(audio)except Exception as e:print(f"Error playing audio: {e}")async def tts_by(text):buffer = bytearray()  # 缓冲区playing = False  # 播放状态finish_received = False  # 标记是否收到了 finishconnection_closed = False  # 标记 WebSocket 是否关闭async def play_buffer():nonlocal playingwhile True:if len(buffer) > 0:await play_audio_stream(buffer)buffer.clear()  # 清空缓冲区playing = False  # 标记播放完成await asyncio.sleep(0.1)  # 控制播放的检查频率def split_text(text):# 基于标点符号的分段逻辑return re.split(r'(?<=[。!?;])', text)text_parts = split_text(text)  # 将文本按标点符号分段part_index = 0  # 当前发送的段落索引try:async with websockets.connect('wss://wss.******.com/', extra_headers=headers) as websocket:# 启动播放任务asyncio.create_task(play_buffer())# 循环发送每段文字while part_index < len(text_parts) and not connection_closed:payload = {"event": "text", "text": text_parts[part_index]}await websocket.send(json.dumps(payload))part_index += 1while True:response = await websocket.recv()if isinstance(response, str):json_data = json.loads(response)print(json_data)if json_data.get('event') == 'sentence_start':  # 收到句子开始信号continueelif json_data.get('event') == 'sentence_end':  # 收到句子结束信号playing = True  # 准备播放音频break  # 发送下一段文字elif json_data.get('event') == 'finish':  # 所有文本发送和处理完成finish_received = Truebreakelse:buffer.extend(response)  # 收到音频数据,添加到缓冲区# 所有文本发送完毕,等待 'finish' 信号while not finish_received and not connection_closed:response = await websocket.recv()if isinstance(response, str):json_data = json.loads(response)if json_data.get('event') == 'finish':finish_received = Trueelif json_data.get('code') == 1000:  # WebSocket 正常关闭connection_closed = Trueelse:buffer.extend(response)# 等待播放缓冲区中的剩余音频数据while len(buffer) > 0:await asyncio.sleep(0.1)except Exception as e:print(f"An error occurred: {e}")# 运行 WebSocket 请求
asyncio.run(tts_by("财联社9月28日电,2024清华五道口首席经济学家论坛于9月28日在北京举行。中国人民银行调查统计司原司长盛松成建议,降低中低收入群体个税。提高个税起征点和调降中低收入税率。“短期内虽然会减少税收,但从长期看,随着经济增长和居民收入提高,税收收入也将增加”,他说。第一,盛松成提出,提高个税起征点至8000元/月,据其测算,税收每年减少约300亿元,这仅为2023年税收总额的0.17%。“对财政没有多大影响的,但是这个钱是实实在在的低收入人群的收入,对促进消费是特别有益的”。第二,调降中低收入税率方面,盛松成建议,年收入10万-35万元个税税率降低5个百分点,目前年收入10万-20万、20万-35万分别按10%和20%的税率累进征收个税,建议分别下降至5%和15%。"))

全部代码由chatgpt完成

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

共和国勋章获得者:李振声

李振声&#xff0c;1931年2月出生于山东淄博&#xff0c;是中共党员、著名遗传学家和小麦遗传育种专家&#xff0c;兼任中国科学院院士和第三世界科学院院士。 他被誉为“中国小麦远缘杂交之父”和“当代后稷”&#xff0c;是中国小麦远缘杂交育种的奠基人。 教育背景与早年经…

【基于布尔的盲注】

一、sql基础 Substr 我们看一下用法1里面的str就是我们需要截取的字符&#xff0c;pos是需要截取的位置&#xff0c;len是我们需要截取的长度&#xff0c;例如右边的substr(123456,1,1)意思就是截取’123456’从第一位开始截取&#xff0c;截取两位&#xff0c;到2为止&#…

如何在C语言中实现Doris异步执行Insert语句

如何在C语言中实现Doris异步执行Insert语句 Doris(原名Apache Doris)是一个现代化的MPP(Massively Parallel Processing)分析型数据库,适用于超大规模数据的实时查询和分析。为了在C语言中实现向Doris数据库异步插入数据,我们需要解决以下几个关键问题: 设置Doris客户端…

Thinkphp/Laravel基于vue的实验室上机管理系统

目录 技术栈和环境说明具体实现截图设计思路关键技术课题的重点和难点&#xff1a;框架介绍数据访问方式PHP核心代码部分展示代码目录结构解析系统测试详细视频演示源码获取 技术栈和环境说明 采用PHP语言开发&#xff0c;开发环境为phpstudy 开发工具notepad并使用MYSQL数据库…

基于投影滤波算法的rick合成地震波滤波matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 RICK合成地震波模型 4.2 投影滤波算法原理 5.完整工程文件 1.课题概述 基于投影滤波算法的rick合成地震波滤波matlab仿真。分别通过标准的滤波投影滤波以及卷积滤波投影滤波对合成地震剖面进行滤波…

了解华为计算产品线,昇腾的业务都有哪些?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 随着 ChatGPT 的现象级爆红&#xff0c;它引领了 AI 大模型时代的深刻变革&#xff0c;进而造成 AI 算力资源日益紧缺。与此同时&#xff0c;中美贸易战的持续也使得 AI 算力国产化适配成为必然趋势。 …

B站字幕提取方法

1.获取json文件内容 1.点击F12进入开发者模式&#xff0c;选择网络模块&#xff1b; 2.输入关键字&#xff0c;例如json、ai_subtitle、subtitle等&#xff1b; 3.点击视频下方的字幕功能&#xff0c;开启&#xff1b;再点击响应单元&#xff0c;复制内容&#xff1b; 2.去jso…

TI DSP TMS320F280025 Note13:CPUtimer定时器原理分析与使用

TMS320F280025 CPUtimer定时器原理分析与使用 ` 文章目录 TMS320F280025 CPUtimer定时器原理分析与使用框图分析定时器中断定时器使用CPUtimers.cCPUtimers.h框图分析 定时器框图如图所示 定时器有一个预分频模块和一个定时/计数模块, 其中预分频模块包括一个 16 位的定时器分…

【数学分析笔记】第4章第1节 微分和导数(1)

4. 微分 4.1 微分和导数 考虑一个函数 y f ( x ) yf(x) yf(x)&#xff0c;当 x x x做一些微小的变动&#xff0c;函数值也会有微小的变动&#xff0c;比如&#xff1a; x → x △ x x\to x\bigtriangleup x x→x△x&#xff0c;则 f ( x ) → f ( x △ x ) f(x)\to f(x\bi…

【有啥问啥】卡尔曼滤波(Kalman Filter):从噪声中提取信号的利器

卡尔曼滤波&#xff08;Kalman Filter&#xff09;&#xff1a;从噪声中提取信号的利器 什么是卡尔曼滤波&#xff1f; 卡尔曼滤波&#xff08;Kalman Filter&#xff09;是一种高效的递归滤波器&#xff0c;专为处理包含噪声的线性动态系统而设计。它能够从一系列不完全且含…

网盘能否作为FTP替代产品?企业该如何进行FTP国产化替代?

近年来&#xff0c;信创的概念引入和高效实践落地让更多的行业企业自发性地进行国产化替代&#xff0c;目前信创国产化替代还多发生在操作系统和应用层面&#xff0c;软件工具等目前还在下一阶段规划&#xff0c;但很多企业未雨绸缪&#xff0c;已经在做调研和尝试。 FTP作为世…

大屏娱乐体验新标杆:海信发布全新一代AI电视

在金秋送爽的9月29日&#xff0c;海信以一场盛大的“BIG PLAN百吋风暴”秋季新品发布会&#xff0c;正式揭开了AI电视新时代的序幕。 作为本场发布会上最耀眼的明星&#xff0c;海信AI电视E7N系列凭借无与伦比的AI画质技术和极致性能&#xff0c;引领大屏娱乐体验迈入全新境界&…

仿真设计|基于51单片机的多模式音乐跑马灯

目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现&#xff08;protues8.7&#xff09; 程序&#xff08;Keil5&#xff09; 全部内容 资料获取 具体实现功能 1、16个发光二极管做跑马灯&#xff0c;跑马灯有10种模式。 2、按键可以切换跑马灯模式&#xff0…

Java笔试02

在网络操作系统中&#xff0c;TCP和UDP是传输层中两个非常重要的协议。TCP提供的是面向连接的、可靠的端到端通信机制&#xff0c;因此TCP协议在注重数据安全的场景下获得了极为广泛的应用。 TCP采用了确认和重发机制来确保数据的可靠传输。 相较于UDP&#xff0c;TCP的优势在…

.NET CORE程序发布IIS后报错误 500.19

发布IIS后浏览时报错误500.19&#xff0c;同时配置文件web.config的路径中也存在问号“?”。 可能原因&#xff1a;没有安装运行时

无人机之编队控制篇

无人机编队控制是指无人机集群在执行任务过程中&#xff0c;如何形成并保持一定的几何构型&#xff0c;以适应平台性能、战场环境、战术任务等要求的控制技术。以下是对无人机编队控制的详细解析&#xff1a; 一、无人机编队控制的主要任务 无人机编队控制主要解决两个问题&a…

Linux 线程同步

前言 上一期我们介绍了线程互斥&#xff0c;并通过加锁解决了多线程并发访问下的数据不一致问题&#xff01;本期我们来介绍一下同步问题&#xff01; 目录 前言 一、线程同步 • 线程同步的引入 • 同步的概念 理解同步和饥饿问题 • 条件变量 理解条件变量 • 同步…

系列一、初始ElasticSearch

前言&#xff1a; 最近公司的业务有用到ElasticSearch&#xff0c;虽然说之前业余时间也自学过ElasticSearch技术&#xff0c;但是在公司实际的业务中开发中没有用过&#xff0c;再加上时间比较久远了&#xff0c;很多东西都忘记了&#xff0c;基于此我决定系统的重新学习一下这…

个人项目简单https服务配置

1.SSL简介 SSL证书是一种数字证书&#xff0c;由受信任的证书颁发机构&#xff08;CA&#xff09;颁发&#xff0c;用于在互联网通信中建立加密链接。SSL代表“安全套接层”&#xff0c;是用于在互联网上创建加密链接的协议。SSL证书的主要目的是确保数据传输的安全性和隐私性…

鸿蒙NEXT开发环境搭建(基于最新api12稳定版)

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…