这个地方填充该如何做?播放双声道的音乐没有问题,播放单声道的音乐时,音调不对。。。
//ìî3äbuf
//buf:êy¾YÇø
//size:ìî3äêy¾Yá¿
//bits:λêy(16/24)
//·μ»ØÖμ:¶áμ½μÄêy¾Y¸öêy
u32 wav_buffill(u8 *buf,u16 size,u8 bits)
{
u16 readlen=0;
u32 bread;
u16 i;
u8 *p;
if(bits==24)//24bitòôÆμ,Dèòa′|àíò»ÏÂ
{
readlen=(size/4)*3; //′Ë′Îòa¶áè¡μÄ×Ö½úêy
f_read(audiodev.file,audiodev.tbuf,readlen,(UINT*)&bread); //¶áè¡êy¾Y
p=audiodev.tbuf;
for(i=0;i<size;)
{
buf[i++]=p[1];
buf[i]=p[2];
i+=2;
buf[i++]=p[0];
p+=3;
}
bread=(bread*4)/3; //ìî3äoóμÄ′óD¡.
}else
{
f_read(audiodev.file,buf,size,(UINT*)&bread);//16bitòôÆμ,Ö±½ó¶áè¡êy¾Y
if(bread<size)//2»1»êy¾YáË,213ä0
{
for(i=bread;i<size-bread;i++)buf[i]=0;
}
}
return bread;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
不是这个意思,你的音频数据是左声道data 右声道data 左声道data 右声道data这样子的,你要只输出左声道data那就在数据区只拿出左声道的数据填充到DMA的buffer;你的做法只是丢掉了一部分数据而已,还是双声道的
哥,你的意思是把填充的函数屏蔽一个还是?
fillnum=wav_buffill(audiodev.i2sbuf1,WAV_I2S_TX_DMA_BUFSIZE,wavctrl.bps);
// fillnum=wav_buffill(audiodev.i2sbuf2,WAV_I2S_TX_DMA_BUFSIZE,wavctrl.bps);
是这个样子的吗?
一周热门 更多>