The riff that shouted the name, in strict sixteenths.
1# Techno Syndrome (Mortal Kombat, 1993) for the RouterOS beeper2# https://lab.glossema.dev/play/mortal-kombat3# One speaker, one tone at a time. 130 BPM, strict sixteenths, A minor.45# --- Instrument -------------------------------------------------------------6# Equal temperament, A4 = 440 Hz, integers only.7:globalnotes{"A2"=110;"D3"=147;"E3"=165;8"A4"=440;"C5"=523;"D5"=587;"E5"=659};910# s = sixteenth, e = eighth, q = quarter, h = half. The gap is added after11# every note so repeated sixteenths articulate instead of smearing.12:globaldurs{"s"=95ms;"e"=210ms;"q"=440ms;"h"=900ms};13:globalgap 20ms;1415# Octave switch: 1 for the hook, 2 when it comes back an octave up.16:globaloct 1;1718# One note. "-" is a rest: it keeps the clock and sounds nothing.19:globalplaydo={20:globalnotes;21:globaldurs;22:globalgap;23:globaloct;24:locald($durs->$2);25:if($1="-")do={26:delay($d+$gap);27 }else={28:beepfrequency=(($notes->$1)*$oct)length=$d;29:delay($d+$gap);30 }31}3233# --- Score ------------------------------------------------------------------34# The shouted name: three low notes, then air.35:localshout{"A2:e";"A2:e";"E3:h";"-:q"};3637# The riff: two bars of sixteenths circling A, C, D and E.38:localriff{39"A4:s";"A4:s";"A4:s";"A4:s";"A4:s";"A4:s";"C5:s";"C5:s";40"D5:s";"D5:s";"C5:s";"C5:s";"A4:s";"A4:s";"A4:s";"A4:s";41"A4:s";"A4:s";"A4:s";"A4:s";"A4:s";"A4:s";"C5:s";"C5:s";42"D5:s";"D5:s";"E5:s";"E5:s";"D5:s";"D5:s";"C5:s";"C5:s"43};4445# The hook that sings over it.46:localhook{47"A4:e";"C5:e";"D5:q";"C5:e";"A4:e";"E5:h";"-:e";48"A4:e";"C5:e";"D5:q";"E5:e";"D5:e";"C5:e";"A4:h"49};5051# --- Shout ------------------------------------------------------------------52:put"Shout";53:foreachevin=$shoutdo={54:localc[:find$ev":"];55:localnm[:pick$ev 0 $c];56:localdu[:pick$ev($c+ 1)[:len$ev]];57 $play$nm$du;58}5960# --- Riff -------------------------------------------------------------------61:put"Riff";62:forifrom=1 to=3 do={63:foreachevin=$riffdo={64:localc[:find$ev":"];65:localnm[:pick$ev 0 $c];66:localdu[:pick$ev($c+ 1)[:len$ev]];67 $play$nm$du;68 }69}70:foreachevin=$hookdo={71:localc[:find$ev":"];72:localnm[:pick$ev 0 $c];73:localdu[:pick$ev($c+ 1)[:len$ev]];74 $play$nm$du;75}7677# --- Drop -------------------------------------------------------------------78# One bar of rest: sixteen sixteenths of 115 ms at 130 BPM.79:put"Drop";80:localbar(115ms * 16);81:delay$bar;8283# --- Riff again -------------------------------------------------------------84:put"Riff again";85:forifrom=1 to=2 do={86:foreachevin=$riffdo={87:localc[:find$ev":"];88:localnm[:pick$ev 0 $c];89:localdu[:pick$ev($c+ 1)[:len$ev]];90 $play$nm$du;91 }92}93:setoct 2;94:foreachevin=$hookdo={95:localc[:find$ev":"];96:localnm[:pick$ev 0 $c];97:localdu[:pick$ev($c+ 1)[:len$ev]];98 $play$nm$du;99}100:setoct 1;
/
NoteFreqLine
On the router: paste the script into a terminal, or upload the file and run it.