当前位置: 首页 > news >正文

探索Edge-TTS与WebSocket集成:打造实时语音交互系统

本文为实现 WebSocket 将文本转换为语音并返回 Base64 数据给 Vue 客户端【干货】
在本文中,我们将构建一个简单的系统,该系统能够接收文本输入,通过 Microsoft Edge 的文本到语音服务(Edge TTS)转换为语音,并将生成的语音数据以 Base64 编码的形式通过 WebSocket 传输给 Vue 客户端。


后端: Python 3.10

WebSocket: Python 的 websockets 库
文本到语音: edge_tts 库


前端: Vue.js


步骤 1: 设置 Python 环境
首先,确保你的环境中安装了 Python 3.10。然后,安装所需的库:

pip install edge-tts websockets


步骤 2: 创建 WebSocket 服务器
我们将创建一个简单的 WebSocket 服务器,它将接收文本消息,使用 Edge TTS 转换为语音,并将结果以 Base64 编码的形式发送回客户端。

# server.py
async def tts_task(text, voice="zh-CN-YunxiNeural"):base64_data = ""memory_file = io.BytesIO()try:communicate = edge_tts.Communicate(text, voice)async for chunk in communicate.stream():if chunk["type"] == "audio":memory_file.write(chunk["data"])memory_file.seek(0)read_data = memory_file.read()base64_data = base64.b64encode(read_data).decode("utf-8")finally:memory_file.close()return base64_data

在上面的代码块中,将最后的音频流结果转换成了base64数据。


步骤 3: 创建 Vue 客户端
接下来,我们将创建一个简单的 Vue 客户端来与 WebSocket 服务器交互。

在vue端调用websocketjs,下面只是组件部分代码
<template>
  <div>
    <input v-model="message" placeholder="Type something..." />
    <button @click="sendText">Send</button>
    <audio ref="audioPlayer" controls></audio>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: '',
      websocket: null,
    };
  },
  methods: {
    sendText() {
      this.websocket.send(this.message);
    },
    playAudio(base64Data) {
      const audioBlob = this.base64ToBlob(base64Data, 'audio/mpeg');
      const audioUrl = URL.createObjectURL(audioBlob);
      this.$refs.audioPlayer.src = audioUrl;
      this.$refs.audioPlayer.play();
    },
    base64ToBlob(base64Data, mimeType) {
      const byteCharacters = atob(base64Data);
      const byteNumbers = new Array(byteCharacters.length);
      for (let i = 0; i < byteCharacters.length; i++) {
        byteNumbers[i] = byteCharacters.charCodeAt(i);
      }
      const byteArray = new Uint8Array(byteNumbers);
      return new Blob([byteArray], { type: mimeType });
    }
  },
  mounted() {
    this.websocket = new WebSocket('ws://localhost:8765');
    this.websocket.onmessage = (event) => {
      // 接收到的数据是Base64编码的音频数据
      this.playAudio(event.data);
    };
  },
  beforeDestroy() {
    this.websocket.close();
  }
};
</script>


步骤 4: 运行系统
运行 Python WebSocket 服务器:
python server.py
启动 Vue 项目(确保你已经安装了 Vue CLI 并创建了项目):
npm run serve
在浏览器中打开 Vue 应用,输入文本,点击发送,你将听到通过 WebSocket 传输的语音。

总结
本文展示了如何使用 Python 3.10 和 WebSocket 实现一个文本到语音的转换服务,并通过 Base64 编码将语音数据传输给 Vue 客户端。这种方法可以用于创建实时语音交互应用,如聊天机器人、语音助手等。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【网络编程通关之路】 Tcp 基础回显服务器(Java实现)及保姆式知识原理详解 ! ! !
  • addroutes和next()导致的页面无法跳转问题,如登录之后无法跳转到首页,无法重定向,使用next(to)
  • 树、二叉树
  • 42-java 为什么要有包装类
  • 设置 Nginx、MySQL 日志轮询
  • 栈与队列--python
  • webpack4手动搭建Vue项目
  • 石油设备和相关机械都包涵那些?
  • GLM-4-Long加持的RAG:更准,更简,更全!
  • 集运系统如何多维度展现企业业务情况?
  • Socket编程---UDP篇
  • 能大致讲一下Chat GPT的原理吗?
  • typedef区分结构体类型和结构体变量
  • 深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
  • 数据结构(Java实现):栈和队列相关练习题
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【剑指offer】让抽象问题具体化
  • 2019.2.20 c++ 知识梳理
  • es6要点
  • git 常用命令
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript DOM 10 - 滚动
  • Java读取Properties文件的六种方法
  • python_bomb----数据类型总结
  • Terraform入门 - 3. 变更基础设施
  • TypeScript迭代器
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • nb
  • ​第20课 在Android Native开发中加入新的C++类
  • $(function(){})与(function($){....})(jQuery)的区别
  • (12)Linux 常见的三种进程状态
  • (6)STL算法之转换
  • (k8s)kubernetes集群基于Containerd部署
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (二)hibernate配置管理
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (算法)N皇后问题
  • (推荐)叮当——中文语音对话机器人
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)视频码率,帧率和分辨率的联系与区别
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .net FrameWork简介,数组,枚举
  • .Net 应用中使用dot trace进行性能诊断
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .py文件应该怎样打开?
  • .考试倒计时43天!来提分啦!
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [2023-年度总结]凡是过往,皆为序章
  • [AIGC 大数据基础]hive浅谈