Changeset - r10381:0855c63c9abf
[Not reviewed]
master
0 3 2
rubidium - 16 years ago 2008-11-25 23:21:58
rubidium@openttd.org
(svn r14632) -Add: support Allegro as midi backend.
5 files changed with 110 insertions and 8 deletions:
0 comments (0 inline, 0 general)
source.list
Show inline comments
 
@@ -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
src/music/allegro_m.cpp
Show inline comments
 
new file 100644
 
/* $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 */
src/music/allegro_m.h
Show inline comments
 
new file 100644
 
/* $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 */
src/sound/allegro_s.cpp
Show inline comments
 
@@ -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 */
src/video/allegro_v.cpp
Show inline comments
 
@@ -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(c
 

	
 
void VideoDriver_Allegro::Stop()
 
{
 
	if (--_allegro_count == 0) allegro_exit();
 
	if (--_allegro_instance_count == 0) allegro_exit();
 
}
 

	
 
#if defined(UNIX) || defined(__OS2__) || defined(PSP)
0 comments (0 inline, 0 general)