腾讯tts获取文件blob推流解析

2024-08-27 17:52

本文主要是介绍腾讯tts获取文件blob推流解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

方案1,获取推流拼接到数据,播放时将 Blob 转换为 URL,把audioUrl赋值给

 ws.onmessage((res) => {// console.log('onmessage res.data',res.data)if (typeof res.data == "object") {blobs.value.push(res.data);const newBolb = new Blob([...blobs.value], { type: "audio/mp3" });// 将 Blob 转换为 URLaudioUrl.value = URL.createObjectURL(newBolb);}// console.log('onmessage audioUrl.value',audioUrl.value)});
<audio  ref="audioPlayer" controls><source :src="audioUrl" type="audio/mpeg" autoplay />Your browser does not support the audio element.
</audio>

方案二,实现边推流边播放(不稳定)

 ws.onmessage((res) => {if (typeof res.data == "object") {appendBuffer(res.data);} else {}});const appendBuffer = (blob) => {const reader = new FileReader();reader.onload = () => {const arrayBuffer = reader.result;if (sourceBuffer && !sourceBuffer.updating && !audioPlayer.value.error ) {sourceBuffer.appendBuffer(arrayBuffer);}};reader.readAsArrayBuffer(blob);
};const onSourceOpen = () => {if (!sourceBuffer) {sourceBuffer = mediaSource.addSourceBuffer('audio/mpeg');sourceBuffer.addEventListener('updateend', () => {// 当 sourceBuffer 更新结束时,可以继续追加数据if (ws && ws.readyState === WebSocket.OPEN) {ws.onmessage((res) => {if (typeof res.data == "object") {appendBuffer(res.data);}});}});}
};

方案3 (推荐)

let mediaSource = new MediaSource();
let sourceBuffer;
let queue = [];
let isUpdating = false;const audioPlayer = document.getElementById('audioPlayer'); // Assume you have an <audio> element with this id
audioPlayer.src = URL.createObjectURL(mediaSource);const appendBuffer = (blob) => {const reader = new FileReader();reader.onload = () => {const arrayBuffer = reader.result;queue.push(arrayBuffer);processQueue();};reader.readAsArrayBuffer(blob);
};const processQueue = () => {if (queue.length > 0 && !isUpdating && sourceBuffer && !audioPlayer.error) {const buffer = queue.shift();isUpdating = true;sourceBuffer.appendBuffer(buffer);}
};const onSourceOpen = () => {if (!sourceBuffer) {sourceBuffer = mediaSource.addSourceBuffer('audio/mpeg');sourceBuffer.mode = 'sequence'; // Ensure the buffer is appended in sequencesourceBuffer.addEventListener('updateend', () => {isUpdating = false;processQueue(); // Continue processing the queue after each update});}
};mediaSource.addEventListener('sourceopen', onSourceOpen);ws.onmessage = (res) => {if (typeof res.data === 'object') {appendBuffer(res.data);}
};

这篇关于腾讯tts获取文件blob推流解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112365

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

OWASP十大安全漏洞解析

OWASP(开放式Web应用程序安全项目)发布的“十大安全漏洞”列表是Web应用程序安全领域的权威指南,它总结了Web应用程序中最常见、最危险的安全隐患。以下是对OWASP十大安全漏洞的详细解析: 1. 注入漏洞(Injection) 描述:攻击者通过在应用程序的输入数据中插入恶意代码,从而控制应用程序的行为。常见的注入类型包括SQL注入、OS命令注入、LDAP注入等。 影响:可能导致数据泄

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

多线程解析报表

假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要提示解析完成。 Way1 join import java.time.LocalTime;public class Main {public static void main(String[] args) thro

Mysql BLOB类型介绍

BLOB类型的字段用于存储二进制数据 在MySQL中,BLOB类型,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储的大小不同。 TinyBlob 最大 255 Blob 最大 65K MediumBlob 最大 16M LongBlob 最大 4G

ZooKeeper 中的 Curator 框架解析

Apache ZooKeeper 是一个为分布式应用提供一致性服务的软件。它提供了诸如配置管理、分布式同步、组服务等功能。在使用 ZooKeeper 时,Curator 是一个非常流行的客户端库,它简化了 ZooKeeper 的使用,提供了高级的抽象和丰富的工具。本文将详细介绍 Curator 框架,包括它的设计哲学、核心组件以及如何使用 Curator 来简化 ZooKeeper 的操作。 1