Android智能手机中各类音频场景下的audio data path

上一篇文章(Android智能手机上的音频浅析)说本篇将详细讲解Android智能手机中各类音频场景下的音频数据流向,如今咱们就开始。智能手机中音频的主要场景有音频播放、音频录制、语音通讯等。不一样场景下的音频数据流向有很大差别,即便是同一场景,在不一样的模式下音频数据流向也有所不一样。html

 

1,音频播放android

Android系统audio框架中主要有三种播放模式:low latency playback、deep buffer playback和compressed offload playback。网络

a)low latency playback:用于按键音、游戏背景音等对时延要求高的声音输出。音频文件是在AP侧解码成PCM数据,而后再经由Audio DSP送给codec芯片播放出来。框架

b)deep buffer playback:用于音乐等对时延要求不高的声音输出。音频文件是在AP侧解码成PCM数据,若是有音效的话会再对PCM数据处理(android audio framework中有effect音效模块,支持的音效有均衡器、低音加强、环绕声等),而后再经由Audio DSP送给codec芯片播放出来。编码

c)compressed offload playback:用于音乐等声音输出,可是音频解码部分的工做是在Audio DSP中完成,AP侧只负责把音频码流送到Audo DSP中,送出去后AP侧会进行休眠,Audo DSP中会分配一块较大的buffer去处理此数据,在Audo DSP中进行解码、音效的处理等工做,在Audo DSP解码器处理完数据以前,它会唤醒AP侧去送下一包数据。用这种模式播放音频能有效的下降功耗,是最为推荐的播放音乐的模式。可是在目前的主流的音乐播放APP中用的基本上都是deep buffer的播放模式,好比QQ音乐、网易云音乐和酷狗音乐等。看来系统平台厂商和APP厂商的作法是有差别的。至于哪些格式的音乐用这种模式播放,这须要在audioPolicy中去控制,我作的平台上是MP3(*.mp3)和AAC(*.m4a)用offload模式播放,由于这两种格式最主流。3d

 

综上low latency 模式和deep buffer模式都是在AP侧解码完后送PCM数据给Audio DSP,故音频数据流向相似,我将放在一块儿讲,而compressed offload模式是码流送给Audio DSP解码。播放系统音和游戏音用low latency 模式,播放音乐用deep buffer或者compressed offload模式,播放录音用deep buffer模式。接下来咱们看看low latency /deep buffer和compressed offload两种模式下的音频数据流向。在音频播放时音频数据只通过AP和audio DSP。code

 

1)low latency / deep buffer模式下的音频数据流向htm

从上图看出,音频文件先在AP上软解码获得PCM后通过AudioTrack/audioFlinger中的Mixer thread(有可能要作音效后处理)/audio HAL/tinyALSA后送给kernel,而后用IPC将PCM送给Audio DSP经重采样混音等后播放出来。因为在AP上已作解码和音效后处理,Audio DSP上就不须要作了。blog

 

2)compressed offload模式下的音频数据流向游戏

从上图看出,音频码流通过AP上的AudioTrack/audioFlinger中的Offload thread(不须要作音效后处理)/audio HAL/tinyALSA后送给kernel,而后用IPC将码流送给Audio DSP经解码、后处理、重采样、混音等后播放出来。

 

2,音频录制

不少人喜欢把参加的重要会议或者演讲的音频录下来,以便重复听或者他用。下图就是录音时音频数据的流向。同音频播放同样,录音时音频数据也是只通过AP和audio DSP。

从上图看出,codec芯片采集到的PCM数据送给Audio DSP经重采样、前处理后送给AP的kernel,再经由tinyALSA/audio HAL /audioFlinger中的Record thread/audioRecord等后作软编码获得录音码流文件并保持起来。

 

3,语音通讯

语音通讯就是打电话啦。它同音频播放或者录制不同,它是双向的,分上行(uplink,把采集到的语音发送给对方)和下行(downlink,把收到的语音播放出来),而音频播放或者录制是单向的。它音频数据流向也跟音频播放或者录制不同,只通过audio DSP和CP,下图就是打电话时音频数据的流向。

从上图看出,在上行方向上codec芯片采集到的PCM数据送给Audio DSP经重采样、前处理(AEC/ANS/AGC等)、编码后获得码流,并将码流送给CP,CP处理后通过空口(air interface)送给对方。在下行方向上先从空口收对方送过来的语音数据,并作网络侧处理(jitter buffer等),而后送给Audio DSP,Audio DSP收到后作解码、后处理(ANS/AGC等)、重采样等,再把PCM数据经DMA/I2S送给codec芯片播放出来。

相关文章
相关标签/搜索