音频帧大小

本文主要说明如何计算一帧PCM音频帧的内存大小,

区分采样间隔和发送间隔的概念,

我发现很多文章中都没有把这两个概念区分清楚。

采集部分,从音频基本概念将其其中的采样间隔理解为采样率,即每秒采集多少次。这是大多数人所熟知的。

------------------------------------------------采集部分------------------------------------------------

PCM作为音频的原始数据格式,将声音进行量化时有以下几个概念:

采样率,采样大小(位深),声道数。

采样率:比如16kHz表示采集时每秒采集16k次,此时就会有16k个采样点;

采样大小:如16bit表示每个采样点存储在16bit内存中,即需要2个字节在保存;

声道很好理解:比如双声道是为了人耳听左右耳声音不同,比较有立体效果;但从音频数据存储的角度来说就要保存双份的采样音频数据。

PCM音频流的码率:采样率x采样大小x声道数。

如16k x 16 x 2=512kb/s,即每秒的音频原始数据需要占512kbit。

可以理解为音频采样时,按每秒16k次的频率进行采样,16bit即每个采样点存2个字节,每次存2份(声道),这1s的音频数据需要用的512kbit空间来存放,也就是512kbit/8=64k字节。

------------------------------------------------发送部分------------------------------------------------

我们假设不进行编码,直接原始音频数据进行传输,每秒64k字节的数据,采集一秒发送一次,也不是不行,不过实时性不够,量也太大。

所以正常会有个发送间隔的概念,比如20ms发送一次数据,说明每秒钟需发送50次(1s=1000ms);有些文章会将这个间隔时间叫做采样间隔,我感觉会经常和采样率混在一起,不好理解。所以我觉得叫发送间隔会更好。这个与sip中协商的发送媒体打包时长ptime的概念很类似,跟他进行对比理解比较好理解。

这边发送的每次数据就是一帧PCM音频帧,按码率为64k字节来算,一帧PCM音频为:64k/50=1280字节;也就是此时你为每帧PCM需要开辟1280字节内存来存放。

如果是正常16k采样率,16bit采样大小,单声道,即32k字节的每秒的码率的音频数据,以20ms的发送间隔,一帧PCM数据 = 32k / 50 = 640字节。

如果按10ms的发送间隔,此时每帧PCM的大小即为320字节。

比如我在做的AC的DSP芯片的PCM音频包默认就是16k采样率,16bit采样大小,单声道的数据,发送出来的间隔为10ms,我们编码时为其开辟的buffer为320字节。

猜你喜欢

转载自blog.csdn.net/csdn_zmf/article/details/124768427