static int MIDI_open(Sound_Sample *sample, const char *ext) { Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; SDL_RWops *rw = internal->rw; SDL_AudioSpec spec; MidiSong *song; spec.channels = 2; spec.format = AUDIO_S16SYS; spec.freq = 44100; spec.samples = 4096; song = Timidity_LoadSong(rw, &spec); BAIL_IF_MACRO(song == NULL, "MIDI: Not a MIDI file.", 0); Timidity_SetVolume(song, 100); Timidity_Start(song); SNDDBG(("MIDI: Accepting data stream.\n")); internal->decoder_private = (void *) song; sample->actual.channels = 2; sample->actual.rate = 44100; sample->actual.format = AUDIO_S16SYS; sample->flags = SOUND_SAMPLEFLAG_CANSEEK; return(1); /* we'll handle this data. */ } /* MIDI_open */
static void TIMIDITY_SetVolume(void *context, int volume) { TIMIDITY_Music *music = (TIMIDITY_Music *)context; Timidity_SetVolume(music->song, volume); }
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; }
/* Set the music volume */ static void music_internal_volume(int volume) { switch (music_playing->type) { #ifdef CMD_MUSIC case MUS_CMD: MusicCMD_SetVolume(volume); break; #endif #ifdef WAV_MUSIC case MUS_WAV: WAVStream_SetVolume(volume); break; #endif #ifdef MODPLUG_MUSIC case MUS_MODPLUG: modplug_setvolume(music_playing->data.modplug, volume); break; #endif #ifdef MOD_MUSIC case MUS_MOD: MOD_setvolume(music_playing->data.module, volume); break; #endif #ifdef MID_MUSIC case MUS_MID: #ifdef USE_NATIVE_MIDI if ( native_midi_ok ) { native_midi_setvolume(volume); return; } #endif #ifdef USE_FLUIDSYNTH_MIDI if ( fluidsynth_ok ) { fluidsynth_setvolume(music_playing->data.fluidsynthmidi, volume); return; } #endif #ifdef USE_TIMIDITY_MIDI if ( timidity_ok ) { Timidity_SetVolume(volume); return; } #endif break; #endif #ifdef OGG_MUSIC case MUS_OGG: OGG_setvolume(music_playing->data.ogg, volume); break; #endif #ifdef FLAC_MUSIC case MUS_FLAC: FLAC_setvolume(music_playing->data.flac, volume); break; #endif #ifdef MP3_MUSIC case MUS_MP3: smpeg.SMPEG_setvolume(music_playing->data.mp3,(int)(((float)volume/(float)MIX_MAX_VOLUME)*100.0)); break; #endif #ifdef MP3_MAD_MUSIC case MUS_MP3_MAD: mad_setVolume(music_playing->data.mp3_mad, volume); break; #endif default: /* Unknown music type?? */ break; } }