[Scummvm-cvs-logs] CVS: scummvm/sound mididrv.cpp,1.53,1.54 mididrv.h,1.39,1.40

Max Horn fingolfin at users.sourceforge.net
Wed Dec 1 16:34:07 CET 2004


Update of /cvsroot/scummvm/scummvm/sound
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17410/sound

Modified Files:
	mididrv.cpp mididrv.h 
Log Message:
Moved MidiDriver creation code into the MidiDriver class (as static methods), same for some other MIDI related stuff

Index: mididrv.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mididrv.cpp,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -d -r1.53 -r1.54
--- mididrv.cpp	6 Nov 2004 01:41:32 -0000	1.53
+++ mididrv.cpp	2 Dec 2004 00:33:42 -0000	1.54
@@ -21,9 +21,11 @@
  */
 
 #include "stdafx.h"
-#include "sound/mididrv.h"
-#include "common/str.h"
 
+#include "base/engine.h"
+#include "common/config-manager.h"
+#include "common/str.h"
+#include "sound/mididrv.h"
 
 /** Internal list of all available 'midi' drivers. */
 static const struct MidiDriverDescription midiDrivers[] = {
@@ -67,11 +69,11 @@
 };
 
 
-const MidiDriverDescription *getAvailableMidiDrivers() {
+const MidiDriverDescription *MidiDriver::getAvailableMidiDrivers() {
 	return midiDrivers;
 }
 
-int parseMusicDriver(const Common::String &str) {
+int MidiDriver::parseMusicDriver(const Common::String &str) {
 	if (str.isEmpty())
 		return -1;
 
@@ -87,3 +89,102 @@
 
 	return -1;
 }
+
+int MidiDriver::detectMusicDriver(int midiFlags) {
+	int musicDriver = parseMusicDriver(ConfMan.get("music_driver"));
+	/* Use the adlib sound driver if auto mode is selected,
+	 * and the game is one of those that want adlib as
+	 * default, OR if the game is an older game that doesn't
+	 * support anything else anyway. */
+	if (musicDriver == MD_AUTO || musicDriver < 0) {
+		if (midiFlags & MDT_PREFER_NATIVE) {
+			if (musicDriver == MD_AUTO) {
+				#if defined (WIN32) && !defined(_WIN32_WCE)
+					musicDriver = MD_WINDOWS; // MD_WINDOWS is default MidiDriver on windows targets
+				#elif defined(MACOSX)
+					musicDriver = MD_COREAUDIO;
+				#elif defined(__PALM_OS__)	// must be before mac
+					musicDriver = MD_YPA1;	// TODO : cahnge this and use Zodiac driver when needed
+				#elif defined(__MORPHOS__)
+					musicDriver = MD_ETUDE;
+				#elif defined (_WIN32_WCE) || defined(UNIX) || defined(X11_BACKEND)
+					// Always use MIDI emulation via adlib driver on CE and UNIX device
+				
+					// TODO: We should, for the Unix targets, attempt to detect
+					// whether a sequencer is available, and use it instead.
+					musicDriver = MD_ADLIB;
+				#else
+					musicDriver = MD_NULL;
+				#endif
+			} else
+				musicDriver = MD_ADLIB;
+		} else
+			musicDriver = MD_TOWNS;
+	}
+	bool nativeMidiDriver =
+		(musicDriver != MD_NULL && musicDriver != MD_ADLIB &&
+		 musicDriver != MD_PCSPK && musicDriver != MD_PCJR &&
+		 musicDriver != MD_TOWNS);
+
+	if (nativeMidiDriver && !(midiFlags & MDT_NATIVE))
+		musicDriver = MD_TOWNS;
+	if (musicDriver == MD_TOWNS && !(midiFlags & MDT_TOWNS))
+		musicDriver = MD_ADLIB;
+	if (musicDriver == MD_ADLIB && !(midiFlags & MDT_ADLIB))
+		musicDriver = MD_PCJR;
+	if ((musicDriver == MD_PCSPK || musicDriver == MD_PCJR) && !(midiFlags & MDT_PCSPK))
+		musicDriver = MD_NULL;
+
+	return musicDriver;
+}
+
+MidiDriver *MidiDriver::createMidi(int midiDriver) {
+	switch(midiDriver) {
+	case MD_NULL:      return MidiDriver_NULL_create();
+
+	// In the case of Adlib, we won't specify anything.
+	// IMuse is designed to set up its own Adlib driver
+	// if need be, and we only have to specify a native
+	// driver.
+	case MD_ADLIB:     return NULL;
+
+#ifdef USE_MT32EMU
+	case MD_MT32:      return MidiDriver_MT32_create(g_engine->_mixer);
+#endif
+
+	case MD_TOWNS:     return MidiDriver_YM2612_create(g_engine->_mixer);
+
+	// Right now PC Speaker and PCjr are handled
+	// outside the MidiDriver architecture, so
+	// don't create anything for now.
+	case MD_PCSPK:
+	case MD_PCJR:      return NULL;
+#if defined(__PALM_OS__)
+	case MD_YPA1:      return MidiDriver_YamahaPa1_create();
+#ifndef DISABLE_TAPWAVE
+	case MD_ZODIAC:    return MidiDriver_Zodiac_create();
+#endif
+#endif
+#if defined(WIN32) && !defined(_WIN32_WCE)
+	case MD_WINDOWS:   return MidiDriver_WIN_create();
+#endif
+#if defined(__MORPHOS__)
+	case MD_ETUDE:     return MidiDriver_ETUDE_create();
+#endif
+#if defined(UNIX) && !defined(__BEOS__) && !defined(MACOSX)
+	case MD_SEQ:       return MidiDriver_SEQ_create();
+#endif
+#if (defined(MACOSX) || defined(macintosh)) && !defined(__PALM_OS__)
+	case MD_QTMUSIC:   return MidiDriver_QT_create();
+#endif
+#if defined(MACOSX)
+	case MD_COREAUDIO: return MidiDriver_CORE_create();
+#endif
+#if defined(UNIX) && defined(USE_ALSA)
+	case MD_ALSA:      return MidiDriver_ALSA_create();
+#endif
+	}
+
+	error("Invalid midi driver selected");
+	return NULL;
+}

Index: mididrv.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mididrv.h,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -d -r1.39 -r1.40
--- mididrv.h	6 Nov 2004 01:41:32 -0000	1.39
+++ mididrv.h	2 Dec 2004 00:33:42 -0000	1.40
@@ -51,8 +51,14 @@
 	MD_MT32 = 16
 };
 
-/** Convert a string containing a music driver name into MIDI Driver type. */
-extern int parseMusicDriver(const Common::String &str);
+enum MidiDriverType {
+	MDT_NONE   = 0,
+	MDT_PCSPK  = 1, // MD_PCSPK and MD_PCJR
+	MDT_ADLIB  = 2, // MD_ADLIB
+	MDT_TOWNS  = 4, // MD_TOWNS
+	MDT_NATIVE = 8, // Everything else
+	MDT_PREFER_NATIVE = 16
+};
 
 /**
  * Abstract description of a MIDI driver. Used by the config file and command
@@ -65,16 +71,24 @@
 	int id;
 };
 
-/**
- * Get a list of all available MidiDriver types.
- * @return list of all available midi drivers, terminated by  a zero entry
- */
-extern const MidiDriverDescription *getAvailableMidiDrivers();
-
-
 /** Abstract MIDI Driver Class */
 class MidiDriver {
 public:
+	/** Convert a string containing a music driver name into MIDI Driver type. */
+	static int parseMusicDriver(const Common::String &str);
+
+	/**
+	 * Get a list of all available MidiDriver types.
+	 * @return list of all available midi drivers, terminated by  a zero entry
+	 */
+	static const MidiDriverDescription *getAvailableMidiDrivers();
+
+	static MidiDriver *createMidi(int midiDriver);
+
+	static int detectMusicDriver(int midiFlags);
+
+
+public:
 	virtual ~MidiDriver() { }
 
 	/**





More information about the Scummvm-git-logs mailing list