ferraus score play

Notation to a MIDI performance

Synopsis

ferraus score play <input> [options] [-o <output>]

What it does

Performs a score (MusicXML, MXL, MEI, ABC, LilyPond, score JSON, or MIDI) as a MIDI file: tempo marks or --tempo, repeats and endings unrolled, dynamics to velocity, articulations to note lengths, optional swing, humanize, program changes per part, and a click track.

Examples

Perform a MusicXML score as MIDI

ferraus score play song.musicxml -o song.mid

Swung performance at 96 bpm with a click

ferraus score play tune.abc --tempo 96 --swing 60% --click on -o tune.mid

Assign instruments per part

ferraus score play quartet.musicxml --instrument-map "P1=violin,P2=violin,P3=viola,P4=cello" -o quartet.mid

Options

FlagTypeDefaultMeaning
--tempotextautoTempo override in quarter notes per minute; auto follows the score's tempo marks (120 when none)
--repeatson|offonUnroll repeats and first/second endings
--dynamicson|offonMap dynamics (pp..ff) to velocities
--articulationon|offonMap articulations to note lengths: staccato 50%, staccatissimo 25%, tenuto and slurred (legato) 100%, other notes 95% (gap at most a 64th note); accents add velocity
--humanizepercent0%Random timing (up to ±20 ms) and velocity (up to ±12) variation, seeded by --seed
--swingpercent0%Delay off-beat eighths: 100% moves them to the triplet position (2:1)
--instrument-maptext—Programs per part, e.g. "P1=piano,P2=strings" (GM names, short names, or numbers 0-127)
--clickon|offoffAdd a metronome click track (channel 10)

Global options

Every command also accepts the global options (-o, --json, --dry-run, --overwrite, --progress, ...). See Global options.

Exit codes

CodeMeaning
0Success
1Processing failed
2Usage or parameter error
3Input missing or unreadable
4Unsupported format or codec
5Model not cached and downloads disabled
6Model download or verification failed
8Cancelled
10Network error
70Internal error (bug)

Common mistakes

  • Forgetting that outputs are never overwritten: pass --overwrite or a new -o path when re-running.
  • Percentages accept 80% or the fraction 0.8; a bare 80 means 80x, not 80%.

For models

  • MCP tool: ferraus_score_play
  • Schema: ferraus schema score play
  • Pipeline: { op: score play, args: { ... } } (flag names with _ instead of -)
  • fx stage: no
{"command": "score play", "defaults": {"tempo": "auto", "repeats": "on", "dynamics": "on", "articulation": "on", "humanize": "0%", "swing": "0%", "click": "off"}}