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
);