9 int midi_volume = 128/2; // Max volume
10 char digi_last_midi_song[16] = "";
11 char digi_last_melodic_bank[16] = "";
12 char digi_last_drum_bank[16] = "";
13 int digi_midi_type = 0; // Midi driver type
14 int digi_midi_port = 0; // Midi driver port
16 // handle for the initialized MIDI song
17 MIDI *SongHandle = NULL;
19 void digi_set_midi_volume( int mvolume )
21 int old_volume = midi_volume;
25 else if ( mvolume < 0 )
28 midi_volume = mvolume;
30 if ( (digi_midi_type > 0) ) {
31 if ( (old_volume < 1) && ( midi_volume > 1 ) ) {
32 if (SongHandle == NULL )
33 digi_play_midi_song( digi_last_midi_song, digi_last_melodic_bank, digi_last_drum_bank, 1 );
35 set_volume(-1, midi_volume * 2 + (midi_volume & 1));
39 void digi_stop_current_song()
42 destroy_midi(SongHandle);
47 void digi_play_midi_song( char * filename, char * melodic_bank, char * drum_bank, int loop )
51 if ( digi_midi_type <= 0 ) return;
53 digi_stop_current_song();
55 if ( filename == NULL ) return;
57 strcpy( digi_last_midi_song, filename );
58 strcpy( digi_last_melodic_bank, melodic_bank );
59 strcpy( digi_last_drum_bank, drum_bank );
61 if ( midi_volume < 1 )
66 #if 0 /* needs bank loading to sound right */
67 if (midi_card <= 4) { /* FM cards */
69 sl = strlen( filename );
70 strcpy( fname, filename );
72 SongHandle = load_hmp(fname);
77 SongHandle = load_hmp(filename);
80 if (play_midi(SongHandle, loop)) {
81 destroy_midi(SongHandle);
86 mprintf( (1, "\nAllegro Error : %s", allegro_error ));
90 void digi_midi_pause() {
91 if (digi_midi_type > 0 && SongHandle)
95 void digi_midi_resume() {
96 if (digi_midi_type > 0 && SongHandle)
100 void digi_midi_stop() {
101 if ( digi_midi_type > 0 ) {
103 destroy_midi(SongHandle);
111 extern int sb_hw_dsp_ver;
113 static int midi_timer_system_initialized = 0;
114 static int digi_midi_initialized = 0;
116 int digi_midi_init() {
117 if (!midi_timer_system_initialized)
120 midi_timer_system_initialized = 1;
122 sb_hw_dsp_ver = 1; /* set SB as already detected, functionless */
123 if (!digi_midi_initialized) {
124 // amount of voices we need
125 // 16 for normal sounds and 16 for SoundObjects (fan, boss)
126 // for DIGMID we sacrify some sounds (32 is the max).
127 // reserve_voices(allegro_using_digmid() ? 16 : 32, -1);
128 if (install_sound(DIGI_NONE, MIDI_AUTODETECT, NULL))
130 //set_volume(255, -1);
131 digi_midi_type = midi_card; // only for 0, !=0
133 digi_midi_initialized = 1;
134 digi_set_midi_volume( midi_volume );
138 void digi_midi_close() {
140 digi_midi_initialized = 0;
142 if ( midi_timer_system_initialized ) {
144 timer_set_function( NULL );
145 midi_timer_system_initialized = 0;