上一节我们基本对音频数据有了一定的认识,虽然距离使用还是有一定的困难。接下来我们这一节主要是看看音频在代码中到底是如何表示的。
对此我们需要知道AudioStreamBaseDesription这个结构体:可以查看它的官方描述:This structure encapsulates all the information for describing the basic format properties of a stream of audio data(看到这里我们明白这个结构体是基本音频数据流的格式属性的信息集合体)。在这个结构体中一共有9个数据;也就是说这9个属性就可以描述一个音频数据流,在我们深入了解这些属性时,我们可以先随便找个音频,解析看看这个到底是什么样子的。
接下来我们要怎么解析了?
不需要专门的软件、也不需要你去编写任何代码就可以查看歌曲信息了。只需要打开mac的终端,输入afinfo + path(歌曲决定路径)如下图
afinfo 是查看歌曲编码信息的,当然还有其他的指令:afplay+路径 可以播放路径上的歌曲,更多的指令自己百度下,很简单的。看到这里很多人都能猜出来上面有些是什么意思:接下来我们一个一个讲解下每个都代表什么意思:
File :表示的是你输入的路径
File type ID :MPG3 代表的上文说的音频数据文件格式
Num Tracks: 音频轨道
Data format: 这就是音频数据的格式了,2个声道,频率是44100Hz,音频编码格式是MP3,后面的表示的是这个是可变比特率(后面会详细说明)
estimated duration:音频时长
audio bytes:音频数据字节数
audio packets:音频数据包数
bit rate: 比特率 320Kbps (此处是10进制),320已经算mp3中最高的码率
packet size upper bound:音频包大小上限
maximum packet size:音频包最大大小
audio data file offset:音频文件数据头相对整个数据来说的偏差
上面这些基本就是我们能看到有关音频真实的属性了,看到这里,有没有发现可以和上篇文章很多信息对接上。
接下来我们说下比特率和包、样本之间的区别吧!
比特率前面我们有提到代表压缩率,文件越大,其丢失的数据越小,所以相对来说音质越好。
那对于压缩来说目前通用的有2种:CBR(恒定比特率)、VBR(动态比特率),理论上说,VBR的方式是根据音频源文件中声音的具体频率,自动修正一些比特率,以达到在同样比特率效果中,达到更小的文件。在上面的例子就是VBR,现在的MP3基本都是VBR,那怎么判断是VBR、还是CBR(原始PCM数据就是一个CBR)?通过package(包)和frame(样本),通常来说如果一个package只包含一个frame 或者 一个样本的字节数不为0,就表示的是CBR,除此之外大部分就是VBR(如有不对请告诉我,共同进步)。由于时间关系,下面一篇我们可以分别看看VBR和CBR解析出来的有什么区别,另外我们一会自己用代码解析出对应的属性,看看有什么区别!