Prezzodaman / pymod

Python program that plays/renders ProTracker modules using PyAudio
https://verycheapwebsite.rf.gd/pymod
GNU General Public License v3.0
9 stars 1 forks source link

Adding a legacy 2.3 mode? #10

Open DidierMalenfant opened 1 month ago

DidierMalenfant commented 1 month ago

A lot of people consider Protracker 2.3 to be the one true version of protracker and a lot of modules rely on the replay routine abiding by 2.3 quirks and standards.

One example are the pan commands 0x80 and 0xE8. On 2.3, and on Amigas for that matter, those commands don't exists because channel panning is hardwired (1 & 4 to the left, 2 & 3 to the right).

We could add a --legacy command line option that implements this (ignoring the pan commands in this case) and any other quirks we find down the road.

I'm opening this as a note/reminder but I'll submit a PR for it later on if this is ok with you in principle.

Prezzodaman commented 1 month ago

This is a fantastic idea! I can already think of 2 quirks (periods being capped, and the pan commands like you mentioned), but I'll do some research and see what other quirks I can find. I'll use the ProTracker 2.3 clone for testing, since it's super accurate.

Additionally, if there's any modules in particular that rely on ProTracker 2.3's quirks (or play back incorrectly), let me know and I'll try and look into it!

Prezzodaman commented 1 month ago

I've made the first basic version of legacy mode, but before I push the changes, do you think it should be enabled for rendering test modules? At present, it covers things like arpeggio wraparounds, period limiting, and vibrato/tremolo waveforms...

DidierMalenfant commented 1 month ago

I think there should be at least some test for it. At least one one for a type of module that gets affected by the setting (like on that uses the pan command or something).

One more thing I thought about for legacy is that it should probably limit channels to 4 too.

Prezzodaman commented 1 month ago

The first version of legacy mode has been pushed! I'll keep this issue open for the time being, so any new features/quirks can be discussed. It's only a draft still :)

DidierMalenfant commented 2 weeks ago

Just noticed the ReadMe doesn't seem to have any info on how to use legacy mode.

Prezzodaman commented 2 weeks ago

I'm pretty sure I added it. Are there more specific things that should be added to the readme, regarding legacy mode?

DidierMalenfant commented 2 weeks ago

Yeah my bad... I just saw the -legacy now. Ignore me :)