Skip to content

Instantly share code, notes, and snippets.

@Taresin
Last active February 3, 2026 03:24
Show Gist options
  • Select an option

  • Save Taresin/f0c882a118f69f5f19fc59b01fb0867c to your computer and use it in GitHub Desktop.

Select an option

Save Taresin/f0c882a118f69f5f19fc59b01fb0867c to your computer and use it in GitHub Desktop.
# MIT License
#
# Copyright (c) 2026
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
# Library imports
from vex import *
from vex.vex_globals import *
import random
NOTE_MULTIPLIER = 1.25
NOTE_DURATION_CROTCHET = 600 * NOTE_MULTIPLIER
NOTE_DURATION_QUAVER = 300 * NOTE_MULTIPLIER
NOTE_DURATION_SEMIQUAVER = 150 * NOTE_MULTIPLIER
# Three quavers in the time of one crotchet
NOTE_DURATION_TRIPLET_QUAVER = 200 * NOTE_MULTIPLIER
# Three crotchets in the time of two crotchets
NOTE_DURATION_TRIPLET_CROTCHET = NOTE_DURATION_CROTCHET * (2 / 3)
NOTE_BREAK = 100 # Don't go lower than 100. Seems like that is too short of a duration for the note to be played.
# Sing
def rest(duration):
"""A musical rest of the given duration (in ms)."""
wait(duration, MSEC)
def crotchet(robot, note):
robot.sound.play_note(note, NOTE_DURATION_CROTCHET - NOTE_BREAK)
wait(NOTE_BREAK, MSEC)
def crotchet_dotted(robot, note):
robot.sound.play_note(note, NOTE_DURATION_CROTCHET * 1.5 - NOTE_BREAK)
wait(NOTE_BREAK, MSEC)
def quaver(robot, note):
robot.sound.play_note(note, NOTE_DURATION_QUAVER - NOTE_BREAK)
wait(NOTE_BREAK, MSEC)
def quaver_string(robot, notes):
"""Play a sequence of quavers from a list of note strings.
Args:
robot: The robot to play notes on
notes: A list of note strings (e.g., ["G5", "A5", "B5", "C6"])
Example:
quaver_string(robot, ["D5", "D5"]) # Double quaver
quaver_string(robot, ["F#6", "E6", "F#6", "G6"]) # Quadruple quaver
"""
for note in notes:
quaver(robot, note)
def semiquaver(robot, note):
robot.sound.play_note(note, NOTE_DURATION_SEMIQUAVER - NOTE_BREAK)
wait(NOTE_BREAK, MSEC)
def single_triplet_quaver(robot, note):
robot.sound.play_note(note, NOTE_DURATION_TRIPLET_QUAVER - NOTE_BREAK)
wait(NOTE_BREAK, MSEC)
def triplet_quaver(robot, note1, note2, note3):
single_triplet_quaver(robot, note1)
single_triplet_quaver(robot, note2)
single_triplet_quaver(robot, note3)
wait(NOTE_BREAK, MSEC)
def single_triplet_crotchet(robot, note):
robot.sound.play_note(note, NOTE_DURATION_TRIPLET_CROTCHET - NOTE_BREAK * 1.5)
wait(NOTE_BREAK * 1.5, MSEC)
def triplet_crotchet(robot, note1, note2, note3):
single_triplet_crotchet(robot, note1)
single_triplet_crotchet(robot, note2)
single_triplet_crotchet(robot, note3)
wait(NOTE_BREAK, MSEC)
def timed_note(robot, note, duration):
robot.sound.play_note(note, duration - NOTE_BREAK)
wait(NOTE_BREAK, MSEC)
def kick(robot):
robot.kicker.kick(SOFT)
random_emoji = random.choice(face_emojis)
robot.screen.show_emoji(random_emoji)
def hum(robot, note, duration, emoji):
robot.screen.show_emoji(emoji)
robot.sound.play_note(note, duration - NOTE_BREAK, 20)
wait(NOTE_BREAK, MSEC)
# Dance
face_emojis = [DISGUST, SILLY, FEAR, SHOCKED, JEALOUS, ANNOYED, EMBARRASSED]
def turn(robot, direction):
robot.turn_for(direction, 90, 100, PERCENT, False)
def spin(robot, direction):
robot.turn_for(direction, 360, 100, PERCENT, False)
# Song
def line1_start(robot):
quaver(robot, "G5")
rest(NOTE_DURATION_QUAVER)
triplet_quaver(robot, "G5", "A5", "B5")
crotchet(robot, "B5")
triplet_quaver(robot, "G5", "A5", "B5")
crotchet(robot, "B5")
def line1_middle(robot):
single_triplet_quaver(robot, "G5")
single_triplet_quaver(robot, "G5")
crotchet(robot, "A5")
def line1_end(robot):
single_triplet_quaver(robot, "F#5")
single_triplet_quaver(robot, "F#5")
quaver(robot, "F#5")
timed_note(robot, "E5", NOTE_DURATION_QUAVER + NOTE_DURATION_CROTCHET)
def line1_fill_harmony_top(robot, direction):
robot.screen.show_emoji(SHOCKED, direction)
rest(NOTE_DURATION_QUAVER)
crotchet(robot, "F#5")
crotchet(robot, "E5")
crotchet(robot, "G5")
def line1_fill_harmony_bottom(robot, direction):
robot.screen.show_emoji(SHOCKED, direction)
rest(NOTE_DURATION_QUAVER)
crotchet(robot, "D5")
crotchet(robot, "E5")
crotchet(robot, "E5")
def phrase1(robot_alpha, robot_beta, robot_gamma, robot_delta):
robot_alpha.move_for(50, 0)
Thread(turn, (robot_beta, RIGHT,))
Thread(turn, (robot_gamma, LEFT,))
robot_alpha.screen.show_emoji(HAPPY)
line1_start(robot_alpha)
rest(NOTE_DURATION_CROTCHET + NOTE_DURATION_QUAVER)
robot_alpha.screen.show_emoji(BORED)
robot_delta.screen.show_emoji(LAUGHING)
Thread(kick, args=(robot_beta,))
Thread(kick, args=(robot_gamma,))
Thread(quaver, args=(robot_delta, "D6",))
Thread(turn, (robot_beta, LEFT))
Thread(turn, (robot_gamma, RIGHT))
rest(NOTE_DURATION_CROTCHET + NOTE_DURATION_TRIPLET_QUAVER)
robot_beta.screen.hide_emoji()
robot_gamma.screen.hide_emoji()
robot_delta.screen.hide_emoji()
robot_alpha.screen.show_emoji(CHEERFUL)
line1_middle(robot_alpha)
Thread(turn, (robot_beta, RIGHT))
Thread(turn, (robot_gamma, RIGHT))
rest(NOTE_DURATION_CROTCHET + NOTE_DURATION_QUAVER)
robot_alpha.screen.show_emoji(BORED)
robot_delta.screen.show_emoji(LAUGHING)
Thread(kick, args=(robot_beta,))
Thread(kick, args=(robot_gamma,))
quaver(robot_delta, "D6")
rest(NOTE_DURATION_CROTCHET + NOTE_DURATION_TRIPLET_QUAVER)
robot_beta.screen.hide_emoji()
robot_gamma.screen.hide_emoji()
robot_delta.screen.hide_emoji()
Thread(turn, (robot_beta, LEFT))
Thread(turn, (robot_gamma, LEFT))
line1_end(robot_alpha)
rest(NOTE_DURATION_CROTCHET + NOTE_DURATION_TRIPLET_QUAVER)
Thread(line1_fill_harmony_top, args=(robot_beta, LOOK_LEFT, ))
Thread(line1_fill_harmony_bottom, args=(robot_gamma, LOOK_RIGHT, ))
def line2_start(robot):
quaver(robot, "G5")
rest(NOTE_DURATION_QUAVER)
triplet_quaver(robot, "G5", "A5", "B5")
crotchet(robot, "B5")
triplet_quaver(robot, "G5", "A5", "B5")
crotchet(robot, "B5")
def line2_middle(robot):
single_triplet_quaver(robot, "G5")
single_triplet_quaver(robot, "G5")
crotchet(robot, "A5")
def line2_bridge(robot):
robot.screen.show_emoji(SURPRISED)
crotchet(robot, "F#6")
rest(NOTE_DURATION_TRIPLET_QUAVER)
single_triplet_quaver(robot, "E6")
single_triplet_quaver(robot, "F#6")
quaver(robot, "F#6")
quaver(robot, "E6")
quaver(robot, "F#6")
quaver(robot, "G6")
quaver(robot, "E6")
quaver(robot, "E6")
def line2_pump(robot):
rest(NOTE_DURATION_QUAVER)
quaver(robot, "A5")
rest(NOTE_DURATION_QUAVER)
quaver(robot, "A5")
rest(NOTE_DURATION_QUAVER)
quaver(robot, "A5")
def line2_pump_harmony1(robot):
rest(NOTE_DURATION_QUAVER)
quaver(robot, "F#5")
rest(NOTE_DURATION_QUAVER)
quaver(robot, "F#5")
rest(NOTE_DURATION_QUAVER)
quaver(robot, "F#5")
def line2_pump_harmony2(robot):
rest(NOTE_DURATION_QUAVER)
quaver(robot, "D5")
rest(NOTE_DURATION_QUAVER)
quaver(robot, "D5")
rest(NOTE_DURATION_QUAVER)
quaver(robot, "D5")
def line2_lead(robot):
quaver(robot, "D5")
quaver(robot, "D5")
def triplet_pump(robot, note):
triplet_crotchet(robot, note, note, note)
triplet_crotchet(robot, note, note, note)
def triplet_pump_lead(robot):
triplet_crotchet(robot, "A5", "A5", "A5")
triplet_crotchet(robot, "A5", "A5", "A5")
quaver(robot, "A5")
quaver(robot, "B5")
def phrase2(robot_alpha, robot_beta, robot_gamma, robot_delta):
line2_start(robot_alpha)
wait(NOTE_DURATION_CROTCHET + NOTE_DURATION_QUAVER, MSEC)
Thread(kick, args=(robot_beta,))
Thread(kick, args=(robot_gamma,))
Thread(quaver, args=(robot_delta, "D6",))
wait(NOTE_DURATION_CROTCHET + NOTE_DURATION_TRIPLET_QUAVER, MSEC)
robot_beta.screen.hide_emoji()
robot_gamma.screen.hide_emoji()
line2_middle(robot_beta)
wait(NOTE_DURATION_CROTCHET + NOTE_DURATION_TRIPLET_QUAVER, MSEC)
line2_bridge(robot_delta)
wait(NOTE_DURATION_CROTCHET * 1.75, MSEC)
robot_delta.screen.hide_emoji()
quaver(robot_alpha, "D5")
robot_beta.screen.show_emoji(SURPRISED)
line2_pump(robot_beta)
rest(NOTE_DURATION_QUAVER * 1.05)
line2_lead(robot_alpha)
robot_gamma.screen.show_emoji(SURPRISED)
Thread(line2_pump, args=(robot_gamma,))
Thread(line2_pump_harmony1, args=(robot_beta,))
rest(NOTE_DURATION_CROTCHET * 3)
quaver(robot_alpha, "D5")
rest(NOTE_DURATION_QUAVER * 1.05)
robot_delta.screen.show_emoji(SURPRISED)
Thread(triplet_pump, args=(robot_beta, "D5"))
Thread(triplet_pump, args=(robot_gamma, "F#5"))
Thread(triplet_pump_lead, args=(robot_delta, ))
rest(NOTE_DURATION_CROTCHET * 4)
robot_beta.screen.hide_emoji()
robot_gamma.screen.hide_emoji()
robot_delta.screen.hide_emoji()
quaver(robot_alpha, "D5")
robot_beta.screen.show_emoji(SURPRISED)
line2_pump(robot_beta)
wait(NOTE_DURATION_QUAVER * 1.05, MSEC)
line2_lead(robot_alpha)
robot_gamma.screen.show_emoji(SURPRISED)
Thread(line2_pump, args=(robot_gamma,))
Thread(line2_pump_harmony1, args=(robot_beta,))
rest(NOTE_DURATION_CROTCHET * 3)
quaver(robot_alpha, "D5")
robot_delta.screen.show_emoji(SURPRISED)
Thread(triplet_crotchet, args=(robot_beta, "D5", "D5", "D5"))
Thread(triplet_crotchet, args=(robot_gamma, "F#5", "F#5", "F#5"))
Thread(triplet_crotchet, args=(robot_delta, "A5", "A5", "A5"))
rest(NOTE_DURATION_CROTCHET)
robot_beta.screen.hide_emoji()
robot_gamma.screen.hide_emoji()
triplet_crotchet(robot_delta, "A5", "G5", "F#5")
quaver(robot_delta, "F#5")
quaver(robot_delta, "E5")
rest(NOTE_DURATION_QUAVER)
semiquaver(robot_delta, "E5")
semiquaver(robot_delta, "E5")
triplet_crotchet(robot_delta, "E5", "E5", "E5")
crotchet(robot_delta, "E5")
robot_delta.screen.hide_emoji()
def buildup(support, diva, backup1, backup2):
support.screen.show_emoji(SURPRISED)
Thread(hum, args=(backup1, "C5", NOTE_DURATION_CROTCHET * 2, EMBARRASSED))
Thread(hum, args=(backup2, "E5", NOTE_DURATION_CROTCHET * 2, EMBARRASSED))
crotchet(support, "E5")
crotchet(support, "G5")
rest(NOTE_DURATION_CROTCHET * 0.75)
support.screen.hide_emoji()
diva.screen.show_emoji(SURPRISED)
crotchet(diva, "C6")
crotchet(diva, "B5")
rest(NOTE_DURATION_CROTCHET * 0.75)
diva.screen.hide_emoji()
support.screen.show_emoji(SURPRISED)
Thread(hum, args=(backup1, "D5", NOTE_DURATION_CROTCHET * 2, SURPRISED))
Thread(hum, args=(backup2, "B5", NOTE_DURATION_CROTCHET * 2, SURPRISED))
crotchet(support, "D5")
crotchet(support, "G5")
rest(NOTE_DURATION_CROTCHET * 0.75)
support.screen.hide_emoji()
diva.screen.show_emoji(SURPRISED)
crotchet(diva, "E6")
crotchet(diva, "D6")
rest(NOTE_DURATION_CROTCHET * 0.75)
diva.screen.hide_emoji()
support.screen.show_emoji(SURPRISED)
Thread(hum, args=(backup1, "D5", NOTE_DURATION_CROTCHET, EMBARRASSED))
Thread(hum, args=(backup2, "F#5", NOTE_DURATION_CROTCHET, EMBARRASSED))
crotchet(support, "F#5")
crotchet(support, "A5")
rest(NOTE_DURATION_CROTCHET * 0.75)
support.screen.hide_emoji()
diva.screen.show_emoji(SURPRISED)
Thread(hum, args=(backup1, "G5", NOTE_DURATION_QUAVER, SHOCKED))
Thread(hum, args=(backup2, "D5", NOTE_DURATION_QUAVER, SHOCKED))
crotchet(diva, "D6")
quaver(diva, "C6")
rest(NOTE_DURATION_CROTCHET * 0.75)
Thread(hum, args=(backup1, "G5", NOTE_DURATION_CROTCHET, SURPRISED))
Thread(hum, args=(backup2, "E5", NOTE_DURATION_CROTCHET, SURPRISED))
quaver(diva, "C6")
crotchet(diva, "B5")
rest(NOTE_DURATION_CROTCHET * 1.5)
diva.screen.hide_emoji()
support.screen.show_emoji(SURPRISED)
crotchet(support, "F#5")
Thread(hum, args=(backup1, "C5", NOTE_DURATION_CROTCHET * 2, EMBARRASSED))
Thread(hum, args=(backup2, "E5", NOTE_DURATION_CROTCHET * 2, EMBARRASSED))
crotchet(support, "E5")
crotchet(support, "G5")
rest(NOTE_DURATION_CROTCHET)
support.screen.hide_emoji()
diva.screen.show_emoji(SURPRISED)
crotchet(diva, "C6")
crotchet(diva, "B5")
rest(NOTE_DURATION_CROTCHET * 0.75)
diva.screen.hide_emoji()
support.screen.show_emoji(SURPRISED)
Thread(hum, args=(backup1, "D5", NOTE_DURATION_CROTCHET * 2, SHOCKED))
Thread(hum, args=(backup2, "B5", NOTE_DURATION_CROTCHET * 2, SHOCKED))
crotchet(support, "D5")
crotchet(support, "G5")
rest(NOTE_DURATION_CROTCHET * 0.75)
support.screen.hide_emoji()
diva.screen.show_emoji(SURPRISED)
crotchet(diva, "E6")
crotchet(diva, "D6")
rest(NOTE_DURATION_CROTCHET * 0.75)
diva.screen.hide_emoji()
support.screen.show_emoji(SURPRISED)
Thread(hum, args=(backup1, "D5", NOTE_DURATION_CROTCHET * 3, TIRED))
Thread(hum, args=(backup2, "F#5", NOTE_DURATION_CROTCHET * 3, TIRED))
crotchet(support, "F#5")
rest(NOTE_DURATION_CROTCHET * 0.25)
crotchet(support, "A5")
rest(NOTE_DURATION_CROTCHET * 0.25)
crotchet(support, "D6")
support.screen.hide_emoji()
def chorus(diva, support, backup1, backup2):
diva.screen.show_emoji(SURPRISED)
triplet_crotchet(diva, "B5", "B5", "E6")
rest(NOTE_DURATION_CROTCHET * 0.75)
diva.screen.show_emoji(SHOCKED)
backup1.screen.show_emoji(EMBARRASSED)
backup2.screen.show_emoji(EMBARRASSED)
Thread(quaver, args=(diva, "E6",))
Thread(quaver, args=(backup1, "B5",))
Thread(quaver, args=(backup2, "G5",))
rest(NOTE_DURATION_CROTCHET * 0.75)
diva.screen.show_emoji(SURPRISED)
Thread(quaver, args=(diva, "E6",))
Thread(quaver, args=(backup1, "B5",))
Thread(quaver, args=(backup2, "G5",))
rest(NOTE_DURATION_CROTCHET * 0.75)
diva.screen.show_emoji(SHOCKED)
Thread(quaver_string, args=(diva, ["E6", "B5", "B5", "D6"]))
Thread(quaver, args=(backup1, "B5",))
Thread(quaver, args=(backup2, "G5",))
rest(NOTE_DURATION_CROTCHET * 0.75)
crotchet(diva, "D6")
rest(NOTE_DURATION_CROTCHET * 0.75)
crotchet(diva, "A5")
rest(NOTE_DURATION_CROTCHET * 0.75)
diva.screen.show_emoji(FEAR)
Thread(hum, args=(backup1, "A5", NOTE_DURATION_CROTCHET * 2, SURPRISED))
Thread(hum, args=(backup2, "F#5", NOTE_DURATION_CROTCHET * 2, SURPRISED))
Thread(spin, args=(backup1, RIGHT))
Thread(spin, args=(backup2, LEFT))
triplet_quaver(diva, "D6", "D6", "D6")
triplet_quaver(diva, "D6", "D6", "C6")
rest(NOTE_DURATION_CROTCHET * 0.1)
diva.screen.show_emoji(EMBARRASSED)
Thread(hum, args=(backup1, "G5", NOTE_DURATION_CROTCHET, EMBARRASSED))
Thread(hum, args=(backup2, "D5", NOTE_DURATION_CROTCHET, EMBARRASSED))
quaver_string(diva, ["C6", "B5"])
rest(NOTE_DURATION_CROTCHET)
diva.screen.show_emoji(FEAR)
Thread(hum, args=(backup1, "A5", NOTE_DURATION_CROTCHET * 2, SURPRISED))
Thread(hum, args=(backup2, "F#5", NOTE_DURATION_CROTCHET * 2, SURPRISED))
Thread(spin, args=(backup1, RIGHT))
Thread(spin, args=(backup2, LEFT))
triplet_quaver(diva, "D6", "D6", "D6")
triplet_quaver(diva, "D6", "D6", "C6")
rest(NOTE_DURATION_CROTCHET * 0.1)
diva.screen.show_emoji(EMBARRASSED)
Thread(hum, args=(backup1, "G5", NOTE_DURATION_CROTCHET, EMBARRASSED))
Thread(hum, args=(backup2, "D5", NOTE_DURATION_CROTCHET, EMBARRASSED))
quaver_string(diva, ["C6", "B5"])
rest(NOTE_DURATION_CROTCHET)
diva.screen.hide_emoji()
support.screen.show_emoji(SURPRISED)
triplet_crotchet(support, "A5", "B5", "G5")
rest(NOTE_DURATION_CROTCHET * 1.5)
support.screen.hide_emoji()
diva.screen.show_emoji(SURPRISED)
Thread(hum, args=(backup1, "G5", NOTE_DURATION_CROTCHET * 4, SURPRISED))
Thread(hum, args=(backup2, "B5", NOTE_DURATION_CROTCHET * 4, SURPRISED))
crotchet(diva, "E6")
rest(NOTE_DURATION_CROTCHET * 0.75)
crotchet(diva, "E6")
rest(NOTE_DURATION_CROTCHET * 0.75)
diva.screen.show_emoji(SHOCKED)
backup1.screen.show_emoji(DISGUST)
backup2.screen.show_emoji(DISGUST)
triplet_crotchet(diva, "G6", "F#6", "E6")
rest(NOTE_DURATION_CROTCHET * 0.75)
diva.screen.show_emoji(SURPRISED)
crotchet(diva, "D6")
rest(NOTE_DURATION_CROTCHET * 0.75)
crotchet(diva, "A5")
rest(NOTE_DURATION_CROTCHET)
diva.screen.hide_emoji()
support.screen.show_emoji(FEAR)
Thread(hum, args=(backup1, "A5", NOTE_DURATION_CROTCHET * 2, SURPRISED))
Thread(hum, args=(backup2, "F#5", NOTE_DURATION_CROTCHET * 2, SURPRISED))
triplet_quaver(support, "D6", "D6", "D6")
triplet_quaver(support, "D6", "D6", "C6")
rest(NOTE_DURATION_CROTCHET * 0.25)
support.screen.hide_emoji()
support.screen.show_emoji(SURPRISED)
Thread(hum, args=(backup1, "G5", NOTE_DURATION_CROTCHET, EMBARRASSED))
Thread(hum, args=(backup2, "D5", NOTE_DURATION_CROTCHET, EMBARRASSED))
quaver_string(support, ["C6", "B5"])
rest(NOTE_DURATION_CROTCHET)
support.screen.hide_emoji()
diva.screen.show_emoji(FEAR)
Thread(hum, args=(backup1, "A5", NOTE_DURATION_CROTCHET * 2, SURPRISED))
Thread(hum, args=(backup2, "F#5", NOTE_DURATION_CROTCHET * 2, SURPRISED))
triplet_quaver(diva, "D6", "D6", "D6")
triplet_quaver(diva, "D6", "D6", "C6")
rest(NOTE_DURATION_CROTCHET * 0.25)
diva.screen.show_emoji(SURPRISED)
Thread(hum, args=(backup1, "G5", NOTE_DURATION_CROTCHET, EMBARRASSED))
Thread(hum, args=(backup2, "D5", NOTE_DURATION_CROTCHET, EMBARRASSED))
quaver_string(diva, ["C6", "B5"])
rest(NOTE_DURATION_CROTCHET)
diva.screen.hide_emoji()
support.screen.show_emoji(SURPRISED)
triplet_crotchet(support, "A5", "B5", "G5")
support.screen.hide_emoji()
# def line1_fill_harmony_top(robot, direction):
# robot.screen.show_emoji(SHOCKED, direction)
# wait(NOTE_DURATION_QUAVER, MSEC)
# crotchet(robot, "F#5")
# crotchet(robot, "E5")
# crotchet(robot, "G5")
# def line1_fill_harmony_bottom(robot, direction):
# robot.screen.show_emoji(SHOCKED, direction)
# wait(NOTE_DURATION_QUAVER, MSEC)
# crotchet(robot, "D5")
# crotchet(robot, "E5")
# crotchet(robot, "E5")
# Example usage:
if __name__ == "__main__":
robot_alpha = Robot("192.168.1.3")
robot_beta = Robot("192.168.1.4")
robot_gamma = Robot("192.168.1.5")
robot_delta = Robot("192.168.1.6")
robot_alpha.screen.hide_emoji()
robot_beta.screen.hide_emoji()
robot_gamma.screen.hide_emoji()
robot_delta.screen.hide_emoji()
phrase1(robot_alpha, robot_beta, robot_gamma, robot_delta)
rest(NOTE_DURATION_CROTCHET * 2)
phrase2(robot_alpha, robot_beta, robot_gamma, robot_delta)
rest(NOTE_DURATION_CROTCHET * 2)
buildup(robot_alpha, robot_delta, robot_beta, robot_gamma)
rest(NOTE_DURATION_CROTCHET * 2)
chorus(robot_delta, robot_alpha, robot_beta, robot_gamma)
rest(NOTE_DURATION_CROTCHET * 2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment