C++ 音频

一、采样频率

当前主流的采样频率为22.05K Hz、44.1K Hz、48KHz

22.05KHz :为FM广播声音品质

44.1KHz :为理论上最高的CD声音品质(直播,录像,acc)

48KHz人耳可分辨的最高采样频率

( 比如 " 44100Hz 16bit stereo " 表示 采样频率44.1 KHz,每个采样点占2 字节,双声道

( 比如 " 22050Hz 8bit mono " 表示 采样频率22.05 KHz,每个采样点占1 字节,单声道

二、PCM

PCM(Pulse Code Modulation) 为 脉冲编码调制。PCM中的声音数据没有被压缩。

一般情况下,一帧PCM由2048次采样获得。

注意:双声道时,采样低字节在前,高字节在后

1分钟的PCM声音大小 = 44100 × 2(声道) × 2(字节) 60(秒) ÷ 1024 ÷ 1024 ≈ 10MB(兆)

直接传输非常大,因此需要对PCM流进行压缩。(最常见的压缩方式:aac)

三、aac

aac是音频流PCM最常用的压缩方式,除此以外还有g711,opus,mp3等。

3.1 数据格式

acc有两种数据格式:

ADIF(Audio Data Interchage Format):音频数据交换格式。只有一个统一的头,

必须得到所有数据后才能解码,适用于本地文件。

ADTS(Audio Data Transport Stream):音频数据传输流。每一帧都有头信息,

任意帧解码,适用于传输流

cpp 复制代码
struct AdtsHeader {        
    unsigned int syncword;  //12 bit 同步字 '1111 1111 1111',一个ADTS帧的开始
    uint8_t id;        //1 bit 0代表MPEG-4, 1代表MPEG-2。
    uint8_t layer;     //2 bit 必须为0
    uint8_t protectionAbsent;  //1 bit 1代表没有CRC,0代表有CRC

    uint8_t profile;           //2 bit AAC级别(MPEG-2 AAC中定义了3种profile,MPEG-4 AAC中定义了6种profile)
    uint8_t samplingFreqIndex; //4 bit 采样率(4表示44100Hz)
    uint8_t privateBit;        //1bit 编码时设置为0,解码时忽略
    uint8_t channelCfg;        //3 bit 声道数量
    uint8_t originalCopy;      //1bit 编码时设置为0,解码时忽略
    uint8_t home;               //1 bit 编码时设置为0,解码时忽略

    uint8_t copyrightIdentificationBit;   //1 bit 编码时设置为0,解码时忽略
    uint8_t copyrightIdentificationStart; //1 bit 编码时设置为0,解码时忽略
    unsigned int aacFrameLength;               //13 bit 一个ADTS帧的长度包括ADTS头和AAC原始流
    unsigned int adtsBufferFullness;           //11 bit 缓冲区充满度,0x7FF说明是码率可变的码流,不需要此字段。CBR可能需要此字段,不同编码器使用情况不同。这个在使用音频编码的时候需要注意。

    /* number_of_raw_data_blocks_in_frame
     * 表示ADTS帧中有number_of_raw_data_blocks_in_frame + 1个AAC原始帧
     * 所以说number_of_raw_data_blocks_in_frame == 0
     * 表示说ADTS帧中有一个AAC数据块并不是说没有。(一个AAC原始帧包含一段时间内1024个采样及相关数据)
     */
    uint8_t numberOfRawDataBlockInFrame; //2 bit
};
相关推荐
AA陈超1 天前
从0开始学习 **Lyra Starter Game** 项目
c++·笔记·学习·游戏·ue5·lyra
q***T5831 天前
C++在游戏中的Unreal Engine
c++·游戏·虚幻
保持低旋律节奏1 天前
C++——C++11特性
开发语言·c++·windows
小张成长计划..1 天前
【C++】16:模板进阶
c++·算法
4***99741 天前
React音频处理案例
前端·react.js·音视频
CoderIsArt1 天前
SAM-5 核心类体系的 C++ 完整设计
c++·sam5
CS_浮鱼1 天前
【Linux进阶】mmap实战:文件映射、进程通信与LRU缓存
linux·运维·c++·缓存
YJlio1 天前
「C++ 40 周年」:从“野蛮生长的指针地狱”到 AI 时代的系统底座
c++·人工智能·oracle
纵有疾風起1 天前
C++——多态
开发语言·c++·经验分享·面试·开源
冯诺依曼的锦鲤1 天前
算法练习:差分
c++·学习·算法