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

news2024/12/23 5:03:55

 功能实现,将长文本分段实时转成音频流,达到边转换边播放的效果,减少等待效果,像豆包通义千问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  # 标记是否收到了 finish
    connection_closed = False  # 标记 WebSocket 是否关闭

    async def play_buffer():
        nonlocal playing
        while 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 += 1

                while True:
                    response = await websocket.recv()
                    if isinstance(response, str):
                        json_data = json.loads(response)
                        print(json_data)
                        if json_data.get('event') == 'sentence_start':  # 收到句子开始信号
                            continue
                        elif json_data.get('event') == 'sentence_end':  # 收到句子结束信号
                            playing = True  # 准备播放音频
                            break  # 发送下一段文字
                        elif json_data.get('event') == 'finish':  # 所有文本发送和处理完成
                            finish_received = True
                            break
                    else:
                        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 = True
                    elif json_data.get('code') == 1000:  # WebSocket 正常关闭
                        connection_closed = True
                else:
                    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.coloradmin.cn/o/2182339.html

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

相关文章

Java 每日一刊(第18期):集合

文章目录 前言1. Java 集合框架概述1.1 Java 集合框架的定义和意义1.2 Java 集合框架的历史演进1.3 集合框架的基本组成部分1.4 Java 集合的优势1.5 Java 集合与数组的区别与关系 2. Java 集合框架的核心接口2.1 Collection 接口2.2 List 接口2.3 Set 接口2.4 Queue 接口2.5 Ma…

无人机在科研与教育领域的应用!

一、无人机在科研领域的应用 地理测绘与遥感&#xff1a; 无人机可以搭载相机或激光雷达等传感器&#xff0c;进行高分辨率的航拍&#xff0c;用于制作数字地形模型、生态环境监测、土地利用规划等。 在地理信息获取、地质勘察等领域&#xff0c;无人机能够高效地完成测量任…

Java中正则表达式(完整详解,附有案例+代码)

文章目录 三十三.正则表达式33.1 概述33.2 Test 三十三.正则表达式 33.1 概述 字符类 [abc]a、b 或 c&#xff08;简单类&#xff09;[^abc]任何字符&#xff0c;除了 a、b 或 c&#xff08;否定&#xff09;[a-zA-Z]a 到 z 或 A 到 Z&#xff0c;两头的字母包括在内&#x…

MQTT--EMQX入门+MQTTX使用

目录 1、什么是EMQX&#xff1f;1.1 EMQX介绍1.2 EMQX特点1.3 与物联网之间的关系以及主要的产品主要的产品 2、安装启动2.1 基本命令2.2 目录结构 3、MQTTX客户端3.1 连接配置 总结PS: 1、什么是EMQX&#xff1f; 首先你得有MQTT的知识&#xff0c;不认识MQTT的小伙伴可以先看…

JMeter对jdbc request以及foreach和loop controller的使用

Jmeter中jdbc request和foreach控制器 1. 使用variable name实现对数据库查询结果的遍历 在foreach controller中&#xff0c;注意要做variable name的关联(correlation), 否则没法取回这里的jdbc request返回的结果。这里的input variable prefix一定要和jdbc request中的var…

十七、触发器

文章目录 0. 引入1. 触发器概述2. 触发器的创建2.1 触发器的创建2.2 代码举例 3. 查看、删除触发器3.1 查看触发器3.2 删除触发器 4. 触发器的优缺点4.1 优点4.2 缺点4.3 注意点 0. 引入 在实际开发中&#xff0c;我们经常会遇到这样的情况&#xff1a;有 2 个或者多个相互关联…

《蓝桥杯算法入门》(C/C++、Java、Python三个版本)24年10月出版

推荐&#xff1a;《算法竞赛》&#xff0c;算法竞赛大全书&#xff0c;网购&#xff1a;京东 天猫  当当 文章目录 《蓝桥杯算法入门》内容简介本书读者对象作者简介联系与交流《蓝桥杯算法入门 C/C》版目录 《蓝桥杯算法入门 Java》版目录 《蓝桥杯算法入门 Python》版目录 …

vscode 连接服务器 不用输密码 免密登录

vscode 免密登录服务器 1. 本地端1&#xff09;生成密钥2&#xff09;vscode的config文件中添加id_rsa文件路径 2. 服务器端1&#xff09;在 authorized_keys 文件中加入密钥&#xff1a;2&#xff09;修改authorized_keys文件权限 1. 本地端 1&#xff09;生成密钥 在命令行…

【hot100-java】【二叉树的层序遍历】

二叉树 BFS 队列实现 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right)…

力扣(leetcode)每日一题 1845 座位预约管理系统| treeSet和priority Queue的区别|线段树

之前发过一篇&#xff0c;感觉还有深挖的地方&#xff0c;于是又补充一些信息 这题目虽然是middle难度题目&#xff0c;要解答出来是只要easy的时间&#xff0c;但是深挖可以有hard的难度 题解1 可以帮助复习线段树的使用&#xff0c;题解2 可以复习一下java基础知识 题解1 线…

免费送源码:Java+ssm+MySQL springboot健康医疗系统 计算机毕业设计原创定制

摘 要 随着我国经济迅速发展&#xff0c;人们对医疗管理的需求越来越大&#xff0c;各种健康医疗系统也都在被广泛应用&#xff0c;对于医疗管理的各种软件也是备受用户的喜爱&#xff0c;健康医疗系统被用户普遍使用&#xff0c;为方便用户能够可以随时进行健康医疗系统的数据…

【JAVA开源】基于Vue和SpringBoot的美容院管理系统

本文项目编号 T 055 &#xff0c;文末自助获取源码 \color{red}{T055&#xff0c;文末自助获取源码} T055&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…

NAL 网络提取层(Network Abstraction Layer)

1.NAL全称Network Abstract Layer, 即网络抽象层。 在H.264/AVC视频编码标准中&#xff0c;无论是存储还是网络传输&#xff0c;H264 原始码流是由一个接一个 NALU&#xff08;NAL Unit&#xff09; 组成&#xff0c;整个系统框架被分为两个层面&#xff1a;视频编码层面&#…

uniapp学习(003-1 vue3学习 Part.1)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第11p-第p14的内容 文章目录 vue3使用介绍插值表达式例子时间戳随机数输出函数的值 ref响应式数据变量v-bind 绑…

PCL CropBox 过滤给定立方体内的点云数据

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 点云裁剪 2.1.2 可视化原始点云和裁剪后的点云 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长…

Python办公自动化案例:批量修改Word文件中的段落格式

案例:Python实现批量修改Word文件中的段落格式。 在处理大量Word文档时,经常需要批量修改这些文档的格式,比如统一段落格式,以提升文档的一致性和专业性。使用Python来实现这一任务可以极大地提高工作效率,特别是当涉及到数百或数千个文档时。Python通过第三方库如python…

【C#】CacheManager:高效的 .NET 缓存管理库

在现代应用开发中&#xff0c;缓存是提升性能和降低数据库负载的重要技术手段。无论是 Web 应用、桌面应用还是移动应用&#xff0c;缓存都能够帮助减少重复的数据查询和处理&#xff0c;从而提高系统的响应速度。然而&#xff0c;管理缓存并不简单&#xff0c;尤其是当你需要处…

《RabbitMQ篇》Centos7安装RabbitMQ

安装RabbitMQ 安装包网盘下载地址 链接&#xff1a;https://pan.baidu.com/s/1bG_nP0iCdAejkctFp1QztQ?pwd4mlw 先上传安装包到服务器&#xff08;erlang-23.3.4.11-1.el7.x86_64.rpm和rabbitmq-server-3.9.16-1.el7.noarch.rpm&#xff09;然后使用指令安装 # 安装 erlang r…

掌握 JVM 垃圾收集线程:简化 VM 选项

垃圾收集阶段对于任何 Java 应用程序都至关重要。主要目标是保持高吞吐量和低延迟之间的平衡。通过配置垃圾收集器&#xff0c;我们可以提高性能&#xff0c;或者至少推动应用程序朝着特定的方向发展。 垃圾收集周期越短越好。因此&#xff0c;分配给垃圾收集器的资源越多&…

昇思MindSpore进阶教程--下沉模式

大家好&#xff0c;我是刘明&#xff0c;明志科技创始人&#xff0c;华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享&#xff0c;如果你也喜欢我的文章&#xff0c;就点个关注吧 正文开始 昇腾芯片集成了AICORE和AICPU等…