int digi_win32_play_midi_song( char * filename, int loop ) { if (firstplay) { hmp_reset(); firstplay = 0; } digi_win32_stop_midi_song(); if (filename == NULL) return 0; if ((cur_hmp = hmp_open(filename))) { /* * FIXME: to be implemented as soon as we have some kind or checksum function - replacement for ugly hack in hmp.c for descent.hmp * if (***filesize check*** && ***CRC32 or MD5 check***) * (((*cur_hmp).trks)[1]).data[6] = 0x6C; */ if (hmp_play(cur_hmp,loop) != 0) return 0; // error digi_win32_midi_song_playing = 1; digi_win32_set_midi_volume(GameCfg.MusicVolume); return 1; } return 0; }
//takes volume in range 0..8 //NOTE that we do not check what is playing right now (except Redbook) This is because here we don't (want) know WHAT we're playing - let the subfunctions do it (i.e. digi_win32_set_music_volume() knows if a MIDI plays or not) void songs_set_volume(int volume) { #ifdef _WIN32 digi_win32_set_midi_volume(volume); #endif if (GameCfg.MusicType == MUSIC_TYPE_REDBOOK) { RBASetVolume(0); RBASetVolume(volume); } #ifdef USE_SDLMIXER mix_set_music_volume(volume); #endif }