Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | pmbaty | 1 | #ifndef S3_TYPES_H |
2 | #define S3_TYPES_H |
||
3 | |||
4 | #include "s3/s3.h" |
||
5 | |||
6 | #include <miniaudio/miniaudio.h> |
||
7 | #include <stdint.h> |
||
8 | |||
9 | // extern int PDGetTotalTime(); |
||
10 | // extern void dr_dprintf(char* fmt_string, ...); |
||
11 | |||
12 | #define MIN(a, b) ((a) < (b) ? a : b) |
||
13 | #define MAX(a, b) ((a) > (b) ? a : b) |
||
14 | |||
15 | // Internal typedefs |
||
16 | |||
17 | typedef float tF32; |
||
18 | typedef tS3_sound_source* tS3_sound_source_ptr; |
||
19 | typedef int tS3_sound_tag; |
||
20 | typedef int tS3_sound_id; |
||
21 | typedef int tS3_type; |
||
22 | typedef int tS3_repeats; |
||
23 | typedef int tS3_volume; |
||
24 | typedef int tS3_effect_tag; |
||
25 | typedef long tS3_priority; |
||
26 | typedef long tS3_pitch; |
||
27 | typedef long tS3_speed; |
||
28 | typedef struct tS3_outlet tS3_outlet; |
||
29 | typedef struct tS3_descriptor tS3_descriptor; |
||
30 | typedef struct tS3_channel tS3_channel; |
||
31 | typedef struct tS3_sound_source tS3_sound_source; |
||
32 | typedef tS3_outlet* tS3_outlet_ptr; |
||
33 | |||
34 | typedef enum tS3_error_codes { |
||
35 | eS3_error_none = 0, |
||
36 | eS3_error_digi_init = 1, |
||
37 | eS3_error_midi_init = 2, |
||
38 | eS3_error_memory = 3, |
||
39 | eS3_error_readfile = 4, |
||
40 | eS3_error_soundbank = 5, |
||
41 | eS3_error_bad_id = 6, |
||
42 | eS3_error_bad_stag = 7, |
||
43 | eS3_error_load_sound = 8, |
||
44 | eS3_error_start_sound = 9, |
||
45 | eS3_error_channel_alloc = 10, |
||
46 | eS3_error_not_spatial = 11, |
||
47 | eS3_error_function_failed = 12, |
||
48 | eS3_error_load_song = 13, |
||
49 | eS3_error_song_not_loaded = 14, |
||
50 | eS3_error_start_song = 15, |
||
51 | eS3_error_start_cda = 16, |
||
52 | eS3_error_cda_not_init = 17, |
||
53 | eS3_error_already_started_cda = 18, |
||
54 | eS3_error_nonexistant_source = 19 |
||
55 | } tS3_error_codes; |
||
56 | |||
57 | typedef enum tS3_termination_reason { |
||
58 | eS3_tr_natural = 0, |
||
59 | eS3_tr_stopped = 1, |
||
60 | eS3_tr_overridden = 2 |
||
61 | } tS3_termination_reason; |
||
62 | |||
63 | typedef enum tS3_filter_type { |
||
64 | eS3_filter_none = 0, |
||
65 | eS3_filter_reversed = 1, |
||
66 | eS3_filter_echo = 2 |
||
67 | } tS3_filter_type; |
||
68 | |||
69 | typedef enum tS3_sound_type { |
||
70 | eS3_ST_sample = 0, |
||
71 | eS3_ST_midi = 1, |
||
72 | eS3_ST_cda = 2 |
||
73 | } tS3_sound_type; |
||
74 | |||
75 | typedef void tS3_outlet_callback(tS3_outlet*, tS3_sound_tag, tS3_termination_reason); |
||
76 | typedef void tS3_sample_filter(tS3_effect_tag, tS3_sound_tag); |
||
77 | |||
78 | typedef struct tS3_channel { |
||
79 | int active; |
||
80 | int termination_reason; |
||
81 | int needs_service; |
||
82 | int repetitions; |
||
83 | int rate; |
||
84 | int spatial_sound; |
||
85 | unsigned int song_handle; |
||
86 | tS3_sound_tag tag; |
||
87 | tS3_type type; |
||
88 | tS3_volume left_volume; |
||
89 | tS3_volume right_volume; |
||
90 | float volume_multiplier; |
||
91 | tS3_vector3 position; |
||
92 | tS3_vector3 velocity; |
||
93 | tS3_vector3 lastpos; |
||
94 | tS3_volume initial_volume; |
||
95 | tS3_pitch initial_pitch; |
||
96 | float pMax_distance_squared; |
||
97 | tS3_outlet* owner_outlet; |
||
98 | tS3_descriptor* descriptor; |
||
99 | tS3_channel* next; |
||
100 | char* type_struct_sample; |
||
101 | char* type_struct_midi; |
||
102 | char* type_struct_cda; |
||
103 | tS3_sound_source* sound_source_ptr; |
||
104 | } tS3_channel; |
||
105 | |||
106 | typedef struct tS3_outlet { |
||
107 | int id; |
||
108 | int max_channels; |
||
109 | int independent_pitch; |
||
110 | tS3_channel* channel_list; |
||
111 | tS3_outlet* prev; |
||
112 | tS3_outlet* next; |
||
113 | tS3_outlet_callback* callback; |
||
114 | } tS3_outlet; |
||
115 | |||
116 | typedef struct tS3_descriptor { |
||
117 | tS3_sound_id id; |
||
118 | tS3_type type; |
||
119 | tS3_priority priority; |
||
120 | tS3_repeats repeats; |
||
121 | tS3_volume min_volume; |
||
122 | tS3_volume max_volume; |
||
123 | tS3_pitch min_pitch; |
||
124 | tS3_pitch max_pitch; |
||
125 | tS3_speed min_speed; |
||
126 | tS3_speed max_speed; |
||
127 | tS3_descriptor* prev; |
||
128 | tS3_descriptor* next; |
||
129 | int flags; |
||
130 | int midi_song_handle; |
||
131 | int special_fx; |
||
132 | int memory_proxy; |
||
133 | char* sound_data; |
||
134 | char* filename; |
||
135 | // win95 only |
||
136 | // LPDIRECTSOUNDBUFFER sound_buffer; |
||
137 | } tS3_descriptor; |
||
138 | |||
139 | typedef struct tS3_sound_source { |
||
140 | tS3_channel* channel; |
||
141 | int brender_vector; |
||
142 | void* position_ptr; |
||
143 | void* velocity_ptr; |
||
144 | tS3_outlet* bound_outlet; |
||
145 | tS3_sound_source* prev; |
||
146 | tS3_sound_source* next; |
||
147 | int ambient; |
||
148 | tS3_repeats ambient_repeats; |
||
149 | int time_since_last_played; |
||
150 | tS3_sound_id sound_id; |
||
151 | float max_distance_sq; |
||
152 | int period; |
||
153 | tS3_volume volume; |
||
154 | tS3_pitch pitch; |
||
155 | tS3_speed speed; |
||
156 | tS3_sound_tag tag; |
||
157 | } tS3_sound_source; |
||
158 | |||
159 | typedef struct tS3_sample { |
||
160 | int size; |
||
161 | int rate; |
||
162 | int resolution; |
||
163 | int channels; |
||
164 | char* dataptr; |
||
165 | void* freeptr; |
||
166 | } tS3_sample; |
||
167 | |||
168 | typedef struct tS3_hardware_info { |
||
169 | int device_installed; |
||
170 | int timer_installed; |
||
171 | int num_channels; |
||
172 | int max_resolution; |
||
173 | int stereo_flag; |
||
174 | int max_sample_rate; |
||
175 | int min_sample_rate; |
||
176 | int independent_pitch; |
||
177 | } tS3_hardware_info; |
||
178 | |||
179 | // Everything below added by dethrace |
||
180 | typedef struct tS3_soundbank_read_ctx { |
||
181 | int data_len; |
||
182 | int unk1; |
||
183 | int nlines; |
||
184 | char* data; |
||
185 | } tS3_soundbank_read_ctx; |
||
186 | |||
187 | #pragma pack(push, 1) |
||
188 | typedef struct tWAVEFORMATEX_ { |
||
189 | int16_t wFormatTag; |
||
190 | int16_t nChannels; |
||
191 | int32_t nSamplesPerSec; |
||
192 | int32_t nAvgBytesPerSec; |
||
193 | int16_t nBlockAlign; |
||
194 | int16_t wBitsPerSample; |
||
195 | int16_t cbSize; |
||
196 | } tWAVEFORMATEX_; |
||
197 | #pragma pack(pop) |
||
198 | |||
199 | #pragma pack(push, 1) |
||
200 | typedef struct wav_header { |
||
201 | // RIFF Header |
||
202 | char riff_header[4]; // Contains "RIFF" |
||
203 | int32_t wav_size; // Size of the wav portion of the file, which follows the first 8 bytes. File size - 8 |
||
204 | char wave_header[4]; // Contains "WAVE" |
||
205 | |||
206 | // Format Header |
||
207 | char fmt_header[4]; // Contains "fmt " (includes trailing space) |
||
208 | int32_t fmt_chunk_size; // Should be 16 for PCM |
||
209 | int16_t audio_format; // Should be 1 for PCM. 3 for IEEE Float |
||
210 | int16_t num_channels; |
||
211 | int32_t sample_rate; |
||
212 | int32_t byte_rate; // Number of bytes per second. sample_rate * num_channels * Bytes Per Sample |
||
213 | int16_t sample_alignment; // num_channels * Bytes Per Sample |
||
214 | int16_t bit_depth; // Number of bits per sample |
||
215 | |||
216 | // Data |
||
217 | char data_header[4]; // Contains "data" |
||
218 | int32_t data_bytes; // Number of bytes in data. Number of samples * num_channels * sample byte size |
||
219 | } wav_header; |
||
220 | #pragma pack(pop) |
||
221 | |||
222 | #endif |