spdif调试总结

spdif调试总结

噪音问题

播放不同采样率的音频情况:

16bit:
3200044100480008820096000176400192000
正常正常正常正常正常正常正常
24bit
3200044100480008820096000176400192000
正常正常正常噪音正常噪音噪音

16bit全部正常,24bit部分会出现噪音情况。

排查思路

1.首先想到芯片发出的波形是否正确?

通过与正常音频发出的波形进行对比,发现波形基本正确,似乎找不到什么突破口

注:spdif发出的波形为BMC编码,时钟与数据混合在一起进行编码。

2.然后怀疑时钟,驱动中设置的时钟是否正确?

经过确认,没有问题

2.alsa的period_size设置有问题?

修改之后无效果

3.采样率为24bit的音频文件数据存储有两种方式,在驱动层对两种方式处理有问题?
  1. S24_LE:

​ 24bit的数据(也即一个采样点的数据)采用32bit空间进行存储

​ | 8bit | 8bit | 8bit | 补零 | 8bit | 8bit | 8bit | 补零 | 8bit | 8bit | 8bit | 补零 | …

  1. S24_3LE:

    24bit的数据(也即一个采样点的数据)采用24bit空间进行存储

    | 8bit | 8bit | 8bit | 8bit | 8bit | 8bit | 8bit | 8bit | 8bit | …

经过确认,控制器针对此种情况会有处理,分为packed与unpacked两种情况,在驱动中已经正确设置

4.spdif out 与spdif in引脚短接,并比较源文件与录音文件的二进制数据,会不会有数据错位?

毫无规律可言

5.驱动中设置dma描述符的时候,对于播放不同的音频文件(采样率/采样位数/声道数),搬移次数(需要搬移的总数据/每次搬移的大小)是否有除不尽的情况?

经过确认,当播放有噪音的音频时,得到的搬移次数均是整数

问题原因

  • 之前为了解决在播放开始会丢失极短时间的声音问题,在正常的音频数据之前加了一些零数据,正是这零数据出现了问题。

  • 在设置这些零数据的描述符的时候,dma搬移的次数出现了除不尽的情况,这样会导致有部分数据dma未搬移,出现丢失情况,但是当使搬移次数为整数时,仍是噪音。

  • 后来考虑到S24_3LE格式的音频数据的排布,也即24bit紧接着又是下一个24bit,上述制造的零数据是否是24bit的整数倍?如果不是的话,假如最后多出8bit,这样会导致后面连接的正常的音频数据产生这8bit的错位,从而导致后面的数据全错位,最终表现为噪音。

  • 如果只满足为24bit的整数倍,但是不满足每次搬移大小的整数倍,最终仍可能会导致dma实际搬移的数据不是24bit的整数倍,所以零数据的大小应该满足如下条件:

    1. 24bit的整数倍
    2. 每次搬移大小的整数倍

总结

1.时钟一般会影响音频的播放速度
2.噪音本质上和正常的声音没有什么区别,只不过是给的数据不对,该问题一般是音频数据有错位导致的
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值