音频——多声道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位:

在这里插入图片描述
采样位数8位就说明一个采样点占两字节,采样位数32位就说明一个采样点占四字节,以此类推。
(2)双通道,采样位数32位,Packet格式:
各通道数据交叉存放,如下LRLRLR…
在这里插入图片描述
(3)双通道,采样位数32位,Plane格式:
通道的数据分开存放。
在这里插入图片描述
这三个例子可以达到举一反三的效果,其他的"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格式。那么音频原样式为:
在这里插入图片描述
上面分别对应通道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位,那么就需要我们四字节四字节的交叉起来。交叉后的样式为:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孟小胖_H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值