Mercurial > SDL_sound_CoreAudio
diff decoders/timidity/testmidi.c @ 199:2d887640d300
Initial add.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Fri, 04 Jan 2002 06:49:49 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/decoders/timidity/testmidi.c Fri Jan 04 06:49:49 2002 +0000 @@ -0,0 +1,105 @@ +/* + * SDL_sound -- An abstract sound format decoding API. + * Copyright (C) 2001 Ryan C. Gordon. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/** + * Program to test the TiMidity core, without having to worry about decoder + * and/or playsound bugs. It's not meant to be robust or user-friendly. + */ + +#include <stdio.h> +#include <stdlib.h> +#include "SDL.h" +#include "timidity.h" + +int done_flag = 0; +MidiSong *song; + +static void audio_callback(void *userdata, Uint8 *stream, int len) +{ + if (Timidity_PlaySome(song, stream, len) == 0) + done_flag = 1; +} + +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; +}