Hi3531A 3路 I2S 音频调试

gcp 2018-02-06 10:43:46 3481

一. 先来一波音频相关的基本概念
1、采样率
采样就是把模拟信号数字化的过程,不仅仅是音频需要采样,所有的模拟信号都需要通过采样转换为可以用0101来表示的数字信号,根据奈奎斯特理论,采样频率只要不低于音频信号最高频率的两倍,就可以无损失地还原原始的声音。通常人耳能听到频率范围大约在20Hz~20kHz之间的声音,为了保证声音不失真,采样频率应在40kHz以上。常用的音频采样频率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。

2、量化精度(位宽)
这个数值的数据类型大小可以是:4bit、8bit、16bit、32bit等等,位数越多,表示得就越精细,声音质量自然就越好,当然,数据量也会成倍增大。常见的位宽是:8bit 或者 16bit。

3、声道数
单声道(Mono)和双声道(Stereo)比较常见,顾名思义,前者的声道数为1,后者为2

4、 音频帧
音频跟视频很不一样,视频每一帧就是一张图像,而从上面的正玄波可以看出,音频数据是流式的,本身没有明确的一帧帧的概念,在实际的应用中,为了音频算法处理/传输的方便,一般约定俗成取2.5ms~60ms为单位的数据量为一帧音频。这个时间被称之为“采样时间”,其长度没有特别的标准,它是根据编解码器和具体应用的需求来决定的,我们可以计算一下一帧音频帧的大小:
假设某通道的音频信号是采样率为8kHz,位宽为16bit,20ms一帧,双通道,则一帧音频数据的大小为:
int size = 8000 x 16bit x 0.02s x 2 = 5120 bit = 640 byte

5、 编码方式
上面提到过,模拟的音频信号转换为数字信号需要经过采样和量化,量化的过程被称之为编码,根据不同的量化策略,产生了许多不同的编码方式,常见的编码方式有:PCM 和 ADPCM,这些数据代表着无损的原始数字音频信号,添加一些文件头信息,就可以存储为WAV文件了,它是一种由微软和IBM联合开发的用于音频数字存储的标准,可以很容易地被解析和播放。

二. hi3531a 的音频调试
本次调试使用的AD芯片是CS5354, 支持主从模式,板载3颗AD芯片,分别对应AIP0,AIP1,AIP2,同时海思的AIO也支持主从模式。

1、录音和播放的原理
原始音频信号以模拟信号的形式给出后,通过 Audio Codec,按一定采样率和采样精度转换为数字信号。Audio Codec 以 I2S 时序或 PCM 时序的方式,将数字信号传输给 AI设备。芯片利用 DMA 将 AI 设备中的音频数据搬移到内存中,完成录音操作。播放和录音是基于同样的原理。芯片利用 DMA 将内存中的数据传输到 AO 设备。AO设备通过 I2S 时序或 PCM 时序向 Audio Codec 发送数据。Audio Codec 完成数字信号到模拟信号的转换过程,并输出模拟信号。

需要注意的是:Codec 的时序模式选择、同步时钟、采样位宽等配置必须与 AI 设备的配置保持一致,否则可能采集
不到正确的数据。

2、 以第3路AD为例
使用的模式是3531a做主,CS5354做从,3531a给AD提供MCLK时钟,AD的引脚如下:

3、sample代码修改:
Ai -> Aenc -> file

//注掉 SAMPLE_COMM_AUDIO_CfgAcodec

AUDIO_DEV   AiDev = SAMPLE_AUDIO_AI_DEV
//SAMPLE_AUDIO_AI_DEV 对应的是AI设备,第3路为:
#define SAMPLE_AUDIO_AI_DEV 2

stAioAttr.enSamplerate   = AUDIO_SAMPLE_RATE_8000; //采样率
stAioAttr.enBitwidth     = AUDIO_BIT_WIDTH_16; //位宽
stAioAttr.enWorkmode     = AIO_MODE_I2S_MASTER; //主从模式
stAioAttr.enSoundmode    = AUDIO_SOUND_MODE_MONO; //mono:单声道,stereo:立体声

 s32AencChnCnt = 1;//s32AiChnCnt;
//编码方式选择pcm
static PAYLOAD_TYPE_E gs_enPayloadType = PT_LPCM;
//立体声stAioAttr.u32ChnCnt      = 2;

4、调试信息

Ai(2,0) bind to AencChn:0 ok!
open stream file:"audio_chn0.pcm" for aenc ok
bind adec:0 to ao(0,0) ok
~ # cat /proc/umap/ai
[AI] Version: [Hi3531A_MPP_V1.0.4.0 B030 Release], Build Time: [Jan 13 2017, 17:17:20]
-----AI DEV ATTR---------------------------------------------------------------------------------------------------------
AiDev WorkMod   SampR  BitWid  ChnCnt  ClkCnt  ClkSel SoundMod  PoiNum  ExFlag  FrmNum
    2 i2s_mas    8kHZ   16bit       1      20       0     mono     320       1      30
-----AI DEV STATUS-------------------------------------------------------------------------------------------------------
AiDev TranLen     CBPhy  CBSize   ROffSet   WOffSet
    2     640  4ac4a000    1280       280         0
-----AI DEV EXTEND STATUS------------------------------------------------------------------------------------------------
AiDev enTrack   bMute  Volume
    2       0       N       0
-----AI CHN STATUS----------------------------------------------------------------------------------------------------------------
AiDev   AiChn   State    Read   Write      BufFul  UsrQueLost UsrFrmDepth u32Data0 u32Data1    UserGet    UserRls
    2       0  enable       0       0           0           0           0 fffffffe ffff0003          0          0
-----AI CHN RESAMPLE STATUS-------------------------------------------------------------------------------------------------------
AiDev AiChn   State  bResmp  PoiNum   InSampR  OutSampR
    2     0  enable       N       0    (null)    (null)
-----AI CHN VQE STATUS0------------------------------------------------------------------------------------------------------------
AiDev AiChn   State    bVqe workmod    RATE  PoiNum GainVol    bAnr    bAgc     bEq    bHpf    bAec    bRnr    bHdr    bDrc    bPeq  WrFile
    2     0  enable       N    comm  (null)       0       0       N       N       N       N       N       N       N       N       N       N

成功时,AI DEV STATUS的ROffSet数值,和AI CHN STATUS的u32Data0、u32Data1均有数据显示
ROffSet: DMA buffer 的读指针相对于起始地址的偏移量。
u32Data0: 通道 Buffer 中第一个 32 位数据。
u32Data1: 通道 Buffer 中第二个 32 位数据。

5、Adobe Audition 播放 pcm 编码音频

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
gcp
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
gcp
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区