音乐播放实验,u32 wav_buffill(u8 *buf,u16 size,u8 bits)函数里,24bit填充数据不理解

2019-07-20 06:33发布

[mw_shl_code=c,true] if(bits==24)//24bit音频,需要处理一下 { readlen=(size/4)*3; //此次要读取的字节数 f_read(audiodev.file,audiodev.tbuf,readlen,(UINT*)&bread); //读取数据 p=audiodev.tbuf; for(i=0;i<size;) { buf[i++]=p[1]; buf=p[2]; i+=2; buf[i++]=p[0]; p+=3; } bread=(bread*4)/3; //填充后的大小. }e[/mw_shl_code] for循环当中将p[] 中数据给buf[]赋值,不知道为什么这样赋值
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
正点原子
1楼-- · 2019-07-20 10:58
因为填充方式需要变换。
wav存储的24bit格式,和送给IIS的,有点区别,故需要变换。
yefeng159
2楼-- · 2019-07-20 11:24
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-20 12:50
回复【3楼】yefeng159:
---------------------------------
你套一下即可。
yefeng159
4楼-- · 2019-07-20 18:12
 精彩回答 2  元偷偷看……
带枪的剑客
5楼-- · 2019-07-20 18:59
 精彩回答 2  元偷偷看……
带枪的剑客
6楼-- · 2019-07-21 00:18
本帖最后由 带枪的剑客 于 2016-8-18 12:01 编辑

原子的第四十八章 音乐播放器实验 http://www.openedv.com/posts/list/43516.htm
有提到如下:
顺便说一下SD卡读取到的24位WAV数据流,是低字节在前,高字节在后的,比如,我们读到一个声道的数据(24bit),存储在buf[3]里面,那么要通过SPI_DR发送这个24位数据,过程如下:SPI_DR=((u16)buf[2]<<8)+buf[1];SPI_DR=(u16)buf[0]<<8;    这样,第一次发送高16为数据,第二次发送低8位数据,完成一次24bit数据的发送。

一周热门 更多>