IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android R Audio变化点 -> 正文阅读

[移动开发]Android R Audio变化点

相比之前的android版本,记录一下audio重大的变化点:

External Streams
1.不应通过 Android 路由的声音流(出于认证或计时原因)可能会直接发送到外部混音器。从 Android 11(Android R) 开始,HAL 现在能够为这些外部声音请求焦点以通知 Android,以便它可以采取适当的操作,例如暂停媒体或阻止其他人获得焦点。

2.如果外部流是应与 Android 生成的声音环境交互的媒体源(例如,在打开外部调谐器收音机时停止 MP3 播放),则这些外部流应由 Android 应用程序表示。 此类应用程序将代表媒体源而不是 HAL 请求音频焦点,并将通过根据需要启动/停止外部源以适应 Android 焦点策略来响应焦点通知。 该应用程序是还负责处理播放/暂停等媒体键事件。 一种建议的控制此类外部设备的机制是 HwAudioSource。

Output Devices
1.在音频 HAL 级别,设备类型 AUDIO_DEVICE_OUT_BUS 提供用于车辆音频系统的通用输出设备。 总线设备支持可寻址端口(其中每个端口都是物理流的端点),并且有望成为车辆中唯一支持的输出设备类型。

2.系统实现可以为所有 Android 声音使用一个总线端口,在这种情况下,Android 会将所有声音混合在一起并将其作为一个流传输。 或者,HAL 可以为每个 CarAudioContext 提供一个总线端口,以允许并发传递任何声音类型。 这使得 HAL 实现可以根据需要混合和躲避不同的声音。

3.将音频上下文分配给输出设备是通过 car_audio_configuration.xml 完成的。

Audio Context
1.为了简化 AAOS(Android 汽车操作系统)音频的配置,类似的用法被归入 CarAudioContext。 这些音频上下文在整个 CarAudioService 中用于定义路由、音量组和音频焦点管理。

2.Android 11中的音频上下文是:

CarAudioContextAssociated AttributeUsages
MUSICUNKNOWN, GAME, MEDIA
NAVIGATIONASSISTANCE_NAVIGATION_GUIDANCE
VOICE_COMMANDASSISTANT, ASSISTANCE_ACCESSIBILITY
CALL_RINGNOTIFICATION_RINGTONE
CALLVOICE_COMMUNICATION, VOICE_COMMUNICATION_SIGNALING
ALARMALARM
NOTIFICATIONNOTIFICATION, NOTIFICATION_*
SYSTEM_SOUNDASSISTANCE_SONIFICATION
EMERGENCYEMERGENCY
SAFETYSAFETY
VEHICLE_STATUSVEHICLE_STATUS
ANNOUNCEMENTANNOUNCEMENT

Multizone Audio (多音区)
1.汽车带来了一组新的用例,这些用例围绕并发用户与平台交互并希望使用单独的媒体。 例如,驾驶员可以在机舱内播放音乐,而后座的乘客则可以在后部显示屏上观看 YouTube 视频。 多区域音频通过允许不同的音频源在车辆的不同区域同时播放来实现这一点。

2.从 Android 10 开始的多区域音频使 OEM 能够将音频配置到不同的区域。 每个区域都是车辆内设备的集合,具有自己的卷组、上下文的路由配置和焦点管理。 通过这种方式,主舱可以配置为一个音频区域,而后显示器的耳机插孔可以配置为第二个区域。

3.每个音频区域的焦点也独立保持。 这使不同区域中的应用程序能够独立产生音频而不会相互干扰,同时让应用程序仍然尊重其区域内的焦点变化。 CarAudioService 中的 CarZonesAudioFocus 负责管理每个区域的焦点。

4.BUS 设备支持可寻址端口(其中每个端口是物理流的端点),并且有望成为车辆中唯一支持的输出设备类型。

5.将上下文分配给 BUS 端口是通过音频控制 HAL 完成的,并在上下文和 BUS 端口之间创建many:one关系

Audio HAL
汽车音频实现依赖于标准的 Android 音频 HAL,其中包括以下内容:
1.IDevice.hal。 创建输入和输出流,处理主音量和静音,并使用:
a.createAudioPatch. 在设备之间创建外部-外部补丁。
b.IDevice.setAudioPortConfig()为每个物理流提供音量。
2.IStream.hal。连同输入和输出变体,管理进出硬件的音频样本流。

Automotive Device Types
以下设备类型与汽车平台相关:

Device typeDescription
AUDIO_DEVICE_OUT_BUSAndroid 的主要输出(这是 Android 的所有音频传送到车辆的方式)。 用作为每个上下文消除流歧义的地址。
AUDIO_DEVICE_OUT_TELEPHONY_TX用于路由到蜂窝无线电进行传输的音频。
AUDIO_DEVICE_IN_BUS用于未另外分类的输入。
AUDIO_DEVICE_IN_FM_TUNER仅用于广播电台输入。
AUDIO_DEVICE_IN_TV_TUNER用于电视设备(如果有)。
AUDIO_DEVICE_IN_LINE用于 AUX 输入插孔。
AUDIO_DEVICE_IN_BLUETOOTH_A2DP通过蓝牙接收的音乐。
AUDIO_DEVICE_IN_TELEPHONY_RX用于从与电话呼叫相关联的蜂窝无线电接收的音频。

Configuring Audio Devices
Android 可见的音频设备必须在 /audio_policy_configuration.xml 中定义,其中包括以下组件:
1.Module name(模块名称) – 支持 primary(用于汽车用例)、A2DP、remote_submix 和 USB。 模块名称和相应的音频驱动程序应编译为 audio.primary.$(variant).so。
2.devicePorts – 包含可从此模块访问的所有输入和输出设备(包括永久连接的设备和可移动设备)的设备描述符列表
a.对于每个输出设备,您可以定义增益gain控制,包括以millibel 为单位的 min/max/default/step值(1 millibel = 1/100dB = 1/1000bel)
b.devicePort 实例上的地址属性可用于查找设备,即使有多个设备与AUDIO_DEVICE_OUT_BUS 的设备类型相同
3.mixPorts – 包含音频 HAL 公开的所有输出和输入流的列表。 每个 mixPort 实例都可以看作是 Android AudioService 的一个物理流。
4.Routes - 定义输入和输出设备之间或流和设备之间可能的连接列表

Configuring Audio Devices (cont.)
下面的示例定义了一个输出设备 bus0_phone_out,其中所有 Android 音频流都由mixer_bus0_phone_out 混合。 该路由将mixer_bus0_phone_out 的输出流带到设备bus0_phone_out。
在这里插入图片描述
Multichannel Microphone Input(多声道mic输入)
1.要从具有两个以上通道(立体声)的设备捕获音频,请使用channel index mask 而不是positional index mask(例如 CHANNEL_IN_LEFT)
2.当 setChannelMask 和 setChannelIndexMask 都设置时,AudioRecord 只使用 setChannelMask 设置的值(最多两个通道)
在这里插入图片描述
Concurrent Capture(并发捕获)
1.从 Android 10 开始,Android 框架支持并发捕获输入,但存在保护用户隐私的限制。 作为这些限制的一部分,诸如 AUDIO_SOURCE_FM_TUNER 之类的虚拟源被忽略,因此允许与常规输入(例如麦克风)同时捕获。 HwAudioSources 也不被视为并发捕获限制的一部分。
2.旨在与 AUDIO_DEVICE_IN_BUS 设备或辅助 AUDIO_DEVICE_IN_FM_TUNER 设备配合使用的应用程序必须依赖于明确识别这些设备并使用 AudioRecord.setPreferredDevice() 绕过 Android 默认源选择逻辑。

Kernel Driver – Software Architecture

Kernel driver based on Advanced Linux Sound Architecture (ALSA)
ALSA System on Chip (ASoC) driver comprised of:
1.Machine driver
2.Front-end and back-end drivers
3.Routing driver
4.Platform drivers
FE-DAI(front end, digital audio interface)
1.Visible to user space as PCM devices (PCM0, PCM1, etc.)
作为 PCM 设备(PCM0、PCM1 等)对用户空间可见。
2.Can route audio to multiple backend DAIs
可以将音频路由到多个后端 DAI
3.Routing controlled by user space via mixer controls
路由由用户空间通过混音器控件控制
4.PCM operations performed directly on front-end DAI by ALSA core
由 ALSA 核心直接在前端 DAI 上执行 PCM 操作
Back-end DAI(back end, digital audio interface)

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-23 12:28:54  更:2021-11-23 12:29:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:06:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码