![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android Audio工程师进阶系列
文章平均质量分 59
Android系统音频发挥巨大作用,比如Speaker、蓝牙音乐、蓝牙电话、USB声卡、语音唤醒和识别、MIC阵列等,都需要Android系统音频做支撑,这些模块联系起来确是极其复杂,本栏会以高通平台为例深入分享几个模块.
优惠券已抵扣
余额抵扣
还需支付
¥299.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
Android系统攻城狮
CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
展开
-
Android14音频进阶之CarAudioManager::getOutputDeviceForUsage流程分析(七十七)
本篇目的:Android14音频进阶之CarAudioManager::getOutputDeviceForUsage流程分析Android 14的CarAudioService服务是Android车载信息娱乐系统的一个重要组成部分,它负责管理和控制车辆音频系统的各个方面,包括音量调节、音频源选择、音频焦点管理和音频路由等。CarAudioService服务通过提供一系列的API接口,使得车载应用能够方便地与车辆音频系统进行交互,从而实现更加丰富和灵活的车载音频体验。原创 2024-06-12 00:48:40 · 1679 阅读 · 0 评论 -
Android音频进阶之1.0到14.0音频焦点变化(七十六)
本篇目的:Android1.0到Android14.0音频焦点变化初期的Android版本并未引入专门的音频焦点管理机制。应用之间的音频竞争是通过简单的音频策略来处理的,没有明确的API来管理音频焦点。这导致了多应用同时播放音频时的混乱局面。原创 2024-06-04 00:11:04 · 1757 阅读 · 1 评论 -
Android14音频进阶之dump各阶段音频数据<Tee Sink方案>(七十五)
本篇目的:Android14音频进阶之dump各阶段音频数据Tee Sink是一种AudioFlinger调试功能,可以在系统源码中使用,它支持dump AudioFlinger各个音频处理阶段的数据。Android 5.x、Android 6.x与Android 7.x以上版本dump目录区别Android 5.x 和 6.x版本dump目录:/data/misc/mediaAndroid 7.x +版本dump目录:/data/misc/audioserver。原创 2024-05-27 04:00:00 · 1659 阅读 · 0 评论 -
Android14音频进阶之AAOS之CarAudioService如何衔接AudioControl服务(七十四)
本篇目的:Android14音频进阶之AAOS之CarAudioService如何衔接AudioControl服务。原创 2024-05-20 09:38:24 · 1134 阅读 · 0 评论 -
Android14音频进阶之优化内核编译速度(七十三)
本篇目的:Android14音频进阶之优化内核编译速度,缩短每次编译时间AOSP内核版本:kernel 4.19提高Linux内核速度可以通过多种方式实现,以下是一些建议:优化编译选项:在编译Linux内核时,可以使用特定的编译选项来优化性能,如使用-O2-Os或等选项。启用内核预取:通过启用内核预取(prefetching)和乱序执行,可以提高CPU的利用率。减少内核参数:合理减少不必要的内核参数可以减少系统调用的开销,例如,通过调整和等参数来优化内存使用。使用内核调优工具:使用如。原创 2024-05-16 07:22:49 · 311 阅读 · 0 评论 -
Android14音频进阶之ADSP调试(七十二)
本篇目的:Android14音频进阶之开启内核dynamic debug动态调试内核的dynamic debug动态调试是一种强大的功能,它允许开发者和系统管理员在内核运行时对其进行调试和监测。这种调试技术可以在不重启系统的情况下,实时地修改内核的参数和行为,以便于分析和解决内核中的问题和性能瓶颈。dynamic debug技术基于内核的模块化设计。每个内核模块都可以独立地加载和卸载,因此,开发者可以针对特定的模块进行调试,而不会影响整个系统的稳定性和性能。原创 2024-05-16 03:15:00 · 993 阅读 · 0 评论 -
Android14音频进阶之AAOS音频焦点(七十一)
本篇目的:Android14音频进阶之AAOS音频焦点本篇来介绍一下AAOS车机音频焦点,它和手机、电视还是不一样的。原创 2024-05-15 09:26:35 · 314 阅读 · 0 评论 -
Android14音频进阶之AAOS关键服务CarAudioManager与CarAudioService(七十)
本篇目的:Android14音频进阶之AAOS关键服务CarAudioManager与CarAudioServiceAndroid14音频进阶之车载音频系统AAOS:VehicleService服务学习<下篇>AAOS车载系统中,关于音频重要的两个服务类,分别是CarAudioManager和CarAudioService,他们就像Android的AudioService与AudioManager一样,一个是服务端,一个是客户端。原创 2024-05-06 09:34:02 · 1936 阅读 · 1 评论 -
Android14音频进阶之车载音频系统AAOS:VehicleService服务学习<下篇>(六十九)
本篇目的:Android14音频进阶之车载音频系统AAOS:VehicleService服务学习Android14音频进阶之车载音频系统AAOS:VehicleService服务本文继续分析AAOS车载音频系统VehicleService服务启动过程。答案:android.hardware.automotive.vehicle@2.0::IVehicle/default。原创 2024-04-29 14:52:39 · 1468 阅读 · 2 评论 -
Android14音频进阶之车载音频系统AAOS:VehicleService服务(六十八)
本篇目的:Android14音频进阶之AAOS车载音频系统VehicleService服务学习接第六十七篇:Android14音频进阶之Perfetto高级调试技巧本篇来分析一下AAOS车载音频系统VehicleService服务启动过程。在AAOS系统未推出之前,大家开发车机系统,都是基于AOSP原生系统开发,Google开始发力自己的车机系统,各大车企也纷纷加入。从而降低了企业的开发成本,但是开发人员的学习成本并没有因此降低。原创 2024-04-22 07:00:00 · 1599 阅读 · 0 评论 -
Android14音频进阶之Perfetto高级调试技巧(六十七)
本篇目的:Android14音频进阶之Perfetto高级调试技巧接第六十六篇:Android14音频进阶之<进阶调试>:Perfetto定位系统音频问题上一篇与读者分享如何使用谷歌新一代的性能分析工具Perfetto,可能还有些读者还是云里雾里,本文来一个dump Android各个层级trace的实战篇。Perfetto是一个很强大的性能优化和debug系统疑难杂症的工具,有了它图形化的功能,可以帮我们达到事半功倍的效果,学习它,是为了让它的能力能够释放出来,帮我们从繁杂的debug中解脱出来。原创 2024-04-15 07:00:00 · 1724 阅读 · 0 评论 -
Android14音频进阶之<进阶调试>:Perfetto定位系统音频问题(六十六)
本篇目的:Android14音频进阶之Perfetto如何定位系统音频问题接第六十五篇:混音线程MixerThread、FastMixer、FastThread、AudioMixer到底什么关系本篇来学习如何分析音频性能?以及如何在函数级别定位问题?其实本篇不只是用于音频,也可以延伸到其他模块。我们来借助一款系统和应用的分析工具:Perfetto!在Android9.0以前,其实用的是systrace工具分析。原创 2024-04-08 16:48:18 · 1933 阅读 · 0 评论 -
Android14音频进阶之<面试必知>:混音线程MixerThread、FastMixer、FastThread、AudioMixer到底什么关系(六十五)
本篇目的:Android14音频进阶:混音线程MixerThread、FastMixer、AudioMixer等到底什么关系?接第六十四篇AudioFlinger向HAL输出数据过程在音频面试中,有时会遇到这样的提问:MixerThread、FastMixer、AudioMixer、FastThread线程类之间是什么关系?有什么区别?以及什么情况会进行重采样工作?带着这些实际面试实际的问题,我们一起来拆解、学习它。原创 2024-04-01 07:00:00 · 1496 阅读 · 0 评论 -
Android14音频进阶:AudioFlinger向HAL输出数据过程(六十四)
本篇目的:Android14音频进阶:AudioFlinger向HAL写数据过程AudioFlinger究竟如何混音?本篇继续分享:在经过AudioFlinger::MixerThread::threadLoop_mix混音以后,紧接着调用AudioFlinger::MixerThread::threadLoop_write函数向Audio HAL写数据过程。原创 2024-03-25 09:40:20 · 2086 阅读 · 0 评论 -
Android14音频进阶:AudioFlinger究竟如何混音?(六十三)
本篇目的:Android14音频进阶:AudioFlinger如何mix音频数据生产者与消费者模型本篇继续分享:AudioFlinger服务端如何消费音频数据?在上一篇已经分享,AudioTrack通过AudioFlinger创建的匿名共享内存,通过AudioTrackClientProxy类向内存中写数据,那么在服务端如何消费呢?下面我们以MixerThread线程为例讲解。原创 2024-03-19 16:14:07 · 1092 阅读 · 0 评论 -
Android14音频进阶:生产者与消费者模型(六十二)
本篇目的:Android14音频进阶:生产者与消费者模型剖析关键结构体:audio_track_cblk_t本篇继续分享AudioTrackClientProxy与AudioTrackServerProxy生产者与消费者模型。为了便于理解,画了一个图,AudioTrack与AudioFlinger读、写共享内存的音频数据的示意图,如下所示。原创 2024-03-12 09:00:00 · 962 阅读 · 0 评论 -
Android14音频进阶:剖析关键数据结构: audio_track_cblk_t(六十一)
本篇目的:Android14音频进阶:剖析关键结构体:audio_track_cblk_tAudioTrack如何拿到AudioFlinger创建的匿名共享内存我们已经拿到匿名共享内存的对象,那么我们怎么向里面AudioFlinger传输数据呢?本篇先梳理下关键结构体audio_track_cblk_t和ClientProxy、AudioTrackClientProxy、AudioRecordServerProxy等类关系。原创 2024-03-12 08:00:00 · 330 阅读 · 0 评论 -
Android14音频进阶:AudioTrack如何拿到AudioFlinger创建的匿名共享内存(六十)
本篇目的:Android14音频进阶:AudioTrack如何拿到AudioFlinger创建的匿名共享内存Android14音频进阶:AIDL数据转换关键图解上篇内容:已经分享了CreateTrackInput、CreateTrackOutput与CreateTrackRequest、media::CreateTrackResponse的AIDL之间基本数据转换。本篇内容:AudioTrack如何拿到AudioFlinger创建的匿名共享内存?原创 2024-03-08 09:45:00 · 334 阅读 · 0 评论 -
Android14音频进阶:AIDL数据转换关键图解(五十九)
本篇目的:Android14音频进阶:MediaPlayerService如何启动AudioTrack下篇Android14音频进阶:AudioTrack与AudioFlinger创建数据通道。原创 2024-03-07 11:15:00 · 265 阅读 · 0 评论 -
Android14音频进阶:AudioTrack与AudioFlinger创建数据通道(五十八)
本篇目的:Android14音频进阶:AudioTrack与AudioFlinger创建数据通道Android14音频进阶:AudioTrack如何巧妙衔接AudioFlingerAudioTrack作为客户端,如何将音频数据发送给AudioFlinger呢?答案是:匿名共享内存。本文继续分享:在Androi14中,AudioTrack与AudioFlinger之间是创建匿名共享内存的过程。我们接着上篇的AudioTrack::createTrack_l函数继续往下讲解。原创 2024-03-07 10:23:53 · 510 阅读 · 0 评论 -
Android14音频进阶:AudioTrack如何巧妙衔接AudioFlinger(五十七)
本篇目的:Android14音频进阶:AudioTrack如何巧妙衔接AudioFlingerAndroid14音频进阶:MediaPlayerService如何启动AudioTrack 下篇(五十六)本篇继续讲解下一个阶段:AudioTrack如何巧妙衔接AudioFlinger服务的?我们接着上篇的MediaPlayerService::AudioOutput::open函数继续往下讲解。原创 2024-03-07 09:57:37 · 661 阅读 · 0 评论 -
Android14音频进阶:MediaPlayerService如何启动AudioTrack 下篇(五十六)
本篇目的:Android14音频进阶:MediaPlayerService如何启动AudioTrack下篇接Android14音频进阶:MediaPlayerService如何启动AudioTrack上篇第三条主线:MediaPlayer::start启动AudioTrack。原创 2024-02-06 11:18:37 · 484 阅读 · 0 评论 -
Android14音频进阶:MediaPlayerService如何启动AudioTrack 上篇(五十五)
本篇目的:Android14音频进阶:MediaPlayerService如何启动AudioTrack?接上篇Android14源码剖析:孪生兄弟MediaPlayer与MediaPlayerService到底什么关系?本篇继续分析MediaPlayerService如何调用NuPlayer播放器,如何启动AudioTrack的?我们接着上篇的MediaPlayerService::Client::setDataSource_pre函数继续推进。原创 2024-02-06 11:08:35 · 1182 阅读 · 0 评论 -
Android14源码剖析:MediaPlayer与MediaPlayerService区别?(五十四)
本篇目的:Android14源码剖析:MediaPlayer与MediaPlayerService的关联是不是用MediaPlayer、MediaPlayerService的时候,觉得它们就是一个服务呢?继续往下看,来解除你的疑惑…如果不想看中间解析过程,可以直接跳到结尾查看图解…MediaPlayer继承自BnMediaPlayerClient的binder服务端。那么BnMediaPlayerClient来自哪里呢?继续往下看。原创 2024-01-22 10:37:14 · 482 阅读 · 0 评论 -
Android14实战:调整A2DP音量曲线(五十三)
本篇目的:Android14实战:调整A2DP音量曲线A2DP(Advanced Audio Distribution Profile) 是一种蓝牙音频传输协议,允许设备通过蓝牙无线技术传输高质量立体声音频。A2DP 使得用户可以通过蓝牙连接他们的智能手机、平板电脑或电脑到兼容的无线耳机、扬声器或汽车音响系统,从而实现便捷的音频传输和无线音乐播放。A2DP 支持多种音频编解码器,如SBC、AAC和aptX,以提供更好的音频质量和性能。音量级别通常用于指代音频设备的音量控制范围或调节单位。原创 2024-01-22 10:20:28 · 574 阅读 · 0 评论 -
Android14实战:打破音频默认重采样的限制(五十二)
本篇目的:Android14实战:打破音频默认重采样的限制。原创 2024-01-13 20:53:40 · 990 阅读 · 0 评论 -
Android12之音频类型分组(五十一)
本篇目的: 理解android音频类型分组。原创 2023-05-18 14:35:39 · 932 阅读 · 0 评论 -
Android12之AudioFlinger服务名与实现服务的descriptor区别(五十)
本篇目的:为了捋清楚AudioFlinger服务名和DO_NOT_DIRECTLY_USE_ME_IMPLEMENT_META_INTERFACE的关系.原创 2023-05-18 14:23:24 · 386 阅读 · 0 评论 -
Android12之AudioFlinger中aidl server端理解(四十九)
Android12以后,逐渐开始使用aidl来替代HIDL,其实不管是aidl和hidl本质都是自动生成服务端代码,且是继承Binder服务的。在浏览代码的过程中,发现aidl生成的服务端代码有个有意思的发现,就拿AudioFlinger代码为例,看下它的规则是怎样的?frameworks/av/media/libaudioclient/aidl/android/media/IAudioFlingerService.aidl原创 2023-02-04 15:58:56 · 930 阅读 · 0 评论 -
Android12之aidl与hal直通(四十八)
AIDL+HAL直通模式。原创 2023-02-03 15:35:56 · 2323 阅读 · 4 评论 -
Android之耳机热插拔检测方式(四十七)
android audio 生产者与消费者 简介全面接触生产者/消费者问题是在操作系统原理中,并发性原理讨论的问题 生产者/消费者问题。最近的工作偏向音频,接着上一篇文章,用生产者,消费者模型来理解Android音频。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。Android中生产者与消费者。原创 2022-12-28 15:31:49 · 325 阅读 · 0 评论 -
AudioFlinger初始化过程(四十六)
***/1. addService()为纯虚函数,需要继承IServiceManager的子类来实现,作用是用来注册服务类。2. 第一个参数:注册服务类的名字3. 第二个参数:传入继承自IBinder的子类对象,即父类指向子类对象.4. 第三个参数:服务是否允许隔离,一般传默认值为false5. 第四个参数:服务注册使用默认转储优先级,一般默认值为DUMP_FLAG_PRIORITY_DEFAULT。原创 2022-12-26 23:20:31 · 490 阅读 · 0 评论 -
AudioFlinger之ANDROID_API用法(四十五)
目录1.常见例子.frameworks/av/services/audioflinger/AudioFlinger.h.frameworks/av/services/audiopolicy/service/AudioPolicyService.h2.ANDROID_API定义.prebuilts/vndk/v30/arm/include/system/core/libcutils/include_vndk/cutils/compiler.h3.ANDROID_API作用.fra原创 2022-12-20 11:11:04 · 385 阅读 · 0 评论 -
AudioFlinger继承关系图(四十五)
本篇目的:AudioFlinger继承关系图。原创 2022-12-18 00:02:56 · 36 阅读 · 0 评论 -
AudioFlinger播放选择(四十四)
1.frameworks/av/media/libmediaplayerservice/MediaPlayerService.cpp<1>.void MediaPlayerService::instantiate() { defaultServiceManager()->addService(String16("media.player"), new MediaPlayerService());}<2>.status_t MediaPlayerService.原创 2022-05-11 14:26:22 · 367 阅读 · 0 评论 -
Android Audio基础知识梳理(五十四)
简介:CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!【原创干货持续更新中……】🚀】🚀人生格言:人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.1.前言Android Audio基础知识梳理。原创 2022-02-12 00:14:12 · 63 阅读 · 0 评论 -
Android audio实用参数(五十三)
本篇目的:理解Android audio实用参数定义原创 2022-02-11 23:35:28 · 58 阅读 · 0 评论 -
Audio之音频帧周期(四十三)
一帧相当于正在播放的一个样本,与通道数或位数无关。例如立体声 48khz 16 位 PCM 流的 1 帧是 4 个字节。 5.1 48khz 16bit PCM 流的 1 帧是 12 字节。周期是每个硬件中断之间的帧数。poll() 将在一段时间内返回一次。缓冲区是一个环形缓冲区。缓冲区大小始终必须大于一个周期大小。通常这是 2*周期大小,但有些硬件可以为每个缓冲区执行 8 个周期。缓冲区大小也可能不是周期大小的整数倍。现在,如果硬件已设置为 48000Hz,2 个周期,每个周期 1024翻译 2021-12-15 22:36:08 · 1280 阅读 · 0 评论 -
ALSA libasound播放与录音实战(四十四)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android系统攻城狮 原创 2021-09-19 19:27:52 · 130 阅读 · 0 评论 -
跨平台SDL之播放与录音实战(四十三)
简介:CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!【原创干货持续更新中……】🚀【原创干货持续更新中……】🚀人生格言:人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.1.前言本篇目的:跨平台SDL之播放/录音。原创 2021-09-15 20:59:12 · 115 阅读 · 0 评论