English
Language : 

VS1033 Datasheet, PDF (42/70 Pages) List of Unclassifed Manufacturers – MP3/AAC/WMA/MIDI AUDIO CODEC
VLSI
Solution y
VS1033a PRELIMINARY
VS1033A
9. OPERATION
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
File Size - 60
60 Block1Sample
2
16-bit linear first sample
62 Block1Step
2
ADPCM state
64 Block1Data
252
504 4-bit ADPCM samples
316 . . .
More ADPCM data blocks
If we have n audio blocks, the values in the table are as follows:
F = n × 256 + 52
R = Fs (see Chapter 9.4.1 to see how to calculate Fs)
B
=
Fs×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.
16-bit ADPCM values that are read from SCI HDAT0 are to be interpreted as big-endian values. In other
words, 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.
Version 0.6, 2005-01-05
42