- 博客(29)
- 收藏
- 关注
原创 工具使用系列之 Python基于MatPlotlib数据可视化
本文介绍了Python数据可视化库Matplotlib的基本使用方法和常见图表绘制技巧。主要内容包括:1) Matplotlib库的导入和基本绘图步骤;2) 多种图表类型的绘制方法,如点线图、直方图、柱状图、饼图和散点图;3) 子图(subplot)的创建和布局技巧;4) 图表样式定制方法,包括颜色、标记、透明度等参数设置;5) 图表保存和显示操作。通过具体代码示例展示了各类图表的绘制过程,并详细说明了各函数的参数含义和使用场景,为初学者提供了全面的Matplotlib入门指导。
2026-02-07 17:03:57
974
原创 算法系列之 基于Linux Alsa的AVAS实现
本文介绍了一种符合国标GB/T 37153-2018要求的电动汽车低速提示音系统(AVAS)实现方案。该系统在车速≤20km/h时自动激活,通过Linux ALSA接口产生可调节的声音提示。系统核心包括AVAS控制器和音频引擎,实现了三种音色选择(正弦波、未来科技音、传统引擎音),并能根据车速动态调整频率(160-5000Hz)和声压级(56-75dB)。关键技术采用多谐波合成算法,确保声音具有方向识别性,同时满足国标对频率分布和声压级的要求。该系统通过模块化设计实现了音频生成、播放控制和合规性验证等功能。
2026-02-06 21:24:38
1232
1
原创 Google ProtoBuf 简介
本文介绍了Protocol Buffers(Protobuf)在移动互联网时代的应用优势及其技术原理。作为Google开发的高效数据序列化工具,Protobuf通过高度压缩协议显著减少流量消耗(约为JSON的1/10),同时降低电量消耗。文章详细说明了Protobuf的安装步骤(以Ubuntu为例)、C++开发实例(包括proto文件编写、编译及读写程序实现),并解析了其编码机制(Varint、Zigzag等)和API使用方法。相比XML/JSON,Protobuf具有体积小、速度快、兼容性好等优点,但也存
2026-02-05 19:36:50
1075
原创 工具使用系列之 PlantUML画UML时序图
本文介绍了PlantUML绘制时序图的基本语法和高级功能。时序图通过对象间的消息传递展示动态协作,核心元素包括参与者、消息箭头(实线/虚线)、生命线等。文章详细讲解了:1)基础语法如消息传递(->)、注释方法;2)高级设置包括参与者顺序调整、自动编号、HTML文本格式化;3)消息组合(alt/loop/par等)和注释添加技巧;4)生命线控制(activate/destroy)和样式定制(颜色/箭头样式)。最后介绍了图表分割(==)、布局优化(skinparam)等实用功能,为使用PlantUML创建
2026-02-04 08:04:01
995
1
原创 Android音频系列(10)-AudioFlinger代码解析
本文分析了Android音频系统的核心服务AudioFlinger(AF)。作为音频系统的枢纽,AF负责音频混音、路由管理及流处理,连接应用层与硬件层。文章详细介绍了AF的初始化过程、对外接口设计,并重点剖析了其内部核心架构,包括AudioFlinger类、Thread类体系(如MixerThread、DirectOutputThread等)和Track类体系。通过创建Track和回放线程循环两个核心流程的分析,展示了AF如何管理并发音频流。AF采用多线程模型和共享内存机制,实现了高效的音频数据处理和传输,
2026-02-02 19:56:25
1967
1
原创 Android音频系列(09)-AudioPolicyManager代码解析
本文深入解析Android音频系统中的AudioPolicyManager(APM)及其策略引擎(Engine)的运作机制。APM作为音频策略中心,负责设备管理、路由策略选择和资源控制;Engine则是策略决策模块,通过定义产品策略和选择算法确定最佳输出设备。文章详细介绍了APM的核心数据结构、初始化流程、设备连接管理以及输入输出路由策略,重点分析了getDevicesForStrategyInt等关键决策函数的工作原理。最后总结了Android音频策略框架的分层结构,指出理解Engine的决策机制和APM
2026-02-01 10:15:55
2101
原创 Android多媒体录制之 用OpenGL录制视频以及加水印
本文介绍了一种基于OpenGL ES和MediaCodec的视频录制添加水印方案。系统通过Camera HAL采集原始图像帧,经SurfaceTexture传输到OpenGL渲染器,在渲染过程中将视频纹理与水印纹理(图片和文字)混合处理,最终通过MediaRecorder编码为MP4文件。核心实现包括EGL环境初始化、纹理管理(视频纹理和水印纹理)、着色器程序(支持OES纹理和混合渲染)、离屏渲染流程,以及MediaCodec编码器配置。该方案充分利用GPU硬件加速,能够高效处理视频流并添加动态水印,支持文
2026-01-31 12:24:23
717
原创 Android系列之 屏幕触控机制(三)
本文分析了Android事件分发机制,重点阐述了ViewGroup事件分发流程。事件从ViewRootImpl传递至DecorView,再通过Activity回调到PhoneWindow,最终分发到ViewGroup。ViewGroup通过dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent三个方法实现事件分发、拦截和响应。文章详细讲解了事件在ViewGroup中的传递逻辑,包括拦截判断、子View遍历和事件处理优先级。最后通过ScrollView嵌套L
2026-01-30 07:48:15
839
原创 Android系列之 屏幕触控机制(二)
本文分析了Android系统中ViewRootImpl处理点击事件的流程。当InputDispatcher分发点击事件到Java层时,WindowInputEventReceiver会接收事件并调用enqueueInputEvent方法将事件加入队列。ViewRootImpl通过InputStage责任链模式处理事件,其中ViewPostImeInputStage负责处理触控事件,最终调用mView.dispatchPointerEvent()方法进行事件分发。整个过程涉及事件队列管理、责任链分发机制,为后
2026-01-29 07:46:30
822
原创 Android系列之 屏幕触控机制(一)
本文分析了Android系统中点击事件的传递机制。首先介绍了事件从Native层到Framework层的传递过程,然后重点阐述了Window、WindowManagerService(WMS)和ViewRootImpl三者的关系。ViewRootImpl作为连接Window和WMS的纽带,在Activity的handleResumeActivity流程中被创建,通过WindowManagerImpl的addView方法与DecorView绑定。最后详细说明了ViewRootImpl如何通过mWindowSe
2026-01-28 22:30:13
699
原创 Android音频系列(08)-AudioPolicyService代码解析
摘要:本文分析了Android音频系统中AudioPolicyService(APS)与AudioFlinger(AF)的协作机制。从Android 8.0开始,音频服务从mediaserver拆分到独立的audioserver进程。APS作为"决策者"负责音频路由策略、音量控制等,AF作为"执行者"处理混音和输入输出。文章通过耳机切换示例展示了二者交互流程,并解析了APS的类结构,包括AudioPolicyManager、音频命令线程等关键组件,以及APS与Audi
2026-01-27 07:48:01
1589
原创 Android音频系列(07)-音频策略文件与对应的代码解析
本文解析了Android音频策略配置文件audio_policy_configuration.xml的结构与实现。主要内容包括:1. 配置文件采用XML格式,包含globalConfiguration、modules、routingStrategies等核心节点;2. 详细分析了各节点对应的C++类结构,包括HwModule、IOProfile、DeviceDescriptor和AudioRoute等关键类;3. 阐述了配置文件加载流程,通过反序列化将XML元素转化为AudioPolicyConfig对象;
2026-01-25 12:56:03
1678
原创 Android系列之 Androi有限状态机介绍
摘要:本文详细介绍了Android状态机的工作原理及实现机制。首先阐述了状态机的基本概念、构成要素(状态、动作、事件、警备条件、转换)和工作原理。然后重点分析了Android状态机的核心类StateMachine、State和StateInfo的实现架构,包括状态树的构建、消息处理流程和状态转换机制。通过源码分析,详细解读了状态机启动时的初始化过程(状态栈构建、enter方法调用)以及消息处理时的状态切换逻辑。最后总结了Android状态机通过HandlerThread维护消息队列,利用状态栈管理状态层次,
2026-01-24 10:37:22
858
原创 Android音频系列(06)-Audio_Policy_Configuration.xml详解
摘要:Android音频策略配置文件audio_policy_configuration.xml定义了音频路由规则,主要包含mixPorts(逻辑端口)、devicePorts(物理设备)和routes(路由规则)三大核心节点。mixPorts描述音频流逻辑入口/出口,devicePorts定义物理设备属性,routes则建立mixPorts与devicePorts之间的连接关系。播放时音频从mixPorts流向devicePorts,录制时则反向流动。该文件通过XML标签映射为代码实现,由AudioPol
2026-01-22 20:29:46
1468
2
原创 Android音频系列(05)-AudioTrack从Java到native调用
本文分析了Android AudioTrack从Java层到底层的调用流程。首先介绍了AudioTrack的初始化过程,包括Java层构造函数调用、JNI函数注册及Native层AudioTrack创建。其次描述了播放控制流程,从Java层play()方法到Native层start()的Binder调用。最后阐述了音频数据写入机制,包括数据从Java层传递到Native层,并最终写入共享环形缓冲区的过程。整个流程涉及App进程、AudioServer进程、SystemServer进程及Audio HAL层的
2026-01-21 19:02:52
973
原创 Android音频系列(04)-Audio播放录制使用及参数详解
摘要:本文详细介绍了Android音频处理中的AudioTrack和AudioRecord参数配置。AudioTrack用于播放PCM音频,重点讲解了usage(用途)、contentType(内容类型)、encoding(编码格式)、sampleRate(采样率)、channelMask(声道配置)和mode(播放模式)等核心参数的设置。通过代码示例展示了如何创建AudioTrack实例并播放音频数据,同时对比了MediaPlayer与AudioTrack的功能差异。AudioRecord相关内容将在后续
2026-01-20 19:12:57
1311
1
原创 Ffmpeg系列之 Ffmpeg编译以及基本命令
FFmpeg 是一个功能强大、开源免费的跨平台多媒体处理工具集,广泛用于音视频的录制、转换、流媒体处理、滤镜应用等任务。以下是 FFmpeg 的基本功能介绍:ffmpeg:命令行工具,用于音视频转码、剪辑、合并等。ffplay:简易的音视频播放器(基于 SDL)。ffprobe:用于分析媒体文件信息(如格式、编码、时长、码率等)。libavcodec:编解码库,支持大量音视频编解码器。libavformat:容器格式处理库(如 MP4、MKV、AVI、FLV 等)。
2026-01-19 19:10:50
1270
原创 Android音频系列(03)-音频播放录制应用开发
摘要:本文介绍了Android系统中音频播放和录制的实现方式。播放部分分为纯音频播放(使用AudioTrack处理PCM原始数据)和多媒体播放(使用MediaPlayer处理压缩格式);录制部分包括音频录制(使用AudioRecord获取PCM数据)和多媒体录制(使用MediaRecorder生成压缩文件)。文章通过代码示例展示了各API的基本使用方法,并指出MediaPlayer底层会调用AudioTrack进行音频输出。两种方案分别适用于低延迟场景和便捷的多媒体文件处理需求。
2026-01-18 22:14:21
1779
3
翻译 编程系列之 利用设计模式重构小实例( 初学和面试必备 )
本文基于Martin Fowler的《重构-改善既有代码的设计》,通过一个视频租赁计费系统的案例,展示了重构的完整过程。初始代码存在冗长方法、职责分配不当等问题。作者首先通过"提取方法"拆分复杂逻辑,然后运用"搬移方法"将计费规则移到合适类中,最后引入"状态模式"取代条件判断,实现了更灵活的价格策略。整个重构过程强调小步修改、持续测试,逐步将过程式代码转化为面向对象设计,提高了代码的可维护性和扩展性。案例演示了如何通过重构应对需求变化,如新增HTM
2026-01-18 20:58:34
58
1
原创 Wireshark抓RTP包并分析对应的音频
本文介绍了使用Wireshark抓取并分析RTP音频数据的方法。首先通过tcpdump命令抓取网络数据包,再用Wireshark解析RTP协议流。由于该RTP流采用PCM16bit小端单通道8000采样格式,需将音频数据导出为raw文件。最后使用Audacity导入该文件并设置正确的编码参数,即可播放分析音频质量。该方法适用于VOIP电话或IP E-CALL等场景下的音频问题定位,特别是噪音分析。
2026-01-17 20:07:20
926
1
原创 编程系列之 C++/Java编程中常犯的毛病
文章摘要:本文通过视频租赁系统的代码示例,揭示了面向对象编程中的常见问题:过度过程化编程。原始代码虽然功能正确,但在Movie、Rental、Customer等类中被动执行操作,违背了面向对象的设计原则。通过重构,将计费逻辑从Customer的statement方法拆分到各自类中,并引入Price类处理价格策略,实现了更好的职责分配。重构后的代码体现了对象间协作的思想,使每个对象主动执行自己的操作,改善了代码结构和可维护性。
2026-01-17 12:03:08
725
1
原创 Android音频系列(02) – 音频架构
本文分析了Android 13音频系统架构,分为应用层、Java框架层、C++架构层和HAL层四个层级。应用层通过AudioTrack和AudioRecord提供播放录制接口;Java框架层的AudioManager等管理音频路由和音量;C++层的AudioFlinger负责混音和资源分配,AudioPolicyService处理策略决策;HAL层实现硬件抽象。文章还指出从Android 13开始,Google逐步采用新架构,用"AudioGraph"模型取代传统MixerThread。
2026-01-15 19:21:47
1947
原创 Android系列之Binder使用示例
本文介绍了Binder通信机制的实现原理和示例代码。首先通过类关系图展示了Binder代理(Bp)和服务(Bn)的架构设计,然后详细给出了服务端和客户端的实现代码。服务端包含BnTestService和TServerService类,实现接口方法并处理跨进程调用;客户端通过BpTestService代理类远程调用服务端接口。示例代码完整展示了从接口定义、服务注册到远程方法调用的全过程,包括testFuncCall_01和testFuncCall_02两个具体方法的实现与调用流程。该示例清晰地演示了基于Bin
2026-01-14 18:13:10
577
原创 Android系列之蓝牙协议栈架构
Android 12蓝牙架构解析:1.通用架构图展示BR/EDR和BLE标准协议层;2.Bluedroid架构图呈现Android蓝牙协议栈实现细节。两图完整呈现了从HCI层到应用层的蓝牙通信框架,适合开发者学习Android蓝牙底层机制。
2026-01-13 21:28:48
332
原创 Android多媒体录制之 MP4格式与Mpeg4Writer分析
本文介绍了安卓音视频录制流程、MP4文件格式及Mpeg4Writer.cpp代码分析。录制流程包含采集、编码、打包三个环节,形成数据管道(Pipeline)。MP4文件由ftyp、moov和mdat等box组成,音视频数据分别存储在不同轨道(Track)中。Mpeg4Writer采用C/S架构,包含独立的写线程和多个Track线程,分别处理音视频编码和文件写入。整个录制过程通过Pipeline实现数据流转,最终生成符合MP4格式的音视频文件。
2026-01-13 18:07:01
1018
1
原创 鸿蒙架构系列(02)- OpenHarmony代码结构
本文系统介绍了OpenHarmony源码目录结构,帮助开发者建立全局认知。源码主要包含应用层、框架层、内核驱动层和硬件层四个层级,以及工具和测试用例等支撑内容。重点分析了applications应用目录、arkcompiler方舟编译器、base基础服务和foundation子系统框架等核心模块的功能与作用,包括系统应用、编译工具链、底层服务、分布式架构支持等关键组件。文章为开发者提供了源码学习的结构化路径,建议根据具体开发方向有针对性地深入研究相应模块。
2026-01-10 20:50:16
1613
1
原创 鸿蒙架构系列 (01) OpenHarmony代码下载
本文详细介绍了在Windows系统下下载OpenHarmony代码的完整步骤:首先安装Python、Git和TortoiseGit;然后注册GitCode账号并生成RSA SSH密钥;接着配置Git全局设置和Repo工具;最后提供了两种下载方式(HTTPS和SSH)。文章还包含了代码目录结构说明,并提到后续将分析鸿蒙代码框架及各组件架构。整个过程涵盖了从环境搭建到代码获取的全部关键环节,为开发者提供了清晰的指导。
2026-01-08 17:45:22
1114
原创 Android系列之 一看就懂的Binder讲解
本文介绍了Android中的Binder进程间通信(IPC)机制。首先对比了Linux下多种IPC方式的优缺点,指出共享内存虽然高效但存在数据拷贝问题,而Binder通过共享内存映射和优化架构实现了更高效的通信。文章详细阐述了Binder的C/S架构,包括Binder驱动、ServiceManager等系统组件的作用,以及开发者需要实现的客户端代理(Bp)和服务端实现(Bn)部分。通过UML类图和时序图,分析了BpBinder发送请求和BBinder处理请求的完整流程,说明Binder通信是同步过程,服务端
2026-01-06 17:27:11
1478
原创 Android 音频系列(01)- 音频基础概念
本文介绍了音频开发的基础概念和Android平台实现。主要内容包括:声音的三要素(音调、响度、音色)和音频数字化的重要参数(采样率、量化精度、声道数)。阐述了音频开发的主要方向:采集播放、算法处理(降噪、回声消除等)、编解码传输,并列举了常见音频格式(MP3、AAC等)。最后介绍了Android平台提供的音频API,如AudioTrack播放、MediaRecorder录制和MediaCodec编解码功能。文章为音频开发提供了基础理论和技术实现参考。
2026-01-04 13:44:25
1017
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅