|
我是从网络收音机上面移下来的,弄到ti的芯片上
#define MP3_AUDIO_BUF_SZ (5 * 1024)
unsigned short outBuf[MAX_NCHAN * MAX_NGRAN * MAX_NSAMP];//pcm数据
unsigned char mp3_fd_buffer[MP3_AUDIO_BUF_SZ];//mp3数据
while(1)
{
fresult = f_open(&g_sFileObject, "ai.mp3", FA_READ);
if(fresult==FR_OK)
{
read_ptr=RT_NULL;
bytes_left=0;
bytes_left_before_decoding=0;
read_buffer = &mp3_fd_buffer[0];
decoder= MP3InitDecoder();
if(decoder!=RT_NULL)
{
while(1)
{ if(read_ptr == RT_NULL||bytes_left < 2*MAINBUF_SIZE)
{
bytes_to_read = (MP3_AUDIO_BUF_SZ - bytes_left) & ~(512 - 1);
f_read(&g_sFileObject,read_buffer,bytes_to_read,&bytes_read);
if (bytes_read != 0)
{
read_ptr = read_buffer;
read_offset = 0;
bytes_left = bytes_left + bytes_read;
}
}
read_offset=MP3FindSyncWord(read_ptr, bytes_left);
if(read_offset<0)
{
bytes_left=0;
break;
}
read_ptr+=read_offset;
bytes_left-=read_offset;
if(bytes_left<1024)
{
if(bytes_left>0)
memmove(read_buffer,read_ptr,bytes_left);
bytes_to_read = (MP3_AUDIO_BUF_SZ - bytes_left) & ~(512 - 1);
f_read(&g_sFileObject,read_buffer+bytes_left,bytes_to_read,&bytes_read);
if (bytes_read != 0)
{
read_ptr = read_buffer;
read_offset = 0;
bytes_left = bytes_left + bytes_read;
}
} err = MP3Decode(decoder, &read_ptr,(int*)&bytes_left, (short*)outBuf, 0);
if (err != ERR_MP3_NONE)
{
switch (err)
{
case ERR_MP3_MAINDATA_UNDERFLOW:
/* do nothing - next call to decode will provide more mainData */
break;
default:
// skip this frame
if (bytes_left > 0)
{
bytes_left --;
read_ptr ++;
}
break;
}
}
else{
MP3GetLastFrameInfo(decoder, &frame_info);
}
}
}
}
}
第一次执行到这条语句err = MP3Decode(decoder, &read_ptr,(int*)&bytes_left, (short*)outBuf, 0); 然后产生错误ERR_MP3_MAINDATA_UNDERFLOW,循环第二次执行这个语句,产生错误ERR_MP3_INVALID_FRAMEHEADER;,然后跳出循环,谁帮我看看我缺少哪部分了,先谢过了 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|