Skip to content

Improve import of XM files #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
18 tasks
KungFuFurby opened this issue Nov 18, 2021 · 0 comments
Open
18 tasks

Improve import of XM files #1

KungFuFurby opened this issue Nov 18, 2021 · 0 comments

Comments

@KungFuFurby
Copy link
Owner

KungFuFurby commented Nov 18, 2021

Requested by MisthaLu on the SNES Development Server Discord server.

Due to XM being mostly an extension of the MOD file format effect-wise, this can spill over into the MOD format under the condition that a proper solution is found to Amiga pitch slides.

Currently only Fxx is supported.

To start things off, the following effects can be theoretically imported to a direct conversion in addition to the ones that are already handled:

  • Detune (E5x -> Txx)
  • Slide Up/Slide Down (1xx/2xx -> Uxx/Dxx)
  • Portamento (3xx -> Pxx)
  • Vibrato (4xy -> Vxy)
  • Pan (8xx -> Sxx)
  • Volume (Cxx -> send to volume column)
  • Key Off (Kxx -> send to note column)

These volume column effects also have a direct conversion:

  • Panning (Px -> Sxx)
  • Portamento (Mx -> Pxx)

Both linear and Amiga mode need to be accounted for here on the pitches. Linear would go first, since it's easier to track.

These effects require manual tracking of the parameter on a per-row basis being modified because they are not stored locally...

  • Fine Volume Slide Up/Down (Axx/Bxx -> send to volume column)
  • Fine Slide Up/Down (E1x/E2x -> Txx)

Ditto for these volume column effects...

  • Fine Volume Slide Up/Down (Ux/Dx -> send to volume column)
  • Vibrato (Vx -> V?y)
  • Vibrato Speed (Sx -> Vx?)

Note that volume column and standard effects may end up generating more than one effect. The internal format supports this, but I don't think the tracker does: special adaptations may be required to support more than one effect per row.

These effects affect the rows themselves instead of anything else since SNESGSS codes all of its delays in actual ticks:

  • Pattern Delay (EEx -> might end up being a speed multiplier in this specific circumstance, with extra rows involved if the number gets too high)

These effects affect the pattern processing and/or overall playback of the song:

  • Position Jump (Bxx -> R.. if it returns to an orderlist ID already visited, which also means the R.. marker must be generated at the point where this happens.)
  • Pattern Break (Dxx -> merely skips processing rows and then skips to the next pattern's rows)
  • Jump loop (E6x -> requires keeping track of the loop counter)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant