2 * Elite - The New Kind.
4 * Reverse engineered from the BBC disk version of Elite.
5 * Additional material by C.J.Pinder.
7 * The original Elite code is (C) I.Bell & D.Braben 1984.
8 * This version re-engineered in C by C.J.Pinder 1999-2001.
10 * email: <christian@newkind.co.uk>
24 #define NUM_SAMPLES 14
26 extern DATAFILE *datafile;
38 struct sound_sample sample_list[NUM_SAMPLES] =
40 {NULL, "launch.wav", 32, 0},
41 {NULL, "crash.wav", 7, 0},
42 {NULL, "dock.wav", 36, 0},
43 {NULL, "gameover.wav", 24, 0},
44 {NULL, "pulse.wav", 4, 0},
45 {NULL, "hitem.wav", 4, 0},
46 {NULL, "explode.wav", 23, 0},
47 {NULL, "ecm.wav", 23, 0},
48 {NULL, "missile.wav", 25, 0},
49 {NULL, "hyper.wav", 37, 0},
50 {NULL, "incom1.wav", 4, 0},
51 {NULL, "incom2.wav", 5, 0},
52 {NULL, "beep.wav", 2, 0},
53 {NULL, "boop.wav", 7, 0},
57 void snd_sound_startup (void)
61 /* Install a sound driver.. */
64 if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, ".") != 0)
70 /* Load the sound samples... */
72 for (i = 0; i < NUM_SAMPLES; i++)
74 sample_list[i].sample = load_sample(sample_list[i].filename);
79 void snd_sound_shutdown (void)
86 for (i = 0; i < NUM_SAMPLES; i++)
88 if (sample_list[i].sample != NULL)
90 destroy_sample (sample_list[i].sample);
91 sample_list[i].sample = NULL;
97 void snd_play_sample (int sample_no)
102 if (sample_list[sample_no].timeleft != 0)
105 sample_list[sample_no].timeleft = sample_list[sample_no].runtime;
107 play_sample (sample_list[sample_no].sample, 255, 128, 1000, FALSE);
111 void snd_update_sound (void)
115 for (i = 0; i < NUM_SAMPLES; i++)
117 if (sample_list[i].timeleft > 0)
118 sample_list[i].timeleft--;
123 void snd_play_midi (int midi_no, int repeat)
130 case SND_ELITE_THEME:
131 play_midi (datafile[THEME].dat, repeat);
134 case SND_BLUE_DANUBE:
135 play_midi (datafile[DANUBE].dat, repeat);
141 void snd_stop_midi (void)
144 play_midi (NULL, TRUE);