dumb icon indicating copy to clipboard operation
dumb copied to clipboard

Ode to Protracker, 20sec, volume

Open dan1982code opened this issue 6 years ago • 3 comments

Hi. In the Ode: https://modarchive.org/index.php?request=view_by_moduleid&query=84861 there's an interesting part at 20 seconds. Dumb decreases the volume (by my count) 8 times during that long sustained note that's part of the pattern loop. Other replayers (OpenMPT, Micromod) don't drop the volume there. XMPlay does... which behaviour is correct here, or is it a judgment call? Looking at the mod, I don't see how these volume steps are happening, so I'm surely missing something. Thanks!

dan1982code avatar Oct 27 '17 00:10 dan1982code

Is this with or without the "playptmod" option enabled? If it's with it enabled, it's because that's what would happen if you played it in Protracker 2.3.

Try this clone as well: https://sourceforge.net/projects/protracker/

Both the clone and playptmod are by the same author, eightbitbubsy, who reverse engineered behavior from old source assembly code. The only difference is, mine is modified to use my personal mixing and resampling code, so it may sound slightly different mix wise, but otherwise behave the same volume and pitch wise.

kode54 avatar Oct 27 '17 00:10 kode54

Thanks! It happens with playptmod on or off in the same (correct) way.

I now studied some other open-source mod replayers and see the problem (could be wrong, I don't really know this stuff). They are not processing tick-0 effects during the notes of a pattern delay (i.e. they are basically setting num_ticks to speed + speed * pattern_delay. So tick0 never happens until the pattern delay is over, and this is why the volume-slide 20sec into Ode to Protracker doesn't happen.) Apparently Protracker continues to process tick-0 effects during the delay.

I emailed the author of the PT2 replayer for further insight and to confirm what PT2 really does here.

Thanks!

dan1982code avatar Oct 27 '17 03:10 dan1982code

Yes, that. EBx (fine volume slide down) is a tick0 effect, and it should be handled just fine when coupled with EEx (pattern delay) in a ProTracker compatible .MOD replayer. ProTracker doesn't do pattern delay like that, instead it just subtracts the increased row by 1 in the "increase step" part of the replayer, so that it never actually moved, but it's ticking like normal. E1x/E2x + EEx also fails in those replayers.

EDIT: Here's a link to my directly ported C replayer from asm, it's as accurate as it gets. Very useful for seeing how the original PT replayer works: https://pastebin.com/pg95YduC Line 1252 is where the magic happens. ;)

Btw, this is not the one foo_dumb.dll is using. It's using playptmod which is less accurate (but still very good) and quite an old project.

8bitbubsy avatar Oct 27 '17 08:10 8bitbubsy