全志科技
登录
直播中
发生的方式
8年用户
1235经验值
擅长:处理器/DSP
私信
关注
[问答]
为什么使用Audiocodec进行录音其wav波形在某些软件中会发生异常呢
开启该帖子的消息推送
波形
audiocodec
寄存器
使用Audiocodec进行录音,格式S24_LE,录制的.wav波形在某些软件中异常
arecord -D hw:audiocodec -f S24_LE -r 16000 -c 2 -d10 /tmp/test3_S24_LE.wav
需要放大很多倍才能看到声音波形
问题分析
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 alignment
S32_LE: 00000000 xxxxxxxx xxxxxxxx xxxxxxxx 32 bits
S24_LE: xxxxxxxx xxxxxxxx xxxxxxxx 00000000 32 bits
S24_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使用S24_LE格式进行录音时产生的软件分析波形异常问题?
回帖
(1)
朱翼
2021-12-29 10:39:05
解决方案
总结原因就是audiocodec的采样精度只支持16和20bit,因此PCM格式中S24_LE虽然也支持,但硬件的特性使驱动并不能做到很好的适配,若软件以标准S24_LE格式进行分析,则会丢失高位的有效数据,这取决于软件如何对数据进行分析,解决方法有以下三种
使用audiocodec时,使用-f S32_LE,修改wav头信息中的采样位数位32,这对大部分软件都有效
arecord -D hw:-f S32_LE -r 16000 -c 2 -d10 /tmp/test32.wav
如果必须使用S24_LE格式进行录音,可以选择其他支持24bit采样的音频接口,如I2S等
假如必须使用audiocodec声卡,S24_LE格式进行录音,可以自行调整RX_DATA寄存器的模式,结合RX_DATA寄存器中实际的有效数据分布,自己开发软件进行数据分析
如果有分析和处理音频数据的需求,可以参考以上思路,结合RX_DATA寄存器去调整。
解决方案
总结原因就是audiocodec的采样精度只支持16和20bit,因此PCM格式中S24_LE虽然也支持,但硬件的特性使驱动并不能做到很好的适配,若软件以标准S24_LE格式进行分析,则会丢失高位的有效数据,这取决于软件如何对数据进行分析,解决方法有以下三种
使用audiocodec时,使用-f S32_LE,修改wav头信息中的采样位数位32,这对大部分软件都有效
arecord -D hw:-f S32_LE -r 16000 -c 2 -d10 /tmp/test32.wav
如果必须使用S24_LE格式进行录音,可以选择其他支持24bit采样的音频接口,如I2S等
假如必须使用audiocodec声卡,S24_LE格式进行录音,可以自行调整RX_DATA寄存器的模式,结合RX_DATA寄存器中实际的有效数据分布,自己开发软件进行数据分析
如果有分析和处理音频数据的需求,可以参考以上思路,结合RX_DATA寄存器去调整。
举报
更多回帖
rotate(-90deg);
回复
相关问答
波形
audiocodec
寄存器
如何解决
Audiocodec
使用S24_LE格式
进行
录音
,
软件
分析
波形
异常
的问题?
2021-12-29
1560
为什么stm8同时使用dac和adc采集
其
电平
会发生
异常
呢
2022-02-17
829
Labview播放
wav
音频文件时如何
进行
音量调节
2016-10-22
7874
AD9102锯齿
发生
器的
波形
来源,实现输出锯齿波应该配置那些寄存器
呢
?
2023-12-04
259
在
开发板上挂载的wm8960
录音
失败怎么解决
2022-01-13
1345
wm8978
录音
噪声大
2019-01-22
3863
怎样去解决STM32F103ZET6库函数程序移植的Delay函数
异常
问题
2021-12-15
1335
使用vs1003
录音
问题
2019-01-10
4146
心电模拟
波形
发生
系统设计
2019-07-22
1505
WAV
播放器后缀文件的格式是怎样的
呢
?
2021-07-08
1002
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分