vue内引入语音播报功能

为什么80%的码农都做不了架构师?>>>   hot3.png

在vue项目中引入语音播报,使用的科大讯飞语音接入,

具体思路为每次接收到语音信息后存入一个数组,然后监听这个数组,开始冲第一个索引播放,并且同时根据vuex getter 来动态删减数量

给audio绑定ended事件来执行播放完成后播放下一个

播放结束后,根据ended事件来确认如果数组内数量为0,则移除该事件并置状态为无播放状态,当数组开始变化时,重新开始执行此播放行为

 

这里遇到个小问题,当要播放的信息异常时,比如数组内移除了该索引的数据,但是仍然播放到这个时,就会报错

Uncaught (in promise) DOMException: Failed to load because no supported source was found.

解决办法:

判断视频的networkState,如果值等于3,则不播放,跳过

- Media.networkState; //0.此元素未初始化 1.正常但没有使用网络 2.正在下载数据 3.没有找到资源

 

相关代码如下

 

  watch: {audio_list: {handler: function(val, old) {if (val.length !== 0 && !this.is_calling) {var self = thisthis.is_calling = truevar myAudio = this.$refs.audiomyAudio.preload = true// myAudio.controls = truemyAudio.src = val[0] //每次读数组第一个setTimeout(() => self.setAudio(), 100)myAudio.addEventListener('ended', playEndedHandler, false)myAudio.play()myAudio.loop = false //禁止循环,否则无法触发ended事件function playEndedHandler() {myAudio.src = val[0] //每次读数组第一个setTimeout(() => self.setAudio(), 100)myAudio.networkState !== 3 && myAudio.play()if (val.length === 0) {console.log('读完了')myAudio.removeEventListener('ended', playEndedHandler, false)self.is_calling = false}}}},deep: true}},

 

这个使用的时base64编码后的信息,

还试过百度的语音,由前端直接请求,返回的是blob对象数据。在demo测试时可以正常使用,但是引入项目中后,会一直报错

Uncaught TypeError: Failed to execute 'createObjectURL' on 'URL': No function was found that matched the signature provided.

百度没有找到解决方案,并且感觉百度的语音没有讯飞的听着舒服,就没有用这个,

我后来试了下,好像是由于在demo中返回的数据是blob对象,但是引入vue里后就变成了string类型的了,URL.createObjectURL 无法作用,如果再转为blob对象,赋值给audio也没反应了,没有查到原因,记录下

转载于:https://my.oschina.net/mdu/blog/1927919

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

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

相关文章

php mysql 排序规则_php 数组排序以及按照某个字段排序

如果你已经使用了一段时间PHP的话,那么,你应该已经对它的数组比较熟悉了——这种数据结构允许你在单个变量中存储多个值,并且可以把它们作为一个集合进行操作。经常,开发人员发现在PHP中使用这种数据结构对值或者数组元素进行排序…

单例问题与线程安全

饿汉式 没有线程安全性问题 懒汉式 public class SingletonDemo2 {private static SingletonDemo2 instance;private SingletonDemo2() {}public static SingletonDemo2 getInstance() {if(instancenull) {instancenew SingletonDemo2();}return instance;}}如果遇到多线程。上…

python 音速_中国大学MOOC的APP(慕课)2021用Python玩转数据章节答案

在高技术战争件下,信息的获取相当于人的感觉器官,信息的传输相当于人的神经网络,信息的处理相当于人的大脑,( )则将它们联系为一个整体,构成了作战的神经系统。车身可拆卸的连接有螺纹连接、卡口链接、铰链连接。在高技术战争件下,信息的获取相当于人的感觉器官,信息的传输相当…

Mysql中的触发器

原文地址:https://www.cnblogs.com/zyshi/p/6618839.html ---------------------------------------------------------什么是触发器 简单的说,就是一张表发生了某件事(插入、删除、更新操作),然后自动触发了预先编写好…

一张图理解JS的原型(prototype、_proto_、constructor的三角关系)

注意:前方高能预警,请认真仔细看完,阅读完后自己再次画下原型图,相信你一定会有更深刻的认识。(推荐炒鸡好用的画流程图的软件ProcessOn)构造函数:function Foo ( ) { };实例对象:let f1new Foo;let o1new …

Oracle触发器和MySQL触发器之间的区别

原文链接:http://blog.csdn.net/a19881029/article/details/37820363 -----------------------------------------------------------Oracle触发器格式:[plain] view plaincopyCREATE [OR REPLACE] TRIGGER trigger_name BEFORE|AFTER INSERT|UPDA…

下列选项中不符合python语言变量命名规则的是_学习Python第二日--基本概念和类型...

编程语言分类:解释型语言和编译型语言。解释型语言不会产生额外的文件,运行时一行一行的翻译。编译型语言需要产生一个额外的文件,是电脑能够识别的内容,运行后将产生额外的文件。 变量是可变的量,是它的值可以发生改变。变量的作用是保存值,保存的值可以是数据,而且保存…

HashMap死锁原因及替代方案

原文链接:http://blog.csdn.net/fhzaitian/article/details/51505516 ------------------------------------------------------------------------1、首先我们需要简单地了解一下HashMap数据结构 HashMap通常会用一个指针数组(假设为table[]&#xff09…

优化mysql数据库_MySQL数据库十大优化技巧

WEB开发者不光要解决程序的效率问题,对数据库的快速访问和相应也是一个大问题。希望本文能对大家掌握MySQL优化技巧有所帮助。1. 优化你的MySQL查询缓存在MySQL服务器上进行查询,可以启用高速查询缓存。让数据库引擎在后台悄悄的处理是提高性能的最有效方…

跋山涉水——深入 Redis 字典遍历

Redis 字典的遍历过程逻辑比较复杂,互联网上对这一块的分析讲解非常少。我也花了不少时间对源码的细节进行了整理,将我个人对字典遍历逻辑的理解呈现给各位读者。也许读者们对字典的遍历过程有比我更好的理解,还请不吝指教。一边遍历一边修改…

linux下VI模式中上下左右键和回退键出现字母

原文地址:http://blog.csdn.net/u012860950/article/details/50127779 ---------------------------------------------------------------- 1.编辑/etc/vim/vimrc.tiny 由于/etc/vim/vimrc.tiny的拥有者是root用户,所以要在root的权限下对这个文件进行修…

mysql数据库查询优化建议_mysql数据库查询优化的24条建议

MySQL是一个强大的开源数据库。随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈。这里提供一些关于Mysql 数据库查询优化的24条优化建议,仅供参考。Mysql 查询优化1、使用慢查询日志,找出执行慢的查询。2、使用 EXPLAIN 来决定查询功能是否合…

常规sql读取CLOB

plsql下,普通sqlsql-cmd下总结: 常规的sql,查询clob字段,只能显示部分内容。 查clob内容select dbms_lob.substr(c_content) from table_content t dbms_lob.substr将大文本转换字符类型读出来.dbms_lob.substr的转换对字段conten…

精解 ES6箭头函数

🐱 个人主页:SHOW科技,公众号:SHOW科技 🙋‍♂️ 作者简介:2020参加工作,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫优质专栏&#x…

硬盘主引导记录详解

说明:硬盘主引导记录独立于操作系统,但又和操作系统息息相关——很多时候它又是由; 操作系统所提供的工具所生成(例外的情况是您使用了其他的分区工具,不过它又运行在; 什么操作系统中呢?;()。;; 如果您安装…

Oracle char varchar varchar2 nvarchar2 的区别

上面字符类型能保存多少个字符与oracle当前的字符集有关系。 select userenv(language) from dual; 假设长度2000字节, 如果字符集是16位编码的,ZHS16GBK,那么每个字符16位,2字节,所以可以容纳1000字符。 如果是32位编…

树莓派lnmp安装mysql_在树莓派上安装 LNMP

树莓派支持安装非常多的操作系统,如官方所展示:这里我选择了推荐的 Raspbian 系统,它基于 Debian,这就意味着我可以按照 Debian 的方式来安装软件。一、安装 Nginx0、先将系统更新到最新状态$ sudo apt-get update && sud…

openlayers5之热力图heatmap

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gisdoer/article/details/81745645 openlayers5之热力图 点击查看文章

maven项目在打war包时出现非法字符: '\ufeff' 解决方案

http://blog.csdn.net/qi_fei/article/details/61416319 --------------------------------------------问题描述: 开发工具MyEclipse 的总体开发环境,编码格式总体设置为UTF-8,在将web项目打包的时候出现:非法字符:\u…

0027-生成圆

题目 生成圆难度级别:A; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B 试题描述给你一些特殊的圆,每个这样的圆每秒可以产生一个普通的圆,如果给你…