Hi,
I've managed to fix that by patching lr-atari800 src before build.
Login to retropie host via ssh then do the following:
cd ~/RetroPie-Setup/ ; sudo ./retropie_packages.sh lr-atari800
press ctlr+c in order to break compilation (just after git clone had been complete)
cd /home/pi/RetroPie-Setup/tmp/build/lr-atari800
patch atari800/src/mzpokeysnd.c with included patch diff:
--- mzpokeysnd.c 2019-11-23 19:26:22.000000000 +0000
+++ mzpokeysnd.c 2019-11-23 19:40:47.359683728 +0000
@@ -2341,16 +2341,16 @@
#endif
#ifdef VOL_ONLY_SOUND
- buffer[0] = (UBYTE)floor((generate_sample(pokey_states) + POKEYSND_sampout - MAX_SAMPLE / 2.0)
- * (255.0 / MAX_SAMPLE / 4 * M_PI * 0.95) + 128 + 0.5 + 0.5 * rand() / RAND_MAX - 0.25);
+ buffer[0] = (UBYTE)floor((generate_sample(pokey_states) + POKEYSND_sampout)
+ * (255.0 / 2 / MAX_SAMPLE / 4 * M_PI * 0.95) + 128 + 0.5 + 0.5 * rand() / RAND_MAX - 0.25);
#else
- buffer[0] = (UBYTE)floor((generate_sample(pokey_states) - MAX_SAMPLE / 2.0)
- * (255.0 / MAX_SAMPLE / 4 * M_PI * 0.95) + 128 + 0.5 + 0.5 * rand() / RAND_MAX - 0.25);
+ buffer[0] = (UBYTE)floor(generate_sample(pokey_states)
+ * (255.0 / 2 / MAX_SAMPLE / 4 * M_PI * 0.95) + 128 + 0.5 + 0.5 * rand() / RAND_MAX - 0.25);
#endif
for(i=1; i<num_cur_pokeys; i++)
{
- buffer[i] = (UBYTE)floor((generate_sample(pokey_states + i) - MAX_SAMPLE / 2.0)
- * (255.0 / MAX_SAMPLE / 4 * M_PI * 0.95) + 128 + 0.5 + 0.5 * rand() / RAND_MAX - 0.25);
+ buffer[i] = (UBYTE)floor(generate_sample(pokey_states + i)
+ * (255.0 / 2 / MAX_SAMPLE / 4 * M_PI * 0.95) + 128 + 0.5 + 0.5 * rand() / RAND_MAX - 0.25);
}
buffer += num_cur_pokeys;
nsam -= num_cur_pokeys;
@@ -2389,16 +2389,16 @@
}
#endif
#ifdef VOL_ONLY_SOUND
- buffer[0] = (SWORD)floor((generate_sample(pokey_states) + POKEYSND_sampout - MAX_SAMPLE / 2.0)
- * (65535.0 / MAX_SAMPLE / 4 * M_PI * 0.95) + 0.5 + 0.5 * rand() / RAND_MAX - 0.25);
+ buffer[0] = (SWORD)floor((generate_sample(pokey_states) + POKEYSND_sampout)
+ * (65535.0 / 2 / MAX_SAMPLE / 4 * M_PI * 0.95) + 0.5 + 0.5 * rand() / RAND_MAX - 0.25);
#else
- buffer[0] = (SWORD)floor((generate_sample(pokey_states) - MAX_SAMPLE / 2.0)
- * (65535.0 / MAX_SAMPLE / 4 * M_PI * 0.95) + 0.5 + 0.5 * rand() / RAND_MAX - 0.25);
+ buffer[0] = (SWORD)floor(generate_sample(pokey_states)
+ * (65535.0 / 2 / MAX_SAMPLE / 4 * M_PI * 0.95) + 0.5 + 0.5 * rand() / RAND_MAX - 0.25);
#endif
for(i=1; i<num_cur_pokeys; i++)
{
- buffer[i] = (SWORD)floor((generate_sample(pokey_states + i) - MAX_SAMPLE / 2.0)
- * (65535.0 / MAX_SAMPLE / 4 * M_PI * 0.95) + 0.5 + 0.5 * rand() / RAND_MAX - 0.25);
+ buffer[i] = (SWORD)floor(generate_sample(pokey_states + i)
+ * (65535.0 / 2 / MAX_SAMPLE / 4 * M_PI * 0.95) + 0.5 + 0.5 * rand() / RAND_MAX - 0.25);
}
buffer += num_cur_pokeys;
nsam -= num_cur_pokeys;
@@ -2434,16 +2434,16 @@
advance_ticks(pokey_states + i, ticks);
if (POKEYSND_snd_flags & POKEYSND_BIT16) {
*((SWORD *)buffer) = (SWORD)floor(
- (interp_read_resam_all(pokey_states + i, samp_pos) - MAX_SAMPLE / 2.0)
- * (65535.0 / MAX_SAMPLE / 4 * M_PI * 0.95)
+ interp_read_resam_all(pokey_states + i, samp_pos)
+ * (65535.0 / 2 / MAX_SAMPLE / 4 * M_PI * 0.95)
+ 0.5 + 0.5 * rand() / RAND_MAX - 0.25
);
buffer += 2;
}
else
*buffer++ = (UBYTE)floor(
- (interp_read_resam_all(pokey_states + i, samp_pos) - MAX_SAMPLE / 2.0)
- * (255.0 / MAX_SAMPLE / 4 * M_PI * 0.95)
+ interp_read_resam_all(pokey_states + i, samp_pos)
+ * (255.0 / 2 / MAX_SAMPLE / 4 * M_PI * 0.95)
+ 128 + 0.5 + 0.5 * rand() / RAND_MAX - 0.25
);
}
execute once again
cd ~/RetroPie-Setup/ ; sudo ./retropie_packages.sh lr-atari800
well done!
Sound now will work as intended.