欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 【原创】基于websocket的实时文本转语音功能

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

2024/11/5 16:55:59 来源:https://blog.csdn.net/jxyk2007/article/details/142648051  浏览:    关键词:【原创】基于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完成

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com