可以录,但是有沙沙沙的背景噪音,去不掉,不知什么原因
unsigned char RIFFHeader0[] = {
'R' , 'I' , 'F' , 'F' , // Chunk ID (RIFF)
0x70, 0x70, 0x70, 0x70, // Chunk payload size (calculate after rec!)
'W' , 'A' , 'V' , 'E' , // RIFF resource format type
'f' , 'm' , 't' , ' ' , // Chunk ID (fmt )
0x14, 0x00, 0x00, 0x00, // Chunk payload size (0x14 = 20 bytes)
0x11, 0x00, // Format Tag (IMA ADPCM)
0x01, 0x00, // Channels (1)
0x80, 0x3e, 0x00, 0x00, // Sample Rate, 0x3e80 = 16.0kHz
0xd7, 0x0f, 0x00, 0x00, // Average Bytes Per Second
0x00, 0x01, // Data Block Size (256 bytes)
0x04, 0x00, // ADPCM encoded bits per sample (4 bits)
0x02, 0x00, // Extra data (2 bytes)
0xf9, 0x01, // Samples per Block (505 samples)
'f' , 'a' , 'c' , 't' , // Chunk ID (fact)
0xc8, 0x01, 0x00, 0x00, // Chunk payload size (456 bytes (zeropad!))
0xff, 0xff, 0xff, 0xff // Number of Samples (calculate after rec!)
// Insert 448 zeroes here!
};
unsigned char RIFFHeader504[] = {
'd' , 'a' , 't' , 'a' , // Chunk ID (data)
0x70, 0x70, 0x70, 0x70 // Chunk payload size (calculate after rec!)
};
unsigned long SEC_CAL=0;
delayms(10);
VS1003_CMD_Write(0x03,0x6696);
VS1003_CMD_Write(0x0c,9);
VS1003_CMD_Write(0x0d,0x1000);
VS1003_CMD_Write(0,0x1804);
_delay_ms(50);
VS1003_CMD_Write(0x03,0x6696);
_delay_ms(50);
for (i=0; i<56; i++)
{
buffer = RIFFHeader0;
}
for (i=52; i<504; i++)
{
buffer = 0;
}
for (i=504; i<512; i++)
{
buffer = RIFFHeader504[i-504];
}
if(f_open(&fdst, "test.wav", FA_CREATE_ALWAYS | FA_WRITE))
{
LCD_TextOut(0, 0,"OPEN ER!");
while(1);
}
f_write(&fdst, buffer,512, &bw);
j=0;
p=buffer;
REC_Scount=1;
while (VS1003_CMD_Read(0x09)>>8);
while(!(key1_up(1)))
{
if(VS1003_CMD_Read(0x09) >= 128)
{
for (i=0;i<128;i++)
{
z = VS1003_CMD_Read(0x08);
*p++ = (z>>8);
*p++ = (z & 0xff);
}
j++;
}
if(j==2)
{
j=0;
if(f_write(&fdst,buffer,512, &bw))
{
LCD_TextOut(0, 1,"WR ER!");
while(1);
}
REC_Scount++;
p=buffer;
}
}
for (i=0; i<56; i++)
{
buffer = RIFFHeader0;
}
for (i=52; i<504; i++)
{
buffer = 0;
}
for (i=504; i<512; i++)
{
buffer = RIFFHeader504[i-504];
}
SEC_CAL=(REC_Scount-1UL)*1010UL;
buffer[48] = (SEC_CAL & 0xff);
buffer[49] = ((SEC_CAL >>8) & 0xff);
buffer[50] = ((SEC_CAL >>16) & 0xff);
buffer[51] = ((SEC_CAL >>24) & 0xff);
SEC_CAL = (REC_Scount*512UL)-8UL;
buffer[4] = (SEC_CAL & 0xff);
buffer[5] = ((SEC_CAL >>8) & 0xff);
buffer[6] = ((SEC_CAL >>16) & 0xff);
buffer[7] = ((SEC_CAL >>24) & 0xff);
SEC_CAL = (REC_Scount-1)*512UL;
buffer[508] = (SEC_CAL & 0xff);
buffer[509] = ((SEC_CAL >>8) & 0xff);
buffer[510] = ((SEC_CAL >>16) & 0xff);
buffer[511] = ((SEC_CAL >>24) & 0xff);
LCD_Num(0, 2,SEC_CAL);
f_lseek(&fdst,0);
f_write(&fdst, buffer,512, &bw);
f_lseek(&fdst,fdst.fsize);
// VS1003_Init();
f_close(&fdst); |