android audio系统的概况

首先讲一下:调用简单过程app->native方法->(framework/base/media/libmedia)libmedia->(framework/base/service)audioflinger----aps->(hardware)上次父类都调用此子类AudioPolicyManagerBase.cpp->(alsa驱动前一级)alsa.so(在这一层是修改bug切换状态最多的地方)->底层驱动->硬件

1.

package/app--所有需要用到音频系统的app,调用音频设备的接口AudioSystem.setDeviceConnectionState  此方法在frameworks/base/media/java/android/media/AudioSystem.java中定义native类型(native的方法在AudioSystem.cpp的中定义----libmedia.so中)

-----上层的接口举例,具体实现在framework

   上层使用哪种STREAM 在AudioManager.java中声明,并且在AudioSystem.java中赋值

  例如,要使用通话音public static final int STREAM_VOICE_CALL = AudioSystem.STREAM_VOICE_CALL;  public static final int STREAM_VOICE_CALL = 0;

2.framework/base/media/libmedia/此接口实现在libmedia.so中/AudioSystem.cpp中

3.framework/base/services/audioflinger/AudioFlinger.cpp    AudioPolicyService.cpp  到这里都是标准的audioflinger层

4. hardware/libhardware_legacy/audio/AudioPolicyManagerBase.cpp||hardware/libhardware_legacy/audio/AudioPolicyCompatClient.cpp

5.alsa层

6.底层驱动层

7.硬件



整个android手机音频输出分类(select_output_device)

分如下3中mode,分如下输出设备:earpiece;spreaker;headset || headphone  

1.in_call(在通话状态下,听筒的声音是通过AT命令直接调整2G/3g模块)

        a:earpiece

        b:spreaker

        c:headset || headphone

        d:bluetooth

2.ringtone

 强制spreaker


3.normal

    a:spreaker

    b:headset || headphone

    c:FM(单独的设备需要自己添加,android源码不支持这种设备)

    d:FM&spreaker

    e:alarm(从上层设下了是强制speaker)

你可能感兴趣的:(c,android,手机,audio,output)