[Scummvm-cvs-logs] CVS: scummvm/sky/music adlibmusic.cpp,1.11,1.12
Max Horn
fingolfin at users.sourceforge.net
Thu Sep 18 09:03:02 CEST 2003
Update of /cvsroot/scummvm/scummvm/sky/music
In directory sc8-pr-cvs1:/tmp/cvs-serv24117/sky/music
Modified Files:
adlibmusic.cpp
Log Message:
changed & documented the premixer semantics
Index: adlibmusic.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/adlibmusic.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- adlibmusic.cpp 6 Aug 2003 00:28:00 -0000 1.11
+++ adlibmusic.cpp 18 Sep 2003 16:01:32 -0000 1.12
@@ -39,7 +39,7 @@
OPLBuildTables((env_bits ? env_bits : FMOPL_ENV_BITS_HQ), (eg_ent ? eg_ent : FMOPL_EG_ENT_HQ));
_opl = OPLCreate(OPL_TYPE_YM3812, 3579545, _sampleRate);
- _mixer->setupPremix(this, passMixerFunc);
+ _mixer->setupPremix(passMixerFunc, this);
}
SkyAdlibMusic::~SkyAdlibMusic(void) {
@@ -55,30 +55,36 @@
_channels[cnt]->updateVolume(volume | 128);
}
-void SkyAdlibMusic::premixerCall(int16 *buf, uint len) {
+void SkyAdlibMusic::premixerCall(int16 *data, uint len) {
if (_musicData == NULL) {
// no music loaded
- memset(buf, 0, len * sizeof(int16));
- return;
+ memset(data, 0, 2 * len * sizeof(int16));
} else if ((_currentMusic == 0) || (_numberOfChannels == 0)) {
// music loaded but not played as of yet
- memset(buf, 0, len * sizeof(int16));
+ memset(data, 0, 2 * len * sizeof(int16));
// poll anyways as pollMusic() can activate the music
pollMusic();
_nextMusicPoll = _sampleRate/50;
- return;
- }
- uint32 render;
- while (len) {
- render = (len > _nextMusicPoll) ? (_nextMusicPoll) : (len);
- len -= render;
- _nextMusicPoll -= render;
- YM3812UpdateOne (_opl, buf, render);
- buf += render;
- if (_nextMusicPoll == 0) {
- pollMusic();
- _nextMusicPoll = _sampleRate/50;
+ } else {
+ uint32 render;
+ int16 *origData = data;
+ uint origLen = len;
+ while (len) {
+ render = (len > _nextMusicPoll) ? (_nextMusicPoll) : (len);
+ len -= render;
+ _nextMusicPoll -= render;
+ YM3812UpdateOne(_opl, data, render);
+ data += render;
+ if (_nextMusicPoll == 0) {
+ pollMusic();
+ _nextMusicPoll = _sampleRate/50;
+ }
+ }
+
+ // Convert mono data to stereo
+ for (int i = (origLen - 1); i >= 0; i--) {
+ origData[2 * i] = origData[2 * i + 1] = origData[i];
}
}
}
More information about the Scummvm-git-logs
mailing list