- 博客(23)
- 收藏
- 关注
原创 Android10 音频系统之AudioRecord
mAudioRecord是audioFlinger->openRecord返回得到的recordHandle类型,recordHandle使用AudioFlinger::recordTrack初始化),实际上调用的是AudioFlinger::RecordThread::RecordTrack::start方法。3.调用AudioRecord的stop方法,AudioRecord就是RecordHandle对象,所以调用的stop方法就是RecordHandle的stop方法。
2025-03-18 16:50:31
1068
1
原创 Anroid10 音频系统之数据传递
这和平时通过write系统调用往文件中写数据类似,但这种工作方式每次都需要把数据从用户提供的Buffer中拷贝到AudioTrack内部的Buffer中,这在一定程度上会使引入延时。MODE_STATIC:这种模式下,在play之前只需要把所有数据通过一次write调用传递到AudioTrack中的内部缓冲区,后续就不必再传递数据了。MODE_STREAM模式 会使用到环形缓存区来同步数据,一个生产数据,一个消费数据,这个时候使用环形缓冲区是最可靠的。环形缓冲区:初始R=0,W=0,buf长度为LEN。
2025-03-14 16:48:16
938
原创 Android10 车载音频架构之动态路由的配置
通过contextNumber获取到usages,遍历usages将usage添加到mixingRuleBuilder中,然后再将mixingRuleBuilder添加到AudioMix中,将AudioMix addMix 到AudioPolicy中, 这样usage和device就关联上了。通过CONTEXT_NAME_MAP关系,根据context可以找到contextNumber。
2024-07-09 17:37:27
1289
原创 Android10 车载音频架构之音频焦点的管理
两个或多个 Android 应用可以同时将音频播放到同一输出流,系统会将所有音频混合在一起。虽然这在技术上非常惊人,但可能会令用户非常头疼。为了避免每个音乐应用同时播放,Android 引入了“音频焦点”的概念。一次只能有一个应用获得音频焦点。 当您的应用需要输出音频时,它需要请求获得音频焦点,在获得焦点时,它可以发出声音。不过,获得音频焦点后,您可能无法将焦点一直保留到播放完成。其他应用可以请求焦点,从而抢占您持有的音频焦点。如果发生这种情况,您的应用应暂停播放或调低音量,以
2024-06-19 12:33:11
596
原创 Android10 音频系统之耳麦插拔
硬件插上耳麦发生中断, 在中断处理程序中设置声卡让声音从耳机中输出,驱动程序上报音频拔插事件,该事件为某个device插入或拔出,接下来把输出通道的选择权交给android系统,由Android系统进行声音通道的切换操作
2024-06-17 23:12:09
761
原创 Android10 音频系统之AudioFlinger
AudioPolicyService与AudioFlinger是Android音频系统的两大基本组件。前者是音频系统策略的制定者,负责音频设备的切换、音量调节策略;后者是音频系统策略的执行者,负责音频流设备的管理及音频流数据的处理。
2024-06-17 18:03:31
482
原创 Android10 音频系统之AudioTrack
Android上使用AudioTrack可以实现播放PCM。本文深入分析了Android的AudioTrack.cpp源码,详细解释了从AudioTrack.java到AudioTrack.cpp的工作流程。主要内容包括获取缓冲区最小值、AudioTrack对象的创建、音频数据的写入以及停止和释放方法
2024-06-17 17:56:45
1961
原创 Android10 音频系统之HAL分析
Android的音频硬件抽象层(HAL)将更高级别的、android.media中的音频特定框架api和底层的驱动和硬件关联了起来。
2024-06-04 09:38:48
2533
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人