本篇将介绍高通平台音频的操作

操作音频设备基本分为三个步骤:

  1. 设置音频通道
  2. 设置设备参数
  3. 读取/写入音频数据

基于高通平台,高通提供了libalsa-inf库来操作音频设备,下面介绍设置音频设备及操作步骤.

一、设置音频通道


高通提供了amix接口来设置音频通道,使用的音频通道如下:

网络下行音频通道:MultiMedia1 Mixer VOC_REC_DL

网络上行音频通道:Incall_Music Audio Mixer MultiMedia1

第一路PCM录音通道:MultiMedia1 Mixer SEC_AUX_PCM_UL_TX

第一路PCM播放通道:SEC_AUX_PCM_RX Audio Mixer MultiMedia1

设置音频通道接口如下,具体使用可参考高通amix.c的使用

struct mixer *mixer_open(const char *device) // /dev/snd/controlC0 设置通道设备节点

void mixer_close(struct mixer *mixer)

struct mixer_ctl *mixer_get_control(struct mixer *mixer, const char *name, unsigned index)

int mixer_ctl_set_value(struct mixer_ctl *ctl, int count, char ** argv)

void mixer_ctl_get(struct mixer_ctl *ctl, unsigned *value)

int mixer_ctl_select(struct mixer_ctl *ctl, const char *value)

二、设置音频设备参数


采样率:8000

通道标识:PCM_STEREO | PCM_OUT | PCM_NMMAP | PCM_MONO

通道数量:1

数据格式:SNDRV_PCM_FORMAT_S16_LE

设备名称:hw:0,0

设置音频设备接口如下,具体使用可参考高通aplay.c/arec.c

void param_init(struct snd_pcm_hw_params *p)

void param_set_mask(struct snd_pcm_hw_params *p, int n, unsigned bit)

void param_set_min(struct snd_pcm_hw_params *p, int n, unsigned val)

void param_set_int(struct snd_pcm_hw_params *p, int n, unsigned val)

int param_set_hw_refine(struct pcm *pcm, struct snd_pcm_hw_params *params)

int pcm_buffer_size(struct snd_pcm_hw_params *params)

int pcm_period_size(struct snd_pcm_hw_params *params)

int param_set_hw_params(struct pcm *pcm, struct snd_pcm_hw_params *params)

三、读写音频设备


音频设备准备完毕后就可以对音频设备进行读写(即播放和录音),主要用到的接口如下:

struct pcm *pcm_open(unsigned flags, char *device)

int pcm_ready(struct pcm *pcm)

int pcm_close(struct pcm *pcm)

int pcm_read(struct pcm *pcm, void *data, unsigned count)

int pcm_write(struct pcm *pcm, void *data, unsigned count)

Qualcomm(高通)平台开发系列讲解-音频设备操作流程相关推荐

  1. 高通平台开发系列讲解(USB篇)Linux Android USB软件架构

    文章目录 一.高通平台USB软件架构 二.USB 设备侧软件组成 2.1.OTG driver 2.2.Device controller driver 2.3.Gadget framework 2. ...

  2. 高通平台开发系列讲解(外设篇)高通Camera软件架构

    文章目录 一.高通Camera软件架构 1.1.Camera App 1.2.Camera Framework 1.3.Camera Service 1.4.Camera Provider 1.5.C ...

  3. 高通平台开发系列讲解(外设篇)高通平台Camera摄像头驱动移植

    文章目录 一.高通平台摄像头软件框架 二.相关代码目录 三.驱动移植 3.1.新增camera节点 3.2.配置相关的GPIO 沉淀.分享.成长,让自己和他人都能有所收获!

  4. 高通平台开发系列讲解(外设篇)高通平台EMMC适配说明

    文章目录 一.EMMC的内部框图说明 二.EMMC 设备树配置 三.EMMC 内核配置 四.EMMC 源码 沉淀.分享.成长,让自己和他人都能有所收获!

  5. 高通平台开发系列讲解(QMI篇)高通平台QMI介绍

    文章目录 一.背景 一.QMI服务初始化 二.QMI CLIENT消息 2.1.消息发送 2.2.消息接收 2.3.消息发送给MODEM 三.QMI SERVER消息 3.1.初始化 3.2.消息分类 ...

  6. 高通平台开发系列讲解(AI篇)高通神经网络处理引擎 SNPE SDK架构

    文章目录 一.SNPE开发环境 二.SNPE SDK 文件结构 三. SNPE架构 四.SNPE运行特性 沉淀.分享.成长,让自己和他人都能有所收获!

  7. 高通平台开发系列讲解(外设篇)高通Camera用户层移植

    文章目录 一.sensor_libs移植 二.chromatix移植 三.device-vendor配置 四.配置Camera属性 沉淀.分享.成长,让自己和他人都能有所收获!

  8. RK3399平台开发系列讲解(其他篇)1.18、瑞芯微 RK3288 芯片介绍

    平台 内核版本 安卓版本 RK3399 Linux4.4 Android7.1 文章目录 Cortex-A17 架构分析 RK3288芯片介绍 Cortex-A17 架构分析 目前,ARM Corte ...

  9. RKRK3399平台开发系列讲解(其他篇)1.29、查看显示时钟

    平台 内核版本 安卓版本 RK3399 Linux4.4 Android7.1 cat /sys/kernel/debug/clk/clk_summary | grep vop 需要关注的显示时钟为: ...

最新文章

  1. php json字符串返回false,php – json_encode()返回false
  2. Kotlin 标准库中run、let、also、apply、with函数的用法和区别
  3. javascript 学习之 数组式的对象
  4. 笔记本电脑关机后指示灯还亮_汽车仪表常见指示符号之清洗液指示灯,灯亮了怎么办?...
  5. Android4.4的init进程
  6. MTK 驱动(60)---Audio驱动开发之音频链路
  7. 启动白屏处理_App启动优化一顿操作猛如虎
  8. oj题 根据化学方程式计算摩尔质量
  9. 【解释】while(~scanf(%d, n))的~的含义~scanf
  10. JS学习总结(7)——对象
  11. 知识图谱构建工具_自动构建知识图谱
  12. 肿瘤(Oncology)生物信息学分析简介
  13. 等比求和模版,下标从1开始
  14. MySQLyog的使用
  15. php如何对mysql加锁_MySQL 加锁处理分析(一)
  16. [DOS教程----读书笔记]命令全集
  17. java 数组 取部分_在Java中只获取一部分数组?
  18. 数据恢复软件有哪些好用又免费的?强推这6款神器
  19. 【趣学算法】第二章 算法之美(下)
  20. How to clear queued transactions?

热门文章

  1. 线性表--链栈(十一)
  2. matlab目标检测yolo,YOLO目标检测快速上手
  3. EPLAN报表设备元件添加,清单生成
  4. 带服务器的门禁怎么维修,常见故障门禁锁维修方法是什么
  5. Logistics回归系数解读
  6. 【第十五篇】Camunda系列-任务回退【驳回回退】
  7. ASP.NET MVC商城网站后台管理系统
  8. LeetCode 496.下个更大的数
  9. 计算机网络威胁和解决方法总结,计算机网络论文的总结.docx
  10. 瑞柏匡丞:产品经理如何顺利对接程序猿