VOID MIDI_CheckLoop( VOID ) { #ifdef TIMIDITY if (fMidLoop && g_pMid != NULL && !Timidity_Active()) #else if (fMidLoop && g_pMid != NULL && !native_midi_active()) #endif { MIDI_Play(iMidCurrent, TRUE); } }
VOID MIDI_Play( INT iNumRIX, BOOL fLoop ) /*++ Purpose: Start playing the specified music in MIDI format. Parameters: [IN] iNumRIX - number of the music. 0 to stop playing current music. [IN] fLoop - Whether the music should be looped or not. Return value: None. --*/ { FILE *fp; unsigned char *buf; int size; SDL_RWops *rw; #ifdef TIMIDITY if (g_pMid != NULL && iNumRIX == iMidCurrent && Timidity_Active()) #else if (g_pMid != NULL && iNumRIX == iMidCurrent && native_midi_active()) #endif { return; } SOUND_PlayCDA(-1); #ifdef TIMIDITY Timidity_FreeSong(g_pMid); #else native_midi_freesong(g_pMid); #endif g_pMid = NULL; iMidCurrent = -1; if (g_fNoMusic || iNumRIX <= 0) { return; } fp = fopen(PAL_PREFIX "midi.mkf", "rb"); if (fp == NULL) { return; } if (iNumRIX > PAL_MKFGetChunkCount(fp)) { fclose(fp); return; } size = PAL_MKFGetChunkSize(iNumRIX, fp); if (size <= 0) { fclose(fp); return; } buf = (unsigned char *)UTIL_malloc(size); PAL_MKFReadChunk((LPBYTE)buf, size, iNumRIX, fp); fclose(fp); rw = SDL_RWFromConstMem((const void *)buf, size); #ifdef TIMIDITY g_pMid = Timidity_LoadSong_RW(rw); #else g_pMid = native_midi_loadsong_RW(rw); #endif if (g_pMid != NULL) { #ifdef TIMIDITY Timidity_Start(g_pMid); #else native_midi_start(g_pMid); #endif iMidCurrent = iNumRIX; fMidLoop = fLoop; } SDL_RWclose(rw); free(buf); }
/* Check the status of the music */ static int music_internal_playing() { int playing = 1; if (music_playing == NULL) { return 0; } switch (music_playing->type) { #ifdef CMD_MUSIC case MUS_CMD: if (!MusicCMD_Active(music_playing->data.cmd)) { playing = 0; } break; #endif #ifdef WAV_MUSIC case MUS_WAV: if ( ! WAVStream_Active() ) { playing = 0; } break; #endif #ifdef MODPLUG_MUSIC case MUS_MODPLUG: if ( ! modplug_playing(music_playing->data.modplug) ) { playing = 0; } break; #endif #ifdef MOD_MUSIC case MUS_MOD: if ( ! MOD_playing(music_playing->data.module) ) { playing = 0; } break; #endif #ifdef MID_MUSIC case MUS_MID: #ifdef USE_NATIVE_MIDI if ( native_midi_ok ) { if ( ! native_midi_active() ) playing = 0; goto skip; } #endif #ifdef USE_FLUIDSYNTH_MIDI if ( fluidsynth_ok ) { if ( ! fluidsynth_active(music_playing->data.fluidsynthmidi) ) playing = 0; goto skip; } #endif #ifdef USE_TIMIDITY_MIDI if ( timidity_ok ) { if ( ! Timidity_Active() ) playing = 0; goto skip; } #endif break; #endif #ifdef OGG_MUSIC case MUS_OGG: if ( ! OGG_playing(music_playing->data.ogg) ) { playing = 0; } break; #endif #ifdef FLAC_MUSIC case MUS_FLAC: if ( ! FLAC_playing(music_playing->data.flac) ) { playing = 0; } break; #endif #ifdef MP3_MUSIC case MUS_MP3: if ( smpeg.SMPEG_status(music_playing->data.mp3) != SMPEG_PLAYING ) playing = 0; break; #endif #ifdef MP3_MAD_MUSIC case MUS_MP3_MAD: if (!mad_isPlaying(music_playing->data.mp3_mad)) { playing = 0; } break; #endif default: playing = 0; break; } skip: return(playing); }