wave_decode.h
4.13 KB
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#ifndef WAVE_DECODE_H
#define WAVE_DECODE_H
#define AUDIO_OUTPUT_24BIT
#define WAV_192K_SUPPORT
#define AUDIO_192K_DOWN_SAMPLE
#define AUDIO_176P4K_DOWN_SAMPLE
#define AUDIO_128K_DOWN_SAMPLE
#define WAV_96K_SUPPORT
#define AUDIO_96K_DOWN_SAMPLE
#define AUDIO_192K_DOWN_48K_SAMPLE
#define AUDIO_176P4K_DOWN_44P1K_SAMPLE
#define AUDIO_128K_DOWN_32K_SAMPLE
//the macro below is used AUDIO_88P2K_DOWN_44P1K_SAMPLE or AUDIO_64K_DOWN_32P1K_SAMPLE, too
//#define AUDIO_DOWN_SAMPLE
//#define AUDIO_OUT_BUF_SIZE 1152
//#define WAVE_DECODE_OUTPUT_BYTES (AUDIO_OUT_BUF_SIZE*4)
#define WAVE_DECODE_OUTPUT_BYTES (AUDIO_OUT_BUF_SIZE*2)
#ifdef AUDIO_192K_DOWN_48K_SAMPLE
#define WAV_192K_24BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*4)
#define WAV_96K_24BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*2)
#define WAV_48K_24BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*1)
#define WAV_192K_24BIT_TO_48K_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*4*2)
#define WAV_96K_24BIT_TO_48K_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*4)
#define WAV_192K_24BIT_TO_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*4)
#define WAV_96K_24BIT_TO_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*2)
#define WAV_192K_16BIT_TO_48K_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*4*2)
#define WAV_96K_16BIT_TO_48K_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*4)
#define WAV_192K_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*4)
#define WAV_96K_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*2)
#else
#ifdef AUDIO_192K_DOWN_SAMPLE
#define WAV_192K_24BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*2) //1152*2
#define WAV_96K_24BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*2) //1152*2
#define WAV_48K_24BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*1) //1152*1
#define WAV_192K_24BIT_TO_48K_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*4*2)
#define WAV_96K_24BIT_TO_48K_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*4)
#define WAV_192K_24BIT_TO_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*4)
#define WAV_96K_24BIT_TO_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*2)
#define WAV_192K_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*4)
#define WAV_96K_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*2)
#else
#define WAV_192K_24BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*2) //1152*2
#define WAV_96K_24BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*2) //1152*2
#define WAV_48K_24BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*2) //1152*2
#define WAV_192K_24BIT_TO_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*2)
#define WAV_96K_24BIT_TO_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*2)
#define WAV_192K_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*2)
#define WAV_96K_16BIT_DEC_OUT_BYTE (AUDIO_OUT_BUF_SIZE*2)
#endif
#endif
/*****************************************************************************************
WAV header structure
*****************************************************************************************/
typedef struct
{
// RIFF header
char cRIFFHeader[4]; /* "RIFF" */
unsigned int nRIFFBytes; /* pcmbytes + 44 - 8 , length in bytes without header */
// data type
char cDataTypeID[4]; /* "WAVE" */
// wave format
char cFormatHeader[4]; /* "fmt " */
unsigned int nFormatBytes; /* 2 + 2 + 4 + 4 + 2 + 2, length of PCM format decl area */
unsigned short nFormatTag; /* is pcm? */
unsigned short nChannels; /* 2 */
unsigned int nSamplesPerSec; /* 44100 */
unsigned int nAvgBytesPerSec; /* 44100 * 2 * ((bits + 7) / 8) */
unsigned short nBlockAlign; /* channels * ((bits + 7) / 8) */
unsigned short nBitsPerSample; /* bits = 16 */
// data chunk header
char cDataHeader[4]; /* "data" */
unsigned int nDataBytes; /* pcmbytes */
} __attribute__((packed)) WAVE_HEADER;
typedef enum{
WAVE_SUCCESS,
WAVE_HEADER_ERR,
WAVE_NOT_PCM,
WAVE_READ_ERR,
WAVE_STATUS_LAST
} WAVE_STATUS;
typedef struct{
U8 *out_buf;
U8 nBlockAlign;
U32 bytes;
U32 data_pos;
} WAVE_DECODE_DATA;
extern U8 wav_jump_adjust;
extern WAVE_DECODE_DATA *pwave;
U32 app_dec_wave_adjust_pos (U32 pos);
#endif