完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用Audiocodec进行录音,格式S24_LE,录制的.wav波形在某些软件中异常 arecord -D hw:audiocodec -f S24_LE -r 16000 -c 2 -d10 /tmp/test3_S24_LE.wav需要放大很多倍才能看到声音波形 |
|
相关推荐
1个回答
|
|
1.R329的Audiocodec用于录音的ADC只支持16bit和20bit的采样精度。采样后的数字信号会存放到RX_FIFO中,RX_FIFO的大小为256*20-bit,其他平台可以在User Manual确认支持的采样精度,从而判断是否会有这个问题产生
2.RX_DATA是一个32位的寄存器,保存的是从RX_FIFO获取的一个channel的样本数据,当使用arecord进行录音时,RX_DATA中的值会经DMA搬至内存,最后保存到.wav中 其中RX_DATA有四种模式去获取RX_FIFO的数据,S24_LE和S32_LE均采用20-bit mode0 当设置了20bit采样精度时,对应的两种模式如下图所示: 3.先说明一下S24_LE和S32_LE这两种格式的区别 S24_LE指有符号整型,范围是-2^23 ~ ((2^23) - 1),有效数据在低24位 S32_LE指有符号整型,范围是-2^31 ~ ((2^31) - 1),有效数据在高24位 LSB MSB 1st byte 2nd byte 3rd byte 4th byte alignmentS32_LE: 00000000 xxxxxxxx xxxxxxxx xxxxxxxx 32 bitsS24_LE: xxxxxxxx xxxxxxxx xxxxxxxx 00000000 32 bitsS24_3LE: xxxxxxxx xxxxxxxx xxxxxxxx 24 bits 4.在驱动程序中,S24_LE和S32_LE虽然都支持,但他们两者都是使用20-bit的mode0,这导致这两种格式保存到文件中的数据排布是一致的,但生成的wav头信息中的采样位数则不一样,从下图可以看出两者的差异 S32_LE的wav文件信息: 若软件以S32_LE进行解析,以上红框的数据变为0x0f80f0,依然可以保留全部有效数据 S24_LE的wav文件信息: 若软件以S24_LE进行解析,以上红框的数据变为0x55f000,便会丢失一部分数据 解决方案 总结原因就是audiocodec的采样精度只支持16和20bit,因此PCM格式中S24_LE虽然也支持,但硬件的特性使驱动并不能做到很好的适配,若软件以标准S24_LE格式进行分析,则会丢失高位的有效数据,这取决于软件如何对数据进行分析,解决方法有以下三种
|
|
|
|
只有小组成员才能发言,加入小组>>
全志T113双核异构处理器的使用基于Tina Linux5.0——RTOS系统定制开发
308 浏览 0 评论
全志T113双核异构处理器的使用基于Tina Linux5.0——RTOS编译开发说明
519 浏览 0 评论
1139 浏览 1 评论
2965 浏览 0 评论
为了学习内核开发,大佬手搓了一个轻量级操作系统YiYiYa OS
2909 浏览 0 评论
【开源硬件大赛】基于全志V853设计的全功能BTB学习开发板
3453浏览 8评论
3108浏览 5评论
1878浏览 4评论
全志V85x硬件设计大赛作品精选第二期,快来Pick你心目中的最佳方案
88981浏览 3评论
3612浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 15:05 , Processed in 0.598563 second(s), Total 70, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号