src/music/libtimidity.cpp
author KUDr
Sat, 17 Feb 2007 11:12:50 +0000
branchcpp_gui
changeset 6254 abc6ad7c035c
child 6268 4b5241e5dd10
permissions -rw-r--r--
(svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
6254
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
     1
/* $Id: extmidi.c 4692 2006-05-02 19:09:49Z peter1138 $ */
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
     2
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
     3
#include "../stdafx.h"
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
     4
#include "../openttd.h"
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
     5
#include "../sound.h"
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
     6
#include "../string.h"
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
     7
#include "../variables.h"
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
     8
#include "../debug.h"
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
     9
#include "libtimidity.h"
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    10
#include <fcntl.h>
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    11
#include <sys/types.h>
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    12
#include <sys/wait.h>
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    13
#include <unistd.h>
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    14
#include <signal.h>
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    15
#include <sys/stat.h>
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    16
#include <errno.h>
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    17
#include <timidity.h>
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    18
#if defined(PSP)
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    19
#include <pspaudiolib.h>
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    20
#endif /* PSP */
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    21
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    22
enum MidiState {
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    23
	MIDI_STOPPED = 0,
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    24
	MIDI_PLAYING = 1,
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    25
};
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    26
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    27
static struct {
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    28
	MidIStream *stream;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    29
	MidSongOptions options;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    30
	MidSong *song;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    31
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    32
	MidiState status;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    33
	uint32 song_length;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    34
	uint32 song_position;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    35
} _midi;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    36
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    37
#if defined(PSP)
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    38
static void AudioOutCallback(void *buf, unsigned int _reqn, void *userdata)
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    39
{
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    40
	memset(buf, 0, _reqn * PSP_NUM_AUDIO_CHANNELS);
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    41
	if (_midi.status == MIDI_PLAYING) {
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    42
		mid_song_read_wave(_midi.song, buf, _reqn * PSP_NUM_AUDIO_CHANNELS);
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    43
	}
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    44
}
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    45
#endif /* PSP */
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    46
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    47
static const char *LibtimidityMidiStart(const char *const *param)
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    48
{
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    49
	_midi.status = MIDI_STOPPED;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    50
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    51
	if (mid_init(param == NULL ? NULL : (char *)param[0]) < 0) {
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    52
		/* If init fails, it can be because no configuration was found.
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    53
		 *  If it was not forced via param, try to load it without a
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    54
		 *  configuration. Who knows that works. */
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    55
		if (param != NULL || mid_init_no_config() < 0) {
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    56
			DEBUG(driver, 0, "error initializing timidity");
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    57
			return NULL;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    58
		}
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    59
	}
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    60
	DEBUG(driver, 1, "successfully initialised timidity");
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    61
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    62
	_midi.options.rate = 44100;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    63
	_midi.options.format = MID_AUDIO_S16LSB;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    64
	_midi.options.channels = 2;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    65
#if defined(PSP)
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    66
	_midi.options.buffer_size = PSP_NUM_AUDIO_SAMPLES;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    67
#else
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    68
	_midi.options.buffer_size = _midi.options.rate;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    69
#endif
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    70
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    71
#if defined(PSP)
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    72
	pspAudioInit();
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    73
	pspAudioSetChannelCallback(_midi.options.channels, &AudioOutCallback, NULL);
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    74
	pspAudioSetVolume(_midi.options.channels, PSP_VOLUME_MAX, PSP_VOLUME_MAX);
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    75
#endif /* PSP */
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    76
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    77
	return NULL;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    78
}
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    79
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    80
static void LibtimidityMidiStop(void)
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    81
{
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    82
	if (_midi.status == MIDI_PLAYING) {
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    83
		_midi.status = MIDI_STOPPED;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    84
		mid_song_free(_midi.song);
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    85
	}
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    86
	mid_exit();
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    87
}
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    88
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    89
static void LibtimidityMidiPlaySong(const char *filename)
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    90
{
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    91
	_midi.stream = mid_istream_open_file(filename);
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    92
	if (_midi.stream == NULL) {
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    93
		DEBUG(driver, 0, "Could not open music file");
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    94
		return;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    95
	}
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    96
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    97
	_midi.song = mid_song_load(_midi.stream, &_midi.options);
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    98
	mid_istream_close(_midi.stream);
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
    99
	_midi.song_length = mid_song_get_total_time(_midi.song);
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   100
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   101
	if (_midi.song == NULL) {
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   102
		DEBUG(driver, 1, "Invalid MIDI file");
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   103
		return;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   104
	}
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   105
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   106
	mid_song_start(_midi.song);
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   107
	_midi.status = MIDI_PLAYING;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   108
}
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   109
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   110
static void LibtimidityMidiStopSong(void)
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   111
{
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   112
	_midi.status = MIDI_STOPPED;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   113
	mid_song_free(_midi.song);
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   114
}
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   115
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   116
static bool LibtimidityMidiIsPlaying(void)
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   117
{
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   118
	if (_midi.status == MIDI_PLAYING) {
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   119
		_midi.song_position = mid_song_get_time(_midi.song);
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   120
		if (_midi.song_position >= _midi.song_length) {
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   121
			_midi.status = MIDI_STOPPED;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   122
			_midi.song_position = 0;
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   123
		}
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   124
	}
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   125
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   126
	return (_midi.status == MIDI_PLAYING);
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   127
}
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   128
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   129
static void LibtimidityMidiSetVolume(byte vol)
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   130
{
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   131
	if (_midi.song != NULL)
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   132
		mid_song_set_volume(_midi.song, vol);
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   133
}
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   134
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   135
const HalMusicDriver _libtimidity_music_driver = {
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   136
	LibtimidityMidiStart,
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   137
	LibtimidityMidiStop,
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   138
	LibtimidityMidiPlaySong,
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   139
	LibtimidityMidiStopSong,
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   140
	LibtimidityMidiIsPlaying,
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   141
	LibtimidityMidiSetVolume,
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   142
};
abc6ad7c035c (svn r8769) [cpp_gui] -Sync with trunk (r8730..r8768)
KUDr
parents:
diff changeset
   143