自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 Android音频学习(二十二)——音频接口

PCM 既指模拟信号数字化的编码方式(脉冲编码调制),也指一种数字音频接口标准,广泛用于多通道、高保真音频传输。S/PDIF 全称为是面向消费电子设备的数字音频传输协议,支持长距离传输,常用于连接 CD/DVD 播放器、功放和家庭影院系统。特性I2SPCMS/PDIF传输距离短(<30cm)短(<1m)长(同轴10m,光纤30m)数据格式未压缩 PCM未压缩 PCM(多通道)压缩/未压缩(PCM、Dolby)声道支持立体声(TDM 扩展多通道)多通道(如 8 声道 TDM)

2025-10-14 16:23:21 1198 1

原创 Android音频学习(二十一)——ALSA简介

TinyAlsa是 Android 社区为了满足移动嵌入式设备需求而开发的一个轻量级、精简的 ALSA 用户空间库和工具集。它的核心目标是提供一个最小化的 ALSA API 实现,用于替代 GNU/Linux 发行版中常见的、功能庞大而复杂的alsa-lib。您可以把它理解为ALSA 的“嵌入式版本”。在标准的 Linux 桌面发行版中,应用程序通过alsa-lib这个庞大的库来访问音频设备。alsa-lib功能非常全面,包括:复杂的插件系统(用于格式转换、重采样、多路复用等)

2025-09-29 19:06:27 2248 1

原创 Android音频学习(二十)——高通HAL

动态 PCM 允许 ALSA PCM 设备在 PCM 流运行时将其 PCM 音频数字路由到各种数字端点。例如,PCM0 可以将数字音频路由到 I2S DAI0、I2S DAI1 或 PDM DAI2。这对于公开多个 ALSA PCM 并可以路由到多个 DAI 的片上系统 DSP 驱动程序非常有用。DPCM 运行时路由由 ALSA 混音器设置确定,方式与 ASoC 编解码器驱动程序中模拟信号的路由方式相同。

2025-09-24 15:48:35 973 1

原创 Android音频学习(十九)——音频HAL层简介

核心结构体audio_hw_device,定义设备级操作接口,如设置参数,打开/关闭输出/输入流等,结构体定义路径:libhardware/include/hardware/audio.h....../**/........................该函数主要是设置硬件参数。功能定位:Audio HAL 是 Android 音频系统的硬件桥梁,标准化硬件操作,隔离厂商差异。处理流程:从初始化、配置、数据传输到资源释放,贯穿音频生命周期。关键代码。

2025-09-19 10:41:14 1774

原创 Android音频学习(十八)——混音流程

在上一节有提到,音频数据会通过共享内存传到播放线程播放,如果是混音,则音频数据传入到MixerThread进行处理。当调用output打开输出流后会根据output_flag创建对应的播放线程。创建MixerThread对象时,会创建混音器AudioMixer,实现了混音的主要逻辑。mNormalFrameCount:AudioMixer会根据传进来的mNormalFrameCount作为一次输送数据的长度,把源buffer的音频数据写入目的buffer。

2025-09-15 18:53:38 1105 1

原创 Android音频学习(十七)——音频数据流转

在创建track对象时,调用其构造函数,将会创建服务端代理对象mAudioTrackServerProxy,它负责管理与同步匿名共享内存的使用,shareBuffer是应用下发的参数,为0是MODE_STREAM模式,mBuffer为以上介绍的共享内存地址,不为0则是MODE_STATIC模式,mBuffer为应用传过来的内存地址。这里的mBuffer则是传输音频数据的共享内存的首地址,为申请内存地址加上数据结构audio_track_cblk_t的偏址,音频数据读写走的是下面的匿名共享内存buffer。

2025-09-08 21:54:28 1190

原创 Android音频学习(十六)——CreateTrack

createTrack方法首先会通过getOutputForAttr根据下发的Attribute找到对应的output(传入参数&output.outputId, 对应audio_io_handle_t *output, 个人理解最终获取output的id),会调用到AudioPolicyManager的getOutputForAttr。在获取output时,有三个关键的步骤,首先是根据Attributes找到stream,对应函数。其次是根据attributes查找对应的strategy,对应函数。

2025-09-03 15:40:51 1505

原创 Android音频学习(十五)——打开输出流

找到对应的AudioHwDevice后则调用其openOutputStream方法打开对应的输出流,这一步会调用到HAL层,AudioHwDevice 有一个成员变量audio_hw_device_t* const mHwDevice;在调用到AudioFlinger的openOutput_l()时,首先调用findSuitableHwDev_l查找上一步中调用。最终调用在加载设备时调用adev_open时会设定open_Output_Stream的回调函数,​​​​​​​。

2025-08-25 16:20:28 588

原创 Android音频学习(十四)——加载音频设备

loadHwModule 是 Android 音频系统的核心初始化函数,负责加载音频硬件抽象层(HAL)的模块实现。它建立 AudioPolicyService 与底层硬件的桥梁,将配置文件(audio_policy_config.xml)中的标签<module>定义转化为可操作的硬件对象,加载的是音频硬件模块(HAL实现),每个模块对应一种音频设备类型,以动态库的形式存在,负责与底层音频硬件交互。

2025-08-22 21:23:08 1551

原创 Android音频学习(十三)——音量配置文件分析

在Android系统中,音量曲线通常指的是将用户的音量等级(比如0到15级)映射到实际的硬件增益或分贝值的曲线。

2025-08-19 15:58:35 1304

原创 Android音频学习(十二)——Engine文件分析

Engine文件一般包含在audio_policy_configuration.xml,如果没有该文件的话将用代码中的默认配置(主要是音频策略),文件路径为:frameworks/av/services/audiopolicy/engine/common/src/EngineDefaultConfig.h。这个文件非常重要,用于策略的选择,根据应用层传递到usage/source/flag参数找到对应的Stategy,再找到stream,从而获取最终的output,后续再具体说明。

2025-08-17 20:43:52 1251

原创 Android音频学习(十一)——audio_policy_configuration.xml解析(2)

上一篇内容分析了音频配置文件中节点对应的具体的类。包括mixPort,devicePort,route。

2025-08-14 21:27:54 1258 4

原创 Android音频学习(十)——audio_policy_configuration.xml解析(1)

Android 的音频策略配置文件j即APS的配置文件()是系统音频策略的基石,决定者音频数据的流向。其解析过程直接影响设备行为采用模块化 XML 设计,解析过程涉及多个关键步骤。

2025-08-13 21:51:09 1537

原创 Android音频学习(九)——AudioPolicyService

AudioPolicyService(APS)是 Android 音频系统的,负责管理音频路由、设备切换、音量策略、策略冲突解决等关键决策。它与 AudioFlinger(负责音频数据处理)协同工作,共同构成 Android 音频框架的核心。

2025-08-11 21:04:20 1573

原创 Android音频学习(八)——AudioFlinger线程

在 PlaybackThread 的实现中,Flag 用于标识线程的特殊行为或配置。

2025-08-10 16:18:06 1236

原创 Android音频学习(七)——AudioFlinger简介

AudioFlinger 是 Android 音频架构中的核心服务,负责音频流的混合(Mix)、分发和硬件资源管理。它运行在 mediaserver 进程中,直接与硬件抽象层(HAL)和上层应用交互,是音频数据处理的中枢。Audioflinger负责管理android的所有音频设备,包括输入和输出。在Android Audio系统中,AudioFlinger起到承上启下的作用,上接AudioTrack/AudioRecord/AudioSystem等,下接AudioHal。

2025-08-09 17:10:37 1800

原创 Android音频学习(六)——MediaPlayer创建AudioTrack

使用MediaPlayer播放音视频时,最终会创建AudioTrack对象用于播放音频数据。MediaPlayer创建AudioTrack分为三个步骤,分别是:1. 创建NuPlayer对象2. 创建AudioOutput对象,传递给AudioSink3.在MediaPlayer::start()中创建AudioTrack对象。

2025-08-07 16:54:32 1081

原创 Android音频学习(五)——AudioTrack调用方法

在创建AudioTrack对象时,会调用到set()函数:在set()方法中,调用了createTrack_l, 创建IAudioTrack在createTrack_l()中,获取到AudioFlinger服务,然后通过AudioFlinger来创建对应的track接下来会调用到本地服务层AudioFlinger中,相对比较复杂,会在后续文章中说明。

2025-08-05 21:28:23 663

原创 Android音频学习(四)——AudioTrack配置

setUsage(AudioAttributes.USAGE_MEDIA) // 媒体播放.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) // 音乐内容.setFlags(AudioAttributes.FLAG_LOW_LATENCY) // 低延迟标志.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_SYSTEM) // 捕获策略.build();

2025-08-04 14:14:19 957

原创 Android音频学习(三)——应用开发

/ 开始录制} catch (IOException e) { Log.e("Recorder", "Prepare failed: " + e.getMessage());两者的差别在于:MediaPlayer可以播放多种格式的音源,如MP3,flac、wma、ogg、MediaPlayer 可以播放多种格式的音源,如 mp3、flac、wma、ogg、wav 等,而 AudioTrack 只能播放解码后的 PCM 数据流。:低层API,直接播放PCM数据,支持实时音频流,延迟较低。

2025-08-03 18:11:48 945

原创 Android音频学习(二)——Android音频简介

先从Android整体结构了解音频的框架,有个大致的概念,后面再针对每一层进行详细说明

2025-08-02 16:48:00 1716 1

原创 Android音频学习(一)——音频基础

在系统的学习Android音频之前,先了解音频的基础知识。

2025-08-01 19:24:56 1322

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除