User Manual

VS1003
9 OPERATION
Note: if SCI_HDAT1 896, it may be better to wait for the buffer to overflow and clear before
reading samples. That way you may avoid buffer aliasing.
Each IMA ADPCM block is 128 words, i.e. 256 bytes. If you wish to interrupt reading data
and possibly continue later, please stop at a 128-word boundary. This way whole blocks are
skipped and the encoded stream stays valid.
9.4.3 Adding a RIFF Header
To make your IMA ADPCM file a RIFF / WAV file, you have to add a header before the actual
data. Note that 2- and 4-byte values are little-endian (lowest byte first) in this format:
File Offset Field Name Size Bytes Description
0 ChunkID 4 "RIFF"
4 ChunkSize 4 F0 F1 F2 F3 File size - 8
8 Format 4 "WAVE"
12 SubChunk1ID 4 "fmt "
16 SubChunk1Size 4 0x14 0x0 0x0 0x0 20
20 AudioFormat 2 0x11 0x0 0x11 for IMA ADPCM
22 NumOfChannels 2 0x1 0x0 Mono sound
24 SampleRate 4 R0 R1 R2 R3 0x1f40 for 8 kHz
28 ByteRate 4 B0 B1 B2 B3 0xfd7 for 8 kHz
32 BlockAlign 2 0x0 0x1 0x100
34 BitsPerSample 2 0x4 0x0 4-bit ADPCM
36 ByteExtraData 2 0x2 0x0 2
38 ExtraData 2 0xf9 0x1 Samples per block (505)
40 SubChunk2ID 4 "fact"
44 SubChunk2Size 4 0x4 0x0 0x0 0x0 4
48 NumOfSamples 4 S0 S1 S2 S3
52 SubChunk3ID 4 "data"
56 SubChunk3Size 4 D0 D1 D2 D3 Data size (File Size-60)
60 Block1 256 First ADPCM block
316 . . . More ADPCM data blocks
If we have n audio blocks, the values in the table are as follows:
F = n × 256 + 52
R = F
s
(see Chapter 9.4.1 to see how to calculate F
s
)
B =
F
s
×256
505
S = n × 505. D = n × 256
If you know beforehand how much you are going to record, you may fill in the complete header
before any actual data. However, if you don’t know how much you are going to record, you have
to fill in the header size datas F , S and D after finishing recording.
The 128 words (256 bytes) of an ADPCM block are read from SCI_HDAT0 and written into file
as follows. The high 8 bits of SCI_HDAT0 should be written as the first byte to a file, then the
low 8 bits. Note that this is contrary to the default operation of some 16-bit microcontrollers,
and you may have to take extra care to do this right.
Version: 1.08, 2014-12-19 39