1 /*----------------------------------------------------------------------------
2  *
3  * File:
4  * eas_types.h
5  *
6  * Contents and purpose:
7  * The public interface header for the EAS synthesizer.
8  *
9  * This header only contains declarations that are specific
10  * to this implementation.
11  *
12  * DO NOT MODIFY THIS FILE!
13  *
14  * Copyright Sonic Network Inc. 2004
15 
16  * Licensed under the Apache License, Version 2.0 (the "License");
17  * you may not use this file except in compliance with the License.
18  * You may obtain a copy of the License at
19  *
20  *      http://www.apache.org/licenses/LICENSE-2.0
21  *
22  * Unless required by applicable law or agreed to in writing, software
23  * distributed under the License is distributed on an "AS IS" BASIS,
24  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25  * See the License for the specific language governing permissions and
26  * limitations under the License.
27  *
28  *----------------------------------------------------------------------------
29  * Revision Control:
30  *   $Revision: 726 $
31  *   $Date: 2007-06-14 23:10:46 -0700 (Thu, 14 Jun 2007) $
32  *----------------------------------------------------------------------------
33 */
34 
35 #ifndef _EAS_TYPES_H
36 #define _EAS_TYPES_H
37 
38 /* EAS_RESULT return codes */
39 typedef long EAS_RESULT;
40 #define EAS_SUCCESS                         0
41 #define EAS_FAILURE                         -1
42 #define EAS_ERROR_INVALID_MODULE            -2
43 #define EAS_ERROR_MALLOC_FAILED             -3
44 #define EAS_ERROR_FILE_POS                  -4
45 #define EAS_ERROR_INVALID_FILE_MODE         -5
46 #define EAS_ERROR_FILE_SEEK                 -6
47 #define EAS_ERROR_FILE_LENGTH               -7
48 #define EAS_ERROR_NOT_IMPLEMENTED           -8
49 #define EAS_ERROR_CLOSE_FAILED              -9
50 #define EAS_ERROR_FILE_OPEN_FAILED          -10
51 #define EAS_ERROR_INVALID_HANDLE            -11
52 #define EAS_ERROR_NO_MIX_BUFFER             -12
53 #define EAS_ERROR_PARAMETER_RANGE           -13
54 #define EAS_ERROR_MAX_FILES_OPEN            -14
55 #define EAS_ERROR_UNRECOGNIZED_FORMAT       -15
56 #define EAS_BUFFER_SIZE_MISMATCH            -16
57 #define EAS_ERROR_FILE_FORMAT               -17
58 #define EAS_ERROR_SMF_NOT_INITIALIZED       -18
59 #define EAS_ERROR_LOCATE_BEYOND_END         -19
60 #define EAS_ERROR_INVALID_PCM_TYPE          -20
61 #define EAS_ERROR_MAX_PCM_STREAMS           -21
62 #define EAS_ERROR_NO_VOICE_ALLOCATED        -22
63 #define EAS_ERROR_INVALID_CHANNEL           -23
64 #define EAS_ERROR_ALREADY_STOPPED           -24
65 #define EAS_ERROR_FILE_READ_FAILED          -25
66 #define EAS_ERROR_HANDLE_INTEGRITY          -26
67 #define EAS_ERROR_MAX_STREAMS_OPEN          -27
68 #define EAS_ERROR_INVALID_PARAMETER         -28
69 #define EAS_ERROR_FEATURE_NOT_AVAILABLE     -29
70 #define EAS_ERROR_SOUND_LIBRARY             -30
71 #define EAS_ERROR_NOT_VALID_IN_THIS_STATE   -31
72 #define EAS_ERROR_NO_VIRTUAL_SYNTHESIZER    -32
73 #define EAS_ERROR_FILE_ALREADY_OPEN         -33
74 #define EAS_ERROR_FILE_ALREADY_CLOSED       -34
75 #define EAS_ERROR_INCOMPATIBLE_VERSION      -35
76 #define EAS_ERROR_QUEUE_IS_FULL             -36
77 #define EAS_ERROR_QUEUE_IS_EMPTY            -37
78 #define EAS_ERROR_FEATURE_ALREADY_ACTIVE    -38
79 
80 /* special return codes */
81 #define EAS_EOF                             3
82 #define EAS_STREAM_BUFFERING                4
83 #define EAS_BUFFER_FULL                     5
84 
85 /* EAS_STATE return codes */
86 typedef long EAS_STATE;
87 typedef enum
88 {
89     EAS_STATE_READY = 0,
90     EAS_STATE_PLAY,
91     EAS_STATE_STOPPING,
92     EAS_STATE_PAUSING,
93     EAS_STATE_STOPPED,
94     EAS_STATE_PAUSED,
95     EAS_STATE_OPEN,
96     EAS_STATE_ERROR,
97     EAS_STATE_EMPTY
98 } E_EAS_STATE;
99 
100 /* constants */
101 #ifndef EAS_CONST
102 #define EAS_CONST const
103 #endif
104 
105 /* definition for public interface functions */
106 #ifndef EAS_PUBLIC
107 #define EAS_PUBLIC
108 #endif
109 
110 /* boolean values */
111 typedef unsigned EAS_BOOL;
112 typedef unsigned char EAS_BOOL8;
113 
114 #define EAS_FALSE   0
115 #define EAS_TRUE    1
116 
117 /* scalar variable definitions */
118 typedef unsigned char EAS_U8;
119 typedef signed char EAS_I8;
120 typedef char EAS_CHAR;
121 
122 typedef unsigned short EAS_U16;
123 typedef short EAS_I16;
124 
125 typedef unsigned long EAS_U32;
126 typedef long EAS_I32;
127 
128 typedef unsigned EAS_UINT;
129 typedef int EAS_INT;
130 typedef long EAS_LONG;
131 
132 /* audio output type */
133 typedef short EAS_PCM;
134 
135 /* file open modes */
136 typedef EAS_I32 EAS_FILE_MODE;
137 #define EAS_FILE_READ   1
138 #define EAS_FILE_WRITE  2
139 
140 /* file locator e.g. filename or memory pointer */
141 typedef struct s_eas_file_tag {
142     void *handle;
143     int(*readAt)(void *handle, void *buf, int offset, int size);
144     int(*size)(void *handle);
145 } EAS_FILE, *EAS_FILE_LOCATOR;
146 
147 /* handle to stream */
148 typedef struct s_eas_stream_tag *EAS_HANDLE;
149 
150 /* handle to file */
151 typedef struct eas_hw_file_tag *EAS_FILE_HANDLE;
152 
153 /* handle for synthesizer data */
154 typedef struct s_eas_data_tag *EAS_DATA_HANDLE;
155 
156 /* handle to persistent data for host wrapper interface */
157 typedef struct eas_hw_inst_data_tag *EAS_HW_DATA_HANDLE;
158 
159 /* handle to sound library */
160 typedef struct s_eas_sndlib_tag *EAS_SNDLIB_HANDLE;
161 typedef struct s_eas_dls_tag *EAS_DLSLIB_HANDLE;
162 
163 /* pointer to frame buffer - used in split architecture only */
164 typedef struct s_eas_frame_buffer_tag *EAS_FRAME_BUFFER_HANDLE;
165 
166 /* untyped pointer for instance data */
167 typedef void *EAS_VOID_PTR;
168 
169 /* inline functions */
170 #ifndef EAS_INLINE
171 #if defined (__XCC__)
172 #define EAS_INLINE __inline__
173 #elif defined (__GNUC__)
174 #define EAS_INLINE inline static
175 #else
176 #define EAS_INLINE __inline
177 #endif
178 #endif
179 
180 /* define NULL value */
181 #ifndef NULL
182 #define NULL 0
183 #endif
184 
185 /* metadata types for metadata return codes */
186 typedef enum
187 {
188     EAS_METADATA_UNKNOWN = 0,
189     EAS_METADATA_TITLE,
190     EAS_METADATA_AUTHOR,
191     EAS_METADATA_COPYRIGHT,
192     EAS_METADATA_LYRIC,
193     EAS_METADATA_TEXT
194 } E_EAS_METADATA_TYPE;
195 
196 /* metadata callback function */
197 typedef void (*EAS_METADATA_CBFUNC) (E_EAS_METADATA_TYPE metaDataType, char *metaDataBuf, EAS_VOID_PTR pUserData);
198 
199 /* file types for metadata return codes */
200 typedef enum
201 {
202     EAS_FILE_UNKNOWN = 0,
203     EAS_FILE_SMF0,
204     EAS_FILE_SMF1,
205     EAS_FILE_SMAF_UNKNOWN,
206     EAS_FILE_SMAF_MA2,
207     EAS_FILE_SMAF_MA3,
208     EAS_FILE_SMAF_MA5,
209     EAS_FILE_CMX,
210     EAS_FILE_MFI,
211     EAS_FILE_OTA,
212     EAS_FILE_IMELODY,
213     EAS_FILE_RTTTL,
214     EAS_FILE_XMF0,
215     EAS_FILE_XMF1,
216     EAS_FILE_WAVE_PCM,
217     EAS_FILE_WAVE_IMA_ADPCM,
218     EAS_FILE_MMAPI_TONE_CONTROL
219 } E_EAS_FILE_TYPE;
220 
221 /* enumeration for synthesizers */
222 typedef enum
223 {
224     EAS_MCU_SYNTH = 0,
225     EAS_DSP_SYNTH
226 } E_SYNTHESIZER;
227 
228 /* external audio callback program change */
229 typedef struct s_ext_audio_prg_chg_tag
230 {
231     EAS_U16     bank;
232     EAS_U8      program;
233     EAS_U8      channel;
234 } S_EXT_AUDIO_PRG_CHG;
235 
236 /* external audio callback event */
237 typedef struct s_ext_audio_event_tag
238 {
239     EAS_U8      channel;
240     EAS_U8      note;
241     EAS_U8      velocity;
242     EAS_BOOL8   noteOn;
243 } S_EXT_AUDIO_EVENT;
244 
245 typedef struct s_midi_controllers_tag
246 {
247     EAS_U8      modWheel;           /* CC1 */
248     EAS_U8      volume;             /* CC7 */
249     EAS_U8      pan;                /* CC10 */
250     EAS_U8      expression;         /* CC11 */
251     EAS_U8      channelPressure;    /* MIDI channel pressure */
252 
253 #ifdef  _REVERB
254     EAS_U8      reverbSend;         /* CC91 */
255 #endif
256 
257 #ifdef  _CHORUS
258     EAS_U8      chorusSend;         /* CC93 */
259 #endif
260 } S_MIDI_CONTROLLERS;
261 
262 /* iMode play modes enumeration for EAS_SetPlayMode */
263 typedef enum
264 {
265     IMODE_PLAY_ALL = 0,
266     IMODE_PLAY_PARTIAL
267 } E_I_MODE_PLAY_MODE;
268 
269 typedef EAS_BOOL (*EAS_EXT_PRG_CHG_FUNC) (EAS_VOID_PTR pInstData, S_EXT_AUDIO_PRG_CHG *pPrgChg);
270 typedef EAS_BOOL (*EAS_EXT_EVENT_FUNC) (EAS_VOID_PTR pInstData, S_EXT_AUDIO_EVENT *pEvent);
271 
272 #endif /* #ifndef _EAS_TYPES_H */
273