* New name reflects contents better
* Uses explicit functions instead of Into for only converting the
difficulty
* Uses errors instead of defaults for invalid values
* Difficulty mapping is separate function
* Simplified tests
It did not do any checking and looked weird.
What *is* the right way to ensure the value only has 3 bytes while still
allowing the user to pass a normal primitive or newtype wrapper around a
primitive (and not e.g. a [bool; 3])?
This also renames variables to be easier to understand (rather than
copying the naming scheme of the spec) and moves the calculation of
computable fields in the wave format header into the adpcm module.
Error where truncation can occurr and prevent truncation in the future
by using `type::from()` (which checks for truncation) instead of `as
type` (which doesn’t).
DDR stepcharts are harder due to how they are played. That means that a
hard DDR chart will have much less notes than a hard mania chart. Since
osu does not know that, giving it a (mania typical) hp drain will be
extremely hard with a DDR chart.
The reason for the switch is mostly related to error handling (and me
being unable to unterstand how nom does it). Using byteorder and a few
handwritten helper functions for parsing makes error handling much
easier. It also allows me to return more helpful error messages.
All tested charts do not have an offset. The former offset
implementation (which was not working) just cancelled out at charts with
a specific bpm value.