Android Audio工程师进阶系列
文章平均质量分 62
Android系统音频发挥巨大作用,比如Speaker、蓝牙音乐、蓝牙电话、USB声卡、语音唤醒和识别、MIC阵列等,都需要Android系统音频做支撑,这些模块联系起来确是极其复杂,本栏会以高通平台为例深入分享几个模块.
优惠券已抵扣
余额抵扣
还需支付
¥299.90
¥399.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
Android系统攻城狮
《Android系统多媒体进阶实战》一书作者 - 专注Android/Linux系统多媒体技术,与广大开发者一起日益精进。
展开
-
Android15音频进阶之新播放器HwAudioSource(八十六)
本篇目的:Android14音频进阶之新型播放器HwAudioSource在 Android 系统中,是一种新型的音频播放与录制接口,它的设计初衷是为了提供更加灵活、高效的音频处理能力,尤其是在需要与底层硬件深度结合的应用场景中。与传统的和AudioTrack类不同,更加注重性能和低延迟,并且可以更好地利用硬件加速功能。原创 2024-09-23 08:00:00 · 1069 阅读 · 0 评论 -
Android14音频进阶之如何集成音效(八十五)
本篇目的:Android14音频进阶之集成音效Android音效是指Android操作系统在播放音频时的一系列处理和效果,它包括音频的播放、录制、混音、特效处理以及音量控制等功能。Android音效系统是移动设备用户体验的重要组成部分,它直接影响用户对设备质量的感知。原创 2024-09-16 08:00:00 · 1437 阅读 · 0 评论 -
Android14音频进阶之高通Elite架构指定通道播放(八十四)
本篇目的:在Bring up中,如果声卡驱动已经Ready,如何来测试它?答案:使用tinyplay播放wav音频测试验证.硬件:Pixel5高通Elite音频架构是高通公司为其移动设备平台开发的一套先进音频处理技术,旨在提供高质量音频体验和支持各种应用场景,如音乐播放、语音通信、游戏音效等。该架构整合了多种音频算法和硬件加速技术,能够在低功耗下实现卓越的音频性能。原创 2024-09-09 07:45:00 · 1682 阅读 · 0 评论 -
Android14音频进阶之定制ramdisk文件系统init服务(八十三)
本篇目的:Android14音频进阶之定制ramdisk文件系统init服务硬件环境:Pixel5手机软件环境:AOSP14需求:1.在调试开发音频时,有时候需要关闭Selinux来开发验证,但是在AOSP却异常的麻烦,因为需要在selinux.cpp修改,但是它修改是编译到boot.img中。2.在AOSP14中,selinux.cpp首先会被编译、打包到vendor_ramdisk-barbet.img中,然后再进一步打包到boot.img中。原创 2024-09-04 00:41:22 · 1616 阅读 · 0 评论 -
Android14音频进阶之音量类型分组(八十二)
本篇目的:Android14音频进阶之流音量类型分组在Android系统中,音量管理是一项重要功能,它允许用户控制设备上不同音频流的音量水平。Android系统通过将这些音频流分组来实现对音量的细粒度控制,这些分组被称为音量类型(Volume Types)。原创 2024-08-19 08:45:00 · 1297 阅读 · 0 评论 -
Android14音频进阶之多通道录音与播放掩码计算(八十一)
本篇目的:Android高版本以上已经支持多通道录音和播放,但是如何计算、以及设置超过两个通道以上的通道数呢?Android 14 在音频功能方面进行了多项重要的更新与改进,为用户提供了更丰富、更个性化的听觉体验,并提升了系统整体的音频处理能力。首先,Android 14 引入了无损音频传输支持。这一功能让用户在使用兼容设备时,可以享受无损格式的高品质音乐传输。这对于高端音频爱好者而言是一大福音,能够保证音频在传输过程中不受到压缩带来的质量损失,从而提供更纯粹的听觉体验。原创 2024-08-12 08:45:00 · 1691 阅读 · 0 评论 -
Android14音频进阶调试之命令播放mp3/aac非裸流音频(八十)
本篇目的:Android14上,当我们没有app,又想测试mp3、aac、wav等音频时,这时候我们可以使用stagefright解码、播放音频文件。Stagefright 是 Android 系统中的一个多媒体框架,用于处理各种音频和视频文件格式。它提供了解析、解码、编码和播放多媒体内容的功能。Stagefright 框架包括多种组件和库,负责不同的多媒体处理任务。通过 Stagefright,Android 设备能够高效地播放和处理多媒体内容。原创 2024-08-06 21:45:00 · 1327 阅读 · 0 评论 -
Android14音频进阶之使能内核debugfs:Adsp输出日志(七十九)
本篇目的:Android14音频进阶之使能内核debugfs:Adsp输出日志在使用Pixel调试音频驱动时,需要将它日志输出,但是提前要打开debugfs文件系统,于是有了本篇。debugfs 是 Linux 内核提供的一个虚拟文件系统,专用于调试和诊断内核及其子系统。它允许开发人员和系统管理员通过简单的文件操作来检查和修改内核状态,从而帮助调试和优化系统。原创 2024-08-03 15:40:49 · 321 阅读 · 0 评论 -
Android14音频进阶之禁止boot.img签名(七十八)
本篇目的:在调试音频内核模块时,高通的内核镜像boot.img往往会签名,导致无法insmod ko文件,所以将它禁掉,保证调试的顺畅。AVB(Android Verified Boot)是一种用于确保设备启动过程中加载的软件未被篡改的安全机制。在Linux内核中,avbtool是一个重要的工具,用于生成和管理AVB签名。本文将简要介绍avbtool签名的过程及其作用。首先,avbtool签名的主要目的是确保设备在启动过程中加载的内核、系统分区等组件的安全性。原创 2024-07-18 23:50:30 · 2748 阅读 · 0 评论 -
Android14音频进阶之CarAudioManager::getOutputDeviceForUsage流程分析(七十七)
本篇目的:Android14音频进阶之CarAudioManager::getOutputDeviceForUsage流程分析Android 14的CarAudioService服务是Android车载信息娱乐系统的一个重要组成部分,它负责管理和控制车辆音频系统的各个方面,包括音量调节、音频源选择、音频焦点管理和音频路由等。CarAudioService服务通过提供一系列的API接口,使得车载应用能够方便地与车辆音频系统进行交互,从而实现更加丰富和灵活的车载音频体验。原创 2024-06-12 00:48:40 · 1763 阅读 · 0 评论 -
Android音频进阶之1.0到14.0音频焦点变化(七十六)
本篇目的:Android1.0到Android14.0音频焦点变化初期的Android版本并未引入专门的音频焦点管理机制。应用之间的音频竞争是通过简单的音频策略来处理的,没有明确的API来管理音频焦点。这导致了多应用同时播放音频时的混乱局面。原创 2024-06-04 00:11:04 · 1799 阅读 · 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 · 1793 阅读 · 0 评论 -
Android14音频进阶之AAOS之CarAudioService如何衔接AudioControl服务(七十四)
本篇目的:Android14音频进阶之AAOS之CarAudioService如何衔接AudioControl服务。原创 2024-05-20 09:38:24 · 1250 阅读 · 0 评论 -
Android14音频进阶之优化内核编译速度(七十三)
本篇目的:Android14音频进阶之优化内核编译速度,缩短每次编译时间AOSP内核版本:kernel 4.19提高Linux内核速度可以通过多种方式实现,以下是一些建议:优化编译选项:在编译Linux内核时,可以使用特定的编译选项来优化性能,如使用-O2-Os或等选项。启用内核预取:通过启用内核预取(prefetching)和乱序执行,可以提高CPU的利用率。减少内核参数:合理减少不必要的内核参数可以减少系统调用的开销,例如,通过调整和等参数来优化内存使用。使用内核调优工具:使用如。原创 2024-05-16 07:22:49 · 345 阅读 · 0 评论 -
Android14音频进阶之ADSP调试(七十二)
本篇目的:Android14音频进阶之开启内核dynamic debug动态调试内核的dynamic debug动态调试是一种强大的功能,它允许开发者和系统管理员在内核运行时对其进行调试和监测。这种调试技术可以在不重启系统的情况下,实时地修改内核的参数和行为,以便于分析和解决内核中的问题和性能瓶颈。dynamic debug技术基于内核的模块化设计。每个内核模块都可以独立地加载和卸载,因此,开发者可以针对特定的模块进行调试,而不会影响整个系统的稳定性和性能。原创 2024-05-16 03:15:00 · 1171 阅读 · 0 评论 -
Android14音频进阶之AAOS音频焦点(七十一)
本篇目的:Android14音频进阶之AAOS音频焦点本篇来介绍一下AAOS车机音频焦点,它和手机、电视还是不一样的。原创 2024-05-15 09:26:35 · 360 阅读 · 0 评论 -
Android14音频进阶之AAOS关键服务CarAudioManager与CarAudioService(七十)
本篇目的:Android14音频进阶之AAOS关键服务CarAudioManager与CarAudioServiceAndroid14音频进阶之车载音频系统AAOS:VehicleService服务学习<下篇>AAOS车载系统中,关于音频重要的两个服务类,分别是CarAudioManager和CarAudioService,他们就像Android的AudioService与AudioManager一样,一个是服务端,一个是客户端。原创 2024-05-06 09:34:02 · 2108 阅读 · 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 · 1503 阅读 · 2 评论 -
Android14音频进阶之车载音频系统AAOS:VehicleService服务(六十八)
本篇目的:Android14音频进阶之AAOS车载音频系统VehicleService服务学习接第六十七篇:Android14音频进阶之Perfetto高级调试技巧本篇来分析一下AAOS车载音频系统VehicleService服务启动过程。在AAOS系统未推出之前,大家开发车机系统,都是基于AOSP原生系统开发,Google开始发力自己的车机系统,各大车企也纷纷加入。从而降低了企业的开发成本,但是开发人员的学习成本并没有因此降低。原创 2024-04-22 07:00:00 · 1634 阅读 · 0 评论 -
Android14音频进阶之Perfetto高级调试技巧(六十七)
本篇目的:Android14音频进阶之Perfetto高级调试技巧接第六十六篇:Android14音频进阶之<进阶调试>:Perfetto定位系统音频问题上一篇与读者分享如何使用谷歌新一代的性能分析工具Perfetto,可能还有些读者还是云里雾里,本文来一个dump Android各个层级trace的实战篇。Perfetto是一个很强大的性能优化和debug系统疑难杂症的工具,有了它图形化的功能,可以帮我们达到事半功倍的效果,学习它,是为了让它的能力能够释放出来,帮我们从繁杂的debug中解脱出来。原创 2024-04-15 07:00:00 · 1772 阅读 · 0 评论 -
Android14音频进阶之<进阶调试>:Perfetto定位系统音频问题(六十六)
本篇目的:Android14音频进阶之Perfetto如何定位系统音频问题接第六十五篇:混音线程MixerThread、FastMixer、FastThread、AudioMixer到底什么关系本篇来学习如何分析音频性能?以及如何在函数级别定位问题?其实本篇不只是用于音频,也可以延伸到其他模块。我们来借助一款系统和应用的分析工具:Perfetto!在Android9.0以前,其实用的是systrace工具分析。原创 2024-04-08 16:48:18 · 1974 阅读 · 0 评论 -
Android14音频进阶之<面试必知>:混音线程MixerThread、FastMixer、FastThread、AudioMixer到底什么关系(六十五)
本篇目的:Android14音频进阶:混音线程MixerThread、FastMixer、AudioMixer等到底什么关系?接第六十四篇AudioFlinger向HAL输出数据过程在音频面试中,有时会遇到这样的提问:MixerThread、FastMixer、AudioMixer、FastThread线程类之间是什么关系?有什么区别?以及什么情况会进行重采样工作?带着这些实际面试实际的问题,我们一起来拆解、学习它。原创 2024-04-01 07:00:00 · 1642 阅读 · 0 评论 -
Android14音频进阶:AudioFlinger向HAL输出数据过程(六十四)
本篇目的:Android14音频进阶:AudioFlinger向HAL写数据过程AudioFlinger究竟如何混音?本篇继续分享:在经过AudioFlinger::MixerThread::threadLoop_mix混音以后,紧接着调用AudioFlinger::MixerThread::threadLoop_write函数向Audio HAL写数据过程。原创 2024-03-25 09:40:20 · 2197 阅读 · 0 评论 -
Android14音频进阶:AudioFlinger究竟如何混音?(六十三)
本篇目的:Android14音频进阶:AudioFlinger如何mix音频数据生产者与消费者模型本篇继续分享:AudioFlinger服务端如何消费音频数据?在上一篇已经分享,AudioTrack通过AudioFlinger创建的匿名共享内存,通过AudioTrackClientProxy类向内存中写数据,那么在服务端如何消费呢?下面我们以MixerThread线程为例讲解。原创 2024-03-19 16:14:07 · 1150 阅读 · 0 评论 -
Android14音频进阶:生产者与消费者模型(六十二)
本篇目的:Android14音频进阶:生产者与消费者模型剖析关键结构体:audio_track_cblk_t本篇继续分享AudioTrackClientProxy与AudioTrackServerProxy生产者与消费者模型。为了便于理解,画了一个图,AudioTrack与AudioFlinger读、写共享内存的音频数据的示意图,如下所示。原创 2024-03-12 09:00:00 · 989 阅读 · 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 · 357 阅读 · 0 评论 -
Android14音频进阶:AudioTrack如何拿到AudioFlinger创建的匿名共享内存(六十)
本篇目的:Android14音频进阶:AudioTrack如何拿到AudioFlinger创建的匿名共享内存Android14音频进阶:AIDL数据转换关键图解上篇内容:已经分享了CreateTrackInput、CreateTrackOutput与CreateTrackRequest、media::CreateTrackResponse的AIDL之间基本数据转换。本篇内容:AudioTrack如何拿到AudioFlinger创建的匿名共享内存?原创 2024-03-08 09:45:00 · 368 阅读 · 0 评论 -
Android14音频进阶:AIDL数据转换关键图解(五十九)
本篇目的:Android14音频进阶:MediaPlayerService如何启动AudioTrack下篇Android14音频进阶:AudioTrack与AudioFlinger创建数据通道。原创 2024-03-07 11:15:00 · 298 阅读 · 0 评论 -
Android14音频进阶:AudioTrack与AudioFlinger创建数据通道(五十八)
本篇目的:Android14音频进阶:AudioTrack与AudioFlinger创建数据通道Android14音频进阶:AudioTrack如何巧妙衔接AudioFlingerAudioTrack作为客户端,如何将音频数据发送给AudioFlinger呢?答案是:匿名共享内存。本文继续分享:在Androi14中,AudioTrack与AudioFlinger之间是创建匿名共享内存的过程。我们接着上篇的AudioTrack::createTrack_l函数继续往下讲解。原创 2024-03-07 10:23:53 · 581 阅读 · 0 评论 -
Android14音频进阶:AudioTrack如何巧妙衔接AudioFlinger(五十七)
本篇目的:Android14音频进阶:AudioTrack如何巧妙衔接AudioFlingerAndroid14音频进阶:MediaPlayerService如何启动AudioTrack 下篇(五十六)本篇继续讲解下一个阶段:AudioTrack如何巧妙衔接AudioFlinger服务的?我们接着上篇的MediaPlayerService::AudioOutput::open函数继续往下讲解。原创 2024-03-07 09:57:37 · 697 阅读 · 0 评论 -
Android14音频进阶:MediaPlayerService如何启动AudioTrack 下篇(五十六)
本篇目的:Android14音频进阶:MediaPlayerService如何启动AudioTrack下篇接Android14音频进阶:MediaPlayerService如何启动AudioTrack上篇第三条主线:MediaPlayer::start启动AudioTrack。原创 2024-02-06 11:18:37 · 503 阅读 · 0 评论 -
Android14音频进阶:MediaPlayerService如何启动AudioTrack 上篇(五十五)
本篇目的:Android14音频进阶:MediaPlayerService如何启动AudioTrack?接上篇Android14源码剖析:孪生兄弟MediaPlayer与MediaPlayerService到底什么关系?本篇继续分析MediaPlayerService如何调用NuPlayer播放器,如何启动AudioTrack的?我们接着上篇的MediaPlayerService::Client::setDataSource_pre函数继续推进。原创 2024-02-06 11:08:35 · 1261 阅读 · 0 评论 -
Android14源码剖析:MediaPlayer与MediaPlayerService区别?(五十四)
本篇目的:Android14源码剖析:MediaPlayer与MediaPlayerService的关联是不是用MediaPlayer、MediaPlayerService的时候,觉得它们就是一个服务呢?继续往下看,来解除你的疑惑…如果不想看中间解析过程,可以直接跳到结尾查看图解…MediaPlayer继承自BnMediaPlayerClient的binder服务端。那么BnMediaPlayerClient来自哪里呢?继续往下看。原创 2024-01-22 10:37:14 · 501 阅读 · 0 评论 -
Android14实战:调整A2DP音量曲线(五十三)
本篇目的:Android14实战:调整A2DP音量曲线A2DP(Advanced Audio Distribution Profile) 是一种蓝牙音频传输协议,允许设备通过蓝牙无线技术传输高质量立体声音频。A2DP 使得用户可以通过蓝牙连接他们的智能手机、平板电脑或电脑到兼容的无线耳机、扬声器或汽车音响系统,从而实现便捷的音频传输和无线音乐播放。A2DP 支持多种音频编解码器,如SBC、AAC和aptX,以提供更好的音频质量和性能。音量级别通常用于指代音频设备的音量控制范围或调节单位。原创 2024-01-22 10:20:28 · 614 阅读 · 0 评论 -
Android14实战:打破音频默认重采样的限制(五十二)
本篇目的:Android14实战:打破音频默认重采样的限制。原创 2024-01-13 20:53:40 · 1033 阅读 · 0 评论 -
Android12之音频类型分组(五十一)
本篇目的: 理解android音频类型分组。原创 2023-05-18 14:35:39 · 963 阅读 · 0 评论 -
Android12之AudioFlinger服务名与实现服务的descriptor区别(五十)
本篇目的:为了捋清楚AudioFlinger服务名和DO_NOT_DIRECTLY_USE_ME_IMPLEMENT_META_INTERFACE的关系.原创 2023-05-18 14:23:24 · 403 阅读 · 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 · 976 阅读 · 0 评论 -
Android12之aidl与hal直通(四十八)
AIDL+HAL直通模式。原创 2023-02-03 15:35:56 · 2491 阅读 · 4 评论 -
Android之耳机热插拔检测方式(四十七)
android audio 生产者与消费者 简介全面接触生产者/消费者问题是在操作系统原理中,并发性原理讨论的问题 生产者/消费者问题。最近的工作偏向音频,接着上一篇文章,用生产者,消费者模型来理解Android音频。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。Android中生产者与消费者。原创 2022-12-28 15:31:49 · 349 阅读 · 0 评论