修改android系统默认采样率

通常使用android系统播放都会是一个固定的采样率输出,无论源是什么采样率,AudioFlinger都会将其重采样成同一个采样率的数据输出,一般平台都默认是44.1K或者48K,如果要修改成为其他采样率也比较简单,但需要注意几个地方。

在android P平台上实验,只要改下/vendor/etc/audio_policy_configuration.xml中声明的primary output的采样率即可,比如原本默认是48k,现在修改为192k:

当前改了这里只是audioflimger将会以192k的采用率对原始音频进行重采样输出,hal层在open声卡的时候可能仍然是以48k的参数去打开,所以hal层open声卡的地方也需要修改。

修改了audioflnger和hal,上层是支持了,而alsa plaform层和codec driver也是需要声明支持192k的,否则在open声卡时就会提示打开失败,这个支持声明在plaform driver和与之绑定的codec driver的snd_soc_dai_driver结构体里,另外soc输出的clk也要可以正确的根据采样率的变化而变化,codec硬件也要支持这么高的采样率,以ti 5805 codec driver为例修改声明如下:

#define TAS5805M_RATES         (SNDRV_PCM_RATE_8000 | \
               SNDRV_PCM_RATE_11025 | \
               SNDRV_PCM_RATE_16000 | \
               SNDRV_PCM_RATE_22050 | \
               SNDRV_PCM_RATE_32000 | \
               SNDRV_PCM_RATE_44100 | \
               SNDRV_PCM_RATE_48000 | \
               SNDRV_PCM_RATE_192000)

修改android系统默认采样率_第1张图片

做了以上修改之后,尝试播了一下MP3,主观听觉得音质有点差,可能是这样的升采样处理,android的算法不太好吧。

如果动态的调整android的采样率,即绕开android系统的重采样机制,让音频保持原始采样率输出有待进一步研究了。。。

你可能感兴趣的:(Android,audio)