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
| Flag | Type | Default | Meaning |
|---|---|---|---|
--tempo | text | auto | Tempo override in quarter notes per minute; auto follows the score's tempo marks (120 when none) |
--repeats | on|off | on | Unroll repeats and first/second endings |
--dynamics | on|off | on | Map dynamics (pp..ff) to velocities |
--articulation | on|off | on | Map 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 |
--humanize | percent | 0% | Random timing (up to ±20 ms) and velocity (up to ±12) variation, seeded by --seed |
--swing | percent | 0% | Delay off-beat eighths: 100% moves them to the triplet position (2:1) |
--instrument-map | text | — | Programs per part, e.g. "P1=piano,P2=strings" (GM names, short names, or numbers 0-127) |
--click | on|off | off | Add 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
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Processing failed |
| 2 | Usage or parameter error |
| 3 | Input missing or unreadable |
| 4 | Unsupported format or codec |
| 5 | Model not cached and downloads disabled |
| 6 | Model download or verification failed |
| 8 | Cancelled |
| 10 | Network error |
| 70 | Internal error (bug) |
Common mistakes
- Forgetting that outputs are never overwritten: pass
--overwriteor a new-opath when re-running. - Percentages accept
80%or the fraction0.8; a bare80means 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"}}