src/music/allegro_m.cpp
author rubidium
Tue, 25 Nov 2008 23:21:58 +0000
changeset 10381 c043aa0c1695
permissions -rw-r--r--
(svn r14632) -Add: support Allegro as midi backend.
10381
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
     1
/* $Id$ */
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
     2
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
     3
/** @file allegro_m.cpp Playing music via allegro. */
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
     4
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
     5
#ifdef WITH_ALLEGRO
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
     6
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
     7
#include "../stdafx.h"
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
     8
#include "../debug.h"
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
     9
#include "allegro_m.h"
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    10
#include <allegro.h>
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    11
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    12
static FMusicDriver_Allegro iFMusicDriver_Allegro;
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    13
static MIDI *_midi = NULL;
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    14
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    15
/** There are multiple modules that might be using Allegro and
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    16
 * Allegro can only be initiated once. */
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    17
extern int _allegro_instance_count;
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    18
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    19
const char *MusicDriver_Allegro::Start(const char * const *param)
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    20
{
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    21
	if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, NULL)) return NULL;
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    22
	_allegro_instance_count++;
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    23
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    24
	/* Initialise the sound */
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    25
	if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) != 0) return NULL;
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    26
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    27
	/* Okay, there's no soundcard */
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    28
	if (midi_card == MIDI_NONE) {
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    29
		DEBUG(driver, 0, "allegro: no midi card found");
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    30
	}
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    31
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    32
	return NULL;
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    33
}
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    34
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    35
void MusicDriver_Allegro::Stop()
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    36
{
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    37
	if (_midi != NULL) destroy_midi(_midi);
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    38
	_midi = NULL;
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    39
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    40
	if (--_allegro_instance_count == 0) allegro_exit();
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    41
}
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    42
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    43
void MusicDriver_Allegro::PlaySong(const char *filename)
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    44
{
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    45
	if (_midi != NULL) destroy_midi(_midi);
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    46
	_midi = load_midi(filename);
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    47
	play_midi(_midi, false);
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    48
}
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    49
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    50
void MusicDriver_Allegro::StopSong()
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    51
{
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    52
	stop_midi();
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    53
}
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    54
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    55
bool MusicDriver_Allegro::IsSongPlaying()
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    56
{
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    57
	return midi_pos >= 0;
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    58
}
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    59
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    60
void MusicDriver_Allegro::SetVolume(byte vol)
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    61
{
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    62
	set_volume(-1, vol);
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    63
}
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    64
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents:
diff changeset
    65
#endif /* WITH_ALLEGRO */