最近对android的audio感兴趣,想看一下audio的东西。手上有5.0的代码,就想以5.0为版本学习。在学习的过程中,我发现android5.0对4.4改了一些东西,甚至文件路径有些都改变了。那么接下来的几篇文章就介绍一下学习audio过程中的大家以后可能会用到一些东西。
Audio在Android KitKat输出时有延时,有时候可以达到600ms。在Android L对此问题明显进行了改善。下面让我看看5.0到底有哪些改善:
1、低延时(输入/输出)– Audio patch-panel
Android4.4介绍通过基于加速音频的OpenSL减少输出音频延时,但是延时仍然很高,不足以音频进程的应用使用。Android5.0确保显著低的输入延时(~20ms),这虽然不完美,但是非常有用。输出延时和整个音频进程都加速显著减少,并且第一次使能实时音频。
2、24位每次采样
采样率解析度由16bit PCM上升到24bit,会获得更好的精准度。在Android4.4或者以前版本,Android通过进程系统每次采样率是16bit。即使以前新手机支持24bit 96khz DAC,Android核心仍没有真中使用。一些OEM厂商例如LG,修改Android AudioFlinger和Kernel达到24bit,但是这种做法从未被贡献到Android社区。
3. 96khz采样率
Android4.4采样率只支持44khz/48Khz,现在android5.0支持96khz的采样率
4.浮点抽样
浮点数对程序员来说是一个可怕的单词,因为他会花费两倍的内存,变得缓慢。谷歌正在尝试改变浮点数的这一印象。他们已经使整个Audio系统的浮点数兼容,认为在现在SIMD(单指令多数据)处理器每秒帧数和整数一样快,所以优势非常明显。直接使用FPs的优势是:
没有音频剪辑
更好的精度,更好的质量
更好的动态范围
更大的空间
在过程运算中,浮点运算是非常有用的。播放终端使用整数格式的音频数据,较低的位深度。
对开发者:用 android.media.AudioFormat.ENCODING_PCM_FLOAT
5. 更好的重采样
Android5.0提高线性内插程序重新采集音频流。大部分的音频文件是 44khz、48khz或者96khz之一。为了声音播放无差别,如果音频文件不能适应手机的DAC支持的采样率,auido系统会进行重新采样。例如,Nexus 5支持48khz采样率。因此如果播放一首44khz的mp3音频,手机必须重新采样到48khz。
6.改进的AV同步信号
Android一直存在Audio和Video同步的问题(10-100ms)。最终解决的新同步方式是确保音轨和视频关键帧一直匹配。
7. USB audio
USBaudio现在已经支持了。在产品本身以外,你可以用额外的声卡(或者DAC)和连线所有声音通过USB audio。
8.API改进(针对开发者)
你的应用现在可以对提供的MediaCodec在相同格式下用一个ByteBuffer提供音频数据。添加了新的NDK多媒体接口。