Eve-ning / vsrg

a c++ static library for vsrg
https://twitter.com/dev_evening
2 stars 0 forks source link

Timing reform #21

Closed Eve-ning closed 4 years ago

Eve-ning commented 4 years ago

I ran into a lot of problems when parsing sm and bms.

Using a measure/snap based structure is of a lower level than that of ms, which has a lot more assumptions. I feel that this change would be beneficial if done correctly.

Eve-ning commented 4 years ago

Timing Grid

This acts as the facilitator for these .sm and .bms file formats and also will be integrated with the current system later

In each grid, we have Timing Grid Measures, in those, Timing Grid Beats, then Timing Grid Snaps

Hierarchy

We firstly have

Timing Grid Base This just acts like a wrapper for any amount of Timing Grid Measures

Timing Grid Measure This wraps for any amount of Timing Grid Beats. This is just as dynamic as the base, just that we add a few ways to derive timing sigs

Timing Grid Beat Mostly the same as Measure, however, we allow minimization of Timing Grid Snaps, that is, a 192 long vector can be shortened to 4 long if we don't need that many snaps to represent a certain note's snap.

Timing Grid Snap This is the equivalent of just a row, for a specific ms.

Eve-ning commented 4 years ago

This system seems to be much cleaner than just jamming all of the conversion code into VsrgMapSM which looks absolutely atrocious.

Will see how I can salvage the SM conversion code already done.

Added the base files that looks splendid, will see how this goes.

Eve-ning commented 4 years ago

Simplify works now, not sure if I overimplemented or went too specific to simplification by implementing simplify in the base class. If so, I'll just move it to TimingGridBeatSM whenever I get to it! 👏

Lesson learnt, smaller chunks are always easier to deal with, even though it's an individual project. I'll have a relook at my older code some time whenever I'm done with SM to clean up before I start with BMS

Eve-ning commented 4 years ago

22 merged by this PR, this has wrong target