Skip to content

User Guide

RMT Compose is a composition tool where every note is an expression, not a coordinate. A note's pitch, start time and duration are written as ratios and references to other notes, so a change propagates through everything that depends on it.

Start with Getting Started if you have not opened the app yet. This guide covers what each part of the interface does and how to work with it.

Interface

  • Workspace — the canvas: navigation, selection, and every drag gesture
  • Top Bar — transport, view controls, the settings gear, the "+" menu
  • Module Bar — the library of draggable modules
  • Note Widget — read and edit a note's expressions
  • Settings — the five-tab panel behind the gear
  • Themes & Appearance — presets and per-colour overrides
  • Keyboard Shortcuts — the complete key and gesture list
  • Mobile — the touch gesture set on phones and tablets

Working with Notes

Tuning Systems

Modules

Playback

Quick reference

Expression basics

Expressions are written in the DSL. base is the BaseNote; [N] is the note with id N — the number drawn in brackets at the top-left of every note rectangle.

base.f                  # the BaseNote's frequency
[3].f * (3/2)           # a perfect fifth above note 3
[3].t + [3].d           # starts exactly when note 3 ends
beat(base) * 2          # two beats long

Property shortnames:

PropertyWrite it as
frequencyf, freq, frequency
startTimet, s, start, startTime
durationd, dur, duration
tempotempo
beatsPerMeasurebpm, beatsPerMeasure
measureLengthml, measureLength

Common intervals

Multiply a frequency by a ratio.

IntervalRatioExpression
Unison1/1base.f
Minor third6/5base.f * (6/5)
Major third5/4base.f * (5/4)
Perfect fourth4/3base.f * (4/3)
Perfect fifth3/2base.f * (3/2)
Octave2/1base.f * 2

Equal-temperament steps

^ is the power operator. One step up from the previous note:

SystemStep expression
12-TET[1].f * 2 ^ (1/12)
19-TET[1].f * 2 ^ (1/19)
31-TET[1].f * 2 ^ (1/31)
Bohlen-Pierce[1].f * 3 ^ (1/13)

These are the expressions the shipped Scale Systems modules actually use.

Legacy JavaScript syntax

Older modules store expressions as method chains. They still load and still evaluate.

javascript
module.baseNote.getVariable('frequency').mul(new Fraction(3, 2))
module.getNoteById(3).getVariable('startTime').add(module.getNoteById(3).getVariable('duration'))

Keyboard and gestures

InputAction
Ctrl/Cmd + ZUndo
Ctrl/Cmd + Y or Ctrl/Cmd + Shift + ZRedo
Wheel over the canvasZoom
Drag empty canvasPan
Shift + drag empty canvasMarquee-select notes
Shift + click a noteToggle it in or out of the selection
Shift + click PlayLoop playback
Long-press (touch, 500 ms)The touch stand-in for Shift

The full list, including what each Escape does, is on the Keyboard Shortcuts page.

Released under the MIT License