diff --git a/src/music/allegro_m.cpp b/src/music/allegro_m.cpp new file mode 100644 --- /dev/null +++ b/src/music/allegro_m.cpp @@ -0,0 +1,65 @@ +/* $Id$ */ + +/** @file allegro_m.cpp Playing music via allegro. */ + +#ifdef WITH_ALLEGRO + +#include "../stdafx.h" +#include "../debug.h" +#include "allegro_m.h" +#include + +static FMusicDriver_Allegro iFMusicDriver_Allegro; +static MIDI *_midi = NULL; + +/** There are multiple modules that might be using Allegro and + * Allegro can only be initiated once. */ +extern int _allegro_instance_count; + +const char *MusicDriver_Allegro::Start(const char * const *param) +{ + if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, NULL)) return NULL; + _allegro_instance_count++; + + /* Initialise the sound */ + if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) != 0) return NULL; + + /* Okay, there's no soundcard */ + if (midi_card == MIDI_NONE) { + DEBUG(driver, 0, "allegro: no midi card found"); + } + + return NULL; +} + +void MusicDriver_Allegro::Stop() +{ + if (_midi != NULL) destroy_midi(_midi); + _midi = NULL; + + if (--_allegro_instance_count == 0) allegro_exit(); +} + +void MusicDriver_Allegro::PlaySong(const char *filename) +{ + if (_midi != NULL) destroy_midi(_midi); + _midi = load_midi(filename); + play_midi(_midi, false); +} + +void MusicDriver_Allegro::StopSong() +{ + stop_midi(); +} + +bool MusicDriver_Allegro::IsSongPlaying() +{ + return midi_pos >= 0; +} + +void MusicDriver_Allegro::SetVolume(byte vol) +{ + set_volume(-1, vol); +} + +#endif /* WITH_ALLEGRO */