Happy to hear you found my comments useful :)
Beware teh baddies! =o× CLOSE
about the song:
i will admit that i got lazy; this is kinda OHBcore, i wanted to make something bigger (and better) but i decided to upload this anyway to showcase what i was able to achieve in bytebeat.
about the code (from the point of view from a noob programmer (aka me)):
FM in bytebeat per se isn't anything new; it was first seen on funute's "tiny rave" and my "1k dance". in my case, i wasn't able to trigger the operator volume changes arbitrarily, and also i only used decay in the modulator instead of ASDR in both operators.
so my goal for later entries was to be able to implement ASDR and be able to trigger it whenever i wanted; furthermore, since 2-op FM was simple to implement (though i was helped by funute's comment on his own entry), i thought 4-op FM shouldn't be that complicated as well. well, i was half-right.
as anyone who's messed with FM knows, there are several algorithms to determine how the operators 'interact' with each other. algorithms 0 and 7 were pretty obvious to implement, but then i got to stuff like algorithm 3 and i got stuck. eventually i got it, though, but took me a while.
it still isn't 100% accurate though; i wasn't able to implement feedback (important for trumpet-like instruments), and the volume envelope on my implementation doesn't really work like on a proper implementation (on my code it's linear, while on a proper implementation it's exponential or something? someone please correct me if i'm wrong)
i used instruments based on the ones from Kono Yo No Hate (...) YU-NO. i say "based" because the transcribed values aren't exactly the same, and due to the lack of feedback and improper volume envelopes, they don't sound the same. still sounds pretty decent though, imo.
this was a pretty fun learning experience and i'm glad with i was able to achieve :~) i hope you like it!
(rendered using funute's bytebeat.js at 44khz; also works on greggman's website, though on my pc i need to set the samplerate to 11k for it to play without stuttering (change the first line to "SAMP_RATE = 11000,"))