美文网首页
3. 【音频编码原理】

3. 【音频编码原理】

作者: 东也_ | 来源:发表于2022-04-21 15:24 被阅读0次

    原理:

    1. 消除冗余信息,压缩量最大,也叫有损压缩
    • 剔除人耳听觉范围外的音频信号20Hz以下和20000Hz以上;

    • 去除被掩蔽的音频信号,信号的遮蔽可以分为频域遮蔽和时域遮蔽;

    • 频域遮蔽效应
      屏蔽70分贝以下,20HZ以下,20000HZ以上
      屏蔽分贝小,频率小的声音
      两个频率相近发出的声音,去除低强度的,也就是分贝高的会盖住分贝低的

    http://img.mukewang.com/szimg/608581a20907a00909500592.jpg
    • 时域遮蔽效应:
      根根时间推移,相近频率且同时出现的声音,声音强度高的遮蔽强度低的声音,并且去除同一时间段前后杂音,前遮蔽50毫秒,后遮蔽200毫秒,在这段时间内的声音,强度越接近就越会被屏蔽。
    http://img.mukewang.com/szimg/6085832d0973e9fd08140552.jpg
    1. 去除冗余信息后,再进行无损压缩;
    • 无损压缩就是压缩后的数据能够解压缩进行还原,有损则不能;
    • 熵编码中有
      哈夫曼编码:用一个很小的二进制数代替一个长的字符串,频率越高,编码越小,频率越低,编码越长
      算术编码:利用小数进行编码,在香农编码的基础改进而来的
      香农编码

    音频编码过程

    数据先同时通过 时域转频域变换器和心理学模型处理数据,前者将数据转换成多种频段的数据,然后剔除不需要的频段数据,后者会去除非人耳听到的范围声音和一些复合声音,最后将两者合并经过量化编码,无损编码之类的,形成比特流数据,在此之前还会有一些辅助数据,此后数据就会变得非常小;

    http://img.mukewang.com/szimg/6085873f096e726d09480542.jpg

    常见的音频编码器

    opus、aac、Ogg、Speex、iLBC、AMR、G.711, 最常用的编码器是opus aac。
    opus常用于直播,尤其是无延迟的直播,webrtc默认使用opus;
    AAC是应用最广泛的编解码;
    Ogg收费;
    Speex支持回音消除;
    G.711一般用于固定电话,声音损耗严重,通话会失真;

    编码质量比较 码率比较

    AAC比较适合有一定延迟的直播,AAC-LD属于低延迟编码器

    • AAC编码器:目前应用最广泛,如iOS、安卓和其他嵌入式设备都包含了AAC硬件编解码器,主要学习这个编码器;
      用来取代mp3,比mp3更高的压缩比和保真性更强;
    AAC历史背景

    常用的规格有AAC LC、AAC HE V1 、AAC HE V2三种;

    AAC规格关系图

    AAC HE V1 = AAC + SBR;
    AAV HE V2 = AAC + SBR + PS;
    目前AAC HE V1 已经被取代 V2 取代了;

    http://img.mukewang.com/szimg/6085ef4f090c686610540554.jpg

    V2的码流跟V1的差别不是很大,根据声音的数据变化,如果两个声道的差别很大,码流差别就会越小;

    AAC 中header有两种格式:

    就相当于在aac数据前面加了个Header,header里面就会包含aac数据的一些信息,方便进行编解码

    1. ADIF(Audio data interchange format): 特点是只能从头开始解码,可以确定的找到音频数据的开始部分,不能从音频数据中间开始,这种格式常用于磁盘文件中;
    2. ADTS(Audio Data Transport Format):在每一帧的数据里面都会有一个同步字,也就是每帧都有一个header,所以他可以在任意的位置开始进行解码,就像流式数据;
    • ADTS结构: 由7-9个字节组成,通常情况下是7个字节,如果有CRC 就是9个字节,字节中的每一位都有独特的含义;
      • 1~12bit:全部是1也就是0xFFF,表示是同步字;

      • 13:编码规范 0 = MPEG-4 1 = MPEG-2;

      • 14~15:总是0;

      • 16:是否有保护 1 代表 没有 CRC 0 代表有CRC;

      • 17~18:表示的是MPEG-4的音频类型:AAC LC、 AAC HE V1 、AAC HE V2

      • 19~22:表示的是采样率

      • 24~26:通道数

      • 31~33:数据长度,也包括了header的长度

    • 剩余的之后补上

      image.png

    其中每一十进制数对应的含义:

    Audio Object Type: 在代码中实际获取类型的时候需要进行+1,才是下面的类型
    1 == AAC main
    2 == AAC LC
    5 == SBR == HE V1
    29 == ps == HE V2

    其中的采样率是通过十进制数表示的一个采样率,有一个表,比如:0 == 96000Hz 1 == 88200HZ 等
    通过网址 可以更详细看到其中的含义

    上一篇:音频采集实战
    下一篇::音频编解码实战

    相关文章

      网友评论

          本文标题:3. 【音频编码原理】

          本文链接:https://www.haomeiwen.com/subject/qsuvertx.html