-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMsRiff.h
76 lines (75 loc) · 2.11 KB
/
MsRiff.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*Allow: GPLv2.0, BSD, C.Commons, or unlicensed*/
/*Purpose: demo for sound/audio,
* should have just took an hour to do,
* and would go on to construct sound/audio,
* but failed to parse small sample .wav inputs,
* so must wav format was misunderstood somehow.*/
#ifndef MS_RIFF_H_
#define MS_RIFF_H_
#include <stdio.h> /*size_t FILE*/
#include <ctype.h> /*uint16_t uint32_t*/
#ifdef IO_H_
typedef IoHead MsHead;
#else
typedef uint32_t MsHead; /*PE/ELF "magic word"/file-type/head*/
#endif /*def IO_H_*/
typedef enum MsHeader : MsHead {
msHeaderRiff = 'FFIR', /*'RIFF'*/
msHeaderRifx = 'RIFX' /*'RIFX' big-endian*/
} MsHeader;
typedef enum RiffFormat : uint32_t {
riffFormatWave = 'EVAW', /*'WAVE'*/
riffFormatList = 'TSIL', /*'LIST'*/
riffFormatIsft = 'fvaL', /*'Lavf'*/
riffFormatJunk = 0 /*''*/
} RiffFormat;
typedef struct MicrosoftRiff {
MsHeader header; /*'RIFF'*/
uint32_t chunkSz;
RiffFormat format; /*'WAVE'*/
} MicrosoftRiff;
typedef enum SubchunkId : uint32_t {
subchunkIdWave = ' tmf', /*'fmt '*/
subchunkIdPcm = 'atad' /*'data'*/
} SubchunkId;
typedef enum SubchunkSz : uint32_t {
subchunkSzPcm = 16,
subchunkSzList = 18,
subchunkSzIsft = 12,
subchunkSzJunk = 1016
} SubchunkSz;
typedef enum MicrosoftAudio : uint16_t {
microsoftAudioPcm = 1
} MicrosoftAudio;
typedef struct MicrosoftPcm_ {
SubchunkId subchunk2Id; /*'data'*/
SubchunkSz subchunk2Sz;
} MicrosoftPcm_;
typedef struct MicrosoftWave {
MicrosoftRiff riff;
SubchunkId subchunk1Id; /*'fmt '*/
SubchunkSz subchunk1Sz;
MicrosoftAudio audioFormat;
uint16_t numChannels;
uint32_t samplePs;
uint32_t bytePs;
uint16_t blockAlign;
uint16_t bitsPerSample;
union {
uint16_t extraParamSz; /*+ char [ExtraParamSz]ExtraParams, not for PCM*/
MicrosoftPcm_ pcm;
};
} MicrosoftWave;
typedef struct MicrosoftPcm {
MicrosoftWave wave;
SubchunkId subchunk2Id; /*'data'*/
SubchunkSz subchunk2Sz;
} MicrosoftPcm;
typedef struct MicrosoftRiffList {
SubchunkId subchunk2Id; /*'LIST'*/
SubchunkSz subchunk2Sz; /*18*/
SubchunkId subchunk1Id; /*'fmt '*/
SubchunkSz subchunk1Sz;
MicrosoftAudio audioFormat;
} MicrosoftRiffList;
#endif /*ndef MS_RIFF_H_*/