微信小程序实现长文本分段播放

接上篇 微信小程序实现语音合成功能 解决腾讯智能语音插件中文最大支持100个汉字的问题

场景:需要合成100汉字以上的文本进行语音播报

注意:本文示例代码是在上篇基础上进行改进。

上代码

<scriprt>
// 创建音频组件
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = false;
innerAudioContext.src = '';
// 音频播放方法
play(id){var that = this;if(that.oldId == id && that.currentTime > 0){// 控制是否是当前已经播报过,现在处于暂停的文章//暂停之后点击播放继续播放innerAudioContext.play();innerAudioContext.onEnded((res) => {})}else{//新文章var extras = that.content;// 要播报的文本var lastExtras;// 提取汉字(由于笔者要播报的来自富文本,所以需要提取文字)if(extras != null && extras != ''){// 去掉html标签lastExtras = extras.replace(/<[^>]+>/g,"");// 只留汉字和数字lastExtras = lastExtras.replace(/[^\u4e00-\u9fa5_0-9]/gi,"");}// 定义每次截取长度var fixedLength = 80;// 是否继续读取文章标识var readFlag = true;// 定义循环因子var i = 0;while(readFlag){// 循环播报文本let voiceText = lastExtras.substr(i*fixedLength,fixedLength);i++;if(voiceText.length <= 0){readFlag = false;}}for (let j = 0; j < i; j++) {const voiceText = lastExtras.substr((0+j)*fixedLength,fixedLength);setTimeout(()=>{that.voiceHC(j,voiceText);console.log('第'+j+'次进入播报')},75*250*j)// 延时时间需要自己估算。读者朋友们可以自行调整}}that.oldId = id;},voiceHC(i,lastExtras){console.log('第'+i+'次调用,内容:'+lastExtras);var encoded = encodeURI(lastExtras);plugin.textToSpeech({content: lastExtras,speed: 0,volume: 0,voiceType: 0,language: 1,projectId: 0,sampleRate: 16000,success: function(data) {let url = data.result.filePath;if(url && url.length > 0){innerAudioContext.autoplay = true;innerAudioContext.src = url;innerAudioContext.onPlay(() => {});innerAudioContext.onError((res) => {console.log(res.errMsg)});}},fail: function(error){console.log(error);}})}
</script>

微信小程序实现长文本分段播放相关推荐

  1. 解决微信小程序rich-text 长文本不换行问题解决

    解决: 给rich-text 加class 之后添加样式. //wxml<rich-text class="hh" nodes="{{nodes}}"&g ...

  2. 微信小程序音频相关问题:播放,录音等相关

    其实我也知道音频问题,十分尴尬,可以参考的资料极少,研究者也不多,所处的教程也基本是基础的内容,稍微深入几乎一篇都没有:所以前段时间我就准备弄的东西,一直没弄,因为没资料去弄,但是今天,看到一个同学遇 ...

  3. uniapp 判断页面是否是横竖屏,解决微信小程序video组件全屏播放视频遮盖自定义播放控件问题

    如果res.deviceOrientation 等于landscape 的话是竖屏,portrait则是横屏.因为用户每旋转一次屏幕就会触发里面的onShow钩子,因此在页面显示或横竖屏变化都会触发这 ...

  4. 微信小程序 长按图片不出现菜单_微信小程序实现长按删除图片的示例

    说明 最近在学小程序,遇到长按图片删除的问题,特此记录,记录自己的成长轨迹 需求: 长按删除指定图片 需要解决的问题 长按事件如何表示出来? 如何获取当前长按元素的下标? 如何删除元素? 解决办法 长 ...

  5. 小程序PHP字体,微信小程序在text文本实现多种字体样式

    这篇文章主要介绍了微信小程序在text文本实现多种字体样式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 微信小程序比较特别,它的wxml只允许用自 ...

  6. 微信小程序 view的文本自动换行了的问题(scroll-view)/微信小程序 view换行跟不换行的解决方案

    今天在写一个滚动导航栏的时候发现 view的文本自动换行了,用了display:flex;flex-warp:nowarp;也不管用, wxml: {{item}} wxss: .top{ width ...

  7. 微信小程序练手项目-音乐播放器

    微信小程序练手项目-音乐播放器 该项目只适合练手,大佬请绕道 项目展示图: 项目介绍 微信小程序音乐播放器 页面: 音乐推荐.播放器.播放列表 功能: 播放.暂停.上一首.下一首.跳转播放列表.实时进 ...

  8. 微信小程序账号长时间未登录冻结解封

    微信小程序账号长时间未登录冻结解封 1.账号找回链接[官方]:http://mp.weixin.qq.com/acct/findacct?action=scan 2.按照官方指引的三个操作步骤进操作, ...

  9. 微信小程序 页面传值文本解密问题

    微信小程序 页面传值文本解密问题 遇到问题 最近在做小程序,遇到这样一个需求: 将百度的Ueditor编辑器存入的文本数据显示在小程序中,需要保留之前的样式,这就用到了 WxParse插件,它能够用解 ...

最新文章

  1. 第五周周记(国庆第一天)
  2. AI时代,谈数据分析时我们要谈些什么?
  3. 厉害了我的VR!老师们用VR来教历史
  4. Android recipe 在代码中写布局
  5. 【深度学习】基于Torch的Python开源机器学习库PyTorch卷积神经网络
  6. 华为OJ: 公共字符串计算
  7. HDU多校1 - 6955 Xor sum(字典树+贪心)
  8. C#多线程使用进度条
  9. C语言高级编程:指针变量p指向的地址与p自身的地址
  10. python字符串startswith_Python 字符串 startswith() 使用方法及示例
  11. LintCode 550. 最常使用的K个单词II(自定义set(可修改数据的优先队列) + map)
  12. NFS部署及优化(一)
  13. bzoj:1026: [SCOI2009]windy数(数位dp)
  14. 基于AWS的云备份容灾解决方案
  15. Linux命令总结:file
  16. nginx反向代理解决跨域
  17. 2010 模板下载 罗斯文_学生个人简历模板,简历制作技巧
  18. HDU6069(数学)
  19. NVD软件漏洞数据处理及分类方法总结
  20. android动手写平滑滚动歌词控件

热门文章

  1. Linux系统鲁大师查看CPU、内存、显卡信息
  2. MFC CString转ASCII字符串
  3. OpenGL南邮计算机图形学实验报告二——两个纹理的渐变变换和移动
  4. 自动识别查找特定的串口号 比如设备管理器中Modem属性里的串口 按这个方法可以获取设备管理器任意信息。C++
  5. 什么是序列化 怎么序列化 为什么序列化
  6. 连环锁 POJ - 1832(格雷码与二进制)
  7. 手机“隐藏功能”揭秘
  8. Qgis系统教程1:软件安装
  9. 侵权和违约的区别是哪些
  10. C#使用Interop.OPCAutomation.dll文件报错