Skip to content

Releases: Thysbelon/gba-mus-ripper

v1.4.2

09 Feb 02:24
Compare
Choose a tag to compare

This release fixes a bug that probably prevented the suite from working on most Windows machines.

Full Changelog: v1.4.1...v1.4.2

v1.4.1

14 Nov 21:23
47955b6
Compare
Choose a tag to compare

v1.4.0

Restore gba_mus_ripper's ability to read the sample rate and volume of most games

05 Nov 21:31
Compare
Choose a tag to compare

Fix gba_mus_ripper not outputting midi files when "-raw" is not used

01 Nov 03:20
Compare
Choose a tag to compare
v1.3.1

don't call song_ripper with the disabled sv option

v1.3.0

Improve Accuracy of LFO Speed SF2 Modulators

24 Oct 03:22
Compare
Choose a tag to compare

The SF2 modulators that control LFO speed have been overhauled to be much more accurate. I closely studied the relationship between the LFOS parameter, BPM, and the resulting LFO speed in the MP2K sound engine on the GBA, and I tried to recreate it in midi and SF2.

There is now a cc115 event on every channel for each tempo change in the track. The purpose of these cc115 events is to allow the LFO to speed up and slow down with the tempo like on a GBA. The value of each cc115 event is the current BPM divided by 4 (The full range of BPM for MP2K songs is 1-510, but this can't fit in the 0-127 range allowed for a midi CC).

Although LFO speed should now be much more accurate, it still will never be perfect. This is because the SF2 modulator system is very restrictive, and it is impossible to recreate the exact curve of LFO speed values from MP2K in SF2. In general, low LFO speed and BPM values will be less accurate, and high values (greater than half of the maximum value) will be more accurate.

The formula for how LFO speed is calculated on GBA is something like this:

In 1-LFOS, it takes around 43 16th note beats for a single cycle of LFO to complete. 43 16th notes is the "base". This base is always divided by the LFOS: at 1 LFOS, the base remains 43; at 2 LFOS, the base is 43 / 2 = 21.5; at 3 LFOS, the base is 43 / 3 = 14 1/3.
The base after being divided by the LFOS will be called C.

C, which is a value in 16th note beats, will be converted into seconds (with milliseconds in the decimal place); this seconds value will be called S.

Thus, the formula is this (pseudo-code):

F(BPM, LFOS){
 B = 43
 C = B / LFOS
 S = (C / 4) * (60 / BPM)
 Hertz = 1 / S
 return Hertz
}

Hertz is the number of cycles completed in a second. If the hertz is 8, then 8 LFO cycles will be completed in one second. If the hertz is 0.1, then one-tenth of an LFO cycle will be completed in one second (and it will take 10 seconds for a single LFO cycle to complete).

LFO-Simulating Modulators

04 Oct 02:49
Compare
Choose a tag to compare

When GBA_Mus_Ripper is run with the -raw option: generated Midi and SF2 files will now contain special Midi CCs and SF2 modulators to simulate GBA pitch and volume LFO. LFO is when the chosen parameter oscillates, or "wiggles", back and forth between two states. Pitch LFO means that the pitch rapidly moves up and down, and is the same as vibrato. Volume LFO means that the volume rapidly moves up and down, and is the same as tremolo. The GBA also has pan position LFO, which allows the instrument to quickly bounce between the left ear and the right ear, but this is unsupported in Midi and SF2 in this release.

Previous versions of GBA_Mus_Ripper would always use pitch LFO any time the original GBA sequence data used any kind of LFO; this meant that songs that were supposed to have subtle tremolo or pan position LFO would instead be filled with silly-sounding out-of-place vibrato. This release fixes that issue by disabling Midi vibrato any time the original sequence data used a different LFO; and as a bonus, approximates volume LFO (though it will likely never be one-to-one with the GBA).

Please note that the special LFO-simulating modulators in the SF2 files generated by this version of GBA_Mus_Ripper do not function with most VST or LV2 wrappers for Midi synthesizers.
For example, the great plugin FluidSynthVST does not support these modulators, and will play vibrato for all types of LFO.
I tried a few other FluidSynth-based DAW plugins available on Linux; the best one was FluidSynthPlugin as it handled both modulators and synthesis in general well, but it is not multi-timbral so it must be copy-pasted to each midi track, such as by using the "SWS" method for Reaper listed here.
I also had good results connecting QSynth, an external synthesizer software, to MidiEditor. I still need to research how to connect QSynth to Reaper, and what the best synthesizer software / plugin for Windows users is.

Note: The Windows builds are cross-compiled and untested. The Windows-x86_64 build was tested only on the first release. The Windows aarch64 build has never been tested and I do not have the ability to test it.

If you experience issues with one of the Windows builds, please politely let me know by opening a new issue on this repository.

First Release

26 Sep 01:57
Compare
Choose a tag to compare
v1.0.0

Add TODO notes and other notes in comments