speex

使用libspeex实现原始音频文件的编码和解码技术

送分小仙女□ 提交于 2021-01-05 10:23:54
这几天在单位研究使用libspeex对原始音频文件(PCM文件)进行编解码。在linux下原始音频文件可以通过arecord命令进行采集,使用的采样率是8kHz,量化位数为有符号16位整数(小端存储),单通道模式。在linux下播放原始音频文件可以通过使用aplay命令进行播放,在播放的时候需要给出量化位数参数,因为aplay默认使用8位无符号数进行量化取样。 下面分别是编码和解码的源代码,注意linux编译环境需要有speex(speex运行库包)和speex_devel(speex开发包)。 声音录制和编码源代码: /* * ===================================================================================== * * Filename: record_spx.c * * Description: * * Version: 1.0 * Created: 12/01/2011 12:49:48 PM * Revision: none * Compiler: gcc * * Author: YOUR NAME (), * Company: * * =============================================================================

直播技术中音视频的处理

南楼画角 提交于 2020-08-13 02:14:17
今天我们来讲一下音视频直播都用到了哪些技术。图玩智能科技作为直播领域专业服务商,为企业提供直播平台的二次开发服务,搭建更完善更稳定的直播系统,欢迎随时咨询 www.toivan.com 。说到音视频直播技术,我们最先想到的是音频技术和视频技术。 其实音频技术和视频技术它们的大体处理流程都是差不多的。一般都分为五大步: 数据采集,编码,传输,解码和渲染。 音视频处理 数据采集。对于音频来说采集到的数据是 PCM 格式,对于视频数据采集的格式是 YUV 格式。 数据压缩编码。数据采集完成之后,需要对数据进行压缩编码。音视频使用的压缩技术称为有损压缩技术。而像我们平 RAR , ZIP 工具进行的压缩都是无损压缩。就是说解压后的数据与原始数据一样叫做无损压缩,解压后和原始数据高度接近称为有损压缩,音视频编码属于后者。对于音频来讲,常用的编码格式有 speex, AAC, OPUS, G.711 等。现在比较常用的是 AAC ,一是它音质比较好,二是 RTMP 对 AAC 支持的比较好。对于视频编码格式有 H.264, H.265, VP8, VP9 等,目常基本上都是使用 H.264 。注意,衡量有损压缩好坏的指标就是看同等压缩率的情况下,解压后的数据与原始数据之间差别的大小,差别越小证明压缩的算法越优。当然在实时互动直播中

各种音视频编解码学习详解

与世无争的帅哥 提交于 2020-08-12 06:57:46
编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间。尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析、应用开发、释放license收费等等。最近因为项目的关系,需要理清媒体的codec,比较搞的是,在豆丁网上看运营商的规范 标准,同一运营商同样的业务在不同文档中不同的要求,而且有些要求就我看来应当是历史的延续,也就是现在已经很少采用了。所以豆丁上看不出所以然,从 wiki上查。中文的wiki信息量有限,很短,而wiki的英文内容内多,删减版也减肥得太过。我在网上还看到一个山寨的中文wiki,长得很像,红色的,叫“天下维客”。wiki的中文还是很不错的,但是阅读后建议再阅读英文。   我对媒体codec做了一些整理和总结,资料来源于wiki,小部分来源于网络博客的收集。网友资料我们将给出来源。如果资料已经转手几趟就没办法,雁过留声,我们只能给出某个轨迹。 基本概念 编解码   编解码器(codec)指的是一个能够对一个信号或者一个数据流进行变换的设备或者程序。这里指的变换既包括将 信号或者数据流进行编码(通常是为了传输、存储或者加密)或者提取得到一个编码流的操作,也包括为了观察或者处理从这个编码流中恢复适合观察或操作的形式的操作。编解码器经常用在视频会议和流媒体等应用中。 容器  

打造自己的视频会议系统 GGMeeting(附送源码)

*爱你&永不变心* 提交于 2020-08-09 21:14:39
https://www.cnblogs.com/justnow/p/4487201.html#!comments (2020.05.11 好消息!GGMeeting视频会议系统增加放出了最新的安卓版源码,需要的朋友可以下载试试了) 自从在博客园发布 开源即时通信系统GG(QQ高仿版) 以来,结识了很多做IM的朋友,然后我和我的伙伴们也接到了很多与IM相关的项目。相比在发布GG之前难以接到项目的状况相比,现在简直太幸福了,虽然做项目很辛苦,但毕竟有钱赚,那辛苦也值了。  饮水思源,这里要感谢 博客园 提供了这么好的一个平台,让我们能展现自己的实力,提升我们的知名度,然后才能接到了更多项目。所以,我强烈建议那些希望接项目、接私单的朋友,都来博客园写博客吧,写出自己的知名度后,真是好处多多! 言归正传,前段时间做了个在线教育培训的项目,与视频会议比较类似,所以了,我打算像GGTalk开源即时通讯系统一样,搞一个开源视频会议系统并把实现的原理和源码都分享出来,让有兴趣的朋友可以参考下。继承GG的名称,我把这个开源视频会议系统命名为GGMeeting,目前版本为1.0,后续功能会不断增强。   一般而言,视频会议的主要核心功能是:多人语音聊天、多人视频聊天、公共电子白板、会议房间管理。本文我们将介绍视频会议系统的主要功能及其实现原理,后面有空在介绍详细每个功能的详细实现细节。

声学回声消除(Acoustic Echo Cancellation)原理与实现

守給你的承諾、 提交于 2020-07-29 06:18:18
文章作者: 凌逆战 文章地址: https://www.cnblogs.com/LXP-Never/p/11703440.html   回声就是声音信号经过一系列反射之后,又听到了自己讲话的声音,这就是回声。一些回声是必要的,比如剧院里的音乐回声以及延迟时间较短的房间回声;而大多数回声会造成负面影响,比如在有线或者无线通信时重复听到自己讲话的声音(回想那些年我们开黑打游戏时,如果其中有个人开了外放,他的声音就会回荡来回荡去)。因此消除回声的负面影响对通信系统是十分必要的。   针对回声消除(Acoustic Echo Cancellation,AEC )问题,现如今最流行的算法就是基于自适应滤波的回声消除算法。本文从回声信号的两种分类以及 AEC 的基本原理出发,介绍几种经典的 AEC 算法并对其性能进行阐释。 回声分类   在通信系统中,回声主要分为两类: 电路回声 和 声学回声 电路回声   电路回声通常产生于有线通话中,为了降低电话中心局与电话用户之间电话线的价格, 用户间线的连接采用两线制 ;而 电话中心局之间连接采用四线制 (上面两条线路用于发送给用户端信号,下面两条线路用于接收用户端信号) 。问题就出来了,造成电路回声的根本原因是 转换混合器的二线-四线阻抗不能完全匹配 (使用的不同型号的电线或者负载线圈没有被使用的原因) ,导致混合器 接收线路 上的语音信号流失到了

声学回声消除(Acoustic Echo Cancellation)原理与实现

只谈情不闲聊 提交于 2020-07-24 01:23:36
文章作者: 凌逆战 文章地址: https://www.cnblogs.com/LXP-Never/p/11703440.html   回声就是声音信号经过一系列反射之后,又听到了自己讲话的声音,这就是回声。一些回声是必要的,比如剧院里的音乐回声以及延迟时间较短的房间回声;而大多数回声会造成负面影响,比如在有线或者无线通信时重复听到自己讲话的声音(回想那些年我们开黑打游戏时,如果其中有个人开了外放,他的声音就会回荡来回荡去)。因此消除回声的负面影响对通信系统是十分必要的。   针对回声消除(Acoustic Echo Cancellation,AEC )问题,现如今最流行的算法就是基于自适应滤波的回声消除算法。本文从回声信号的两种分类以及 AEC 的基本原理出发,介绍几种经典的 AEC 算法并对其性能进行阐释。 回声分类   在通信系统中,回声主要分为两类: 电路回声 和 声学回声 电路回声   电路回声通常产生于有线通话中,为了降低电话中心局与电话用户之间电话线的价格, 用户间线的连接采用两线制 ;而 电话中心局之间连接采用四线制 (上面两条线路用于发送给用户端信号,下面两条线路用于接收用户端信号) 。问题就出来了,造成电路回声的根本原因是 转换混合器的二线-四线阻抗不能完全匹配 (使用的不同型号的电线或者负载线圈没有被使用的原因) ,导致混合器 接收线路 上的语音信号流失到了

Speex的安装使用

感情迁移 提交于 2020-03-01 12:01:41
从链接中 https://www.speex.org/downloads/ 下载Speex 1.2.0、SpeexDSP 1.2rc3。 编译和安装 下载以后解压,然后点击INSTALL,根据其中的命令进行安装,具体的安装方式也可以看解压后 doc目录中manual.pdf 的第3章。 % ./configure [--prefix=<install-path>] %make %make install 其设置支持是通过Speex配置脚本的,这些命令选项跟在 ./configure设置 : -prefix=<path> 指定Speex安装其本路径(如 /usr) -enable-shared/-disable-shared 是否编译共享库 -enable-static/-disable-static 是否编译静态库 -disable-wideband 取消Speex的宽带部分(典型的节省空间) -enable-valgrind 为调试目的启用额外valgrind的命中率 -enable-sse 启用SSE指令(只在 x86/浮点) -enable-fixed-point 编译Speex为无浮点单位(FPU)处理器 -enable-arm4-asm 启用汇编指定为ARMv4架构(只在gcc ) -enable-arm5e-asm 启用汇编指定为ARMv5E架构 ( 只在gcc )

Speex回声消除原理深度解析

て烟熏妆下的殇ゞ 提交于 2020-02-02 00:09:47
  这里假设读者具有自适应滤波器的基础知识。Speex的AEC是以NLMS为基础,用MDF频域实现,最终推导出最优步长估计: 残余回声与误差之比。最优步长等于残余回声方差与误差信号方差之比 ,这个结论可以记下,下面会用到的。   对于长度为N的NLMS滤波器,误差信号定义为期望信号与估计信号之差,表示如下: \[e(n) = d(n) - \hat y(n) = d(n) - \sum\limits_{k = 0}^{N - 1} {{{\hat w}_k}(n)x(n - k)} \]   则,滤波器的系数更新方程为: \[{\hat w_k}(n + 1) = {\hat w_k}(n) + \mu \frac{{e(n){x^*}(n - k)}}{{\sum\nolimits_{i = 0}^{N - 1} {|x(n - i){|^2}} }} = {\hat w_k}(n) + \mu \frac{{(d(n) - \sum\nolimits_i {{{\hat w}_i}(n)x(n - i)} ){x^*}(n - k)}}{{\sum\nolimits_{i = 0}^{N - 1} {|x(n - i){|^2}} }}\]   设滤波器的系数误差为: \[{\delta _k}(n) = {\hat w_k}(n) - {w_k}(n)\]  

speex decoding going wrong

送分小仙女□ 提交于 2020-01-13 05:54:50
问题 I'm using speex to encode some audio data and send it over UDP, and decode it on the other side. I ran a few tests with speex, and noticed that if I decode a packet straight after I encoded it, the decoded data is in no way close to the original data. Most of the bytes at the start of the buffer are 0. So when I decode the audio sent over UDP, all I get is noise. This is how I am encoding the audio: bool AudioEncoder::encode( float *raw, char *encoded_bits ) { for ( size_t i = 0; i < 256; i++

Adobe flash : Playing Speex Audio from a file

泪湿孤枕 提交于 2019-12-22 14:08:31
问题 I have tried really hard to find an example showing how to play speex encoded audio in flash. I tried the following code - var connect_nc:NetConnection = new NetConnection(); connect_nc.connect(null); var stream_ns:NetStream = new NetStream(connect_nc); stream_ns.play("RE-Sample.m4a"); avaible at - http://www.adobe.com/devnet/flashplayer/articles/hd_video_flash_player _03.html I tested the above code with .flv videos and AAC encoded audio files and it works just fine. But when I try stream_ns