Specifications

VLSI
Solution
y
VS1053b
VS1053B
9. OPERATION
9.8.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.
The following shows a header for mono file. 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 C0 C1 1 for mono, 2 for stereo
24 SampleRate 4 R0 R1 R2 R3 0x1f40 for 8 kHz
28 ByteRate 4 B0 B1 B2 B3 0xfd7 for 8 kHz mono
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 × C × 256 + 52
R = F
s
(see Chapter 9.8.1 to see how to calculate F
s
)
B =
F
s
×C×256
505
S = n × 505. D = n × C × 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.
A way to see if you have written the file in the right way is to check bytes 2 and 3 (the first byte counts
as byte 0) of each 256-byte block. Byte 3 should always be zero.
Below is an example of a valid header for a 44.1 kHz stereo IMA ADPCM file that has a final length of
10038844 (0x992E3C) bytes:
0000 52 49 46 46 34 2e 99 00 57 41 56 45 66 6d 74 20 |RIFF4...WAVEfmt |
0010 14 00 00 00 11 00 02 00 44 ac 00 00 a7 ae 00 00 |........D.......|
0020 00 02 04 00 02 00 f9 01 66 61 63 74 04 00 00 00 |........fact....|
0030 14 15 97 00 64 61 74 61 00 2e 99 00 |....data....|
Version 1.01, 2008-05-22 55