This is the data that VS1003 gave. But when I play this file into play mode, It plays strange sound.
These are the value that I write into the register.
VS1003_MODE = 0x5800 or 0x1800 (Both doesn't work)
VS1003_CLOCKF = 0xc430 (((12288000-8000000+2000)/4000) | 0xc000)
VS1003_VOLUME = 0xFEFE
VS1003_AICTRL0 = 0x0018 (int)(4.0*12288000/256/8000+0.5)
VS1003_AICTRL1 = 0
And this is the code that puts a header into the file.
Code: Select all
void VS1003_WAV_AddHeader(SD_VS1003 *SD, const char *fileName)
{
UINT temp;
uint8_t ch = 1;
uint8_t bps = 16; //Bits Per Sample
uint16_t sampleRate = 8000;
f_open(&USERFile, fileName, FA_WRITE);
f_puts("RIFF", &USERFile); //Chunk ID
*(uint32_t*)WAV_HEADER.ChunkSize = USERFile.fsize - 8;
f_write(&USERFile, WAV_HEADER.ChunkSize, 4, &temp); //Chunk Size
f_puts("WAVE", &USERFile); //Format
f_puts("fmt ", &USERFile); //SubChunk1 ID
*(uint32_t*)WAV_HEADER.SubChunk1Size = 0x00000014;
f_write(&USERFile, WAV_HEADER.SubChunk1Size, 4, &temp); //SubChunk1 Size
*(uint16_t*)WAV_HEADER.AudioFormat = 0x0011;
f_write(&USERFile, WAV_HEADER.AudioFormat, 2, &temp); //Audio Format
*(uint16_t*)WAV_HEADER.NumOfChannels = ch;
f_write(&USERFile, WAV_HEADER.NumOfChannels, 2, &temp); //NumOfChannels
*(uint32_t*)WAV_HEADER.SampleRate = sampleRate;
f_write(&USERFile, WAV_HEADER.SampleRate, 4, &temp); //Samplerate
*(uint32_t*)WAV_HEADER.ByteRate = (uint32_t)sampleRate * 256 / 505;
f_write(&USERFile, WAV_HEADER.ByteRate, 4, &temp); //Byterate
*(uint16_t*)WAV_HEADER.BlockAlign = 0x0100;
f_write(&USERFile, WAV_HEADER.BlockAlign, 2, &temp); //Block Align
*(uint16_t*)WAV_HEADER.BitsPerSample = 0x04;
f_write(&USERFile, WAV_HEADER.BitsPerSample, 2, &temp); //BitsPerSample
*(uint16_t*)WAV_HEADER.ByteExtraData = 0x0002;
f_write(&USERFile, WAV_HEADER.ByteExtraData, 2, &temp); //ByteExtraData
*(uint16_t*)WAV_HEADER.ExtraData = 0x01f9;
f_write(&USERFile, WAV_HEADER.ExtraData, 2, &temp); //ExtraData
f_puts("fact", &USERFile); //SubChunk2 ID
*(uint32_t*)WAV_HEADER.SubChunk2Size = 0x00000004;
f_write(&USERFile, WAV_HEADER.SubChunk2Size, 4, &temp); //SubChunk2 Size
*(uint32_t*)WAV_HEADER.NumOfSamples = (USERFile.fsize - 60) * 505 / 256;
f_write(&USERFile, WAV_HEADER.NumOfSamples, 4, &temp); //NumOfSamples
f_puts("data", &USERFile); //SubChunk3 ID
*(uint32_t*)WAV_HEADER.SubChunk3Size = USERFile.fsize - 60;
f_write(&USERFile, WAV_HEADER.SubChunk3Size, 4, &temp); //SubChunk3 Size
f_close(&USERFile);
return;
}
What should I do to solve this problem?
And can I recode into another format? ex)mp3, PCM
Thank you