主页

Android音频之audioserver

Android 音频之 audioserver 概述 audioserver 是 Android 系统中负责管理音频功能的核心服务。它处理音频设备的输入输出、音频路由、音量控制、音频焦点管理等任务,是 Android 音频系统的关键组件之一。 组成模块 AudioFlinger:核心模块,负责音频数据的混合和输出,以及音效处理。 AudioPolicyService:负责音频策略管理(如设备选择、路由规则)。 启动过程 audioserver 在 Android 系统启动时由 init 进程启动。它的启动脚本通常位于: /system/etc/init/audioserver.rc 在启动脚本中,audioserver 会加载所需的共享库并启动相关服务。 源码位置...

阅读更多

Android音频之AudioTrack简析

Android音频之AudioTrack简析 AudioTrack 是 Android 系统中用于音频播放的一个核心类,它提供了对音频数据的高效播放,特别适用于播放原始 PCM 数据。与 MediaPlayer 相比,AudioTrack 更加灵活,能够提供低延迟的音频播放,广泛应用于实时音频播放、音效处理以及游戏开发等场景。 1. AudioTrack 的作用与功能 AudioTrack 用于播放 PCM(脉冲编码调制)格式的音频数据。它直接将音频数据从内存写入音频硬件设备,并通过缓冲区将音频流送出。其核心功能包括: 音频数据播放:可以播放从应用程序传输过来的 PCM 音频数据。 低延迟音频播放:适合需要实时处理音频的场景,比如语音通信、游戏音效等。 音频流管理...

阅读更多

Android音频之单元测试

Android音频之单元测试 Android 中的 Unit Test(单元测试)是开发过程中非常重要的一部分,用于验证代码的正确性和稳定性。Android 的单元测试可以分为两类:本地单元测试(Local Unit Tests)和仪器化测试(Instrumented Tests)。以下是对 Android 单元测试的系统性介绍: 1. 单元测试的分类 (1)本地单元测试(Local Unit Tests) 运行环境:JVM(不需要 Android 设备或模拟器)。 适用场景:测试不依赖 Android 框架的纯 Java/Kotlin 代码。 工具:JUnit、Mockito 等。 目录:<module>/src/test/ (2)仪器化测试...

阅读更多

Android音频之车载音频焦点

Android音频之车载音频焦点 在 Android 的车载音频系统中,音频焦点(Audio Focus) 是一个核心概念,用于协调多个音频源之间的播放冲突,确保用户能够体验到最优的音频效果。 在启动逻辑声音流之前,应用会使用与逻辑声音流相同的音频属性来请求音频焦点。应用必须尊重焦点损失,以便在汽车用例中按预期运行。 虽然我们建议发送焦点请求,但系统不会强制要求发送。因此,请将焦点视为间接控制和避免播放期间发生冲突的手段,而不是主要的音频控制机制。车辆不应依赖焦点系统来操作音频子系统。 官方网站 https://source.android.com/docs/automotive/audio/audio-focus 什么是音频焦点? 音频焦点是 Android 提供的一...

阅读更多

Android音频之车载输入设备

Android音频之车载输入设备 Android Automotive OS (AAOS) 提供了对车载音频输入设备的支持,允许开发者在复杂的车载音频场景中轻松管理麦克风和其他音频输入源。 官方网站 https://source.android.com/docs/automotive/audio/microphone-input 官方网站 https://source.android.com/docs/automotive/audio/optional-player?hl=zh-cn 麦克风输入 在捕获音频时,音频 HAL 会收到 openInputStream 调用,其中包含指示应如何处理麦克风输入的 AudioSource 参数。 VOICE_RECOGNITION...

阅读更多

Android音频之车载录音权限

Android音频之车载录音权限 android.permission.RECORD_AUDIO权限 android.permission.RECORD_AUDIO 是 Android 系统中用于访问设备麦克风并捕获音频数据的权限。该权限属于 危险权限(Dangerous Permission),需要用户明确授权才能使用。 一、权限声明 在 Android 应用的 AndroidManifest.xml 文件中,需要显式声明该权限: <uses-permission android:name="android.permission.RECORD_AUDIO" /> 二、权限类别 危险权限 RECORD_AUDIO 属于危险权限,...

阅读更多

Android音频之车载音频配置

Android音频之车载音频配置 车载音频是 Android Automotive OS(AAOS)中的一个核心功能模块,用于管理汽车内部复杂的音频路由、音量控制和区域化播放。通过灵活的音频配置文件,开发者可以定制音频系统以适应不同的硬件和使用场景。 官方网站 https://source.android.com/docs/automotive/audio/audio-policy-configuration 音频配置概述 在 AAOS 中,音频配置主要通过以下两个文件完成: audio_policy_configuration.xml:定义音频设备、音量策略和路由规则,是系统层的主要配置文件。 car_audio_configuration.xml:针对汽车的音频...

阅读更多

数字音频接口

数字音频接口 概述 数字音频接口 (DAI,Digital Audio Interfaces),指在板级或板间传输数字音频信号的方式。相比于模拟接口,DAI 具备抗干扰能力强,硬件设计简单。在音频电路设计中,DAI 应用趋势无比明显。 例如,在传统的音频信号链路中,通常使用模拟信号进行连接,而对于数字音频信号,设计规范和应用场景更加庞大。本文将介绍常用的数字音频接口,如 I2S,PCM,和 PDM,并见题情景和核心特点。 I2S 接口 1. I2S 简介 I2S (全称 Inter-IC Sound),是一种数字音频信号传输规范,用于在系统内部器件之间传输数字音频数据。它由飞利浦于 1986 年定义,选用于转换器 (ADC/DAC),编解码器(CODEC),和 DSP ...

阅读更多

ubuntu下使用ndk交叉编译

概述 在Ubuntu下使用NDK+cmake交叉编译. 官方文档: https://developer.android.google.cn/ndk/guides/cmake?hl=zh-cn 下载NDK 下载地址: https://developer.android.google.cn/ndk/downloads/ 旧版本下载地址: https://github.com/android/ndk/wiki/Unsupported-Downloads 安装NDK unzip android-ndk-r21e-linux-x86_64.zip 配置环境变量 export ANDROID_NDK_HOME=/home/xxx/tools/android-ndk-r21e ex...

阅读更多

Android编译framework和car模块

概述 参考链接 编译 framework 模块 source lunch xxx-eng # Android10 及以前 make framework # Android11 及以后 #make framework-minus-apex # 相关Android.bp文件 # frameworks/base/Android.bp # Android10 及以前 cp out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar framework.jar # Android11 及以后 cp out/target/common/obj/JAVA_LIBRARIES/framework-minus...

阅读更多

Android13添加CarAudioManager接口

概述 在 Android Automotive 系统中,音频管理是一个重要的功能。CarAudioManager 是一个新的音频管理模块,专门用于控制车载音频系统。它允许应用程序控制音频流的路由、音量设置以及不同区域的音频管理。 CarAudioManager 模块由以下几个部分组成: ICarAudio:通过 AIDL 定义的进程间通信(IPC)接口,描述了 CarAudioManager 提供的所有功能。 CarAudioService:在系统服务层实现的音频管理服务,实现了 ICarAudio 接口的具体功能。 CarAudioManager:应用程序层使用的管理类,封装了 ICarAudio 的接口,提供给开发者用于控制车载音频系统。 模块架构 Car...

阅读更多

Android13添加AudioControl接口

概述 AudioControl 模块是 Android Automotive 平台的一部分,它提供了对车载音频系统的控制接口。该模块负责管理音频路由、音量调节、音频焦点管理等功能,确保在车载环境中音频体验的流畅性和一致性。AudioControl 模块通常通过硬件抽象层(HAL)实现,与底层音频硬件通信,以执行各种音频操作。 模块架构 AudioControl 模块是基于 Android HAL 的一部分,其架构设计如下: 应用层(Application Layer):车载应用程序通过 CarAudioManager 发起音频请求,例如播放媒体、语音助手等。 框架层(Framework Layer):Android 框架通过 Car Audio Service 接受音...

阅读更多

ubuntu搭建vscode阅读android_car_java环境

ubuntu搭建vscode阅读android_car_java环境 操作环境 Ubuntu-16.04.1 VSCode 1.92.2 插件安装 vscode 安装插件 Extension Pack for Java 环境配置 # 根据实际环境修改源码路径 cd android_code_path cd packages/services/Car mkdir mylib ln -s ./../../../../frameworks/ mylib/frameworks mkdir mylib/my_framework_core mkdir mylib/my_framework_core/android cd mylib/my_f...

阅读更多

ubuntu开发环境配置

修改软件源 Ubuntu 默认的软件源是境外的,速度上会有些问题,我们可以在「Software & Updates」(软件和更新)中选择国内的镜像。 还可以直接修改配置文件 https://developer.aliyun.com/mirror/ubuntu?spm=a2c6h.13651102.0.0.775b1b11o2W9u7 更新系统软件 sudo apt update sudo apt upgrade sudo apt autoremove # Ubuntu 20.04 sudo apt install -y openssh-server build-essential gcc g++ clang git cmake ...

阅读更多

Linux驱动开发之ALSA驱动设备树

概述 ALSA(Advanced Linux Sound Architecture)是Linux内核中关于音频驱动的框架,它定义了音频驱动的框架,使得音频驱动可以方便地被用户空间调用。 ALSA驱动起始页https://kernel.org/doc/html/latest/sound/index.html asla驱动代码结构https://kernel.org/doc/html/latest/sound/kernel-api/writing-an-alsa-driver.html 本文主要介绍一下ALSA驱动开发的相关设备树及源文件。 背景 基于正点原子的i.MX6ULL开发板,Linux内核版本 4.1.15 设备树 imx6ull-alientek-emmc.dts...

阅读更多

Linux驱动开发之ALSA驱动platform

概述 ALSA驱动platform 背景 基于正点原子的i.MX6ULL开发板,Linux内核版本 4.1.15 源文件 sound/soc/fsl/fsl_sai.c static struct snd_soc_dai_driver fsl_sai_dai = { .probe = fsl_sai_dai_probe, .playback = { .stream_name = "CPU-Playback", .channels_min = 1, .channels_max = 2, .rate_min = 8000, .rate_max = 192000, ...

阅读更多

Linux驱动开发之ALSA驱动mach

概述 ALSA驱动machine 背景 基于正点原子的i.MX6ULL开发板,Linux内核版本 4.1.15 源文件 sound/soc/fsl/imx-wm8960.c static struct snd_soc_dai_link imx_wm8960_dai[] = { { .name = "HiFi", .stream_name = "HiFi", .codec_dai_name = "wm8960-hifi", .ops = &imx_hifi_ops, }, { .name = "HiFi-ASRC-FE", .stream_n...

阅读更多

Linux驱动开发之ALSA驱动codec

概述 ALSA驱动codec 背景 基于正点原子的i.MX6ULL开发板,Linux内核版本 4.1.15 源文件 sound/soc/codecs/wm8960.c static struct snd_soc_dai_driver wm8960_dai = { .name = "wm8960-hifi", .playback = { .stream_name = "Playback", .channels_min = 1, .channels_max = 2, .rates = WM8960_RATES, .formats = WM8960_FORMATS,}, ...

阅读更多

cmake之函数

函数 添加函数 为每个源文件添加 __FILENAME__ 宏 # utils.cmake #重新定义当前目标的源文件的 __FILENAME__ 宏 function(redefine_file_macro targetname) #获取当前目标的所有源文件 get_target_property(source_files "${targetname}" SOURCES) #遍历源文件 foreach(sourcefile ${source_files}) #获取当前源文件的编译参数 get_property(defs SOURCE "${sourcefile}" PROPERTY COM...

阅读更多

msys2环境下使用外部mingw64编译器

电脑环境 Windows 10 msys2 QT5.14.2 mingw64(已安装) 步骤 安装 msys2 下载安装包 https://www.msys2.org/ 运行安装包,选择安装目录,默认安装即可 配置 msys2 运行 msys2,输入 pacman -Syu 更新软件包 安装常用软件包:pacman -S git zsh vim tree make autoconf automake libtool 安装 mingw64 编译器:pacman -S mingw-w64-x86_64-toolchain 注意:如果要使用外部编...

阅读更多