Skip to content

Musical Events

Musical Events define what OpenScofo listens for. Write one event per line, and indent any associated actions below it using one tab (or four spaces).

NOTE C4 1
    sendto delay [1000]

Event Syntax Reference

Event Purpose Syntax Example Remarks
NOTE Single pitch NOTE <PITCH> <DURATION> NOTE C4 1 Pitch name or MIDI number.
CHORD Simultaneous pitches CHORD (<PITCH...>) <DURATION> CHORD (C4 E4 G4) 2 For chords and stable multiphonics.
TRILL Alternating pitches TRILL (<PITCH...>) <DURATION> TRILL (D4 E4) 4 For trills and tremolos.
GLISS Ordered pitch trajectory GLISS (<PITCH...>) <DURATION> GLISS (C4 C#4 D4 D#4 E4) 2 Glissando in quarter-tone steps between written pitches.
REST Silence REST <DURATION> REST 1 Keeps score time moving.
PTECH Pitched technique PTECH <LABEL> <PITCH> <DURATION> PTECH pizz C4 1 For extended techniques with pitch. Check AI!
UTECH Unpitched technique UTECH <LABEL> <DURATION> UTECH jet-whistle 2 For extended techniques without pitch. Check AI!

Example

TRILL, PTECH, and UTECH use the strongest current internal observation, without an ordering constraint. UTECH uses alternative technique labels. PTECH uses alternative technique labels or its expected pitch. GLISS expands each interval into an ordered chain of quarter-tone (0.5 MIDI) steps during score parsing. For example, GLISS (C4 G4) 2 creates 15 pitch microstates from MIDI 60 through 67, including both endpoints. Descending intervals use descending steps; shared endpoints and consecutive repeated pitches appear once. These microstates share the event's overall duration equally by default, and its final internal state is absorbing until the outer duration model exits the event.

NOTE, CHORD, PTECH, and UTECH do not use silence as an internal observation. After these events, OpenScofo inserts an optional Markov silence state before the next sounded event in the same section. The follower can go directly to that event for legato playing, or enter silence and wait for sound to return. No extra state is inserted before an explicit REST, at a section boundary, or after the final event.

These unscored silence states have geometric occupancy, following the distinction between scored semi-Markov events and atemporal Markov events in Cont's hybrid model. OpenScofo currently uses equal probabilities for taking/bypassing the silence and for staying/leaving it; these numerical priors are implementation defaults, not values prescribed by Cont. A gap adds no scored beats, retains the preceding event's score position, has no score actions, and does not trigger a tempo update. Explicit REST events retain their written durations and score positions.

State lists include these internal states, so state indices can differ from score positions. Python and Lua expose inter_event_silence to identify them. Audio-state listeners can report silence with the preceding event's score position while the follower occupies a gap.

BPM 60

NOTE C4 1
    sendto delay [1]

CHORD (E4 G4 B4) 2
    sendto reverb [0.8]

PTECH pizz C4 1
    sendto sample [start pizz_echo]

TIMEDEVENT and LUAEVENT

TIMEDEVENT and LUAEVENT are planned but not implemented.

Pitch and Notation Conventions

Use this page as a lookup for pitch names, MIDI pitches, durations, and comments.

Pitch

Form Example Meaning
Pitch name C4, F#4, Bb3 Scientific pitch notation; C4 is middle C.
Quarter-tone C+4, D-4 Microtonal/Quarter-tone sharp / flat.
Compound accidental #+, b-, ##, bb Sharp+quarter, flat+quarter, double sharp, double flat.
MIDI 60, 61, 60.5 60 is C4; decimals allow microtones.

Durations

Durations are beats relative to the current BPM.

Value Meaning when = 100
2 half note ()
1.5 Dotted quarter ()
1 quarter note ()
0.75 dotted eighth ()
0.5 eighth note ()
0.25 sixteenth note ()

Be carefull with Compound time signature (6/8, 9/8, etc...). If you use = 80, the DURATION for will be 0.333.

Comments

// one line

/*
multiple
lines
*/

Fractions not supported

Fractions such as (1/2) are not supported. Write tied notes as one combined duration.