音频编解码相关知识

举报
全村の希望 发表于 2020/08/18 09:11:25 2020/08/18
【摘要】 1、PCM(Pulse Code Modulation,脉冲编码调制)简介 PCM音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码转换成的标准数字音频数据。 ① PCM数据的参数:参数名参数描述Sample Rate采样频率,每秒样本数。8kHz(电话)、44.1kHz(CD)、48kHz(DVD)。Sample Size样本单位数据大小,常见的有8-bi...

1、PCM(Pulse Code Modulation,脉冲编码调制)简介

    PCM音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码转换成的标准数字音频数据。

    ① PCM数据的参数:

参数名

参数描述

Sample Rate 采样频率,每秒样本数。8kHz(电话)、44.1kHz(CD)、48kHz(DVD)。
Sample Size 样本单位数据大小,常见的有8-bit和16-bit(1byte=8bit)。
Number of Channels 通道个数。常见的音频有立体声(stereo)和单声道(mono)两种类型,立体声包含左声道和右声道。另外还有环绕立体声等类型。
Sign 表示样本数据是否是有符号位,比如用一字节表示的样本数据,有符号的话表示范围为-128 ~ 127,无符号是0 ~ 255。

    用下图表示1秒内单通道对原始信号的采样:

    image.png   

     Original Signal :原始信号

     PAM Signal:样本信号,34个蓝色垂直线段,表示在这一秒内采样34次,此时采样率为34Hz

     假设样本数据大小使用有符号8-bit数据标准,数据范围为-128~127,那么信号峰值和谷值则为127和-128,每个蓝色垂直线段都有相应的大小取值,每个样本占用1字节的空间。

    ② 数据存储示例:

     image.png

    WAV编码的一种实现(有多种实现方式,但是都不会进行压缩操作)就是在PCM数据格式的前面加上44字节,分别用来描述PCM的采样率、声道数、数据格式等信息。

    原始的PCM数据占用较大的存储空间,以44.1kHz采样率、16bit双通道数据为例,每秒数据占用的存储空间为44100*16*2/8=176400字节,如果是3分钟的音乐,将占用大概30MB(176400*180/1024/1024)的存储空间。存储成本较高,同时在相同的网络带宽下,传输较耗时。因此,原始的PCM数据需要压缩,降低数据量,便于存储和网络传输。

2、MP3编码

    MP3的全称是MPEG Audio Layer3,是一种高效的计算机音频编码方案,它以较大的压缩比将音频文件转换成较小的扩展名为.MP3的文件,基本保持原文件的音质。MP3采用了感知音频编码(PerceptualAudioCoding)算法,人耳感受声音的频率范围是20Hz-220kHz,MP3截掉了大量的冗余信号和无关的信号,是一种有损压缩,压缩率可达1:10至1:12,10M的PCM数据可压缩至1M。

    MP3 文件大体分为三部分(按内存地址递增的顺序):TAG_V2(ID3V2),Frame, TAG_V1(ID3V1) 

ID3V2 包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量
Frame

一系列的帧,个数有文件大小和帧长决定

每个FRAM的长度可能不固定,也可能固定,由位率bitrate决定

每个FRAME由分为帧头和数据实体两部分

帧头记录了mp3的位率,采样率,版本等信息,每个帧之间相互独立

ID3V1 包含了作者,作曲,专辑等信息,长度为128字节

    帧数据格式:

帧头 长度是4Byte(32bit),帧头后面可能有两个字节的CRC 校验值,这两个字节的校验值是否存在决定于Header信息的第16bit,为0则帧头后面无校验,为1则有校验,校验值长度为2个字节
音频数据 经过编码后的数据

    ① 帧头数据,序号从右向左从0开始递增,在处理时,可以按位的个数从流的开头读取数据并解析

        31                                                                 0 

        AAAA AAAA AAAB BCCD EEEE FFGH IIJJ KLMM

标识

位数

描述

AAAA AAAA AAA (31,21) 帧同步,值全为1
BB (20,19) 00 - MPEG 2.5,01 - 保留, 10 - MPEG 2
CC (18,17) 00 - 保留,01 - Layer 3,02 - Layer 2,11 - Layer 1
D 16 CRC 校验值,为0则帧头后面无校验,为1则有校验,校验值长度为2个字节
EEEE (15,12) 码率索引,参考图2-1
FF (11,10)

采样频率

MPEG-1: 00 - 44100,01 - 48000, 10 - 32000,11 - 保留

MPEG-2: 00 - 22050,01 - 24000, 10 - 16000,11 - 保留

MPEG-2.5: 00 - 11025,01 - 12000, 10 - 8000,11 - 保留

G 9 帧长调节,0-无需调整,1-调整
H 8 保留位
II (7,6)

声道

00-立体声Stereo

01-Joint Stereo

10-双声道Dual channel

11-单声道Single channel 

JJ (5,4) 扩充模式,用于Joint Stereo
K 3 版权,0-不合法 1-合法
L 2 是否原版,0-非原版 1-原版
MM (1,0) 强调方式,用于声音经降噪压缩后再补偿的分类

                                                              图2-1 码率索引  

      image.png    

    ② 帧数据,

        帧大小:每帧采样数,如下表


MPEG 1

MPEG 2 (LSF)

MPEG 3 (LSF)

Layer 1 384 384 384
Layer 2 1152 1152 1152
Layer 3 1152 576 576

        帧长度:帧长度是压缩时每一帧的长度,包括帧头。还有填充的空位也计算在内,单位是字节。LayerI 的一个空位长 4 字节,LayerII 和 LayerIII 的空位是 1 字节。 

                      帧长度 = (( 每帧采样数 / 8 * 比特率 ) / 采样频率 ) + 填充空位大小

                      可以根据计算出来的帧长度,从音频流中获取帧长度大小的数据,作为一帧数据提交给解码器处理

        每帧持续时间:每帧持续时间(毫秒) = 每帧采样数 / 采样频率 * 1000


参考:

1、https://www.jianshu.com/p/fd43c1c82945

2、https://blog.csdn.net/qq_25333681/article/details/90682989

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。