2015/4/22 深入理解Android 卷I:深入理解Audio系统

1.AudioFlinger:管理着系统中的输入输出音频流,并承担音频数据的混音,以及读写Audio硬件等工作以实现数据的输入输出功能。

2.阅读API文档,是一个快速掌握相关知识的好方法。

3.Linux平台创建共享内存的一般做法是:1>进程A创建并打开一个文件,得到一个文件描述符fd;

                                                                  2>通过mmap调用将fd映射成内存映射文件,在mmap调用中指定特定的参数表示要创建进程间共享内存;

                                                                  3>进程B打开同一个文件,也得到一个文件描述符。这样A和B就打开了同一个文件

                                                                  4>进程B也要用mmap调用指定的参数表示想使用共享内存,并传递打开的fd.这样A和B就通过打开同一个文件并构造内存映射,实现了进程间的内存共享。


4.android_media_AudioTrack_native_setup函数     //android_media_AudioTrack.cpp

  AudioTrack *lpTrack = new AudioTrack();

  lpTrack->set(atStreamType, sampleRateInHertz,format,channels,frameCount,0,audioCallback,&(lpJniStorage->mCallbackData),0,0,true);

  AudioTrack(Java空间)的分析总结:

  AudioTrack在JNI层使用了Native的AudioTrack对象,总结一下调用Native对象的流程:

  1>new 一个AudioTrack,使用无参的构造函数

  2>调用set函数,把java层的参数传进去,另外还设置了一个audiocallback回调函数

  3>调用AudioTrack的start函数

  4>调用AudioTrack的writet函数

  5>工作完毕后,调用stop

  6>Native对象的delete


5.上述set函数createTrack,这个createTrack又会通过audioFlinger去调用createTrack

    set函数会创建一个AudioTrackThread; 处理数据

    AudioFlinger有几种不同类型的工作线程,关系如下:

    Thread-->ThreadBase--->PlayBackThread---->MixThread------->DuplicatingThread

                                                                        ---->DirectOutputThread

    MixThread工作流程:1>接收来自AT的数据;2>对这些数据进行混音;3>把混音结果写到AudioStreamOut中;这样就完成了音频数据的输出。


6.AudioPolicyService openOutput导致AF创建工作线程。

  MixThread的线程函数大致工作流程是:

  1>如果有通知信息或者配置请求,则先完成这些工作,比如向监听者通知AF的一些信息,或者根据配置请求进行音量控制、设备切换等

  2>调用prepareTracks_l函数,检查活跃的Tracks是否有数据已经准备好;

 3>调用混音器对象mAudioMixer的process,并且传入一个存储结果数据的缓冲,混音后的结果就存储在这个缓冲中。

 4>调用AudioOutputStream对象的write,把结果写入设备





====================================================================================================================
1.AudioFlinger的框架
1>AudioFlinger的创建
    主要是与音频设备进行通信,如何维护现有系统中的音频设备以及多个音频流的混音如何处理。
    

   创建音频设备
   创建播放线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值