NetEQ主要文件简介
accelerate.h,accelerate.cc加速操作,对语音信号处理以实现快速播放。
Accelerate类继承自父类TimeStretch,大多数功能由TimeStretch实现。ReturnCodes Process(const int16_t* input,
size_t input_length,
bool fast_accelerate,
AudioMultiVector* output,
size_t* length_change_samples);
从|input|中读入长度为|input_length|的样本点;输出到算法缓冲区|output|中;改动的样本点数为|length_change_samples|;当fast_accelerate设置为True时,将删除更多的样本点,这有可能会导致删除多个音高周期。函数返回枚举值
RetureCodes,表明操作的状态。附:
ReturnCodes定义:enum ReturnCodes {
kSuccess = 0,
kSuccessLowEnergy = 1,
kNoStretch = 2,
kError = -1
};
audio_multi_vector.h,audio_multi_vector.cc算法缓冲区
AudioMultiVector的实现:std::vector<AudioVector*> channels_; // AudioMultiVector
方法:
// 创建一个有N个声道且空的AudioMultiVector,声道数N必须大于0
explicit AudioMultiVector(size_t N); // 需要附加的数据append_this,附加数据长度length
// 在每个声道后增加append_this数据,length必须可以整除声道数N,操作完成后每个声道增加length/N个样本点
virtual void PushBackInterleaved(const int16_t* append_this, size_t length); // 在每个声道后附加append_this数据,操作完成后每个声道增加length个样本点
virtual void PushBack(const AudioMultiVector& append_this); // 取append_this的index到最后,附加到AudioMultiVector
// 注意:append_this和this的声道数一致
virtual void PushBackFromIndex(const AudioMultiVector& append_this,
size_t index); // 从每个声道删除最前面的length个样本点
virtual void PopFront(size_t length); // 从每个声道删除最后面的length个样本点
virtual void PopBack(size_t length);
...
类似于标准库中的
Vector顺序容器。audio_vector.h,audio_vector.ccAudioVector保存上述AudioMultiVector的每一个通道的数据。background_noise.h,background_noise.cc产生背景噪声。经VAD之后,如果没有语音,则产生背景噪声。
buffer_level_filter.h,buffer_level_filter.cc计算抖动缓冲延迟
bufferBufferFilt?comfort_noise.h,comfort_noise.ccCNG(舒适背景噪声)生成接口类。
cross_correlation.h,cross_correlation.cc计算两个序列的互相关系数。互相关系数有很多,到底是计算哪个互相关系数?
decision_logic_fax.h,decision_logic_fax.cc播放模式
kPlayoutFax和kPlayoutOff的决策逻辑。播放模式
kPlayoutFax和kPlayoutOff具体是什么?decision_logic_normal.h,decison_logic_normal.cc播放模式
kPlayoutOn和kPlayoutStreaming的决策逻辑。decision_logic.h,decision_logic.cc包含决策逻辑的基类
DecisionLogic,所有子类必须实现:virtual Operations GetDecisionSpecialized(const SyncBuffer& sync_buffer,
const Expand& expand,
size_t decoder_frame_length,
const Packet* next_packet,
Modes prev_mode,
bool play_dtmf,
bool* reset_decoder,
size_t generated_noise_samples) = 0;
返回接下来的操作。
decoder_database.h,decoder_database.ccdecoders_:typedef std::map<uint8_t, DecoderInfo> DecoderMap;
DecoderMap decoders_; // 键值对decoders_用来存储decoder的信息
DecoderInfo是定义在decoder_database.h中结构体,用于保存音频格式,解码器名称等信息。delay_manager.h,delay_manager.ccdelay_peak_detector.h,delay_peak_detector.cc统计IAT的峰值,这在计算网络延时时需要用到。
dsp_helper.h,dsp_helper.ccDSP辅助类,包含各种信号处理函数。dtmf_buffer.h,dtmf_buffer.ccDTMF(RFC 4733)辅助类,包括提供保存DTMF事件缓冲区。
DTMF:双音多频信号DTMF,电话系统中电话机和交换机之间的一种用户信令。
dtmf_tone_generator.h,dtmf_tone_generator.ccDTMF信号生成器。
expand.h,expand.cc抖动隐藏的一种操作:
EXPAND,丢包补偿(PLC)merge.h,merge.cc抖动隐藏的一种操作:
MERGE,融合nack_tracker.h,nack_tracker.cc包含
NackTracker类,追踪丢失的数据包,并且估计给定数据包播放时间的估计值。neteq_decoder_enum.h,neteq_decoder_enum.ccNetEQ解码器的枚举值
neteq_impl.h,neteq_impl.ccNetEQ接口,包含最外层主要实现函数,比如输入RTP包和输出音频。
neteq.ccNetEQ主函数入口,实例化
NetEqImpl对象。normal.h,normal.ccDSP的正常播放操作。适用于没有任何数据包丢失,不需要伸缩音频信号,也不需要特殊操作的情况。
packet_buffer.h,packet_buffer.cc存储从网络中获得的RTP数据包,这些数据包还没有通过解码器解码。
typedef std::list<Packet> PacketList;
packet.h,packet.cc
作为PacketBuffer的一个元素。post_decode_vad.h,post_decode_vad.cc解码后,进行VAD?
preemptive_expand.h,preemptive_expand.cc减速播放操作。大多数操作由父类
TimeStretch实现。ReturnCodes Process(const int16_t *pw16_decoded,
size_t len,
size_t old_data_len,
AudioMultiVector* output,
size_t* length_change_samples);
由
pw16_decoded读入,样本数len,通过time-stretching增加的样本数为length_change_samples。random.vector.h,random_vector.cc生成随机样本。
void Generate(size_t length, int16_t* output);
生成length个样本,输出到output中去。
red_playload_splitter.h,red_playload_splitter.cc将
RED负载分割成小块。rtcp.h,rtcp.cc处理RTCP的统计信息。
statistics_caculator.h,statistics_caculator.ccNetEQ中的各种网络统计信息,包括通过
EXPAND产生的样本数,丢弃的数据包等。sync_buffer.h,sync_buffer.cc提供语音缓冲区实现类
SyncBuffertick_timer.h,tick_timer.cc时间计数器。提供包括秒表,倒计时等功能。
time_stretch.h,time_stretch.cc加速
Accelerate和减速PreemptiveExpand操作的基类,并实现大部分功能。timestamp_scaler.h,timestamp_scaler.cc提供类
TimestampScaler,用于内部时间戳和外部时间戳的转换。内部时间戳使用采样率作为单位,而外部时间戳(RTP自身携带的时间戳)使用固有的时钟频率。
NetEQ主要文件简介的更多相关文章
- Django框架-目录文件简介
Rhel6.5 Django1.10 Python3.5 Django框架-目录文件简介 1.介绍Django Django:一个可以使Web开发工作愉快并且高效的Web开发框架. 使用Django, ...
- Android资源文件简介
Android资源文件简介 1. Android应用资源的作用 (1) Android项目中文件分类 在Android工程中, 文件主要分为下面几类 : 界面布局文件, Java src源文件, 资源 ...
- properties文件简介及其常用Java操作
一.properties文件简介 java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值&q ...
- [安卓]AndroidManifest.xml文件简介及结构
1.AndroidManifest.xml文件简介: 每个应用程序在它的根目录中都必须要有一个AndroidManifest.xml(名字须精确一致)文件.这个清单把应用程序的基本信息提交给Andro ...
- (转)IOS之Info.plist文件简介
原文:IOS之Info.plist文件简介 http://www.apkbus.com/android-130240-1-1.html (出处: Android开发论坛 - 安卓开发论坛 - Andr ...
- Git .gitignore文件简介及使用
Git .gitignore文件简介及使用 By:授客 QQ:1033553122 .gitignore 这个文件的作用就是告诉Git哪些文件不需要添加到版本管理中.实际项目中,很多文件都是不需要版本 ...
- mysql数据库文件简介和应用
存放目录: 用 whereis my.cnf 查看mysql配置文件的目录,查看my.cnf的datadir参数可找到mysql数据库文件的存放目录. 本机存放的目录为/var/lib/mysql,进 ...
- PYC文件简介
PYC文件简介¶ 不说废话,这里说的pyc文件就是 Python 程序编译后得到的字节码文件 (py->pyc). 基本格式¶ pyc文件一般由3个部分组成: 最开始4个字节是一个Maigc i ...
- YAML文件简介
编程免不了要写配置文件,怎么写配置也是一门学问. YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便. 本文介绍 YAML 的语法,以 JS-YAML 的实现为例.你可以去 ...
随机推荐
- 生成随机验证码,上传图片文件,解析HTML
1.生成随机图片验证码 1.1 页面调用createvalidatecode 生成随机图片验证码方法: <div class="inputLine"><label ...
- [记录]UserControl 的一个值得注意的问题 [属性" * "的代码生成失败.错误是:"程序集"*.Version=1.0.0.0,Culture=neutral,..........无标记为序列化"
开发时在做UserControl,需要注意的List<>集合问题~~~! 其他类型的集合可能也存在这样的问题,但是我没去测试,在写集合的时候一般List<>用的多点,所以经常碰 ...
- StringTable
首先看这样一个面试题 // StringTable [ "a", "b" ,"ab" ] hashtable 结构,不能扩容 public ...
- Linux常用基础(三)
1.gcc编译器 (1)简介 前期的GCC是GNU C Compiler,仅仅用于C语言的编译,经过多年的发展,现在的GCC为GNU Compiler Collection,并且目前支持多种编程语言的 ...
- NVDLA软件架构和源码解析 第一章—内核驱动【华为云技术分享】
驱动整体设计介绍 不同的processor Nvidia DLA的内核驱动KMD(Kernel mode driver)中,并不是把DLA当成一个设备来控制,而是把不同的功能模块当做不同的proces ...
- TestNG系列(三)TestNG之XML文件配置
前言 上一篇博客说了TestNG的注解,这篇博客来介绍Test.xml文件. Test.xml文件可以更方便的管理和执行测试用例 一.Test.xml-suite: suite为Test.xml的根节 ...
- Prometheus监控学习笔记之容器监控Grafana模块
0x00 概述 Grafana 是一个开源的,可以用于大规模指标数据的可视化项目,甚至还能对指标进行报警.基于友好的 Apache License 2.0 开源协议,目前是prometheus监控展示 ...
- 1-python运算符和逻辑控制语句
目录 运算符 条件语句if…else 断言assert 循环语句while 遍历for循环 1.运算符 1.1.算数运算符 加+.减-.乘*.除/.余%.次方**.向下取整除// 1.2.赋值运算符 ...
- 文件的读取(txt文件)
一.将读取文件夹内容,变为字典保存,代码如下: def read_class_names(class_file_name): '''loads class name from a file''' na ...
- Map接口---Day20
Map接口概述: 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等, 这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系 ...