1 #include "system.h"
2
3 #include "core/dir.h"
4 #include "game/settings.h"
5 #include "sound/channel.h"
6 #include "sound/city.h"
7 #include "sound/device.h"
8 #include "sound/effect.h"
9 #include "sound/music.h"
10 #include "sound/speech.h"
11
12 #include <string.h>
13
14 static char channel_filenames[SOUND_CHANNEL_MAX][CHANNEL_FILENAME_MAX] = {
15 "", // speech channel
16 "wavs/panel1.wav",
17 "wavs/panel3.wav",
18 "wavs/icon1.wav",
19 "wavs/build1.wav",
20 "wavs/explod1.wav",
21 "wavs/fanfare.wav",
22 "wavs/fanfare2.wav",
23 "wavs/arrow.wav",
24 "wavs/arrow_hit.wav",
25 "wavs/axe.wav",
26 "wavs/ballista.wav",
27 "wavs/ballista_hit_ground.wav",
28 "wavs/ballista_hit_person.wav",
29 "wavs/club.wav",
30 "wavs/camel1.wav",
31 "wavs/elephant.wav",
32 "wavs/elephant_hit.wav",
33 "wavs/elephant_die.wav",
34 "wavs/horse.wav",
35 "wavs/horse2.wav",
36 "wavs/horse_mov.wav",
37 "wavs/javelin.wav",
38 "wavs/lion_attack.wav",
39 "wavs/lion_die.wav",
40 "wavs/marching.wav",
41 "wavs/sword.wav",
42 "wavs/sword_swing.wav",
43 "wavs/sword_light.wav",
44 "wavs/spear_attack.wav",
45 "wavs/wolf_attack.wav",
46 "wavs/wolf_die.wav",
47 "wavs/die1.wav",
48 "wavs/die2.wav",
49 "wavs/die4.wav",
50 "wavs/die10.wav",
51 "wavs/die3.wav",
52 "wavs/die5.wav",
53 "wavs/die8.wav",
54 "wavs/die9.wav",
55 "wavs/die7.wav",
56 "wavs/die11.wav",
57 "wavs/die6.wav",
58 "wavs/sheep_die.wav",
59 "wavs/zebra_die.wav",
60 "wavs/wolf_howl.wav",
61 "wavs/fire_splash.wav",
62 "wavs/formation_shield.wav",
63 // city sounds
64 "wavs/house_slum1.wav",
65 "",
66 "",
67 "",
68 "wavs/house_poor1.wav",
69 "",
70 "",
71 "",
72 "wavs/house_mid1.wav",
73 "",
74 "",
75 "",
76 "wavs/house_good1.wav",
77 "",
78 "",
79 "",
80 "wavs/house_posh1.wav",
81 "",
82 "",
83 "",
84 "wavs/ampitheatre.wav",
85 "wavs/theatre.wav",
86 "wavs/hippodrome.wav",
87 "wavs/colloseum.wav",
88 "wavs/glad_pit.wav",
89 "wavs/lion_pit.wav",
90 "wavs/art_pit.wav",
91 "wavs/char_pit.wav",
92 "wavs/gardens1.wav",
93 "",
94 "",
95 "",
96 "wavs/clinic.wav",
97 "wavs/hospital.wav",
98 "wavs/baths.wav",
99 "wavs/barber.wav",
100 "wavs/school.wav",
101 "wavs/academy.wav",
102 "wavs/library.wav",
103 "wavs/prefecture.wav",
104 "wavs/fort1.wav",
105 "",
106 "",
107 "",
108 "wavs/tower1.wav",
109 "",
110 "",
111 "",
112 "wavs/temp_farm.wav",
113 "wavs/temp_ship.wav",
114 "wavs/temp_comm.wav",
115 "wavs/temp_war.wav",
116 "wavs/temp_love.wav",
117 "wavs/market1.wav",
118 "",
119 "",
120 "",
121 "wavs/granary1.wav",
122 "",
123 "wavs/warehouse1.wav",
124 "",
125 "wavs/shipyard1.wav",
126 "",
127 "wavs/dock1.wav",
128 "",
129 "wavs/wharf1.wav",
130 "",
131 "wavs/palace.wav",
132 "wavs/eng_post.wav",
133 "wavs/senate.wav",
134 "wavs/forum.wav",
135 "wavs/resevoir.wav",
136 "wavs/fountain1.wav",
137 "",
138 "",
139 "",
140 "wavs/well1.wav",
141 "",
142 "",
143 "",
144 "wavs/mil_acad.wav",
145 "wavs/oracle.wav",
146 "wavs/burning_ruin.wav",
147 "wavs/wheat_farm.wav",
148 "wavs/veg_farm.wav",
149 "wavs/figs_farm.wav",
150 "wavs/olives_farm.wav",
151 "wavs/vines_farm.wav",
152 "wavs/meat_farm.wav",
153 "wavs/quarry.wav",
154 "wavs/mine.wav",
155 "wavs/lumber_mill.wav",
156 "wavs/clay_pit.wav",
157 "wavs/wine_workshop.wav",
158 "wavs/oil_workshop.wav",
159 "wavs/weap_workshop.wav",
160 "wavs/furn_workshop.wav",
161 "wavs/pott_workshop.wav",
162 "wavs/empty_land1.wav",
163 "",
164 "",
165 "",
166 "wavs/river.wav",
167 "wavs/mission.wav",
168 "wavs/tower4.wav"
169 };
170
correct_channel_filenames(void)171 static void correct_channel_filenames(void)
172 {
173 for (int i = 1; i < SOUND_CHANNEL_MAX; i++) {
174 if (!channel_filenames[i][0]) {
175 continue;
176 }
177
178 char *original = channel_filenames[i];
179 const char *corrected = dir_get_file(original, MAY_BE_LOCALIZED);
180 if (!corrected) {
181 channel_filenames[i][0] = 0;
182 } else if (corrected != original) {
183 strncpy(original, corrected, CHANNEL_FILENAME_MAX);
184 }
185 }
186 }
187
sound_system_init(void)188 void sound_system_init(void)
189 {
190 correct_channel_filenames();
191
192 sound_device_open();
193 sound_device_init_channels(SOUND_CHANNEL_MAX, channel_filenames);
194
195 sound_city_set_volume(setting_sound(SOUND_CITY)->volume);
196 sound_effect_set_volume(setting_sound(SOUND_EFFECTS)->volume);
197 sound_music_set_volume(setting_sound(SOUND_MUSIC)->volume);
198 sound_speech_set_volume(setting_sound(SOUND_SPEECH)->volume);
199 }
200
sound_system_shutdown(void)201 void sound_system_shutdown(void)
202 {
203 sound_device_close();
204 }
205