changeset 15456:191f2e65fb67 draft

(svn r20105) -Revert (r20102) [FS#3938]: resetting DirectMusic completely, although working, causes a temporary freeze of OpenTTD. As MCI behaves better than DirectMusic that has become the default music driver; small delay between songs beats wrongly pitched/bad sounding songs
author rubidium <rubidium@openttd.org>
date Fri, 09 Jul 2010 22:25:25 +0000
parents 1482501b8d08
children a4ca05c4772a
files known-bugs.txt src/music/dmusic.cpp src/music/dmusic.h src/music/win32_m.h
diffstat 4 files changed, 20 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/known-bugs.txt
+++ b/known-bugs.txt
@@ -66,6 +66,22 @@
 	"AI Settings" -> "Select AI" -> "Check Online Content" which is also
 	accessed via the main menu.
 
+Long delay between switching songs/music
+	On Windows there is a delay of a (few) second(s) between switching of
+	songs for the "win32" driver. This delay is caused by the fact that
+	opening a MIDI file via MCI is extremely slow.
+
+	DirectMusic, known as "dmusic" in OpenTTD, has a much shorter delay.
+	However, under some circumstances DirectMusic does not reset its
+	state properly causing wrongly pitched/bad sounding songs. This
+	problem is in DirectMusic as it is reproducable with Microsoft's
+	DirectMusic Producer. DirectMusic has been deprecated since 2004
+	and as such has no support for 64 bits OpenTTD.
+
+	As a delay is favourable over bad sounding music the "win32" driver
+	is the default driver for OpenTTD. You can change this default by
+	setting the "musicdriver" in your openttd.cfg to "dmusic".
+
 Clipping problems [FS#119]
 	In some cases sprites are not drawn as one would expect. Examples of
 	this are aircraft that might be hidden below the runway or trees that
--- a/src/music/dmusic.cpp
+++ b/src/music/dmusic.cpp
@@ -165,8 +165,8 @@
 
 	/* release the existing segment if we have any */
 	if (segment != NULL) {
-		this->Stop();
-		if (this->Start(NULL) != NULL) return;
+		segment->Release();
+		segment = NULL;
 	}
 
 	/* make a new segment */
--- a/src/music/dmusic.h
+++ b/src/music/dmusic.h
@@ -32,7 +32,7 @@
 
 class FMusicDriver_DMusic: public MusicDriverFactory<FMusicDriver_DMusic> {
 public:
-	static const int priority = 10;
+	static const int priority = 5;
 	/* virtual */ const char *GetName() { return "dmusic"; }
 	/* virtual */ const char *GetDescription() { return "DirectMusic MIDI Driver"; }
 	/* virtual */ Driver *CreateInstance() { return new MusicDriver_DMusic(); }
--- a/src/music/win32_m.h
+++ b/src/music/win32_m.h
@@ -32,7 +32,7 @@
 
 class FMusicDriver_Win32: public MusicDriverFactory<FMusicDriver_Win32> {
 public:
-	static const int priority = 5;
+	static const int priority = 10;
 	/* virtual */ const char *GetName() { return "win32"; }
 	/* virtual */ const char *GetDescription() { return "Win32 Music Driver"; }
 	/* virtual */ Driver *CreateInstance() { return new MusicDriver_Win32(); }