关于wav amr音频分析

关于wav amr音频分析

从事嵌入式开发过程中,如果遇到播放wav 和 amr格式音频的话,我们就必须要对这两种音频格式的数据有所了解,今天就简单介绍下这两种音频文件。

1.WAV文件
咋们先贴一张WAV文件的二进制数据图。
关于wav amr音频分析_第1张图片
WAV文件=wav头+ 音频数据

先介绍下wav音频数据的头分析

地址/大小 描述
00H 4 bytes RIFF
04H 4 bytes 从此地址计算本文件的大小
08H 4 bytes wav
0cH 4 bytes fmt
10H 4 bytes 从此地址计算文件大小
14H 2 bytes 编码格式0x0001代表pcm
16H 2 bytes channels,1-单声道,2-双声道
18H 4 bytes sample rate 采用频率
1cH 4 bytes bitssample ratechannels/8 每秒传输字节数
20H 2 bytes bits*channels/8
22H 2 bytes bits(量化位数)
24H 4 bytes “data”
28H 4 bytes 后面开始的语音数据的大小,真正的文件大小=这个值+0x2c
2cH … 语音数据

c语言中对于一个wav头,如下

struct wav_header {
    uint32_t riff_id;
    uint32_t riff_sz;
    uint32_t riff_fmt;
    uint32_t fmt_id;
    uint32_t fmt_sz;
    uint16_t audio_format;
    uint16_t num_channels;
    uint32_t sample_rate;
    uint32_t byte_rate;       /* sample_rate * num_channels * bps / 8 */
    uint16_t block_align;     /* num_channels * bps / 8 */
    uint16_t bits_per_sample;
    uint32_t data_id;
    uint32_t data_sz;
};

一个wav文件偏移wav大小就是pcm格式的音频数据了,该数据可以被声卡直接播放。我们在编写程序时,如果要播放或者录制wav格式的音频该怎么办。
播放:
提取wav头文件,包括的一些重要参数,采样率,音频本身音频格式,通道,音频数据大小等,主要用于打开与设置pcm设备,然后将pcm音频数据直接送入声卡中播放即可。
录制:
创建一个文件,先写入wav结构体的头,然后使用音频应用接口从pcm设备中读取要录制的pcm数据后,直接写入,即可形成一个wav格式的音频。

2.amr格式音频
amr格式音频叫什么,自适应多速率编码格式,它分为两种,一种为amrnb,另一种为amrwb,两者区别如下:
amr-nb:语音带宽范围:300-3700Hz,8KHz采样频率
amr-wb:语音带宽范围:50~7000Hz,16KHz采样频率

简单说下amrnb音频格式
amrnb音频主要有如下编码方式
amr关键在于20ms采样一帧数据,这个是重点。
8KHz的采样频率,20ms采样一帧数据,每秒50帧数据,每帧数据8KHz/50=160个采样点,会得到一个数据长度的数据,amr是压缩型的数据,所以需要对采样数据经常信息提取,把数据进行压缩,重新编码,通过此法得到8中编码格式如下:

序号 规格 音频帧字节数 帧头 FT
0 AMR 4.75 13 0400000100 0000
1 AMR 5.15 14 0C 00001100 0001
2 AMR 5.9 16 14 00010100 0010
3 AMR6.7 18 1C 00011100 0011
4 AMR 7.4 20 24 00100100 0100
5 AMR 7.95 21 2C 00101100 0101
6 AMR 10.2 27 34 00110100 0110
7 AMR 12.2 32 3C 00111100 0111

下面看看amr格式文件二进制数据:
关于wav amr音频分析_第2张图片
从上图可知,当前文件采用AMR12.2规格编码方式进行编码的,我们如果要播放此格式音频,如何提取数据,并且对数据进行节目呢?
1.偏移amr头 6个字节
2.读取一个字节数据,从中提取出本语音帧使用的规格,判断出字节数,在从数据中提取出语音帧。

一般语音帧帧头不属于上面的8种,采用直接跳过,往下读取的方法,最终将整个amr文件读取完毕为止。

你可能感兴趣的:(audio)