作者:琦琦蔡外_734 | 来源:互联网 | 2023-06-03 12:15
这么牛逼的轮子,肯定要美图镇楼Speex是一套重要针对语音的开源免费,无专利庇护的音频紧缩花样。本轮子,实用超大型项目,由于库自身很大,固然自身IM项目就没有小项目吧Speex(音
这么牛逼的轮子,肯定要美图镇楼
Speex是一套重要针对语音的开源免费,无专利庇护的音频紧缩花样。
本轮子,实用超大型项目,由于库自身很大,固然自身 IM
项目就没有小项目吧
Speex(音标[spi:ks])
是一套开源免费的、无专利庇护的、针对语音设想的音频紧缩花样。Speex
项目经由过程以供应高贵的专用语音编解码器的免费替换计划为目的,来下降语音应用程序的进入门坎。另外,Speex
异常实用于互联网应用程序,并供应了其他大多数编解码器中不存在的有效特征。末了,Speex是GNU
项目的一部分,能够在订正后的BSD
许可证下运用。 编码流程 运用Speex
的API
函数对音频数据举行紧缩编码要经由以下步骤: 定义一个SpeexBits
范例变量bits
和一个Speex
编码器的内存指针变量enc
。 挪用speex_bits_init(&bits)
函数初始化bits
。 挪用enc = speex_encoder_init(&speex_nb_mode)
函数初始化enc
。个中speex_nb_mode
是SpeexMode
范例的变量,示意的是窄带形式。另有speex_wb_mode
示意宽带形式、speex_uwb_mode
示意超宽带形式。 挪用函数 int speex_encoder_ctl(void * state, int request, void * ptr)
来设定编码器的参数,个中参数state示意编码器的内存指针;参数request示意要定义的参数范例,如SPEEX_GET_FRAME_SIZE
示意设置帧大小,SPEEX_SET_QUALITY
示意编码的质量品级;参数ptr示意要设定的值。 初始化终了后,对每一帧声响作以下处置惩罚:挪用函数speex_bits_reset(&bits)
重置bits
,然后挪用函数speex_encode(enc_state,input_frame, &bits)
举行编码,参数bits中保留编码后的Speex
花样数据帧。 编码完毕后,挪用函数speex_bits_destroy(&bits),speex_encoder_destroy(enc_state)
来烧毁SpeexBits
和编码器。
解码流程 对已编码过的Speex
花样音频数据帧举行解码要经由以下步骤: 定义一个SpeexBits
范例变量bits
和一个Speex
解码器的内存指针变量dec
。 挪用speex_bits_init(&bits)
函数初始化bits
。 挪用dec = speex_decoder_init(&speex_nb_mode)
函数初始化dec
。 挪用函数speex_decoder_ctl(void * state, int request, void * ptr)
来设定解码器的参数。 挪用函数 speex_decode(void * state, SpeexBits * bits, float * out)
对参数bits中的Speex
花样音频数据帧举行解码,参数out中寄存解码后的音频数据帧。 挪用函数speex_bits_destroy(&bits), speex_decoder_destroy(void * state)
来烧毁SpeexBits
和解码器 说重点
当作立即通信产物,像微信这类的手机端,它们接受到很有能够就是speex
协定紧缩后的音频文件。固然,文件后缀是wav
或许ogg
都可有可无 H5
的audio
标签能够播放
音频花样及浏览器支撑 现在,
元素支撑三种音频花样文件: MP3, Wav, 和 Ogg:
浏览器 MP3 Wav Ogg
Internet Explorer 9+ YES NO NO
Chrome 6+ YES YES YES
Firefox 3.6+ NO YES YES
Safari 5+ YES YES NO
Opera 10+ NO YES YES
音频花样的MIME
范例 Format MIME-type
MP3 audio/mpeg
Ogg audio/ogg
Wav audio/wav
本开源库基于speex
封装,抽取了必须要的文件落后一步封装,修正了在庞杂环境下的兼容 本源码支撑环境
原生Javascript
的HTML
环境 MVVM
框架 Electron React dva webpack
的跨平台庞杂环境 迥殊正告:本源码不支撑 AMD CMD commonJS ES6
以及任何模块化计划,只能经由过程script标签引入后挪用函数运用
重要处理了立即通信中的speex音频花样文件直接在H5中播放的题目 本项目必需运行在服务器环境下 不能是当地翻开index.html文件体式格局运用(由于用到了websocket通信) 能够直接让Speex花样的音频文件在H5页面中经由过程 audio标签播放 能够在庞杂的环境中,如Electron + webpack +dva + React
的跨平台中圆满运用 关于频次小于22khz的数据,我们须要复制一份,模仿成22khz,由于H5只支撑大于22khz的数据,然则这类状况我们平常不会碰到 运用标签引入源码 假如你的运用体式格局是直接在页面中 ,那末请你在引入源码后,立即在全局JS代码顶部挪用函数 initAudio() 假如你的运用体式格局是动态增加audio标签,或许动态修正audio标签的src属性,那末请你每次修正src属性后挪用函数initAudio(),否则是不能够播放speex花样的音频文件的 speex花样音频文件,后缀多是ogg的,然则任然能够播放(speex只是一个开源免费紧缩协定) 本项目不支撑任何模块化 制止在框架中经由过程 import或许require导入 ,由于源码中触及8进制的代码,严厉形式下是不能够运用八进制的 MVVM框架和原生的JS运用方法都是经由过程script引入,全局挪用initAudio函数 迎接 github
提交 issue
,这个轮子是经由整合他人代码后优化,后期会继承优化。 github堆栈地点
npm i speex-in-h5
也能够下载,然则本项目不支撑任何模块化计划,请手动引入 index
文件,堆栈中有 Demo
!
途经点赞, 6天6次要9
——— 996
的福报,马先生