# Glossema: a score for one speaker # https://lab.glossema.dev/play/glossema-intro # D Dorian, 138 bpm. The seed: G falls to D. The theme: G D A F. :local beat 434ms; :global notes { "D3"=147; "E3"=165; "F3"=175; "G3"=196; "A3"=220; "B3"=247; "C4"=262; "D4"=294; "Eb4"=311; "E4"=330; "F4"=349; "F#4"=370; "G4"=392; "A4"=440; "B4"=494; "C5"=523; "D5"=587; "E5"=659 }; :global durs { "w"=($beat * 4); "h"=($beat * 2); "q"=$beat; "e"=($beat / 2) }; # $play "NOTE:dur" sounds one note; "-" is a rest :global play do={ :global notes; :global durs; :local cut [:find $1 ":"]; :local note [:pick $1 0 $cut]; :local key [:pick $1 ($cut + 1) [:len $1]]; :local len ($durs->$key); :if ($note != "-") do={ :beep frequency=($notes->$note) length=$len; } :delay ($len + 20ms); } # 1. Open: near silence; the seed, once, alone :put "Open"; :local open {"-:h"; "G4:q"; "-:e"; "D4:h"; "-:h"}; :foreach n in=$open do={ $play $n; } # 2. Voices: the theme, its answer a fifth up, its shadow an octave down, then woven :put "Voices"; :local voices { "G4:q"; "D4:e"; "A4:e"; "F4:h"; "-:q"; "D5:q"; "A4:e"; "E5:e"; "C5:h"; "-:q"; "G3:q"; "D3:e"; "A3:e"; "F3:h"; "-:q"; "G4:e"; "G3:e"; "D4:e"; "D3:e"; "A4:e"; "A3:e"; "F4:e"; "F3:e"; "G4:e"; "D5:e"; "D4:e"; "A4:e"; "A4:e"; "E5:e"; "F4:e"; "C5:e"; "G3:e"; "G4:e"; "D5:e"; "D3:e"; "D4:e"; "A4:e"; "A3:e"; "A4:e"; "E5:e"; "F3:e"; "F4:e"; "C5:e"; "-:q" }; :foreach n in=$voices do={ $play $n; } # 3. Reveal: F becomes F sharp; a rising line climbs through the theme :put "Reveal"; :local reveal { "G4:q"; "D4:e"; "A4:e"; "F#4:h"; "D4:e"; "E4:e"; "F#4:e"; "G4:e"; "A4:e"; "B4:e"; "C5:e"; "D5:e"; "G4:e"; "A4:e"; "D4:e"; "B4:e"; "A4:e"; "C5:e"; "F#4:e"; "D5:e"; "G4:q"; "D4:e"; "A4:e"; "F#4:q"; "A4:q"; "D5:h" }; :foreach n in=$reveal do={ $play $n; } # 4. Form: the rhythm alone on one pitch, then the pitches come back one by one :put "Form"; :local form { "D4:q"; "D4:e"; "D4:e"; "D4:h"; "-:q"; "D4:q"; "D4:e"; "D4:e"; "D4:h"; "-:q"; "D4:q"; "D4:e"; "D4:e"; "F4:h"; "-:q"; "G4:q"; "D4:e"; "D4:e"; "F4:h"; "-:q"; "G4:q"; "D4:e"; "A4:e"; "F4:h"; "-:q" }; :foreach n in=$form do={ $play $n; } # 5. Doubt: E becomes E flat; the theme slows to bells, breathes, and a line falls, unresolved :put "Doubt"; :local doubt { "G4:h"; "D4:h"; "A4:h"; "F4:h"; "-:e"; "Eb4:h"; "D4:h"; "-:q"; "D5:h"; "C5:q"; "B4:q"; "A4:h"; "-:e"; "G4:q"; "F4:q"; "Eb4:q"; "D4:q"; "Eb4:w" }; :foreach n in=$doubt do={ $play $n; } # 6. Ink: octaves only, D in three registers, sparse :put "Ink"; :local ink { "D4:q"; "-:q"; "D5:q"; "-:q"; "D3:q"; "-:h"; "D4:q"; "D5:e"; "D3:e"; "D4:h"; "-:q"; "D3:q"; "D4:e"; "D5:e"; "D3:h"; "-:h" }; :foreach n in=$ink do={ $play $n; } # 7. Read: the theme rebuilt note by note, then one unbroken run rising to a cadence :put "Read"; :local read { "G4:h"; "-:h"; "G4:q"; "D4:q"; "-:h"; "G4:q"; "D4:e"; "A4:e"; "-:h"; "G4:q"; "D4:e"; "A4:e"; "F4:h"; "G4:e"; "D4:e"; "A4:e"; "F4:e"; "A4:e"; "E4:e"; "B4:e"; "G4:e"; "D5:e"; "A4:e"; "E5:e"; "C5:e"; "A4:q"; "G4:q"; "F4:q"; "E4:q"; "D4:h" }; :foreach n in=$read do={ $play $n; } # 8. Coda: the seed once more; G falls to D and stays :put "Coda"; :local coda {"-:q"; "G4:h"; "-:e"; "D4:w"; "D4:w"}; :foreach n in=$coda do={ $play $n; }