aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2011-05-21 19:03:22 +0200
committerMax Horn2011-05-23 12:13:01 +0200
commite7c642b010c47d2520d21ea5b3c041d861bc1532 (patch)
tree04badc3a307aa66fffe49dc79b13e12164e8cdae
parentf1a7ec711772d5582fc06c7f8209b406e5fb3717 (diff)
downloadscummvm-rg350-e7c642b010c47d2520d21ea5b3c041d861bc1532.tar.gz
scummvm-rg350-e7c642b010c47d2520d21ea5b3c041d861bc1532.tar.bz2
scummvm-rg350-e7c642b010c47d2520d21ea5b3c041d861bc1532.zip
AUDIO: Explicitly instantiate & name RandomSource used by MAME OPL
-rw-r--r--audio/fmopl.h5
-rw-r--r--audio/softsynth/opl/mame.cpp14
-rw-r--r--audio/softsynth/opl/mame.h2
3 files changed, 17 insertions, 4 deletions
diff --git a/audio/fmopl.h b/audio/fmopl.h
index fbce36f077..b88325a52e 100644
--- a/audio/fmopl.h
+++ b/audio/fmopl.h
@@ -23,7 +23,10 @@
#define SOUND_FMOPL_H
#include "common/scummsys.h"
-#include "common/str.h"
+
+namespace Common {
+class String;
+}
namespace OPL {
diff --git a/audio/softsynth/opl/mame.cpp b/audio/softsynth/opl/mame.cpp
index b380a15345..9cc35971eb 100644
--- a/audio/softsynth/opl/mame.cpp
+++ b/audio/softsynth/opl/mame.cpp
@@ -546,7 +546,7 @@ inline void OPL_CALC_RH(FM_OPL *OPL, OPL_CH *CH) {
// but EG_STEP = 96.0/EG_ENT, and WHITE_NOISE_db=6.0. So, that's equivalent to
// int(OPL->rnd.getRandomBit() * EG_ENT/16). We know that EG_ENT is 4096, or 1024,
// or 128, so we can safely avoid any FP ops.
- int whitenoise = OPL->rnd.getRandomBit() * (EG_ENT>>4);
+ int whitenoise = OPL->rnd->getRandomBit() * (EG_ENT>>4);
int tone8;
@@ -1126,6 +1126,15 @@ FM_OPL *OPLCreate(int type, int clock, int rate) {
OPL->rate = rate;
OPL->max_ch = max_ch;
+ // Init the random source. Note: We use a fixed name for it here.
+ // So if multiple FM_OPL objects exist in parallel, then their
+ // random sources will have an equal name. At least in the
+ // current EventRecorder implementation, this causes no problems;
+ // but this is probably not guaranteed.
+ // Alas, it does not seem worthwhile to bother much with this
+ // at the time, so I am leaving it as it is.
+ OPL->rnd = new Common::RandomSource("mame");
+
/* init grobal tables */
OPL_initalize(OPL);
@@ -1134,9 +1143,10 @@ FM_OPL *OPLCreate(int type, int clock, int rate) {
return OPL;
}
-/* ---------- Destroy one of vietual YM3812 ---------- */
+/* ---------- Destroy one of virtual YM3812 ---------- */
void OPLDestroy(FM_OPL *OPL) {
OPL_UnLockTable();
+ delete OPL->rnd;
free(OPL);
}
diff --git a/audio/softsynth/opl/mame.h b/audio/softsynth/opl/mame.h
index 4c40949483..803ca897e7 100644
--- a/audio/softsynth/opl/mame.h
+++ b/audio/softsynth/opl/mame.h
@@ -147,7 +147,7 @@ typedef struct fm_opl_f {
OPL_UPDATEHANDLER UpdateHandler; /* stream update handler */
int UpdateParam; /* stream update parameter */
- Common::RandomSource rnd;
+ Common::RandomSource *rnd;
} FM_OPL;
/* ---------- Generic interface section ---------- */