android audio
文章平均质量分 85
WAN8180192
这个作者很懒,什么都没留下…
展开
-
audio的输出设备切换分析
本文主要介绍android上音频输出设备切换的代码流程(此文部分内容参考自邓凡达老师的博客。感谢邓老师讲解)上层程序要切换输出设备时,经过JNI调用,会调用AudioSystem::setForceUsestatus_t AudioSystem::setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cf原创 2016-02-20 20:02:49 · 6562 阅读 · 3 评论 -
audiotrack分析
首先总结一下AudioTrackAudioTrack字面意思是音轨,可以理解为一路音频的来源。JAVA层也有AudioTrack的概念,但只是简单的封装,这里不介绍了。只介绍Native JNI的ATAT 向下传送数据,有两种方式:1,主动push方式,(对AF来说是被动方式)AT调用write函数把音频数据“push”到AudioTrack中。2,被动pull方式,(对AF来说是主动方式)AF调原创 2016-02-20 20:02:14 · 3408 阅读 · 0 评论 -
audiopolicy分析
本章节,大体介绍一下AudioPolicyService手机的Audio输入源很多,例如放电影,放音乐,通话,铃声,提示音等输出也很多,例如蓝牙,耳机,喇叭,听筒等那么什么声音输出到什么地方呢?这就是AudioPolicyService干的事情了。首先明确几个概念:1,Audio interfaces安卓手机上目前支持三类音频播放设备,这个主要是根据声音播放端和原创 2016-02-20 20:01:36 · 3001 阅读 · 0 评论 -
audiomixer分析
我们在AF小节里面讲了,AF会创建playbackThread线程,进行mixer操作。并且写入硬件。我们这里以MixerThread为例进行分析。先看MixerThread构造函数AudioFlinger::MixerThread::MixerThread(){... mAudioMixer = new AudioMixer(mNormalFrameCoun原创 2016-02-20 19:59:58 · 3865 阅读 · 0 评论 -
audioflinger 分析
在media_server启动的过程中,AF和AP服务都被启动int main(int argc, char** argv){ AudioFlinger::instantiate(); AudioPolicyService::instantiate();}这里可以触发AF的构造函数,以及onFirstRef函数,完成一些变原创 2016-02-20 19:59:06 · 2991 阅读 · 0 评论 -
android audio buffer 分析
我们知道,播放audio的时候,音频数据是从AT传送到AF的,然后AF中的audiomixer来读取PCM数据做mix下面对这个流程做大体分析。首先,分析一下AT和AF之间传递数据使用的内存是在哪里分配的。AT章节里面,我们分析AudioTrack::createTrack_l函数时,有这么一段代码: sp track = audioFlinger->createTr原创 2016-02-20 19:58:16 · 5420 阅读 · 0 评论 -
android audio分析
从本小节开始,我们要分析android的audio部分。相对于surfaceflinger部分,audio简单许多,层次,模块明确许多。为了防止摊子铺的太大,我们把audio分成几个模块来讲解。尽量分清楚模块之间的耦合我们主要分成以下几部分:AudioTrack, AudioFlinger,AudioMixer, AudioHAL, Audio Buffer, AudioP原创 2016-02-20 19:57:22 · 1595 阅读 · 0 评论 -
android audio 音量设置分析
audiod 中经常遇到的场景是音量调整与输出设备的切换,下面两篇文章 针对这两个场景分别分析一下1,音量调整场景android 音量调整,可以使用两种方式: 软件mixer的时候修改PCM data 控制DAC硬件的增益第一种情况,如果是多路mix的情况,就是MixerThread进行软件mixer,然后在mixer计算的时候来缩放PCM data,原创 2016-02-20 19:56:25 · 7405 阅读 · 0 评论