声卡实验里面IsocOutWrPtr和IsocOutRdPtr两个指针的用处?

2019-07-20 21:31发布

      探索者407开发板的声卡实验里面这两个指针不太明白是什么意思,读完代码我理解因为接收的音频流是48KHz,而片内IIS的分频只能做不到48KHz,直接透传会造成音频混叠。所以才在出现混叠帧的时候要抛弃一帧内容。不知道原子的最初设计是不是这样
      我还发现声卡实验视频里最后演示的实验用的两个歌曲“大海”“i can‘t tell you why”的音频文件格式是44.1KHz和92KHz。所以我认为只要播放设备的标识符设置为48KHz,PC在下发音频流的时候会自动转成48KHz。
      所以我假设我的设备和codec声卡都设置为同样的采样频率和格式比如都是16K采样,24bit。那么不需要在arm里面把不同采样的音频流进行裁剪。@正点原子
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
20条回答
lvehe
1楼-- · 2019-07-20 23:32
本帖最后由 lvehe 于 2016-6-13 20:53 编辑

在usbd_audio_DataOut函数中,IsocOutWrPtr首先指向IsocOutBuff起始位置,并开始接收电脑传传输过来的音频数据。
当其指向IsocOutBuff的中间位置时,设置PlayFlag = 1。
函数usbd_audio_SOF判断PlayFlag有效后,从IsocOutRdPtr开始播放音频数据。而此时IsocOutRdPtr指向IsocOutBuff的起始位置。
就这样以类似双缓冲的机制周而复始,IsocRdPtr永远追随着IsocOutWrPtr,直到IsocOutWrPtr与之相等,此时应该是电脑的音频数据播放完毕。

与录音类似,放音似乎也会对采样率进行重新处理。比如USB麦克风录音采样率为48kHz,实际电脑录音为44.1kHz。

分享一下让采样率精确接近实际采样率的时钟设置。如8MHz晶振足够精确,那么除44.1kHz和22.05kHz外,192kHz、96KHz、48kHz、32kHz、16kHz、8kHz都是0误差的。如要44.1kHz和22.05kHz精确,则要修改I2SN和I2SR。详见USB麦克风源码中的system_stm32f4xx.c。
STM32F407 8MHz-12.288MHz.png
czdspeed
2楼-- · 2019-07-21 00:22
lvehe 发表于 2016-6-13 20:50
在usbd_audio_DataOut函数中,IsocOutWrPtr首先指向IsocOutBuff起始位置,并开始接收电脑传传输过来的音频 ...

这位大哥给我的提示不少,都很受用,我这方面还要多想你取经。如果usb会进行重采样的话,那我其实不需要修改描述符为指定采样率,直接将buff的数据进行3取一或者二取一就可以获得16K或者24K的输出。然后只要把iis的总线和dma中断的搬运buf的长度做相应的修改就可以了。
czdspeed
3楼-- · 2019-07-21 03:28
 精彩回答 2  元偷偷看……
czdspeed
4楼-- · 2019-07-21 04:03
lvehe 发表于 2016-6-13 15:49
在usbd_audio_DataOut函数中,IsocOutWrPtr首先指向IsocOutBuff起始位置,并开始接收电脑传传输过来的音频 ...

另外打搅您,想请教一个问题,我们录音或者播放的音量调节范围应该是在描述符里面修改吧。就是截图这个地方。公司之前用ti的85xx系列都是调节到+12db,目前这个30db太大了,一般说话录音只要+3~+6就可以了。现在想保持一致,我在usb 描述符的文档也找了vol 调节的介绍,但是描述符里面没有找到相应修改的地方。不知道您对这个修改有什么建议。
lvehe
5楼-- · 2019-07-21 06:40
czdspeed 发表于 2016-6-16 10:03
另外打搅您,想请教一个问题,我们录音或者播放的音量调节范围应该是在描述符里面修改吧。就是截图这个地 ...

描述符里面没有。枚举的时候主机会发送GET_MIN、GET_MAX和GET_RES来获取音量的范围和步进值的。
czdspeed
6楼-- · 2019-07-21 11:05
lvehe 发表于 2016-6-16 10:07
描述符里面没有。枚举的时候主机会发送GET_MIN、GET_MAX和GET_RES来获取音量的范围和步进值的。

这几个和set max set min在驱动程序里面都没有被引用过。我之前试着直接修改了init里面vol,但是发现这个只是改了默认音量,这个范围还是不清楚在哪里修改。

一周热门 更多>