网站大量收购闲置独家精品文档,联系QQ:2885784924

android_Audio系统.docx

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
android_Audio系统

Audio系统 ----李昊天包括三方面的内容:1,AudioRecord和AudioTrack,对外提供API类,分别完成音频数据的采集和输出。2,AudioFlinger,工作引擎,管理音频流的输入输出,音频数据的混音读写Audio硬件等。3,AudioPolicyService,策略控制中心,声音设备的选择和切换,音量控制等。--AudioTrack工作流程如下所示(java层)1,根据音频数据的特性来确定缓冲区的最小size: AudioTrack.getMinBufferSize(int sampleRateInHz,//采样率int channelConfig,//声道数int audioFormat//采样精度)2,AudioTrack构造 new AudioTrack(int streamType,//音频流类型int sampleRateInHz,int channelConfig,int audioFormat,int bufferSizeInBytes,//前面获取的缓冲大小int mode//数据加载模式)说明1:数据加载模式两种MODE_STREAM:通过write一次次把音频数据写到AudioTrack中;MODE_STATIC:在play之前把所有数据通过一次write传递到AudioTrack的内部缓冲区中,适合内存占用小,延时要求高的文件。说明2;常见的流类型,定义于AudioManagerSTREAM_ALARM;警告声STREAM_MUSIC:音乐声STREAM_RING;铃声STREAM_SYSTEM:系统声音STREAM_VOCIE_CALL;通话声----AudioTrackde 的构造流程图说明1:native_setup对应于jni层的Android_media_AudioTrack_native_setup,主要工作:1,进行一些信息查询;2,java层的值和jni层的值转换,java层的streamType转换为native层的streamType。streamType定义于AudioSystem: DEFAULT 默认 VOICE_CALL 通话声 SYSTEM 系统声 RING 来电铃声 MUSIC 音乐声……3,AudiotrackJniStorage对象,保存一些信息,与共享内存有关。AT与AF见的数据传递就是通过共享内存的方式来完成的。STATIC模式用该对象的allocSharedMem(int sizeInBytes)创建共享内存,STREAM模式下共享内存由AF创建。4,调用native层的set(…)函数。说明2:native层的set(…)函数:调用AudioSystem::getOutput(…)根据流类型等参数获取合适的工作线程,并返回该线程的索引号。工作线程由AudioFlinger创建,后面细讲。调用createTrack(…)说明3:createTrack(…):得到AudioFlinger的Binder代理端;调用得到的audioFlinger的createTrack(…),该函数得到track的同时还创建了共享内存cblk;对上述的共享内存做处理,在这个共享内存的首部中加入audio_track_cblk_t对象。audio_track_cblk_t对象声明在AudioTrackShared.h,定义在AudioTrack.cpp中。该对象加与共享内存的首部用来控制AT和AF生产和消费数据的步伐----开始播放play(),调用jni层的start(),jni层的start()在调用native层的start(),最终会调用AudioFlinger的AudioFlinger::PlaybackThread::Track::start(),后文细讲。----调用write()写数据,最终会调用android_media_AudioTrack.cpp的writeToTrack(),接着如果是STREAM模式的话,就调用native层的AudioTrack的write(),而在STATIC模式下,直接把数据memcpy到共享内存。STREAM模式下的流程图如下:----调用release()释放相关资源总结一下AudioTrack与AudioFlinger交互的流程图:--AudioFlinger1,构造函数AudioFlinger::createTrack(…)图解这样就返回了一个track并创建了一个共享内存。图中的client对象是AudioFlinger对客户端的封装。下面是AudioFlinger中几个重要的工作线程:PlaybackThread:回放线程,

文档评论(0)

153****9595 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档