Android Audio
文章平均质量分 70
一个学渣的自我救赎
这个作者很懒,什么都没留下…
展开
-
Android13 SoundPool 创建流程分析
SoundPool用于播放密集,急促而又短暂的音效,如案件音,SoundPool的创建方式有两种:Builder的build方法主要处理如下:1、通过AudioAttributes的构造器,创建AudioAttributes对象。2、通过new的方式创建SoundPool对象。原创 2024-05-06 09:04:33 · 504 阅读 · 0 评论 -
Android13 SoundPool load流程分析
上面方法处理如下:1、调用getSoundPool方法,获取SoundPool对象2、调用SoundPool的load方法加载soundPool。原创 2024-05-06 09:11:51 · 281 阅读 · 0 评论 -
Android13 SoundPool play流程分析
上面方法处理如下:1、调用getSoundPool方法,获取SoundPool对象2、调用SoundPool的play方法进行音效声音play。原创 2024-05-06 09:16:25 · 368 阅读 · 0 评论 -
Android13 AudioHAL Device::setParameters流程分析
6、reset_a2dp_enc_config_params:重置a2dp enc配置参数。7、reset_a2dp_dec_config_params:重置a2dp dec配置参数。4、audio_extn_a2dp_set_parameters:a2dp设置参数。2、audio_extn_hfp_set_parameters:hfp设置参数。6、audio_extn_usb_remove_device:usb移除设备。3、audio_extn_ma_set_parameters:ma设置参数。原创 2024-05-12 21:30:32 · 893 阅读 · 0 评论 -
Android AudioHAL
AudioHAL的上层为AudioFlinger,AudioHAL下层为TiniAlsa(Android下一个简约的Alsa版本)。AudioHAL分为两部分:一部分为各种音频设备,每种音频设备由一个独立的库文件实现:如audio.a2dp.default.so(管理蓝牙a2dp音频),audio.usb.default.so(管理usb外接的音频),audio.primary.default.so(管理设备上的大部分音频)。原创 2024-05-12 21:20:21 · 757 阅读 · 0 评论 -
Android13 CarPowerManagementService onApPowerStateChange流程分析
如下为CarPower上电的流程图:下面我们从代码角度分析:在CPMS的init方法中会调用onApPowerStateChange(CpmsState.WAIT_FOR_VHAL, CarPowerManager.STATE_WAIT_FOR_VHAL); 设置ApPowerState为STATE_WAIT_FOR_VHAL:在onApPowerStateChange中调用PowerHandler 的handlePowerStateChange方法:在handlePowerStateChang原创 2024-05-12 11:05:35 · 218 阅读 · 0 评论 -
Android13 CarPowerManager setListener流程分析
当CPMS启动后会向VHAL设置电源状态监听,当VHAL收到电源状态更新就会通过监听函数通知CPMS,然后CMPS会根据APP设置的电源状态变化监听调用APP的回调接口,到此从VHAL到APP的电源状态更新就建立起来了。原创 2024-05-12 11:03:08 · 175 阅读 · 0 评论 -
Android13 CarPowerManagementService启动流程分析
在CarPowerManagementService中init调用PowerHalService的setListener设置事件侦听器以接收车辆的电源事件。原创 2024-05-12 11:02:03 · 120 阅读 · 0 评论 -
Android CarPower
在Android Automotive OS (AAOS)中,CarPower负责车载电源的原理,它一面同libsusped交互控制AP(应用处理器,也就是Soc)的电源状态,一方面通过VehicleHAL与MCU通信接收和发送电源相关指令。原创 2024-05-12 10:59:52 · 824 阅读 · 0 评论 -
Android CarProperty
在Android Automotive OS (AAOS)中,绝大部分与车辆硬件功能相关联的属性,如空调, 车舱功能, 车辆传感器等都是通过CarProperty来读取或者设置的,其中CarPropertyService作为CarService的子服务,负责调用HAL层(VehicleHAL)实现具体功能,而CarPropertyManager作为客户端接口由各个APP调用,如下为CarPropertyManager的Block图:CarPropertyManager是Android Automotive原创 2024-05-12 10:53:27 · 890 阅读 · 0 评论 -
Android CarDucking
CarDucking用来处理声音的淡入和淡出,在CarAudioFocus处理中会被调用。原创 2024-05-12 10:42:56 · 285 阅读 · 0 评论 -
Android13 CarZonesAudioFocus onAudioFocusAbandon回调处理流程分析
上面方法进行如下处理:调用CarAudioFocus的onAudioFocusAbandon方法,进行音频焦点仲裁。调用notifyFocusCallback方法,进行Ducking处理。原创 2024-05-12 10:40:05 · 723 阅读 · 0 评论 -
Android13 CarAudioFocus onAudioFocusRequest回调处理流程分析
上面方法进行如下处理:调用getAudioZoneIdForAudioFocusInfo方法获取zoneId。调用CarAudioFocus的onAudioFocusRequest方法,进行音频焦点仲裁。调用notifyFocusCallback方法,进行Ducking处理。原创 2024-05-12 10:32:39 · 754 阅读 · 0 评论 -
Android CarAudioFocus
在汽车音频中,音频焦点(Audio Focus)的处理和手机有所不同, 在具体介绍 AAOS中汽车音频焦点的实现之前, 需要了解一下Android的音频焦点机制,Android 引入音频焦点机制的主要目的是协调多个应用同时播放音频时产生的声音竞争的问题, 从而避免系统中有多个应用同时发声, 而导致声音混杂,影响用户体验.原创 2024-05-12 10:15:16 · 573 阅读 · 0 评论 -
Android CarAudioZone
在汽车领域,围绕多个用户同时与平台互动并且每个用户都希望使用单独媒体的需求,出现了一系列新的用例。例如,后座上的乘客在后座显示屏上观看 YouTube 视频时,司机可以在驾驶舱中播放音乐。多可用区音频允许不同的音频源通过车辆的不同可用区同时进行播放,从而实现此功能。Android 10 中的多可用区音频使原始设备制造商 (OEM) 能够将音频配置为不同的可用区。每个可用区由车辆内的一组设备组成,并且有各自的音量组、用于上下文的路由配置以及焦点管理。原创 2024-05-12 10:06:19 · 682 阅读 · 0 评论 -
Android13 CarAudioManager setVolumeGroupMute流程分析
以上方法调用了如下方法:调用CarVolumeGroup的setMute方法调用callbackGroupMuteChanged方法调用CarVolumeGroupMuting的carMuteChanged方法。原创 2024-05-12 09:44:23 · 370 阅读 · 0 评论 -
Android13 CarAudioManager setGroupVolume流程分析
这个流程比较长,我们分段理解和分析,首先是从CarAudioManager到IAudioPolicyService,这个阶段的流程图如下:调用了mService.setGroupVolume方法,mService的定义为“private final ICarAudio mService;上面方法主要处理如下:调用callbackGroupVolumeChange调用getCarVolumeGroupLocked取得VolumeGroup。原创 2024-05-12 09:38:37 · 762 阅读 · 0 评论 -
Android GroupVolume
汽车音频中新增了音量组的概念. 所谓音量组,就是将不同用途的声音进行归纳,按组对相关的音量进行控制,在进一步解释音量组的概念之前,先了解一下音频上下文(Audio Context)和音频属性(Audio Attribute)两个概念。Android中的每段声音都由相应的应用和声音生成的原因来识别, 然后Android设备会使用这些信息来确认如何呈现声音。音频上下文音频属性对象MUSICMEDIANAVIGATIONCALLRINGTONEALARMALARMUNKNOWNUNKNOWN。原创 2024-05-12 09:28:41 · 838 阅读 · 0 评论 -
Android13 CarAudioManager getZoneIdForUid流程分析
【代码】Android13 CarAudioManager getZoneIdForUid流程分析。原创 2024-05-12 09:24:35 · 183 阅读 · 0 评论 -
Android13 CarAudioManager setZoneIdForUid流程分析
调用ICarAudio的setZoneIdForUid方法,ICarAudio是一个接口,由CarAudioService实现,因此会调用CarAudioService的setZoneIdForUid方法。原创 2024-05-12 09:22:40 · 128 阅读 · 0 评论 -
Android13 CarAudioManager setFadeTowardFront流程分析
2、调用AudioControlWrapper的setFadeTowardFront方法,由于AudioControlWrapper是一个接口,而AudioControlWrapperAidl实现AudioControlWrapper接口,因此会调用到AudioControlWrapperAidl的AudioControlWrapper方法。调用IAudioControl的setFadeTowardFront方法,IAudioControl是一个接口,实际调用的是AudioControl HAL。原创 2024-05-12 09:20:44 · 160 阅读 · 0 评论 -
Android3 CarAudioService初始化流程分析
调用CarAudioDynamicRouting的setupAudioDynamicRouting方法,CarAudioDynamicRouting在Android Automotive OS系统中用于动态控制车载音频的路由。调用CarAudioPowerListener的newCarAudioPowerListener方法,创建CarAudioPowerListener对象。调用CarAudioPowerListener的startListeningForPolicyChanges方法。原创 2024-05-12 09:16:50 · 539 阅读 · 0 评论 -
Android13 CarAudioService启动流程分析
【代码】Android13 CarAudioService启动流程分析。原创 2024-05-12 09:03:16 · 123 阅读 · 0 评论 -
Android CarAudioService
void setVolumeGroupMute(int zoneId, int groupId, boolean mute, int flags):设置组音量静音。void setGroupVolume(int zoneId, int groupId, int index, int flags):设置组音量。int getGroupVolume(int zoneId, int groupId):获取组音量。int getVolumeGroupCount(int zoneId):获取音量组数量。原创 2024-05-12 09:01:37 · 502 阅读 · 0 评论 -
Android CarAudioManager
Audio Zone ID(AZID)是在Android O(Android 8)及以上版本中引入的一种音频区域标识符,用于标识不同的应用程序使用的不同音频输出设备和声道,以实现多个应用程序同时播放音频且互不干扰。void setGroupVolume(int zoneId, int groupId, int index, int flags):设置组音量。void setGroupVolume(int groupId, int index, int flags) :设置组音量。原创 2024-05-12 09:00:16 · 683 阅读 · 0 评论 -
Android CarAudio
Android Automotive OS (AAOS) 是在核心 Android 音频堆栈的基础之上打造而成,以支持用作车辆信息娱乐系统的用例。AAOS 负责实现信息娱乐声音(即媒体、导航和通讯声音),但不直接负责具有严格可用性和计时要求的铃声和警告。虽然 AAOS 提供了信号和机制来帮助车辆管理音频,但最终还是由车辆来决定应为驾驶员和乘客播放什么声音,从而确保对保障安全至关重要的声音和监管声音能被确切听到,而不会中断。原创 2024-05-12 08:57:39 · 1018 阅读 · 0 评论 -
Android AudioFlinger
AudioPolicyService 与 AudioFlinger 是 Android 音频系统的两大基本服务。前者是音频系统策略的制定者,负责音频设备切换的策略抉择、音量调节策略等;后者是音频系统策略的执行者,负责音频流设备的管理及音频流数据的处理传输,所以 AudioFlinger 也被认为是 Android 音频系统的引擎。原创 2024-05-07 19:09:49 · 917 阅读 · 0 评论 -
Android13 AudioFlinger setParameters流程分析
在这之后就是AudioHAL的处理了。原创 2024-05-07 19:01:54 · 112 阅读 · 0 评论 -
Android13 AudioFlinger RecordThread threadLoop流程分析
【代码】Android13 AudioFlinger RecordThread threadLoop分析。原创 2024-05-07 18:47:09 · 176 阅读 · 0 评论 -
Android13 AudioFlinger RecordHandle start流程分析
唤醒recordThread后,recordThread就会开始它自己的工作,thread_loop会动起来,不停的从AudioHAL读取数据,然后通过共享内存传给AudioRecord。调用mActiveTracks.add(recordTrack);将当前recordTrack加入到RecordTrack中。调用recordTrack->mResamplerBufferProvider->reset();调用recordTrack->mRecordBufferConverter->reset();原创 2024-05-07 18:43:33 · 295 阅读 · 0 评论 -
Android13 AudioFlinger TrackHandle start流程分析
在分析AudioTrack时已经分析到IAudioTrack接口了,下面我们继续从IAudioTrack接口向下继续分析,先来张图:这里重要的处理有两步,分别是:调用playbackThread->addTrack_l(this);将当前track加入到playbackTrack中。调用AudioTrackServerProxy的obtainBuffer函数,获取AudioTrack缓冲区数据。原创 2024-05-07 17:48:29 · 447 阅读 · 0 评论 -
Android13 AudioFlinger PlaybackThread threadLoop分析
以上函数主要进行3步处理:1、调用子类MixerThread的prepareTracks_l函数进行track预处理。2、调用子类MixerThread的threadLoop_mix进行混音处理。3、调用threadLoop_write函数,向硬件抽象层写数据,写入HAL。原创 2024-05-07 17:47:43 · 358 阅读 · 0 评论 -
Android13 AudioFlinger createRecord流程分析
调用recordTrack = thread->createRecordTrack_l函数创建RecordTrack。调用AudioSystem::getInputForAttr函数获取到匹配的输入设备。调用new RecordHandle创建TrackHandle。再向下分析就是AudioHAL部分了,这里就不再继续分析了。原创 2024-05-07 17:22:00 · 480 阅读 · 0 评论 -
Android13 AudioFlinger createTrack流程分析
AudioFlinger在进行PlaybackTrack相关操作时需要先创建PlaybackTrack,在JAVA层AudioTrack的构造函数中会通过JNI调用C++层AudioTrack的set函数,在AudioTrack的set函数中会调用通过AudioSystem获取IAudioFlinger,然后调用AudioFlinger的createTrack函数,从AudioTrack到IAudioFlinger的部分在AudioTrack已经分析过了,下面我们继续分析AudioFlinger的部分:Pl原创 2024-05-07 17:07:02 · 566 阅读 · 0 评论 -
Audio AudioPolicy
AudioPolicy是Android系统中的一个音频策略管理框架,它的主要目的是协调各种声音音频流的输出,以保证音频资源按照预期的方式和优先级分配和管理,为用户提供良好的音频体验。这里的source,既可以是实实在在的音频输入设备,如MIC,也可以是底层中混音后的音频流;AudioRoute用于描述音频信号从输入到输出的路径,包括路径上的模块和设备等信息,在AudioPolicy中,可以通过AudioRoute来精选音频流的路由和设备的选择,以确保正确的音频数据在正确的时候从正确的设备播放出来。原创 2024-05-07 16:03:20 · 756 阅读 · 0 评论 -
Android AudioSystem
AudioSystem是Android系统中提供的一个API,用于管理音频系统的参数和状态。它提供了一组静态方法,允许开发者查询和设置音频参数、获取系统状态、控制音频焦点等。AudioSystem是Android系统中标准的音频API之一,底层实现与AudioService密切相关。AudioSystem包括了很多函数接口,其中最常用的函数为setMasterVolume和getMasterVolume,其中,setMasterVolume函数用于设置全局的音量,该函数接受一个浮点类型的值。原创 2024-05-07 14:54:38 · 731 阅读 · 0 评论 -
Android13 AudioService启动流程分析
创建AudioSystem线程(createAudioSystemThread)初始化音频录制监视器(mRecordMonitor.initMonitor)创建音频录制监视器(RecordingActivityMonitor)创建音频播放监视器(PlaybackActivityMonitor)创建音频焦点控制器(MediaFocusControl)原创 2024-05-07 14:26:55 · 271 阅读 · 0 评论 -
Android AudioService
AudioService是Android系统中提供的一个系统基本的服务,负责管理应用程序和系统的音频资源。它主要负责在操作系统中分配、控制和处理音频资源,以提供高质量、可靠和灵活的音频服务。AudioService还负责管理系统音频路由、音频格式转换、音量控制、音频设备的连接和断开、通知应用程序和服务启动/停止的音频事件等。原创 2024-05-07 14:25:14 · 764 阅读 · 0 评论 -
Android13 AudioManager dispatchAudioFocusChange流程分析
【代码】Android AudioManager dispatchAudioFocusChange流程分析。原创 2024-05-07 14:10:19 · 290 阅读 · 0 评论 -
Android13 AudioManager setFocusRequestResult流程分析
【代码】Android13 AudioManager setFocusRequestResult流程分析。原创 2024-05-07 14:02:39 · 167 阅读 · 0 评论