Language Features

Note: A musical note. 7 octaves are available.

C3
Eb2
G#7

Notelist: A list of notes. Together this list of notes forms a chord. (6 notes maximum).

C2, E2, G2
C4, Eb4, G#3

A Notegroup is a group of notelists (or conceptually an array of notelists). Each notelist is separated by a vertical line.

Bb3|G#2, A2

Beat: A number of beats. A whole number followed by the character 'b'.

1b
20b

Duration: An expression that represents the amount of beats to play or hold for.

for 1b
for 2b

Playable: A note or a notelist, followed by a duration.

C1, F1, E1, D1, for 1b
D1 for 2b

play: A command to play a note or notelist for a given duration. Play commands can also take a loop customization.

play C1, F1, E1, D1, for 1b
play D1 for 2b
play E3 for 2b loop for 5

rest: A command to rest for a given duration.

rest for 1b
rest for 2b

save: A command to save a variable (see above section on variables for more details). Only playabes and durations can be saved in variables.

save myplayable = E2 for 1b
save myduration = for 1b

update: A command for reassigning variables (see above section on variable reassignment for more details). Only playabes and durations can be saved in variables.

save myplayable = E2 for 1b
update myplayble = Eb2 for 2b
save mynotelist = G#4, Cb4
update mynotelist lshift 2

lshift: Shift a notelist left a number of semitones.

rshift: Shift a notelist right a number of semitones.

save mynotelist = D#4, C4
update mynotelist lshift 2
update mynotelist rshift 4

choose: used to choose a number of notes from a notelist. the syntax is: `choose digit from notelist

save mynote = choose 1 from C3, D3, E3, Fb3

select: used to select into (or index into) a noteslist or notegroup. the syntax is: `select digit from notelist

save mynote = select 0 from C3, D3, E3, Fb3

randint: used to generate a random integer in some range. the syntax is: randint digit to digit

save mydigit = randint 0 to 20

eval: used to evaluate a mathematical expression. the syntax is: eval somemathematicalexpression

save mydigit = eval 10 * (20 / 3) % 2

load: A command to load custom instruments into Handel (see above section on custom instruments for more details).

load someinst as instname

block: Used to declare a loop. (see above section on block loops for more details)

block
play Gb3 for 2b
rest for 2b
endblock loop for 10

chunk: Used to declare a procedure. (see above section on procedures for more details)

chunk mybassline
play G1 for 2b
endchunk

using: Used to prepend a list of paramaters for a chunk.

chunk mypiano using nicechord
play nicechord
endchunk

run: Used to run a chunk asynchronously (creating a new conceptual song track). (see above section on running procedures for more details).

run mypiano using E2, C#2 for 1b

call: Used to run a chunk synchronously (in the current conceptual song track). (see above section on running procedures for more details).

run mypiano using E2, C#2 for 1b

with: Used to customize a given run of a chunk. (see section on procedures above for more details)

run mybassline with bpm 115

bpm: a customization. beats per minute (bpms are best synced with values under 1000) for a run of a chunk.

loop: a customization. amount of times to loop for a run of a chunk (or block loop).

sound: a customization. instrument to use for a run of a chunk.

volume: a customization. percentage volume for a run of a chunk (0 - 100).

reverb: a customization. reverberation duration in miliseconds (>= 1) for a un of a chunk.

pan: a customization. amount to pan the sound of a run of a chunk (0 - 100). Note: 0 = hard-left, 50 = center, 100 = hard-right.

run mybassline with bpm 90, loop for 2, sound kick, volume 50, pan 25, reverb 10000

Sounds: possible sounds that can be used to customize a run of a chunk.

piano
guitar
synth
casio
kick
snare
hihat