src/music/win32_m.cpp
author convert-repo
Mon, 07 Apr 2008 16:21:55 +0000
changeset 10076 dfd70e42c4ae
parent 9196 5e28b70db025
child 10429 1b99254f9607
permissions -rw-r--r--
update tags
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2174
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2174
diff changeset
     2
2189
d240b9097139 (svn r2704) Remove . from include path again, too much trouble. Also add some #ifdefs and #includes for the Windows build
tron
parents: 2186
diff changeset
     3
#include "../stdafx.h"
d240b9097139 (svn r2704) Remove . from include path again, too much trouble. Also add some #ifdefs and #includes for the Windows build
tron
parents: 2186
diff changeset
     4
#include "win32_m.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     5
#include <windows.h>
2189
d240b9097139 (svn r2704) Remove . from include path again, too much trouble. Also add some #ifdefs and #includes for the Windows build
tron
parents: 2186
diff changeset
     6
#include <mmsystem.h>
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     7
1468
8073826fe82d (svn r1972) Several cleanups and fix some latent bugs
tron
parents: 1466
diff changeset
     8
static struct {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     9
	bool stop_song;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    10
	bool terminate;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    11
	bool playing;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    12
	int new_vol;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    13
	HANDLE wait_obj;
8010
a924bdae75ab (svn r11029) -Fix [FS#1164]: win32 midi doesn't stop when closing openttd
glx
parents: 7666
diff changeset
    14
	HANDLE thread;
2458
c95808cd2ac9 (svn r2984) Use adequate types, this should aid portability a bit
tron
parents: 2434
diff changeset
    15
	UINT_PTR devid;
9189
40f723073fef (svn r12366) -Codechange: use MAX_PATH instead hardcoded value
glx
parents: 8119
diff changeset
    16
	char start_song[MAX_PATH];
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    17
} _midi;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    18
7666
a5fccd76176a (svn r10444) -Codechange: switch to c++ classes and inheritance for sound/music/video drivers, using self-registration based on the blitter-model.
peter1138
parents: 6573
diff changeset
    19
static FMusicDriver_Win32 iFMusicDriver_Win32;
a5fccd76176a (svn r10444) -Codechange: switch to c++ classes and inheritance for sound/music/video drivers, using self-registration based on the blitter-model.
peter1138
parents: 6573
diff changeset
    20
a5fccd76176a (svn r10444) -Codechange: switch to c++ classes and inheritance for sound/music/video drivers, using self-registration based on the blitter-model.
peter1138
parents: 6573
diff changeset
    21
void MusicDriver_Win32::PlaySong(const char *filename)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    22
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    23
	strcpy(_midi.start_song, filename);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    24
	_midi.playing = true;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    25
	_midi.stop_song = false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    26
	SetEvent(_midi.wait_obj);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    27
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    28
7666
a5fccd76176a (svn r10444) -Codechange: switch to c++ classes and inheritance for sound/music/video drivers, using self-registration based on the blitter-model.
peter1138
parents: 6573
diff changeset
    29
void MusicDriver_Win32::StopSong()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    30
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    31
	if (_midi.playing) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    32
		_midi.stop_song = true;
1468
8073826fe82d (svn r1972) Several cleanups and fix some latent bugs
tron
parents: 1466
diff changeset
    33
		_midi.start_song[0] = '\0';
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    34
		SetEvent(_midi.wait_obj);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    35
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    36
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    37
7666
a5fccd76176a (svn r10444) -Codechange: switch to c++ classes and inheritance for sound/music/video drivers, using self-registration based on the blitter-model.
peter1138
parents: 6573
diff changeset
    38
bool MusicDriver_Win32::IsSongPlaying()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    39
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    40
	return _midi.playing;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    41
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    42
7666
a5fccd76176a (svn r10444) -Codechange: switch to c++ classes and inheritance for sound/music/video drivers, using self-registration based on the blitter-model.
peter1138
parents: 6573
diff changeset
    43
void MusicDriver_Win32::SetVolume(byte vol)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    44
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    45
	_midi.new_vol = vol;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    46
	SetEvent(_midi.wait_obj);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    47
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    48
9195
b83118d81d4b (svn r12372) -Fix: win32 music driver fails if path contains non-latin chars
glx
parents: 9189
diff changeset
    49
static MCIERROR CDECL MidiSendCommand(const TCHAR* cmd, ...)
2548
97ada3bd2702 (svn r3077) static, const, bracing, indentation, 0 -> '\0'/NULL, typos in comments, excess empty lines, minor other changes
tron
parents: 2458
diff changeset
    50
{
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    51
	va_list va;
9195
b83118d81d4b (svn r12372) -Fix: win32 music driver fails if path contains non-latin chars
glx
parents: 9189
diff changeset
    52
	TCHAR buf[512];
1468
8073826fe82d (svn r1972) Several cleanups and fix some latent bugs
tron
parents: 1466
diff changeset
    53
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    54
	va_start(va, cmd);
9195
b83118d81d4b (svn r12372) -Fix: win32 music driver fails if path contains non-latin chars
glx
parents: 9189
diff changeset
    55
	_vsntprintf(buf, lengthof(buf), cmd, va);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    56
	va_end(va);
9195
b83118d81d4b (svn r12372) -Fix: win32 music driver fails if path contains non-latin chars
glx
parents: 9189
diff changeset
    57
	return mciSendString(buf, NULL, 0, 0);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    58
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    59
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    60
static bool MidiIntPlaySong(const char *filename)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    61
{
9195
b83118d81d4b (svn r12372) -Fix: win32 music driver fails if path contains non-latin chars
glx
parents: 9189
diff changeset
    62
	MidiSendCommand(_T("close all"));
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    63
9196
5e28b70db025 (svn r12373) -Fix [FS#1849]: win32 music driver fails if path is too long (128 chars is too much for mci it seems), so retry using the short path name (8.3 style) if available
glx
parents: 9195
diff changeset
    64
	if (MidiSendCommand(_T("open \"%s\" type sequencer alias song"), OTTD2FS(filename)) != 0) {
5e28b70db025 (svn r12373) -Fix [FS#1849]: win32 music driver fails if path is too long (128 chars is too much for mci it seems), so retry using the short path name (8.3 style) if available
glx
parents: 9195
diff changeset
    65
		/* Let's try the "short name" */
5e28b70db025 (svn r12373) -Fix [FS#1849]: win32 music driver fails if path is too long (128 chars is too much for mci it seems), so retry using the short path name (8.3 style) if available
glx
parents: 9195
diff changeset
    66
		TCHAR buf[MAX_PATH];
5e28b70db025 (svn r12373) -Fix [FS#1849]: win32 music driver fails if path is too long (128 chars is too much for mci it seems), so retry using the short path name (8.3 style) if available
glx
parents: 9195
diff changeset
    67
		if (GetShortPathName(OTTD2FS(filename), buf, MAX_PATH) == 0) return false;
5e28b70db025 (svn r12373) -Fix [FS#1849]: win32 music driver fails if path is too long (128 chars is too much for mci it seems), so retry using the short path name (8.3 style) if available
glx
parents: 9195
diff changeset
    68
		if (MidiSendCommand(_T("open \"%s\" type sequencer alias song"), buf) != 0) return false;
5e28b70db025 (svn r12373) -Fix [FS#1849]: win32 music driver fails if path is too long (128 chars is too much for mci it seems), so retry using the short path name (8.3 style) if available
glx
parents: 9195
diff changeset
    69
	}
9195
b83118d81d4b (svn r12372) -Fix: win32 music driver fails if path contains non-latin chars
glx
parents: 9189
diff changeset
    70
b83118d81d4b (svn r12372) -Fix: win32 music driver fails if path contains non-latin chars
glx
parents: 9189
diff changeset
    71
	return MidiSendCommand(_T("play song from 0")) == 0;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    72
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    73
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6450
diff changeset
    74
static void MidiIntStopSong()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    75
{
9195
b83118d81d4b (svn r12372) -Fix: win32 music driver fails if path contains non-latin chars
glx
parents: 9189
diff changeset
    76
	MidiSendCommand(_T("close all"));
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    77
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    78
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    79
static void MidiIntSetVolume(int vol)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    80
{
2458
c95808cd2ac9 (svn r2984) Use adequate types, this should aid portability a bit
tron
parents: 2434
diff changeset
    81
	DWORD v = (vol * 65535 / 127);
2434
3428947c9c87 (svn r2960) - Fix: [ 1227779 ] Fix win32 midi volume level control which didn't work (glx)
Darkvater
parents: 2212
diff changeset
    82
	midiOutSetVolume((HMIDIOUT)_midi.devid, v + (v << 16));
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    83
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    84
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6450
diff changeset
    85
static bool MidiIntIsSongPlaying()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    86
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    87
	char buf[16];
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    88
	mciSendStringA("status song mode", buf, sizeof(buf), 0);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    89
	return strcmp(buf, "playing") == 0 || strcmp(buf, "seeking") == 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    90
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    91
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    92
static DWORD WINAPI MidiThread(LPVOID arg)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    93
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    94
	do {
1468
8073826fe82d (svn r1972) Several cleanups and fix some latent bugs
tron
parents: 1466
diff changeset
    95
		char *s;
8073826fe82d (svn r1972) Several cleanups and fix some latent bugs
tron
parents: 1466
diff changeset
    96
		int vol;
8073826fe82d (svn r1972) Several cleanups and fix some latent bugs
tron
parents: 1466
diff changeset
    97
8073826fe82d (svn r1972) Several cleanups and fix some latent bugs
tron
parents: 1466
diff changeset
    98
		vol = _midi.new_vol;
8073826fe82d (svn r1972) Several cleanups and fix some latent bugs
tron
parents: 1466
diff changeset
    99
		if (vol != -1) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   100
			_midi.new_vol = -1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   101
			MidiIntSetVolume(vol);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   102
		}
1468
8073826fe82d (svn r1972) Several cleanups and fix some latent bugs
tron
parents: 1466
diff changeset
   103
8073826fe82d (svn r1972) Several cleanups and fix some latent bugs
tron
parents: 1466
diff changeset
   104
		s = _midi.start_song;
8073826fe82d (svn r1972) Several cleanups and fix some latent bugs
tron
parents: 1466
diff changeset
   105
		if (s[0] != '\0') {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   106
			_midi.playing = MidiIntPlaySong(s);
1468
8073826fe82d (svn r1972) Several cleanups and fix some latent bugs
tron
parents: 1466
diff changeset
   107
			s[0] = '\0';
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 164
diff changeset
   108
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   109
			// Delay somewhat in case we don't manage to play.
8010
a924bdae75ab (svn r11029) -Fix [FS#1164]: win32 midi doesn't stop when closing openttd
glx
parents: 7666
diff changeset
   110
			if (!_midi.playing) WaitForMultipleObjects(1, &_midi.wait_obj, FALSE, 5000);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   111
		}
1468
8073826fe82d (svn r1972) Several cleanups and fix some latent bugs
tron
parents: 1466
diff changeset
   112
8073826fe82d (svn r1972) Several cleanups and fix some latent bugs
tron
parents: 1466
diff changeset
   113
		if (_midi.stop_song && _midi.playing) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   114
			_midi.stop_song = false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   115
			_midi.playing = false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   116
			MidiIntStopSong();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   117
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   118
6450
1c2016673250 (svn r8860) -Cleanup: some style changes, proper #endif comments, variable initialisation, WINCE ifdef and a vsprintf to vsnprintf change.
Darkvater
parents: 5835
diff changeset
   119
		if (_midi.playing && !MidiIntIsSongPlaying()) _midi.playing = false;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   120
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   121
		WaitForMultipleObjects(1, &_midi.wait_obj, FALSE, 1000);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   122
	} while (!_midi.terminate);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   123
8010
a924bdae75ab (svn r11029) -Fix [FS#1164]: win32 midi doesn't stop when closing openttd
glx
parents: 7666
diff changeset
   124
	MidiIntStopSong();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   125
	return 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   126
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   127
7666
a5fccd76176a (svn r10444) -Codechange: switch to c++ classes and inheritance for sound/music/video drivers, using self-registration based on the blitter-model.
peter1138
parents: 6573
diff changeset
   128
const char *MusicDriver_Win32::Start(const char * const *parm)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   129
{
2434
3428947c9c87 (svn r2960) - Fix: [ 1227779 ] Fix win32 midi volume level control which didn't work (glx)
Darkvater
parents: 2212
diff changeset
   130
	MIDIOUTCAPS midicaps;
2458
c95808cd2ac9 (svn r2984) Use adequate types, this should aid portability a bit
tron
parents: 2434
diff changeset
   131
	UINT nbdev;
c95808cd2ac9 (svn r2984) Use adequate types, this should aid portability a bit
tron
parents: 2434
diff changeset
   132
	UINT_PTR dev;
2212
7e53bdecc115 (svn r2730) -Fix: Fail if the sequencer can't play audio
tron
parents: 2189
diff changeset
   133
	char buf[16];
7e53bdecc115 (svn r2730) -Fix: Fail if the sequencer can't play audio
tron
parents: 2189
diff changeset
   134
7e53bdecc115 (svn r2730) -Fix: Fail if the sequencer can't play audio
tron
parents: 2189
diff changeset
   135
	mciSendStringA("capability sequencer has audio", buf, lengthof(buf), 0);
7e53bdecc115 (svn r2730) -Fix: Fail if the sequencer can't play audio
tron
parents: 2189
diff changeset
   136
	if (strcmp(buf, "true") != 0) return "MCI sequencer can't play audio";
1468
8073826fe82d (svn r1972) Several cleanups and fix some latent bugs
tron
parents: 1466
diff changeset
   137
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   138
	memset(&_midi, 0, sizeof(_midi));
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   139
	_midi.new_vol = -1;
2212
7e53bdecc115 (svn r2730) -Fix: Fail if the sequencer can't play audio
tron
parents: 2189
diff changeset
   140
2434
3428947c9c87 (svn r2960) - Fix: [ 1227779 ] Fix win32 midi volume level control which didn't work (glx)
Darkvater
parents: 2212
diff changeset
   141
	/* Get midi device */
3428947c9c87 (svn r2960) - Fix: [ 1227779 ] Fix win32 midi volume level control which didn't work (glx)
Darkvater
parents: 2212
diff changeset
   142
	_midi.devid = MIDI_MAPPER;
3428947c9c87 (svn r2960) - Fix: [ 1227779 ] Fix win32 midi volume level control which didn't work (glx)
Darkvater
parents: 2212
diff changeset
   143
	for (dev = 0, nbdev = midiOutGetNumDevs(); dev < nbdev; dev++) {
3428947c9c87 (svn r2960) - Fix: [ 1227779 ] Fix win32 midi volume level control which didn't work (glx)
Darkvater
parents: 2212
diff changeset
   144
		if (midiOutGetDevCaps(dev, &midicaps, sizeof(midicaps)) == 0 && (midicaps.dwSupport & MIDICAPS_VOLUME)) {
3428947c9c87 (svn r2960) - Fix: [ 1227779 ] Fix win32 midi volume level control which didn't work (glx)
Darkvater
parents: 2212
diff changeset
   145
			_midi.devid = dev;
3428947c9c87 (svn r2960) - Fix: [ 1227779 ] Fix win32 midi volume level control which didn't work (glx)
Darkvater
parents: 2212
diff changeset
   146
			break;
3428947c9c87 (svn r2960) - Fix: [ 1227779 ] Fix win32 midi volume level control which didn't work (glx)
Darkvater
parents: 2212
diff changeset
   147
		}
3428947c9c87 (svn r2960) - Fix: [ 1227779 ] Fix win32 midi volume level control which didn't work (glx)
Darkvater
parents: 2212
diff changeset
   148
	}
3428947c9c87 (svn r2960) - Fix: [ 1227779 ] Fix win32 midi volume level control which didn't work (glx)
Darkvater
parents: 2212
diff changeset
   149
8010
a924bdae75ab (svn r11029) -Fix [FS#1164]: win32 midi doesn't stop when closing openttd
glx
parents: 7666
diff changeset
   150
	if (NULL == (_midi.wait_obj = CreateEvent(NULL, FALSE, FALSE, NULL))) return "Failed to create event";
8119
9505a65c30d5 (svn r11154) -Fix [FS#1239]: MIDI failing to play under Windows 95, 98 and ME.
rubidium
parents: 8010
diff changeset
   151
9505a65c30d5 (svn r11154) -Fix [FS#1239]: MIDI failing to play under Windows 95, 98 and ME.
rubidium
parents: 8010
diff changeset
   152
	/* The lpThreadId parameter of CreateThread (the last parameter)
9505a65c30d5 (svn r11154) -Fix [FS#1239]: MIDI failing to play under Windows 95, 98 and ME.
rubidium
parents: 8010
diff changeset
   153
	 * may NOT be NULL on Windows 95, 98 and ME. */
9505a65c30d5 (svn r11154) -Fix [FS#1239]: MIDI failing to play under Windows 95, 98 and ME.
rubidium
parents: 8010
diff changeset
   154
	DWORD threadId;
9505a65c30d5 (svn r11154) -Fix [FS#1239]: MIDI failing to play under Windows 95, 98 and ME.
rubidium
parents: 8010
diff changeset
   155
	if (NULL == (_midi.thread = CreateThread(NULL, 8192, MidiThread, 0, 0, &threadId))) return "Failed to create thread";
2212
7e53bdecc115 (svn r2730) -Fix: Fail if the sequencer can't play audio
tron
parents: 2189
diff changeset
   156
7e53bdecc115 (svn r2730) -Fix: Fail if the sequencer can't play audio
tron
parents: 2189
diff changeset
   157
	return NULL;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   158
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   159
7666
a5fccd76176a (svn r10444) -Codechange: switch to c++ classes and inheritance for sound/music/video drivers, using self-registration based on the blitter-model.
peter1138
parents: 6573
diff changeset
   160
void MusicDriver_Win32::Stop()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   161
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   162
	_midi.terminate = true;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   163
	SetEvent(_midi.wait_obj);
8010
a924bdae75ab (svn r11029) -Fix [FS#1164]: win32 midi doesn't stop when closing openttd
glx
parents: 7666
diff changeset
   164
	WaitForMultipleObjects(1, &_midi.thread, true, INFINITE);
a924bdae75ab (svn r11029) -Fix [FS#1164]: win32 midi doesn't stop when closing openttd
glx
parents: 7666
diff changeset
   165
	CloseHandle(_midi.wait_obj);
a924bdae75ab (svn r11029) -Fix [FS#1164]: win32 midi doesn't stop when closing openttd
glx
parents: 7666
diff changeset
   166
	CloseHandle(_midi.thread);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   167
}