参考:https://zhuanlan.zhihu.com/p/525616690 参考:https://blog.csdn.net/weixin_45993872/article/details/141866508 声音的录制跟采样率,声道数量和编码格式有关系。采样率是说:每秒钟采集声音的次数,单位是赫兹(Hz),一般在android录音中,代码里都写44100的采样率,采样率越高,采集到的音频信息越丰富,但在软件里占用的字节也更多。声道一般是写2,双声道,声音更立体。编码格式一般写:ENCODING_PCM_16BIT。 经过设备录音的原始数据是会占用很多字节的,大概10分钟就会有100多兆,所以就有音频压缩技术的出现。常见的mp3格式的文件就是使用的mp3压缩技术,mp3的压缩比是1:10,也就是10分钟的原始音频经压缩后只有10兆大小。而这个AAC音频编码是比mp3更先进的音频压缩技术。 AAC的压缩比是1:20,也就是10分钟原始数据100兆,经过它的压缩只有5兆大小。虽然它压缩了很多数据,但对于人来说,压缩后的声音的质量却比mp3的质量总体要高。AAC编码后的音频是需要解码的,它的解码效率也是很高的。AAC有两种数据保存格式:一种是ADIF,另一种是ADTS。它们两者的区别是,第一种不能在随机音频播放位置播放,也就是不能快进,后退什么的,智能从开头播放。另一种可以随机位置播放。我们在开发中一般就用ADTS的数据格式保存。 ADTS其实,是在经过压缩后的每帧音频原始数据的头部增加的一个头部数组,每帧音频数据都有。这个数组中的每个位置的数据都有它自己的含义。经过AAC压缩后的音频在解码时,都会先根据头部信息去解码压缩后的音频数据。 在开发中,需要自己在MediaCode输出时,给加上这个头部信息,然后在我们播放时的解码过程就不需要再去指定这个头部信息了。在开发过程中,许要保证编码和解码时,配置的采样率、声道的配置是一样的。还需要为MediaCode的输入的buffer指定足够的空间,否则会报overflow异常。如果解码时,输出的buffer总是返回-1,很可能是编码的配置和解码的配置不一致造成的。 开发参考文章: https://juejin.cn/post/6844903929440911367,这边文章的ADTS可以参考,我用了是可以的 https://blog.csdn.net/mozushixin_1/article/details/92830785,这篇文章,有些地方是不对的,它的ADTS计算时是用的采样率是44100,而他在代码中写的MediaCode是8000,不过他的这些部分可以参考: 就是配置是否有ADTS头和csd_0数组的计算方式可以参考。然后就是这个128000,是说的波特率,表示录音硬件设备每秒发送128000个数据位给软件,8bit=1byte,可以计算一下每秒是上传15.625kb的数据。波特率越高,其android设备上的硬件上传数据的效率就越高。
标签:编码,采样率,AAC,解码,压缩,ADTS,音频 From: https://www.cnblogs.com/HelloQLQ/p/18666211