I know it’s late, but the end of the year just got a little too busy for me.
Here is my LEGO MINDSTORMS EV3 version of ‘Carol of the Bells’. I found a version of the song in 3 parts and assigned each voice to an EV3. Timing was particularly difficult as while the notes played as expected, things like Loop and Bluetooth functions all take a finite time, which can throw out the timing of the song. In the end I sent a bluetooth message from the Master EV3 (left hand one) to the two Slaves ever 4 bars of the song. It does a pretty good job of keeping it roughly in time.
To make the Brick Lights flash in time with each note, requires some multi-tasking. I start the musical note and turn on the brick light at the same time. Then as the note is still playing, I take the note duration, divide by 3 and wait for that amount of time before turning the light off. This gives a nice effect whereby longer notes have the light left on for a longer period of time. Rather than do this for every single note, I used the My Block Builder to create my own block. It accepts inputs of Note name, Note Duration and Volume and then send all those variables to the right places.
This is a screenshot of one of the programs. You can download the full project file here - carol_of_the_bells.ev3