Androidaudio系统第一季

上传人:ali****an 文档编号:134642794 上传时间:2020-06-07 格式:DOC 页数:18 大小:307KB
返回 下载 相关 举报
Androidaudio系统第一季_第1页
第1页 / 共18页
Androidaudio系统第一季_第2页
第2页 / 共18页
Androidaudio系统第一季_第3页
第3页 / 共18页
Androidaudio系统第一季_第4页
第4页 / 共18页
Androidaudio系统第一季_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《Androidaudio系统第一季》由会员分享,可在线阅读,更多相关《Androidaudio系统第一季(18页珍藏版)》请在金锄头文库上搜索。

1、Audio 系统研究第一季先看看 Audio 里边有主要有三个:AudioManager:这个主要是用来管理 Audio 系统的AudioTrack:这个主要是用来播放声音的AudioRecord:这个主要是用来录音的其中 AudioManager 的理解需要考虑整个系统上声音的策略问题,例如来电话铃声,短信 铃声等,主要是策略上的问题。AudioPolicyManager AudioPolicyService 的很大一部分管理工作都是在 AudioPolicyManager 中完成的。包括音频策略(strategy)管理,音量管理,输入输出设备管理。1、音频策略管理我想首先要搞清楚 stre

2、am_type,device,strategy 三者之间的关系: AudioSystem:stream_type 音频流的类型,一共有 10 种类型 AudioSystem:audio_devices 音频输入输出设备,每一个 bit 代表一种设备,见 前面的说明 AudioPolicyManager:routing_strategy 音频路由策略,可以有 4 种策略getStrategy(stream_type)根据 stream type,返回对应的 routing strategy 值,getDeviceForStrategy()则是根据 routing strategy,返回可用的 d

3、evice。Android 把10 种 stream type 归纳为 4 种路由策略,然后根据路由策略决定具体的输出设备。释义:DTMF: dual-tone multifrequency 双音多频,由高频群和低频群组成,高低频群各包含 4 个频率。一个高频信号和一个低频信号叠加组成一个组合信号,代表一个数字。DTMF 信号有 16 个编码。利用 DTMF 信令可选择呼叫相应的对讲机TTS:Text To Speech 的缩写,即“从文本到语音”、语音合成技术(Text To Speech) 2、声音管理/* hide Maximum volume index values for audi

4、o streams */private int MAX_STREAM_VOLUME = new int 5, / STREAM_VOICE_CALL7, / STREAM_SYSTEM7, / STREAM_RING15, / STREAM_MUSIC7, / STREAM_ALARM7, / STREAM_NOTIFICATION15, / STREAM_BLUETOOTH_SCO15, / STREAM_FM15, / STREAM_DTMF15, / STREAM_TTS7, / STREAM_SYSTEM_ENFORCED;由此可见,电话铃声可以有 7 个级别的音量,而音乐则可以有 1

5、5 个音量级别,java 的代码通过 jni,最后调用 AudioPolicyManager 的 initStreamVolume(),把这个数组的内容传入 AudioPolicyManager 中,这样 AudioPolicyManager 也就记 住了每一个音频流的音量级别。应用程序可以调用 setStreamVolumeIndex 设置各个音频流的音量级 别,setStreamVolumeIndex 会把这个整数的音量级别转化为适合人耳的对数级别,然后通过AudioPolicyService 的 AudioCommandThread,最终会将设置应用到 AudioFlinger的相应的

6、Track 中。3、输入输出设备管理音频系统为音频设备定义了一个枚举:AudioSystem:audio_devices,例 如:DEVICE_OUT_SPEAKER,DEVICE_OUT_WIRED_HEADPHONE,DEVICE_OUT_BLUETOOTH_A2DP,DEVICE_IN_BUILTIN_MIC,DEVICE_IN_VOICE_CALL等等,每一个枚举值其实对应一个 32bit 整数的某一个位,所以这些值是可以进行位或操作的,例如我希望同时打开扬声器和耳机,那么可以这样:1. newDevice = DEVICE_OUT_SPEAKER | DEVICE_OUT_WIRED

7、_HEADPHONE;2. setOutputDevice(mHardwareOutput, newDevice);newDevice = DEVICE_OUT_SPEAKER |DEVICE_OUT_WIRED_HEADPHONE; setOutputDevice(mHardwareOutput,newDevice);AudioPolicyManager 中有两个成员变量:mAvailableOutputDevices 和mAvailableInputDevices,他们记录了当前可用的输入和输出设备,当系统检测到耳机或者蓝牙已连接好时,会调用 AudioPolicyManager 的成员函

8、数:status_t AudioPolicyManager:setDeviceConnectionState(AudioSystem:audio_devices device,AudioSystem:device_connection_state state,const char *device_address)status_tAudioPolicyManager:setDeviceConnectionState(AudioSystem:audio_devicesdevice, AudioSystem:device_connection_state state, const char*devi

9、ce_address)该函数根据传入的 device 值和state(DEVICE_STATE_AVAILABLE/DEVICE_STATE_UNAVAILABLE)设置mAvailableOutputDevices 或者 mAvailableInputDevices,然后选择相应的输入或者输出设备。其他一些相关的函数: setForceUse()设置某种场合强制使用某一设备,例如 setForceUse(FOR_MEDIA, FORCE_SPEAKER)会在播放音乐时打开扬声器 startOutput()/stopOutput() startInput()/stopInput()前端时间增加

10、的一个小功能:ring from speaker and headset together when incoming call if headset is present .修改点:在 AP side 修改的几个文件snd.h,board-msm7x27.c,AudioPolicyManagerBase.cpp ,AudioHardware.cpp在 snd.h 文件里如下枚举里加一个新的逻辑设备 ID: SND_DEVICE_ST_HDST_SPKRtypedef enum SND_DEVICE_DEFAULT = 0,SND_DEVICE_HANDSET = SND_DEVICE_DEF

11、AULT+0,SND_DEVICE_HFK = SND_DEVICE_DEFAULT+1, SND_DEVICE_HEADSET = SND_DEVICE_DEFAULT+2, /* Monoheadset */ SND_DEVICE_STEREO_HEADSET = SND_DEVICE_DEFAULT+3, /*Stereo headset */ SND_DEVICE_AHFK =SND_DEVICE_DEFAULT+4,SND_DEVICE_SDAC = SND_DEVICE_DEFAULT+5,SND_DEVICE_SPEAKER_PHONE = SND_DEVICE_DEFAULT+

12、6,SND_DEVICE_TTY_HFK = SND_DEVICE_DEFAULT+7,SND_DEVICE_TTY_HEADSET = SND_DEVICE_DEFAULT+8,SND_DEVICE_TTY_VCO = SND_DEVICE_DEFAULT+9,SND_DEVICE_TTY_HCO = SND_DEVICE_DEFAULT+10,SND_DEVICE_BT_INTERCOM = SND_DEVICE_DEFAULT+11,SND_DEVICE_BT_HEADSET = SND_DEVICE_DEFAULT+12,SND_DEVICE_BT_AG_LOCAL_AUDIO = S

13、ND_DEVICE_DEFAULT+13,SND_DEVICE_USB = SND_DEVICE_DEFAULT+14,SND_DEVICE_STEREO_USB = SND_DEVICE_DEFAULT+15,SND_DEVICE_IN_S_SADC_OUT_HANDSET = SND_DEVICE_DEFAULT+16, /* Input Mono SADD, Output Handset */SND_DEVICE_IN_S_SADC_OUT_HEADSET = SND_DEVICE_DEFAULT+17, /* Input Stereo SADD, Output Headset */SN

14、D_DEVICE_EXT_S_SADC_OUT_HANDSET =SND_DEVICE_DEFAULT+18, /* Input Stereo SADD, Output Handset */SND_DEVICE_EXT_S_SADC_OUT_HEADSET = SND_DEVICE_DEFAULT+19, /* Input Stereo SADD, Output Headset */ SND_DEVICE_BT_A2DP_HEADSET = SND_DEVICE_DEFAULT+20, /* ABT device supporting A2DP */SND_DEVICE_BT_A2DP_SCO

15、_HEADSET = SND_DEVICE_DEFAULT+21, /* A BT headset supporting A2DP and SCO */* Input Internal Codec Stereo SADC, Output External AUXPCM */ SND_DEVICE_TX_INT_SADC_RX_EXT_AUXPCM =SND_DEVICE_DEFAULT+22, SND_DEVICE_RX_EXT_SDAC_TX_INTERNAL =SND_DEVICE_DEFAULT+23,SND_DEVICE_BT_CONFERENCE = SND_DEVICE_DEFAULT+24, SND_DEVICE_IN_S_SADC_OUT_SPEAKER_PHONE =SND_DEVICE_DEFAULT+25,#if defined(PWV_AUDIO_HEADSET_SPEAKER) SND_DEVICE_ST_HDST_SPKR = SND_DEVICE_DEFAULT+26, /yanglinadd for audioSND_DEVICE_MAX = SND_DEVICE_DEFAULT+27,SND_DEVICE_CURRENT = SND_DEVI

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号