Kinetis SDK v.1.2 Demo Applications User's Guide  Rev. 0
Freescale Semiconductor, Inc.
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
audio.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 - 2014, Freescale Semiconductor, Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without modification,
6  * are permitted provided that the following conditions are met:
7  *
8  * o Redistributions of source code must retain the above copyright notice, this list
9  * of conditions and the following disclaimer.
10  *
11  * o Redistributions in binary form must reproduce the above copyright notice, this
12  * list of conditions and the following disclaimer in the documentation and/or
13  * other materials provided with the distribution.
14  *
15  * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
16  * contributors may be used to endorse or promote products derived from this
17  * software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
23  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  *
30  */
31 
32 #ifndef __AUDIO_H__
33 #define __AUDIO_H__
34 
36 // Includes
38 
39 // Standard C Included Files
40 #include <stdint.h>
41 // SDK Included Files
42 #include "fsl_soundcard.h"
43 #include "fsl_sai_driver.h"
44 // Application Included Files
45 #include "equalizer.h"
46 
48 // Definitions
50 
54 #define WAVE_FILE_HEADER_SIZE 0x2CU
55 // Gain Levels
56 #define HP_GAIN_POS_12_0 0x00
57 #define HP_GAIN_POS_11_5 0x01
58 #define HP_GAIN_POS_11_0 0x02
59 #define HP_GAIN_POS_10_5 0x03
60 #define HP_GAIN_POS_10_0 0x04
61 #define HP_GAIN_POS_09_5 0x05
62 #define HP_GAIN_POS_09_0 0x06
63 #define HP_GAIN_POS_08_5 0x07
64 #define HP_GAIN_POS_08_0 0x08
65 #define HP_GAIN_POS_07_5 0x09
66 #define HP_GAIN_POS_07_0 0x0A
67 #define HP_GAIN_POS_06_5 0x0B
68 #define HP_GAIN_POS_06_0 0x0C
69 #define HP_GAIN_POS_05_5 0x0D
70 #define HP_GAIN_POS_05_0 0x0E
71 #define HP_GAIN_POS_04_5 0x0F
72 #define HP_GAIN_POS_04_0 0x10
73 #define HP_GAIN_POS_03_5 0x11
74 #define HP_GAIN_POS_03_0 0x12
75 #define HP_GAIN_POS_02_5 0x13
76 #define HP_GAIN_POS_02_0 0x14
77 #define HP_GAIN_POS_01_5 0x15
78 #define HP_GAIN_POS_01_0 0x16
79 #define HP_GAIN_POS_00_5 0x17
80 #define HP_GAIN_POS_00_0 0x18
81 #define HP_GAIN_NEG_00_5 0x19
82 #define HP_GAIN_NEG_01_0 0x1A
83 #define HP_GAIN_NEG_01_5 0x1B
84 #define HP_GAIN_NEG_02_0 0x1C
85 #define HP_GAIN_NEG_02_5 0x1D
86 #define HP_GAIN_NEG_03_0 0x1E
87 #define HP_GAIN_NEG_03_5 0x1F
88 #define HP_GAIN_NEG_04_0 0x20
89 #define HP_GAIN_NEG_04_5 0x21
90 #define HP_GAIN_NEG_05_0 0x22
91 #define HP_GAIN_NEG_05_5 0x23
92 #define HP_GAIN_NEG_06_0 0x24
93 #define HP_GAIN_NEG_06_5 0x25
94 #define HP_GAIN_NEG_07_0 0x26
95 #define HP_GAIN_NEG_07_5 0x27
96 #define HP_GAIN_NEG_08_0 0x28
97 #define HP_GAIN_NEG_08_5 0x29
98 #define HP_GAIN_NEG_09_0 0x2A
99 #define HP_GAIN_NEG_09_5 0x2B
100 #define HP_GAIN_NEG_10_0 0x2C
101 #define HP_GAIN_NEG_10_5 0x2D
102 #define HP_GAIN_NEG_11_0 0x2E
103 #define HP_GAIN_NEG_11_5 0x2F
104 #define HP_GAIN_NEG_12_0 0x30
105 #define HP_GAIN_NEG_12_5 0x31
106 #define HP_GAIN_NEG_13_0 0x32
107 #define HP_GAIN_NEG_13_5 0x33
108 #define HP_GAIN_NEG_14_0 0x34
109 #define HP_GAIN_NEG_14_5 0x35
110 #define HP_GAIN_NEG_15_0 0x36
111 #define HP_GAIN_NEG_15_5 0x37
112 #define HP_GAIN_NEG_16_0 0x38
113 #define HP_GAIN_NEG_16_5 0x39
114 #define HP_GAIN_NEG_17_0 0x3A
115 #define HP_GAIN_NEG_17_5 0x3B
116 #define HP_GAIN_NEG_18_0 0x3C
117 #define HP_GAIN_NEG_18_5 0x3D
118 #define HP_GAIN_NEG_19_0 0x3E
119 #define HP_GAIN_NEG_19_5 0x3F
120 #define HP_GAIN_NEG_20_0 0x40
121 #define HP_GAIN_NEG_20_5 0x41
122 #define HP_GAIN_NEG_21_0 0x42
123 #define HP_GAIN_NEG_21_5 0x43
124 #define HP_GAIN_NEG_22_0 0x44
125 #define HP_GAIN_NEG_22_5 0x45
126 #define HP_GAIN_NEG_23_0 0x46
127 #define HP_GAIN_NEG_23_5 0x47
128 #define HP_GAIN_NEG_24_0 0x48
129 #define HP_GAIN_NEG_24_5 0x49
130 #define HP_GAIN_NEG_25_0 0x4A
131 #define HP_GAIN_NEG_25_5 0x4B
132 #define HP_GAIN_NEG_26_0 0x4C
133 #define HP_GAIN_NEG_26_5 0x4D
134 #define HP_GAIN_NEG_27_0 0x4E
135 #define HP_GAIN_NEG_27_5 0x4F
136 #define HP_GAIN_NEG_28_0 0x50
137 #define HP_GAIN_NEG_28_5 0x51
138 #define HP_GAIN_NEG_29_0 0x52
139 #define HP_GAIN_NEG_29_5 0x53
140 #define HP_GAIN_NEG_30_0 0x54
141 #define HP_GAIN_NEG_30_5 0x55
142 #define HP_GAIN_NEG_31_0 0x56
143 #define HP_GAIN_NEG_31_5 0x57
144 #define HP_GAIN_NEG_32_0 0x58
145 #define HP_GAIN_NEG_32_5 0x59
146 #define HP_GAIN_NEG_33_0 0x5A
147 #define HP_GAIN_NEG_33_5 0x5B
148 #define HP_GAIN_NEG_34_0 0x5C
149 #define HP_GAIN_NEG_34_5 0x5D
150 #define HP_GAIN_NEG_35_0 0x5E
151 #define HP_GAIN_NEG_35_5 0x5F
152 #define HP_GAIN_NEG_36_0 0x60
153 #define HP_GAIN_NEG_36_5 0x61
154 #define HP_GAIN_NEG_37_0 0x62
155 #define HP_GAIN_NEG_37_5 0x63
156 #define HP_GAIN_NEG_38_0 0x64
157 #define HP_GAIN_NEG_38_5 0x65
158 #define HP_GAIN_NEG_39_0 0x66
159 #define HP_GAIN_NEG_39_5 0x67
160 #define HP_GAIN_NEG_40_0 0x68
161 #define HP_GAIN_NEG_40_5 0x69
162 #define HP_GAIN_NEG_41_0 0x6A
163 #define HP_GAIN_NEG_41_5 0x6B
164 #define HP_GAIN_NEG_42_0 0x6C
165 #define HP_GAIN_NEG_42_5 0x6D
166 #define HP_GAIN_NEG_43_0 0x6E
167 #define HP_GAIN_NEG_43_5 0x6F
168 #define HP_GAIN_NEG_44_0 0x70
169 #define HP_GAIN_NEG_44_5 0x71
170 #define HP_GAIN_NEG_45_0 0x72
171 #define HP_GAIN_NEG_45_5 0x73
172 #define HP_GAIN_NEG_46_0 0x74
173 #define HP_GAIN_NEG_46_5 0x75
174 #define HP_GAIN_NEG_47_0 0x76
175 #define HP_GAIN_NEG_47_5 0x77
176 #define HP_GAIN_NEG_48_0 0x78
177 #define HP_GAIN_NEG_48_5 0x79
178 #define HP_GAIN_NEG_49_0 0x7A
179 #define HP_GAIN_NEG_49_5 0x7B
180 #define HP_GAIN_NEG_50_0 0x7C
181 #define HP_GAIN_NEG_50_5 0x7D
182 #define HP_GAIN_NEG_51_0 0x7E
183 #define HP_GAIN_NEG_51_5 0x7F
184 
188 typedef struct wave_header
189 {
190  uint8_t riff[4];
191  uint32_t size;
192  uint8_t waveFlag[4];
193  uint8_t fmt[4];
194  uint32_t fmtLen;
195  uint16_t tag;
196  uint16_t channels;
197  uint32_t sampFreq;
198  uint32_t byteRate;
199  uint16_t blockAlign;
200  uint16_t bitSamp;
201  uint8_t dataFlag[4];
202  uint32_t length;
203 } wave_header_t;
204 
208 typedef struct wave_file
209 {
211  uint32_t *data;
212 }wave_file_t;
213 
215 // Prototypes
217 
221 void audio_stream_init(void);
222 
228 void audio_wav_init(wave_file_t *newWav);
229 
239 uint32_t config_volume(sgtl_handler_t *handler, sgtl_module_t module, uint32_t volumeCtrl);
240 
248 snd_status_t stream_audio(dsp_types_t dspType, uint8_t volumeCtrl);
249 
257 snd_status_t get_wav_data(wave_file_t *waveFile);
258 
267 snd_status_t play_wav(uint32_t *pcmBuffer, uint8_t volumeCtrl);
268 
276 void send_wav(uint8_t *dataBuffer, uint32_t length, sai_data_format_t *dataFormat);
277 
278 #endif // __AUDIO_H__
snd_status_t play_wav(uint32_t *pcmBuffer, uint8_t volumeCtrl)
Play PCM audio data from wav format array.
Definition: audio.c:391
uint16_t bitSamp
Definition: audio.h:200
uint32_t config_volume(sgtl_handler_t *handler, sgtl_module_t module, uint32_t volumeCtrl)
Sets volume from user input.
Definition: audio.c:169
static sgtl_handler_t handler
Definition: driver_examples/flexio/i2s/main.c:52
snd_status_t get_wav_data(wave_file_t *waveFile)
Collects data from wav file header.
Definition: audio.c:224
snd_status_t stream_audio(dsp_types_t dspType, uint8_t volumeCtrl)
Plays a stream of audio.
Definition: audio.c:293
wave_header_t header
Definition: audio.h:210
void send_wav(uint8_t *dataBuffer, uint32_t length, sai_data_format_t *dataFormat)
Send audio data to sound card.
Definition: audio.c:443
uint32_t * data
Definition: audio.h:211
uint16_t tag
Definition: audio.h:195
uint32_t sampFreq
Definition: audio.h:197
dsp_types_t
Definition: equalizer.h:54
uint32_t byteRate
Definition: audio.h:198
void audio_wav_init(wave_file_t *newWav)
Initialize audio WAV.
Definition: audio.c:82
Wave file structure.
Definition: audio.h:208
void audio_stream_init(void)
Initialize I2S, I2C, &amp; TWR-AUDIO-SGTL board.
Definition: audio.c:126
uint16_t channels
Definition: audio.h:196
uint32_t size
Definition: audio.h:191
uint32_t length
Definition: audio.h:202
uint32_t fmtLen
Definition: audio.h:194
uint16_t blockAlign
Definition: audio.h:199
Standard Windows PCM wave file header structure.
Definition: audio.h:188