热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

这么牛逼的轮子,肯定要美图镇楼Speex是一套重要针对语音的开源免费,无专利庇护的音频紧缩花样。本轮子,实用超大型项目,由于库自身很大,固然自身IM项目就没有小项目吧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标签能够播放

    • 音频花样及浏览器支撑
    • 现在, 元素支撑三种音频花样文件: 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中播放的题目

  • 本项目必需运行在服务器环境下 不能是当地翻开index.html文件体式格局运用(由于用到了websocket通信)
  • 能够直接让Speex花样的音频文件在H5页面中经由过程 audio标签播放
  • 能够在庞杂的环境中,如Electron + webpack +dva + React的跨平台中圆满运用
  • 关于频次小于22khz的数据,我们须要复制一份,模仿成22khz,由于H5只支撑大于22khz的数据,然则这类状况我们平常不会碰到
  • 运用标签引入源码
  • 假如你的运用体式格局是直接在页面中
  • 假如你的运用体式格局是动态增加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的福报,马先生


推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 最近在学Python,看了不少资料、视频,对爬虫比较感兴趣,爬过了网页文字、图片、视频。文字就不说了直接从网页上去根据标签分离出来就好了。图片和视频则需要在获取到相应的链接之后取做下载。以下是图片和视 ... [详细]
  • 前端提高篇(七十):SVG基本使用、基本样式、路径path
    SVG是使用XML来描述二维图形和绘图程序的语言。SVG遵循的是xml的规范,与html5的使用有所区别SVG绘制出来的是矢量图,放大之后不会失真官方文 ... [详细]
  • 当程序到后台后,继续完成LongRunning Task 任务
    原文:http:blog.sina.com.cnsblog_7b9d64af0101cjci.html(2013-04-0921:27:24)我们知道, ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • 本文介绍了一道网络流题目hdu4888 Redraw Beautiful Drawings的解题思路。题目要求以行和列作为结点建图,并通过最大流算法判断是否有解以及是否唯一。文章详细介绍了建图和算法的过程,并强调在dfs过程中要进行回溯。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • Scrapy 爬取图片
    1.创建Scrapy项目scrapystartprojectCrawlMeiziTuscrapygenspiderMeiziTuSpiderhttps:movie.douban.c ... [详细]
author-avatar
琦琦蔡外_734
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有