手机开发培训 07_Android的Audio系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Android的Audio系统第一部分Audio系统综述第二部分Audio系统和上层接口第三部分Audio的硬件抽象层Android的Audio系统第一部分Audio系统综述Audio系统在Android中负责音频方面的数据流传输和控制功能,也负责音频设备的管理。Audio系统主要的分成几个层次:1.media中库提供的Audio系统的上层接口2.AudioFlinger作为Audio系统的中枢3.Audio库的硬件抽象层提供底层的支持4.Audio接口通过JNI和Java框架提供给上层Audio系统的上层接口主要提供了两方面的功能:放音(Track)和录音(Recorder)。第一部分Audio系统综述AudioHAL(libaudio.so)AudioFlinger(libaudioflinger.so)AudioDriverAudioHardwareInterface/dev/eac内核空间C框架Audio本地APIAudioJNIJavaAudioClasslibmediaAudioTrackAudioRecorderAudioSystemJava框架AudioGenericA2dp第一部分Audio系统综述Media库(libmedia.so)的Audio部分的目录中:frameworks/base/include/media/frameworks/base/media/libmedia/这部分的内容被编译成库libmedia.so,提供Audio部分的接口。AudioFlinger(libaudioflinger.so):frameworks/base/libs/audioflinger这部分内容被编译成库libaudioflinger.so。第一部分Audio系统综述Audio的JNI部分:frameworks/base/core/jniAudio的JAVA部分:frameworks/base/media/java/android/media主要包含AudioManager和Audio系统的几个类。Audio硬件抽象层的接口:hardware/libhardware_legacy/include/hardware/第二部分Audio系统和上层接口2.1Audio系统的各个层次2.2media库中的Audio框架部分2.3AudioFlinger本地代码2.4Audio系统的JNI代码2.5Audio系统的Java代码2.1Audio系统的各个层次Audio系统的结构:libmedia.so提供Audio接口,这些Audio接口既像上层开放,也向本地代码开发。libaudiofilnger.so提供Audio接口实现。Audio硬件抽象层提供到硬件的接口,供AudioFlinger调用。Audio使用JNI和JAVA对上层提供接口。2.1Audio系统的各个层次AudioStreamInAudioStreamOutAudioHardwareInterface硬件抽象层IAudioRecorderIAudioTrackIAudioFlingerAudioFlingerAudioRecorderAudioTrackAudioSystem本地框架层AudioRecorderAudioTrackAudioSystemJava层Audio输入Audio输出Audio管理环节2.2media库中的Audio框架部分Android的Audio的核心框架在media库中提供,其中对上面主要实现AudioSystem、AudioTrack和AudioRecorder三个类。提供了IAudioFlinger类接口,在这个类中,可以获得IAudioTrack和IAudioRecorder两个接口,分别用于声音的播放和录制。AudioTrack和AudioRecorder分别通过调用IAudioTrack和IAudioRecorder来实现。2.2media库中的Audio框架部分+createTrack()+openRecord()+registerClient()IAudioFlingerBnAudioFlingerIAudioFlingerClientBnAudioFlingerClientBnAudioTrackIAudioTrack+start()+stop()+flush()+pause()+write()-mAudioTrackAudioTrackBnAudioRecordIAudioRecord+start()+stop()+flush()+pause()+read()-mAudioRecordAudioRecord+setXXX()+getXXX()AudioSystem2.2media库中的Audio框架部分Audio系统的头文件(路径为:frameworks/base/include/media/):AudioSystem.hIAudioFlinger.hAudioTrack.hIAudioTrack.hAudioRecorder.hIAudioRecorder.hIxxx的接口通过AudioFlinger来实现,其他接口通过JNI向上层提供接口。2.2media库中的Audio框架部分Audio系统的头文件在frameworks/base/include/media/目录中,主要的头文件如下:AudioSystem.h:media库的Audio部分对上层的总管接口;IAudioFlinger.h:需要下层实现的总管接口;AudioTrack.h:放音部分对上接口;IAudioTrack.h:放音部分需要下层实现的接口;AudioRecorder.h:录音部分对上接口;IAudioRecorder.h:录音部分需要下层实现的接口。IAudioFlinger.h、IAudioTrack.h和IAudioRecorder.h这三个接口通过下层的继承来实现(即AudioFlinger)。AudioFlinger.h,AudioTrack.h和AudioRecorder.h是对上层提供的接口,它们既供本地程序调用(例如声音的播放器、录制器等),也可以通过JNI向Java层提供接口。2.2media库中的Audio框架部分AudioTrack和AudioRecorder都具有start,stop和pause等接口。前者具有write接口,用于声音的播放,后者具有read接口,用于声音的录制。AudioSystem用于Audio系统的控制工作,主要包含一些set和get接口,是一个对上层的类。2.2media库中的Audio框架部分AudioSystem.h:classAudioSystem{public:enumstream_type{//Audio流的类型SYSTEM=1,RING=2,MUSIC=3,ALARM=4,NOTIFICATION=5,BLUETOOTH_SCO=6,ENFORCED_AUDIBLE=7,NUM_STREAM_TYPES};enumaudio_output_type{//Audio数据输出类型//……省略部分内容};enumaudio_format{//Audio数据格式FORMAT_DEFAULT=0,PCM_16_BIT,PCM_8_BIT,INVALID_FORMAT};2.2media库中的Audio框架部分enumaudio_mode{//Audio模式//……省略部分内容};enumaudio_routes{//Audio路径类型ROUTE_EARPIECE=(10),ROUTE_SPEAKER=(11),ROUTE_BLUETOOTH_SCO=(12),ROUTE_HEADSET=(13),ROUTE_BLUETOOTH_A2DP=(14),ROUTE_ALL=-1UL,};staticstatus_tsetMasterVolume(floatvalue);staticstatus_tsetMasterMute(boolmute);staticstatus_tgetMasterVolume(float*volume);staticstatus_tgetMasterMute(bool*mute);staticstatus_tsetStreamVolume(intstream,floatvalue);staticstatus_tsetStreamMute(intstream,boolmute);staticstatus_tgetStreamVolume(intstream,float*volume);staticstatus_tgetStreamMute(intstream,bool*mute);staticstatus_tsetMode(intmode);staticstatus_tgetMode(int*mode);staticstatus_tsetRouting(intmode,uint32_troutes,uint32_tmask);staticstatus_tgetRouting(intmode,uint32_t*routes);//……省略部分内容};2.3AudioFlinger本地代码Audio是AudioFlinger系统的中间层,其代码的路径为:frameworks/base/libs/audioflingerAudioFlinger的核心文件是AudioFlinger.h和AudioFlinger.cpp,提供了类AudioFlinger,这个类是一个IAudioFlinger的实现。2.3AudioFlinger本地代码classAudioFlinger:publicBnAudioFlinger,publicIBinder::DeathRecipient{public://……省略部分内容virtualspIAudioTrackcreateTrack(//获得音频输出接口(Track)pid_tpid,intstreamType,uint32_tsampleRate,intformat,intchannelCount,intframeCount,uint32_tflags,constspIMemory&sharedBuffer,status_t*status);//……省略部分内容virtualstatus_tsetMasterVolume(floatvalue);virtualstatus_tsetMasterMute(boolmuted);virtualstatus_tsetStreamVolume(intstream,floatvalue);virtualstatus_tsetStreamMute(intstream,boolmuted);virtualstatus_tsetRouting(intmode,uint32_troutes,uint32_tmask);virtualuint32_tgetRouting(intmode)const;virtualstatus_tsetMode(intmode);virtualintgetMode()const;virtualspIAudioRecordopenRecord(//获得音频输出接口(Record)pid_tpid,intstreamType,uint32_tsampleRate,intformat,intchannelCount,intframeCount,uint32_tflags,status_t*status);}AudioFlinger的实现:2.4Audio系统的JNI代码Audio的JNI部分的代码的路径为:frameworks/base/core/jni实现的几个文件为:android_media_AudioSystem.cppandroid_media_AudioTrack.cppandroid_media_Aud

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功