音频——多声道Plane格式处理(音频基本知识、音频多声道Plane格式等)

文章目录

  • 前言
  • 一、音频的基本知识
  • 二、音频格式
    • 常见的音频格式及对应的位宽
  • 三、音频多声道Plane格式的处理


前言

`本博客主要记录音频的多通道Plane格式的处理。


一、音频的基本知识

先看具体解释,后面给出示意图
1.采样频率
常见采样率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz。采样率表示每秒采样多少次。比如44.1kHz就表示每秒采样44100次。
2.通道数
通道数可以用来描述同时用几个采样设备进行采样。
3.Plane格式和Packet格式
Plane格式意思是各通道数据单独存放。Packet格式是多通道数据交叉存放。
4.采样位数
常见采样位数有8位、16位、32位、64位。采样位数越大,音频音质越高。而这个位数具体指什么意思呢?位数其实经常用来描述一个采样点占用的字节数,比如32位,就说明一个采样点占用了4字节。
5.示例
上面文字叙述显得苍白无力,看几个图就明白了。下面格式分别对应的数据存储样式:
(1)单通道,采样位数16位:

音频——多声道Plane格式处理(音频基本知识、音频多声道Plane格式等)_第1张图片
采样位数8位就说明一个采样点占两字节,采样位数32位就说明一个采样点占四字节,以此类推。
(2)双通道,采样位数32位,Packet格式:
各通道数据交叉存放,如下LRLRLR…
音频——多声道Plane格式处理(音频基本知识、音频多声道Plane格式等)_第2张图片
(3)双通道,采样位数32位,Plane格式:
通道的数据分开存放。
音频——多声道Plane格式处理(音频基本知识、音频多声道Plane格式等)_第3张图片
这三个例子可以达到举一反三的效果,其他的"x位、y个通道、Plane(Packet)"类型,就都能知道具体数据存放样式了。

二、音频格式

音频格式有以下方式,还涉及到位宽,Plane格式还是Packet格式。最后一个字母带P的就是Plane格式,其他就是Packet格式。

常见的音频格式及对应的位宽

enum AVSampleFormat {
    AV_SAMPLE_FMT_NONE = -1,
    
    AV_SAMPLE_FMT_U8,          // unsigned 8 bits,  packet
    AV_SAMPLE_FMT_S16,         // signed 16 bits,   packet
    AV_SAMPLE_FMT_S32,         // signed 32 bits,   packet
    AV_SAMPLE_FMT_FLT,         // float             packet
    AV_SAMPLE_FMT_DBL,         // double            packet

    AV_SAMPLE_FMT_U8P,         // unsigned 8 bits,  planar
    AV_SAMPLE_FMT_S16P,        // signed 16 bits,   planar
    AV_SAMPLE_FMT_S32P,        // signed 32 bits,   planar
    AV_SAMPLE_FMT_FLTP,        // float 32 bits,    planar 
    AV_SAMPLE_FMT_DBLP,        // double,           planar 
    AV_SAMPLE_FMT_S64,         // signed 64 bits,   packet
    AV_SAMPLE_FMT_S64P,        // signed 64 bits,   planar

    AV_SAMPLE_FMT_NB           // Number of sample 
};

三、音频多声道Plane格式的处理

平时播放设备播放所需要的pcm裸流,是需要Packet格式。也就是各通道数据交叉存放。有时候对视频里的音频或者封装后的音频(如MP3)进行解码后,音频数据可能是以多通达Plane格式存放的。所以在送到播放设备前,需要我们将Plane格式转化为Packet格式。其实经过上面的示例图之后,就很容易转了,只需要知道音频的通道数、位宽,就可以将数据进行去Plane化(Plane转Packet)。
比如说有一个32位的三通道的Plane格式,需要转换成Packet格式。那么音频原样式为:
音频——多声道Plane格式处理(音频基本知识、音频多声道Plane格式等)_第4张图片
上面分别对应通道1、通道2、通道3。(通道3里面的X是我随便表示的,我知道一般表示有L(左声道)、R(右声道),但是往上3声道4声道怎么表示就不太清楚了,这个不是重点)。
上面就是32位的三通道的Plane格式存放样式。一般解码后会存放一个data中,1、2、3…声道数据分别存放在data[0]、data[1]、data[2]…中。
所以对于三通道,如果想要将Plane格式转换为Packet格式,就需要对data[0]、data[1]、data[2]中的数据进行交叉。比如示例数据中位宽是32位,那么就需要我们四字节四字节的交叉起来。交叉后的样式为:
在这里插入图片描述

你可能感兴趣的:(音视频学习记录,音视频)