博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【小玩】cc-audiobuffer 一个切片语音拼接工具
阅读量:6943 次
发布时间:2019-06-27

本文共 1997 字,大约阅读时间需要 6 分钟。

源码在最后,喜欢就给个Star !

萌新跪求优化指导,请Forks

萌新瑟瑟发抖

话说在那么紧张的大三快要找实习了而自己还在玩这些真的好吗?T_T

这个小工具是我在最近解决项目问题中制作的。

背景是这样的:作为前端的萌新,被主程老大们吓得瑟瑟发抖。语音实时通讯!这个是最近项目中的一个里程碑,也是一个难点所在。主程老大们的想法是,浏览器录音,切片,通过服务器转存再通过广播Url的方式进行转发。使得各个客户端都可以实时通讯。

解决方法:大神 WebRTC中的 进行浏览器录音和切片(膜拜),使用 存储,转发并获得切片语音的Url!最后最后,就是拼接语音啦,所以就产生了这个cc-audiobuffer工具。

直接看实现

cc-audiobuffer采用了ES6封装类来实现,并且使用babel转义。

连续播放的实现

  • 递归的思想,只要缓冲区中还有Audio,就继续播放。

  • 事件监听,监听Audio对象中的 ended 事件作为下一段语音播放的标志。

play() {        const _this = this        if (this.isHasBuffer()) {            this.currentAudio = this.shiftBuffer()            this.currentAudio.play()            _this.currentAudio.addEventListener('ended', function () {                _this.play()            }, false)        }else{            this.currentAudio=null        }    }

语音提前加载的实现

  • 在语音的Url加入缓冲区的时候,使用Audio对象的preload属性实现。

let audio = new Audio(url)audio.preload = "auto"this.AudioUrlBag.push(audio)

动态语音加载的实现

  • CCAudioBuffer有pushBuffer('url') 方法,如果缓冲区有Audio正在播放的话,此方法将新的Audio加入队列,如果缓冲区中没有Audio播放,将会将Audio加入缓冲区同时自动播放新的Audio。

pushBuffer(url) {        if(!this.isHasCurrentAudio()){            let audio = new Audio(url)            audio.preload = "auto"            this.AudioUrlBag.push(audio)            this.play()        }        else{            let audio = new Audio(url)            audio.preload = "auto"            this.AudioUrlBag.push(audio)        }    }

想试一下吗?

安装

npm:

npm install cc-audiobuffer
import CCAudioBuffer from 'cc-audiobuffer'

script:

使用

无参数创建

let CCAudioBuffer = new CCAudioBuffer()CCAudioBuffer.pushBuffer('url')

当有新的url语音地址传过来的时候,CCAudioBuffer会提前加载并且自动播放语音。不管何时调用pushBuffer('url'),这些语音都会依次进入缓冲区且连续播放直到缓冲区为空。

有参数创建

let CCAudioBuffer= new CCAudioBuffer([new Audio('url'),new Audio('url'),new Audio('url')])CCAudioBuffer.play()CCAudioBuffer.pushBuffer('url')

当你有参数创建时,参数规定是Audio对象的一个数组。

接下来需要调用play() 接口保证参数内的Audio播放。

pushBuffer() 的作用和无参数创建一样。

反思一下

最近真是忙成象拔蚌,这个工具做的很急,自我安慰下。

源码很短很短,也没有考虑到对象内部的一些私有封装什么的。还是想以后有时间能重写一下。

也写写些请求啥的,希望请教大家,问问大家有没有优化方案什么的,也给小生我上门课。

最后这里是Gayhub源码

喜欢给个Star!指教给个Forks!

转载地址:http://eranl.baihongyu.com/

你可能感兴趣的文章
#SORA#celery原生配置文件研究
查看>>
python 详解re模块
查看>>
程序员之路——一个老程序员对刚上大学的学弟学妹的忠告
查看>>
PHP加密扩展 (php-beast) 1.5版本 常见问题解答
查看>>
CNPM搭建私有的NPM服务
查看>>
any-enter是亮点
查看>>
Web压力测试记录
查看>>
seci-log 1.12 发布 增加了http 旁路抓包审计
查看>>
对于舞蹈的认识与评价
查看>>
Android与服务器端数据交互(基于SOAP协议整合android+webservice)
查看>>
SSH视频教程学习笔记
查看>>
Java代理模式 与 Java 动态代理
查看>>
我是如何开始去了解Python函数式编程--Python函数式编程初涉
查看>>
解决文字和表情存储到msql数据库出现异常问题
查看>>
oracle python
查看>>
Python 17.3 WSGI接口
查看>>
mysql日常小练习-20171012
查看>>
java之CountDownLatch看看笔记
查看>>
Implement_strStr --leetcode
查看>>
我的友情链接
查看>>