内容简介:这么牛逼的轮子,肯定要美图镇楼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标签可以播放- 音频格式及浏览器支持
- 目前,
<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中播放的问题
Electron + webpack +dva + React
欢迎 github 提交 issue ,这个轮子是经过整合别人代码后优化,后期会继续优化。 github仓库地址
npm i speex-in-h5 也可以下载,但是本项目不支持任何模块化方案,请手动引入 index 文件,仓库中有 Demo !
路过点赞, 6天6次要9 --------- 996 的福报,马老师
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Flink重磅 | Flink重构核心线程模型
- GoProxy-Web 全面重构,重磅发布:支持全局代理,自启动
- 重磅!谷歌发布 Flutter 2
- Linkis 0.9.1 重磅发布
- 美颜重磅技术之 GPUImage 源码分析
- 360 重磅开源性能监控平台 ArgusAPM
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
嵌入式系统软件设计中的常用算法
周航慈 / 2010-1 / 24.00元
《嵌入式系统软件设计中的常用算法》根据嵌入式系统软件设计需要的常用算法知识编写而成。基本内容有:线性方程组求解、代数插值和曲线拟合、数值积分、能谱处理、数字滤波、数理统计、自动控制、数据排序、数据压缩和检错纠错等常用算法。从嵌入式系统的实际应用出发,用通俗易懂的语言代替枯燥难懂的数学推导,使读者能在比较轻松的条件下学到最基本的常用算法,并为继续学习其他算法打下基础。 《嵌入式系统软件设计中的......一起来看看 《嵌入式系统软件设计中的常用算法》 这本书的介绍吧!