|
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 ï¬le a RIFF / WAV ï¬le, you have to add a header before the actual data.
Note that 2- and 4-byte values are little-endian (lowest byte ï¬rst) 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 ï¬rst 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 ï¬ll in the complete header before
any actual data. However, if you donât know how much you are going to record, you have to ï¬ll in the
header size datas F , S and D after ï¬nishing 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 ï¬rst byte to a ï¬le, 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 ï¬le in the right way is to check bytes 2 and 3 (the ï¬rst byte counts
as byte 0) of each 256-byte block. Byte 3 should always be zero.
Version 0.6, 2005-01-05
42
|
▷ |