车载音频实现依赖标准 Android 音频 HAL,其中包括以下内容:

IDevice (hardware/interfaces/audio/2.0/IDevice.hal)。负责创建输入流和输出流、处理主音量和静音操作,以及使用:

createAudioPatch 在设备之间创建 external-external 补丁程序。

IDevice.setAudioPortConfig() 为各个物理音频流提供音量。

IStream (hardware/interfaces/audio/2.0/IStream.hal)。连同输入变体和输出变体一起管理进出硬件的样本音频流。

车载设备类型

以下设备类型与车载平台相关:

设备类型

说明

AUDIO_DEVICE_OUT_BUS

Android 的主要输出(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

用于从手机无线装置接收到的与通话相关联的音频。

路由音频源

您应使用 AudioRecord 或相关 Android 机制捕获大多数音频源。接下来,可为数据分配 AudioAttributes 并通过 AndroidTrack 播放数据,只需依赖默认的 Android 路由逻辑或通过对 AudioRecord 或 AudioTrack 对象显式调用 setPreferredDevice() 即可。

对于与外部混音器之间有专用硬件连接的来源或具有极为严苛的延迟要求的来源,您可以使用 createAudioPatch() 和 releaseAudioPatch() 来启用和停用外部设备之间的路由(在样本传输过程中无需使用 AudioFlinger)。

配置音频设备

Android 可见的音频设备必须在 /audio_policy_configuration.xml 中进行定义,其中包括以下组件:

module name。支持“primary”(用于汽车用例)、“A2DP”、“remote_submix”和“USB”。模块名称和相应音频驱动程序应编译到 audio.primary.$(variant).so 中。

devicePorts。包含可从此模块访问的所有输入和输出设备(包括永久连接的设备和可移除设备)的设备描述符列表。

对于每种输出设备,您可以定义增益控制(包含以 millibel 为单位的 min/max/default/step 值,其中 1 millibel = 1/100 dB = 1/1000 bel)。

devicePort 实例中的地址属性可用于查找设备(即使多个设备的设备类型均为 AUDIO_DEVICE_OUT_BUS)。

mixPorts。包含由音频 HAL 提供的所有输出流和输入流的列表。每个 mixPort 实例都可被视为传输到 Android AudioService 的物理音频流。

routes。定义输入和输出设备之间或音频流和设备之间可能存在的连接的列表。

以下示例定义了输出设备 bus0_phone_out,其中所有 Android 音频流都通过 mixer_bus0_phone_out 完成混音。路由将 mixer_bus0_phone_out 的输出流传递到 device bus0_phone_out。

bus0_phone_out

bus0_phone_out

role="source"

flags="AUDIO_OUTPUT_FLAG_PRIMARY">

samplingRates="48000"

channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>

role="sink"

type="AUDIO_DEVICE_OUT_BUS"

address="BUS00_PHONE">

samplingRates="48000"

channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>

minValueMB="-8400"

maxValueMB="4000"

defaultValueMB="0"

stepValueMB="100"/>

sources="mixport_bus0_phone_out"/>

指定 devicePorts

车载平台应该为每个输入到 Android 和从 Android 输出的物理音频流指定 devicePort 实例。对于输出音频流,每个 devicePort 实例的类型都应该为 AUDIO_DEVICE_OUT_BUS,并采用整数(即总线 0、总线 1 等)编址。mixPort 实例与 devicePort 实例的数量之比应为 1:1,并应允许指定可以路由到每条总线的数据格式。

车载实现可以使用多个输入设备类型,包括 FM_TUNER(保留以用于广播无线装置输入)、MIC 设备(用于处理麦克风输入)和 TYPE_AUX_LINE(用于表示模拟线路输入)。所有其他输入流都会分配到 AUDIO_DEVICE_IN_BUS 并在通过 AudioManager.getDeviceList() 调用枚举设备时被发现。各个来源可根据 AudioDeviceInfo.getProductName() 进行区分。

您还可以将外部设备定义为端口,然后通过音频 HAL 的 IDevice::createAudioPatch 方法(通过新的 CarAudioManager 入口点提供)使用这些端口与外部硬件互动。

如果存在基于总线的音频驱动程序,必须将 audioUseDynamicRouting 标志设置为 true:

true

如需了解详情,请参阅 device/generic/car/emulator/audio/overlay/packages/services/Car/service/res/values/config.xml。

android 音频设备类型,实现车载音频 HAL  |  Android 开源项目  |  Android Open Source Project...相关推荐

  1. 【开源项目----Android OPenGLES渲染YUV视频文件】

    [开源项目----Android OPenGLES渲染YUV视频文件] OpenGLES对YUV渲染相关文章参考

  2. android hal 音频分析,实现车载音频 HAL  |  Android 开源项目  |  Android Open Source Project...

    车载音频实现依赖标准 Android 音频 HAL,其中包括以下内容: IDevice (hardware/interfaces/audio/2.0/IDevice.hal).负责创建输入流和输出流. ...

  3. 福特android auto教程,福特车载系统年底支持CarPlay和Android Auto

    自从苹果和谷歌分别推出了CarPlay和Android Auto两大车载智能系统平台之后,就开始对各大汽车厂商进行争夺.而大部分的汽车厂商都选择了谁也不得罪,分别都加入了两大科技巨头的阵营. 根据一份 ...

  4. hal系统命令 android,转换 HAL 模块  |  Android 开源项目  |  Android Open Source Project...

    您可以通过转换 hardware/libhardware/include/hardware 中的头文件,将已有的 HAL 模块更新为 HIDL HAL 模块. 使用 c2hal .hal 文件,请使用 ...

  5. android10分区镜像,分区和映像  |  Android 开源项目  |  Android Open Source Project

    分区 Android 设备包含若干个分区,这些分区在启动过程中发挥不同的作用.为了支持 A/B 更新,设备需要为 boot.system.vendor 和 radio 分区分别单独配置一个槽位. bo ...

  6. android udt协议,接口和软件包  |  Android 开源项目  |  Android Open Source Project

    HIDL 围绕接口构建而成,而接口是在面向对象的语言中用来定义行为的抽象类型.每个接口都是软件包的一部分. 软件包 软件包名称可以具有子级,如 package.subpackage.已发布的 HIDL ...

  7. android的wifi直连,WLAN 直连  |  Android 开源项目  |  Android Open Source Project

    WLAN 直连功能又称"WLAN 点对点",它允许支持设备直接使用 WLAN 直连协议发现其他设备并与之互连(无需连接到互联网或移动网络).此功能是基于 Wi-Fi 联盟 (WFA ...

  8. android afw测试,测试设备配置  |  Android 开源项目  |  Android Open Source Project

    Android Enterprise (AE) 自动化测试框架是一个用于验证 Android 设备的企业级兼容性的测试套件.该套件包括配套应用.测试用例.配置文件和一个基于 cts-tradefed ...

  9. Android签名版本,签名版本以供发布  |  Android 开源项目  |  Android Open Source Project...

    Android 操作系统映像在两个地方使用加密签名: 映像中的所有 .apk 文件都必须经过签名.Android 软件包管理器通过下列两种方式使用 .apk 签名:更换应用时,必须使用与旧应用相同的密 ...

  10. android tee,Trusty TEE  |  Android 开源项目  |  Android Open Source Project

    Trusty 是一种安全的操作系统 (OS),可为 Android 提供可信执行环境 (TEE).Trusty 操作系统与 Android 操作系统在同一处理器上运行,但 Trusty 通过硬件和软件 ...

最新文章

  1. Python 之 matplotlib (十一) 3D
  2. 朱峰谈概念设计(二):我们设计什么
  3. ABP Framework 为什么好上手,不好深入?探讨最佳学习姿势!
  4. 学籍管理系统 c++作业
  5. “一个人自修没感觉!”
  6. 缺失值填充1——缺失值查看、确定值填充、参考值填充
  7. php实验cookie,PHP实验一、二(cookie和session)
  8. 4.算法优化 -高性能JavaScript
  9. vue 第三天(绑定属性)
  10. I Think I Can!
  11. wamp添加mysql版本_最新版PHPWAMP自定义添加PHP版本教程,支持无限添加PHP和Mysql版本...
  12. 90后游戏开发大神毛星云跳楼自杀!8年执着国产3A梦碎
  13. omnet++tictoc12案例解析
  14. 360浏览器设置语言国际化
  15. 用EXCEL计算NPV,PV,FV
  16. Linux使用shell定时任务实现ffmpeg视频转码和截图
  17. flyway的checksum
  18. 小米笔记本air 13.3 2018款参数
  19. Unity 生成原始LUT用于外部校色相机不透明物体截图
  20. 用easyx做推箱子小游戏

热门文章

  1. Facebook vs Chrome 关公秦琼的未来之战,互联网营销
  2. perl的USE和require
  3. VMC to Hyper-V Import Tool 简体中文版.VZPEDIA首发
  4. 哪位有Castle Project Generators,邮给我一份 (deerchao at gmail dot com),谢谢。
  5. 4. ex 命令(1)
  6. 11. Window open() 方法
  7. centos7.0KVM虚拟化
  8. 清空表与删除表mysql
  9. Ubuntu下RabbitMQ安装
  10. python装饰器(docorator)详解