[Scummvm-cvs-logs] CVS: scummvm/scumm player_v2.cpp,2.9,2.10
Jochen Hoenicke
hoenicke at users.sourceforge.net
Thu Jun 5 01:46:05 CEST 2003
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv32416
Modified Files:
player_v2.cpp
Log Message:
Synchronize channels playing the same frequency. This prevents
interference effects.
Index: player_v2.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/player_v2.cpp,v
retrieving revision 2.9
retrieving revision 2.10
diff -u -d -r2.9 -r2.10
--- player_v2.cpp 1 Jun 2003 17:27:20 -0000 2.9
+++ player_v2.cpp 5 Jun 2003 08:45:24 -0000 2.10
@@ -35,7 +35,6 @@
#define FB_WNOISE 0x12000 /* feedback for white noise */
#define FB_PNOISE 0x08000 /* feedback for periodic noise */
-
const uint8 note_lengths[] = {
0,
0, 0, 2,
@@ -884,11 +883,31 @@
}
void Player_V2::generatePCjrSamples(int16 *data, int len) {
- int i;
+ int i, j;
int freq, vol;
memset(data, 0, sizeof(int16) * len);
bool hasdata = false;
+
+ for (i = 1; i < 3; i++) {
+ freq = channels[i].d.freq >> 6;
+ if (channels[i].d.volume && channels[i].d.time_left) {
+ for (j = 0; j < i; j++) {
+ if (channels[j].d.volume
+ && channels[j].d.time_left
+ && freq == (channels[j].d.freq >> 6)) {
+ /* HACK: this channel is playing at
+ * the same frequency as another.
+ * Synchronize it to the same phase to
+ * prevent interference.
+ */
+ _timer_count[i] = _timer_count[j];
+ _timer_output ^= (1 << i) &
+ (_timer_output ^ _timer_output << (i - j));
+ }
+ }
+ }
+ }
for (i = 0; i < 4; i++) {
freq = channels[i].d.freq >> 6;
More information about the Scummvm-git-logs
mailing list