您当前位置: 首页 » 7 月 2015
按日期归档: 7 月 2015

收集的音频中几个常用的术语缩写

PCMu                                       mu-law的PCM(PCM的一种编码方式)
PCMa                                       a-law的PCM(PCM的一种编码方式)
ILBC                                          internet Low Bitrate Codec(一个编码格式,窄带,用于语音编码的,VoIP)
ISAC                                          internet Speech Audio Codec(一个编码格式,宽带,用于语音编码的,VoIP,GIPS方案中的一部分)
G722                                         ITU-T标准中的7k宽带音频编码器(频率带宽有7k,子带自适应脉冲编码)
RED                                          前向冗余编码Redundant Audio Payload(主要是用于前向纠错的在RTP里面,一个RTP包带着两个音频样本,一个是自己的,一个是之前RTP包里面的。冗余的内容可以拿来纠错)
AVT                                          Audio/Video Transport(实时流媒体协议,核心还是RTP等协议)
CNG                                         Comfort Noise Generation(舒适噪音,模拟背景噪音)
VAD                                         Voice Activity Detection(语音活动检测,用于区分声音中,哪些是语音,那些是非语音)
Arbitrarty                                 随机声音(有一定的算法做支持的)
Opus                                        宽动态,免费的编码器。可以传输语音是音乐,有SILK(SKYPE)和CELT(xiph.org)的编码的综合。支持浮点和定点数。有恒定和可变码率
CELT                                        Constrained Energy Lapped Transform(频带范围宽,可以工作的频带是8k 到 48k,好像是基于频域特性能量移植来实现编码。可以支持语音和音乐,立体声支持。只有恒定码率,且只支持定点数。但延时比较高。)
2015-07-26 | | 音视频_图像相关, 音视频编解码

收集的音频中几个常用的术语缩写已关闭评论

一转眼3年过去了,变化还真不小

就在上周的某一天,我突发奇想,想重新对我自己的性格做一次测试。原因还主要是由于最近工作上的一些情绪、心态、工作性质发生变化,本来想的也很简单;要么跳巢算球了。

不过事后想了一下,觉得不值才作罢。也是出于好奇和积极的心态准备纠正一些问题,所以才想到了3年前做的那个性格测试。

这套性格测试是某网上上付费做的,整个测试题算是买增值业务赠送的。

做完测试以后大跌眼镜,除非少数指标发生微弱变化,最大的变化还在于心态上。比3年前沉稳了许多,而且越来越追求“稳定”!不愿意冒险,也不太容易出现激进。

回顾一下这3年的经历,感觉也没有什么。但心态确实发生了很大的变化,甚至连一些行为和做法也在一点一点的变化中。

可能不是我没有感觉,而是经历的有点多,反而觉得很自然了。

现在我考虑问题很容易被人说:“多想”。但最终做事时,或者做事结果,往往我或多或少会多一点那么灵活性或优势。以前常常在反思,要不要活的这么累,而且也常常有人说我活的累。但反观这3年,我发现了一个共同的特点!常常说我活的累的人,有一部分现在过的未必比我好多少。他们用思维上惰性来换取生活上的累!说来说去,目前为止我还是划得来,不仅让生活能更好一点,还锻炼了脑力。

简单说,总体上看生活还是较为公平的。

2015-07-26 | | [窥视自我], *生活*, 思考

一转眼3年过去了,变化还真不小已关闭评论

防御性编程是种好习惯,但控制不好也是个问题

最近在看一些同时的代码,发现有些代码确实烂的可以。不仅代码风格很差,就连最基本的逻辑也是不严谨的。接着就是在解析一段数据时,没有对数据中对应的字段进行有效值范围约束。如:

 

struct A
{
   int   msg_id;
   char  msg_body[100];
   short msg_param;
}

在实际中:
1,msg_id是有范围的,因为并不是所有的msg_id都被实现了。
2,msg_body里面的内容有可能是具有一定特征的,对于部分msg_id是可能不存在部分种类的msg_id
3.msg_param也有可能是有范围的。

当在一些习惯不好的程序员手里写这段数据的解析往往是


void parse(const char* buff)
{
   struct A a;
   memcpy(a.msg_id, buff, 4);
   memcpy(a.msg_body, buff+1, 100);
   memcpy(a.msg_param, buff+101, 2);

   .......... //do something
}

由于这里没有判断几个关键字段的有效值范围,很可能在dosomething的这个代码块部分会出现执行错误的问题。

2015-07-13 | | 编码技巧

防御性编程是种好习惯,但控制不好也是个问题已关闭评论

x86-p6构架支持的“断点”方式

了解了一下调试相关的内容,x86下的p6平台,大约支持的几种基本断点方式:

1,断点指令

2,向特定地址写数据

3,向特定地址读数据

4,操作特定IO地址(读写)

对于断点指令:int 3(0xcc),当cpu执行到该指令时,会检查中断向量表,转为去执行中断服务“函数”

对于想特定指令写数据,同样也会检查中断向量表(实际上很可能不是中断向量表,因为引发的是一个寄存器检查,检查异常处理函数的地址),执行对应的代码块。

对于3,4与2的方式一样。

在VS里面,对于监控某个变量是否被修改成某个固定的值,很有可能是采用了上述的2或3这两个机制。当然,我这边的vs的反汇编代码其实只是指令上的判断而已,当修改成了我指定的条件时,最终会引发DebugBreak这个函数(这个函数最终还是执行int 3(0xcc))

在VS里面还有没有发现那一种中断方式是对应着4的。

2015-07-12 | | win, 编码技巧

x86-p6构架支持的“断点”方式已关闭评论