diff options
author | rubidium <rubidium@openttd.org> | 2008-11-25 23:21:58 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2008-11-25 23:21:58 +0000 |
commit | ba2345808b84a22fe444849b47ce648c3c32bce0 (patch) | |
tree | f34a31a52f51017351a1e60fbcc336f87ded98c1 /src/music | |
parent | 5ebb48fa8633dc90e7fd6343f117d513f682dc1e (diff) | |
download | openttd-ba2345808b84a22fe444849b47ce648c3c32bce0.tar.xz |
(svn r14632) -Add: support Allegro as midi backend.
Diffstat (limited to 'src/music')
-rw-r--r-- | src/music/allegro_m.cpp | 65 | ||||
-rw-r--r-- | src/music/allegro_m.h | 33 |
2 files changed, 98 insertions, 0 deletions
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 */ |