diff options
-rw-r--r-- | source.list | 4 | ||||
-rw-r--r-- | src/music/allegro_m.cpp | 65 | ||||
-rw-r--r-- | src/music/allegro_m.h | 33 | ||||
-rw-r--r-- | src/sound/allegro_s.cpp | 8 | ||||
-rw-r--r-- | src/video/allegro_v.cpp | 8 |
5 files changed, 110 insertions, 8 deletions
diff --git a/source.list b/source.list index b4687fcaf..d91f500fa 100644 --- a/source.list +++ b/source.list @@ -123,6 +123,7 @@ window.cpp # Header Files #if ALLEGRO + music/allegro_m.h sound/allegro_s.h video/allegro_v.h #end @@ -624,6 +625,9 @@ video/null_v.cpp #end # Music +#if ALLEGRO + music/allegro_m.cpp +#end #if DIRECTMUSIC music/dmusic.cpp #end diff --git a/src/music/allegro_m.cpp b/src/music/allegro_m.cpp new file mode 100644 index 000000000..9400e7f49 --- /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 <allegro.h> + +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 */ diff --git a/src/music/allegro_m.h b/src/music/allegro_m.h new file mode 100644 index 000000000..1bc62d65c --- /dev/null +++ b/src/music/allegro_m.h @@ -0,0 +1,33 @@ +/* $Id$ */ + +/** @file allegro_m.h Base support for playing music via allegro. */ + +#ifndef MUSIC_ALLEGRO_H +#define MUSIC_ALLEGRO_H + +#include "music_driver.hpp" + +class MusicDriver_Allegro: public MusicDriver { +public: + /* virtual */ const char *Start(const char * const *param); + + /* virtual */ void Stop(); + + /* virtual */ void PlaySong(const char *filename); + + /* virtual */ void StopSong(); + + /* virtual */ bool IsSongPlaying(); + + /* virtual */ void SetVolume(byte vol); +}; + +class FMusicDriver_Allegro: public MusicDriverFactory<FMusicDriver_Allegro> { +public: + static const int priority = 1; + /* virtual */ const char *GetName() { return "allegro"; } + /* virtual */ const char *GetDescription() { return "Allegro MIDI Driver"; } + /* virtual */ Driver *CreateInstance() { return new MusicDriver_Allegro(); } +}; + +#endif /* MUSIC_ALLEGRO_H */ diff --git a/src/sound/allegro_s.cpp b/src/sound/allegro_s.cpp index f3d9579a9..3ce16b5c0 100644 --- a/src/sound/allegro_s.cpp +++ b/src/sound/allegro_s.cpp @@ -40,12 +40,12 @@ void SoundDriver_Allegro::MainLoop() /** There are multiple modules that might be using Allegro and * Allegro can only be initiated once. */ -extern int _allegro_count; +extern int _allegro_instance_count; const char *SoundDriver_Allegro::Start(const char * const *parm) { - if (_allegro_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, NULL)) return NULL; - _allegro_count++; + 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; @@ -68,7 +68,7 @@ void SoundDriver_Allegro::Stop() } remove_sound(); - if (--_allegro_count == 0) allegro_exit(); + if (--_allegro_instance_count == 0) allegro_exit(); } #endif /* WITH_ALLEGRO */ diff --git a/src/video/allegro_v.cpp b/src/video/allegro_v.cpp index f69c7121e..913411e6e 100644 --- a/src/video/allegro_v.cpp +++ b/src/video/allegro_v.cpp @@ -376,12 +376,12 @@ static void PollEvent() /** There are multiple modules that might be using Allegro and * Allegro can only be initiated once. */ -int _allegro_count = 0; +int _allegro_instance_count = 0; const char *VideoDriver_Allegro::Start(const char * const *parm) { - if (_allegro_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, NULL)) return NULL; - _allegro_count++; + if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, NULL)) return NULL; + _allegro_instance_count++; install_timer(); install_mouse(); @@ -396,7 +396,7 @@ const char *VideoDriver_Allegro::Start(const char * const *parm) void VideoDriver_Allegro::Stop() { - if (--_allegro_count == 0) allegro_exit(); + if (--_allegro_instance_count == 0) allegro_exit(); } #if defined(UNIX) || defined(__OS2__) || defined(PSP) |