TuttiCodeTuttiCode guide

Melodies with do re mi

Write notes in solfège (do re mi fa sol la si) wherever a note name goes; strudel.cc gets letters.

Solfège is a note name

Wherever a note name goes, you can write its solfège name instead: do re mi fa sol la si. TuttiCode uses fixed do: do is always C, re is D, sol is G, whatever the key. so and ti work too (the same as sol and si).

note("do re mi fa sol la si do4")
Open in /TuttiCode

Only the name differs: note("do re mi") plays exactly what note("c d e") plays.

Sharps, flats and octaves

Add sharps, flats and octaves as you would to a letter: do#4, mib (E flat), sib3 (B flat), fa#. A name without an octave is in octave 3, like c. Capitals work too: Do, SOL.

note("<do4 mib4 sol4 sib4> [fa#3 la3]").s("piano")
Open in /TuttiCode

Scales and chords

Scale roots take solfège: .scale("re:minor"). Stack names with commas to play a chord.

n("0 2 4 <7 6>").scale("<re:dorian sol:mixolydian>")
Open in /TuttiCode
note("<[do3,mi3,sol3] [la2,do3,mi3] [fa2,la2,do3] [sol2,si2,re3]>").s("piano")
Open in /TuttiCode

Chord symbols (chord("C^7"), .voicings()) keep their letters: there do already means D diminished (D and o).

Where a word is not a note

In s() and sound() words are sound names, so s("do") looks for a sound called "do". n() is also a sample or soundfont index, so n("do") is a word too: write note("do"). Solfège means a pitch only in note() / .note(), .scale() roots, .mode() and .anchor(), and .add() / .sub() / .transpose() on notes.

Opening in strudel.cc

strudel.cc reads letter names only. "Open in strudel.cc" rewrites solfège to letters for you ("do re mi" becomes "c d e"), so the program plays the same there.