MT7628 声音采样遇到的坑

开发版 YDH MT7628,SDK源自 YDH提供的SDK

CentOS下调好的声音采样程序, 上开发板子就崩溃

使用系统自带的alsa util工具命令边采边录:

       arecord -r24000 -c2 -fS16_LE | aplay -r24000 -c2 -fS16_LE 

一切正常,说明问题在编写的程序本身

          查看alsa库中arecord/aplay源码pcm_write(audiobuf, chunk_size),发现每次写入的数据量chunk_size和我们写的一样,比我们大, 难道是缓冲区问题?

           把自己程序代码中的缓冲区随便设置了个很大值1M, 采样程序就不崩溃了, 说明确实缓冲区长度有问题。

虽然采样程序不崩溃了,但采样的声音使用aplay播放不正常, 说明采样到的数据有问题。

 经反复实验, 得到如下结论:

1) 无论你怎样设置采样缓冲区的缓冲区总时间和周期时间, 在板子上都好像不起作用, 但在CentOS下有用

       我猜想openwrt的驱动中, 进行DMA传输的数据区长度根本就是固定的, 不像CentOS下是可以调节的

       经过测试: openwrt下无路设置何种采样率和缓冲时间参数, 每次读到的数据长度都是1536,是固定的


2) 如果你的缓冲区帧数量小于1536, 那么你的采样程序基本会挂掉

      说明openwrt中,pcm_write(audiobuf, chunk_size) 函数中的第二个参数对帧缓冲区长度的限制根本每起到作用

      但在CentOS下, 是起到作用的


后面在做播放程序时, 也是类似的问题,在pcm_writei()调用时, 每次固定写入1536帧的数据

我做了个缓存, 只有当缓存中待播放数据帧>=1536时, 才进行pcm_writei调用,否则制作数据缓存, 不进行实质上的pcm_writei调用。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值