static void MIDI_close(Sound_Sample *sample) { Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; MidiSong *song = (MidiSong *) internal->decoder_private; Timidity_FreeSong(song); } /* MIDI_close */
CTimidityCodec::~CTimidityCodec() { if (m_song) Timidity_FreeSong(m_song); if (m_useChild) kodi::vfs::DeleteFile(m_usedLibName); m_addon->DecreaseUsedAmount(); }
static void TIMIDITY_Delete(void *context) { TIMIDITY_Music *music = (TIMIDITY_Music *)context; if (music->song) { Timidity_FreeSong(music->song); } if (music->stream) { SDL_FreeAudioStream(music->stream); } if (music->buffer) { SDL_free(music->buffer); } SDL_free(music); }
int main(int argc, char *argv[]) { SDL_AudioSpec audio; SDL_RWops *rw; if (SDL_Init(SDL_INIT_AUDIO) < 0) { fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); return 1; } atexit(SDL_Quit); if (argc != 2) { fprintf(stderr, "Usage: %s midifile\n", argv[0]); return 1; } audio.freq = 44100; audio.format = AUDIO_S16SYS; audio.channels = 2; audio.samples = 4096; audio.callback = audio_callback; if (SDL_OpenAudio(&audio, NULL) < 0) { fprintf(stderr, "Couldn't open audio device. %s\n", SDL_GetError()); return 1; } if (Timidity_Init() < 0) { fprintf(stderr, "Could not initialise TiMidity.\n"); return 1; } rw = SDL_RWFromFile(argv[1], "rb"); if (rw == NULL) { fprintf(stderr, "Could not create RWops from MIDI file.\n"); return 1; } song = Timidity_LoadSong(rw, &audio); SDL_RWclose(rw); if (song == NULL) { fprintf(stderr, "Could not open MIDI file.\n"); return 1; } Timidity_SetVolume(song, 100); Timidity_Start(song); SDL_PauseAudio(0); while (!done_flag) { SDL_Delay(10); } SDL_PauseAudio(1); Timidity_FreeSong(song); Timidity_Exit(); return 0; }
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); }
/* Free a music chunk previously loaded */ void Mix_FreeMusic(Mix_Music *music) { if ( music ) { /* Stop the music if it's currently playing */ SDL_LockAudio(); if ( music == music_playing ) { /* Wait for any fade out to finish */ while ( music->fading == MIX_FADING_OUT ) { SDL_UnlockAudio(); SDL_Delay(100); SDL_LockAudio(); } if ( music == music_playing ) { music_internal_halt(); } } SDL_UnlockAudio(); switch (music->type) { #ifdef CMD_MUSIC case MUS_CMD: MusicCMD_FreeSong(music->data.cmd); break; #endif #ifdef WAV_MUSIC case MUS_WAV: WAVStream_FreeSong(music->data.wave); break; #endif #ifdef MODPLUG_MUSIC case MUS_MODPLUG: modplug_delete(music->data.modplug); break; #endif #ifdef MOD_MUSIC case MUS_MOD: MOD_delete(music->data.module); break; #endif #ifdef MID_MUSIC case MUS_MID: #ifdef USE_NATIVE_MIDI if ( native_midi_ok ) { native_midi_freesong(music->data.nativemidi); goto skip; } #endif #ifdef USE_FLUIDSYNTH_MIDI if ( fluidsynth_ok ) { fluidsynth_freesong(music->data.fluidsynthmidi); goto skip; } #endif #ifdef USE_TIMIDITY_MIDI if ( timidity_ok ) { Timidity_FreeSong(music->data.midi); goto skip; } #endif break; #endif #ifdef OGG_MUSIC case MUS_OGG: OGG_delete(music->data.ogg); break; #endif #ifdef FLAC_MUSIC case MUS_FLAC: FLAC_delete(music->data.flac); break; #endif #ifdef MP3_MUSIC case MUS_MP3: smpeg.SMPEG_delete(music->data.mp3); break; #endif #ifdef MP3_MAD_MUSIC case MUS_MP3_MAD: mad_closeFile(music->data.mp3_mad); break; #endif default: /* Unknown music type?? */ break; } skip: SDL_free(music); } }