重磅重构开源 让H5标签代替C++实时解码播放speex压缩协议的音频文件 【IM的福音】

栏目: C++ · 发布时间: 5年前

内容简介:这么牛逼的轮子,肯定要美图镇楼Speex是一套主要针对语音的开源免费,无专利保护的音频压缩格式。

重磅重构开源 让H5标签代替C++实时解码播放speex压缩协议的音频文件 【IM的福音】

这么牛逼的轮子,肯定要美图镇楼

Speex是一套主要针对语音的开源免费,无专利保护的音频压缩格式。

本轮子,适用超大型项目,因为库本身很大,当然本身 IM 项目就没有小项目吧

  • Speex(音标[spi:ks]) 是一套开源免费的、无专利保护的、针对语音设计的音频压缩格式。 Speex 项目通过以提供昂贵的专用语音编解码器的免费替代方案为目标,来降低语音应用程序的进入门槛。此外, Speex 非常适用于互联网应用程序,并提供了其他大多数编解码器中不存在的有用特性。最后, Speex是GNU 项目的一部分,可以在修订后的 BSD 许可证下使用。

编码流程

  • 使用 SpeexAPI 函数对音频数据进行压缩编码要经过如下步骤:
  • 定义一个 SpeexBits 类型变量 bits 和一个 Speex 编码器的内存指针变量 enc
  • 调用 speex_bits_init(&bits) 函数初始化 bits
  • 调用 enc = speex_encoder_init(&speex_nb_mode) 函数初始化 enc 。其中 speex_nb_modeSpeexMode 类型的变量,表示的是窄带模式。还有 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 都无关紧要

  • H5audio 标签可以播放

    • 音频格式及浏览器支持
    • 目前, <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 封装,抽取了必须要的文件后进一步封装,修改了在复杂环境下的兼容

  • 本源码支持环境

    • 原生 javaScriptHTML 环境
    • 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 的福报,马老师


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

科学的极致:漫谈人工智能

科学的极致:漫谈人工智能

集智俱乐部 / 人民邮电出版社 / 2015-7 / 49.00元

集智俱乐部是一个从事学术研究、享受科学乐趣的探索者组成的团体,倡导以平等开放的态度、科学实证的精神进行跨学科的研究与交流,力图搭建一个中国的“没有围墙的研究所”。这些令人崇敬的、充满激情与梦想的集智俱乐部成员将带你了解图灵机模型、冯•诺依曼计算机体系结构、怪圈与哥德尔定理、通用人工智能、深度学习、人类计算与自然语言处理,与你一起展开一场令人热血沸腾的科学之旅。一起来看看 《科学的极致:漫谈人工智能》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具