【鸿蒙南向开辟】OpenHarmony音频驱动audio适配方案

[复制链接]
发表于 2026-2-4 03:29:38 | 显示全部楼层 |阅读模式
装备媒体
1000 0
Laval社区小助手 只看该作者 发表于 2023-10-30 16:47:50
详情可点击: audio 适配方案
1. 音频驱动可选四种集成方案


各类方案简述:

2. 进程体现图


名词释义:

3.1 方案 1 ADM 适配方法

参考 OH 社区提供的 Audio 方案
3.2 方案 2 alsa 适配方法

基于 openHarmony 3.2Beta3 以上的版本的适配
3.2.1 内核编译开关设置

必要在各自产物的 Linux kernel 设置文件中打开对应开关,路径如下:此中${product_name}体现您的产物名称
kernel/linux/config/linux-5.10/arch/arm64/configs/${product_name}_standard_defconfig
以 rk3568_standard_defconfig 为例设置如下:
  1. CONFIG_SOUND=y
  2. CONFIG_SND=y
  3. ​
  4. # CONFIG_DRIVERS_HDF_AUDIO is not set
  5. # CONFIG_DRIVERS_HDF_AUDIO_RK3568  is not set
复制代码
3.2.2 产物化编译开关设置

必要在各自产物设置文件中打开对应开关,路径如下:此中 productcompany 体现您的企业名称,{product_company}体现您的企业名称,{product_name}体现您的产物名称
1.在 vendor${product_company}${product_name}\config.json 中将 alsa_lib 的控制开关打开
  1. drivers_peripheral_audio_alsa_lib = true
复制代码
2.在 drivers\peripheral\audio\audio.gni 中将 slas_lib 控制开关打开
  1. drivers_peripheral_audio_alsa_lib = true
复制代码
3.在 vendor${product_company}${product_name}\hals\audio\product.gni 中将 alsa 模式和 alsa_lib 打开
  1. enable_audio_alsa_mode = true
  2. ...
  3. drivers_peripheral_audio_alsa_lib = true
复制代码
4.新增文件 vendor${product_company}${product_name}\hals\audio\alsa_adapter.json 设置声卡装备
  1. {
  2.     "adapters": [{
  3.         "name": "primary",
  4.         "cardId": "xxxx",
  5.         "daiId": ""
  6.     }]
  7. }
复制代码
注:"cardId"值在开辟板中通过 cat /proc/asound/card0/id 查察,将值配入此中。 此参数使用的地方在 drivers\peripheral\audio\supportlibs\alsa_adapter\src\alsa_lib_common.c 中与 snd_ctl_card_info_get_id 得到的值举行校验
3.2.3 alsa-lib 和 alsa-utils 组件编译依靠添加

如必要重新实现 Audio HAL,则必要添加 alsa-lib 组件的编译依靠,可以接纳以下两种方法举行添加。
在 drivers\peripheral\audio\bundle.json 中设置 alsa_lib 和 alsa_utils 库
  1. "third_party": [
  2.         "alsa-lib"
  3.       ]
  4.       
  5.   "sub_component": [
  6.         "//third_party/alsa-utils:alsa-utils"
  7.       ],
复制代码
3.2.4. 针对芯片的适配修改

3.2.4.1 播放的适配修改

1.在 drivers\peripheral\audio\supportlibs\alsa_adapter\src\alsa_lib_render.c 中 根据 alsa-utils 工具中 amixer 下令 amixer controls 在开辟板中找到声音播放干系的通路设置,将其打开。差别芯片通路设置不一样,依照芯片功能设置通路
  1. static int32_t InitMixerCtlElement(const char *adapterName, struct AudioCardInfo *cardIns, snd_mixer_t *mixer)
  2. {
  3.    ...
  4.   if (strncmp(adapterName, PRIMARY, strlen(PRIMARY)) == 0) {
  5.      pcmElement = snd_mixer_first_elem(mixer);
  6.      if (pcmElement == NULL) {
  7.          AUDIO_FUNC_LOGE("snd_mixer_first_elem failed.");
  8.          return HDF_FAILURE;
  9.      }
  10. ​
  11.      ret = GetPriMixerCtlElement(cardIns, pcmElement,0);  // 增加一个变量区分render和capture  0表示render
  12.      if (ret < 0) {
  13.          AUDIO_FUNC_LOGE("Render GetPriMixerCtlElement failed.");
  14.          ret
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表