新手上路
- 积分
- 42
- 金钱
- 42
- 注册时间
- 2012-11-20
- 在线时间
- 2 小时
|
小弟新学fatfs,在sd卡上放了一个“1.mp3”的文件作为测试,然后使用fatfs的读文件函数读写该mp3文件,送到vs1053播放,但是没有声音。开始考虑是vs1053没设置或者复位好,就把mp3文件弄成2进制送vs1053就有声音,然后用fatfs的函数读写sd卡上的txt文件也没用问题,而且可以读出该mp3文件的歌曲名字和作者等信息无误,就是没声音,现在不知道问题出在哪里。
程序简单的很,就是想测试下能否用fatfs读mp3文件,
void music_dis(void)
{
unsigned int i,j;
unsigned char *music_name; //歌曲名称
unsigned char *music_auther; //歌曲作者
FATFS fs; /* Work area (file system object) for logical drive */
FIL fl; /* file objects */
FRESULT res=FR_OK;
UINT r;
SPIx_SetSpeed(SPI_SPEED_8);
while(1)
{
// music_kbps = 0;
// music_order[0] = (music_sign+1)/10+'0';
// music_order[1] = (music_sign+1)%10+'0';
f_mount(0,&fs);
f_open(&fl,"1.mp3",FA_OPEN_EXISTING|FA_READ);
//ID3V1(存储于MP3最后128字节)
res = f_lseek(&fl,fl.fsize-128);
if((res = f_read(&fl,buffer,128,&r))== FR_OK)
{
//判断是否有ID3V1
if(buffer[0] == 'T' && buffer[1] == 'A' && buffer[2] == 'G')
{
music_name = buffer+3;//指向歌曲名称
music_auther = buffer+33;//指向歌曲作者
*(music_name+19) ='\0';//*(music_name+20) ='\0';
*(music_auther+19) ='\0';//*(music_auther+20) ='\0';
printf("\r\n %s ", music_name); //显示歌曲名称
printf("\r\n %s ", music_auther);//显示歌曲作者
}
else
{
}
}
res = f_lseek(&fl,0);
// VS_Get_DecodeTime();
while((res = f_read(&fl,buffer,512,&r))== FR_OK)
{
//音乐播放开始
if(res || r==0)break; //when r is 512 ,then r>>5 is 16
for(j=0;j<(r>>5);j++) //16 * 32 = 512
{
while(VS_DQ == 0);//等待VS1053数据空闲
VS_XDCS=0;
for(i=0;i<32;i++)
VS_WR_Data(buffer[(j<<5)+i]);
VS_XDCS=1;
}
printf("\r\n %s ", buffer);
// MP3_Msg_Show(fl.fsize);
}
f_close(&fl);//关闭当前打开的文件
f_mount(0,NULL);
}
}
int main(void)
{
u32 n ,m;
uart_init(9600);
SD_Initialize();
VS_Init();
music_dis();
}
|
|