在前面的章节中我们采用了四种方法设计了应用于不同场合的音频播放器,已经可是正常的播放音频文件,那么我们为什么还要多次一举来分析音频的编解码过程呢?
首先我们可以想象一下:如果我们想要制作一个很炫的音频声音那么我们如何处理呢?很显然第一步我们需要拿到经过采样得到的原始数字音频数据。这样才能在上面开发一些算法,实现很酷、很绚丽的音频特效。又例如我们想要录制一段音频并将其保存为xx.mp3格式呢?很显然掌握音频编解码算法是非常重要的。如果你想开发自己的应用,掌握音频编解码的原理是不是非常的重要呢?
在本章中你讲学到什么?
(1)熟悉wav、mp3等各种音频的封装形式
(2)熟悉常用音频的编解码算法
(3)利用ffmpeg实现对于音频的编解码
1 任务需求分析
在这个任务中我们通过ffmpeg开源库实现对音频文件的编解码,并将解码之后的音频文件重新保存在本地。
注意:这里所采用的ffmpeg文件是在linux环境下交叉编译之后的链接文件,在这个章节中我们暂时不考虑ffmpeg交叉编译的使用方法。具体的ffmpeg编译选项以及ffmpeg裁剪会在基于ffmpeg的视频编解码章节中具体介绍。
本任务需要实现的功能如下:
(1)通过ffmpeg解码并重新编码形成新的wav音频文件。
(2)可以在本地simulator环境下运行。
2 音频文件格式概述
在前一章节我们提到,音频有音频文件格式、音频编码格式两个部分组成。文件格式相当于音频的容器,编码格式决定了音频数据文件是如何装在音频容器当中的。而音频封装格式就是对音频数据文件如何装在音频容器中的描述。
2.1 wav封装格式:
封装格式是每个音频文件必不可少的组成部分之一,它给我们提供了以下参考信息。音频文件类型、编解码方法、单双声道、采样深度、采样率、量化位数、音频文件大小、长度
下面首先来分析一下经典的wav音频的封装格式。
注意:在这里我们对wav音频头文件格式进行了详尽的描述,目的是为了帮助大家理解程序中对wav头文件的封装格式。
wav音频具有单声道 、双声道两种音频封装。每种封装有两个非常重要的音频参数:采样率和采样深度。
• 单声道:采用8位深度量化,量化范围