全志audio hub使用和理解,以及如何同时开启多个声卡(Android HW层)

 上图是全志H6 audio hub的示意图,图中可以看到audio hub本身也是一个声卡,他用来连接了CPU的APB数据总线和音频数据接口,H6中的所有音频数据接口全部是通过ahub来传递给CPU中去的。这样做的目的是为了方便音频输入和输出的以及混音。典型的就是应用在卡拉OK场景中。

 详细的芯片说明可以参考官方的文档

《H6 音频模块说明书.pdf》

《Allwinner_H6_User_Manual_V1.0.pdf》

声卡的管理通过tinymix工具来管理

audio hub声卡默认是0声卡可以通过命令行tinymix -D 0来查看声卡的状态

我们可以通过tinymix来配置ahub的音频路径

其中5-17用于表示rxif连接的txif,可以配置的值如下

 比如配置APB0->I2S0播放

使用命令tinymix 13 4

 

配置路径的代码在SDK的audio_hw.c中进行配置

音频框架使用的是ASOC框架

 在源文件中可以看到使用的

 pcm_open

pcm_prepare

pcm_read

pcm_close

这些API来操作声卡的

比如我们获取I2S0对应声卡的PCM数据

 pcm_open打开I2S0对应的声卡

pcm_open打开audio hub声卡

I2S0 pcm_prepare

ahub pcm_prepare

配置音频通路

最后在in_read里面进行pcm_read读取音频数据

原始SDK中只能同时打开1个声卡,比如使用I2S0的时候就会只切到了I2S0

其实APB总线这端有3个端点,也就是APBIF0 APBIF1 APBIF2

我们可以把I2S0接到APBIF0 同时把I2S3接到APBIF1这样两个声卡的数据就都进入到APB总线上了。

通路配置好后好需要在audio_hw中添加代码来实现

pcm_open的时候第二个参数也就是端口号,对应了你打开了那个APBIF端点

这时候需要在start_input_stream的时候同时打开audio hub的APBIF0和APBIF1端点。也就是第二个参数要分别传0和1,并新加一个pcm指针来接收返回句柄

in->pcm = pcm_open(adev->cardMIX, 0, PCM_IN, &in->config);

in->i2s3_pcm = pcm_open(adev->cardMIX, 1, PCM_IN, &in->config);

这样在in_read里面在从这两个句柄里读数据就可以实现同时打开多个声卡了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伍六七0804

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值