Edit score
edit_scoreApply one reversible musical operation, such as {"action":"set_pitch","note_ids":["n…"],"pitch":62}, to a score at its exact saved revision. Stale revisions and invalid note/mark IDs are rejected. Re-engraving and whole-score rhythm operations replace note IDs. No credits.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| revision | Yes | ||
| score_id | Yes | ||
| operation | Yes | For a fermata, update_mark {mark_id,offset_y} adjusts printed height in tenths (+10 = one staff space up; 0 resets); notes and playback stay unchanged. One object naming its action. Actions and their fields (? optional): entry: create_tuplet {note_id,actual 2..9,normal?}; replace_note {note_id,pitch|null,spelling?} (keeps exact slot); remove_tuplet {note_id} (needs following rests); paste_notes {source_note_ids,target_note_id} (complete groups, one part); set_tie {note_ids:[start,end],enabled} (adjacent equal pitches, held sound); set_slur {note_ids:[start,end],enabled} (printed); reflow_layout {}. notes: set_pitch {note_ids,pitch,spelling?} (a pitch named without its octave, "make it C", is the one nearest the note's current pitch: B4 -> C5, not C4; in the direction asked if any; say the pitch written); transpose {note_ids,semitones}; set_duration {note_ids,quarters} (one note, tied pair or chord); move_notes {note_ids,quarters ±} (any notes of one part, each in its voice); time: shift_time {measure,onset? quarters from bar start|note_id,quarters ±,part_id?,staff?} moves everything struck from that point on later or earlier (a late or early entry: one call, not note by note); earlier removes the beats just before the point and bars at the end it leaves empty. voices: set_voice {note_ids,voice 1..4 on their staff}; set_tie also between voices; set_beam {note_ids,beam join|break|none|auto}; set_stem {note_ids,stem up|down|flip|auto}; set_visibility {note_ids (rests)|measures,staff?,visible}. batch {operations:[...up to 30 of the note, time, voice and bar edits]}: one version, all or none. delete_notes {note_ids} replaces sounding notes with rests and clears selected rest symbols without shifting later notes; set_staff {note_ids|select,staff 1 upper|2 lower,clef? if asked} (hands); add_chord_tone {note_id,pitch,spelling?,velocity?}; fill_rest {rest_id,pitch,quarters?,velocity?,spelling?}. sound: set_velocity {note_ids,velocity 1..127}; set_dynamic {note_id,mark ppp..fff|sf|sfz|fp,velocity?}; set_timbre {part_id,program,part_name?}. writing: set_key {part_id?,fifths,mode} (respells the notes the key holds; pitches stay); set_clef {part_id?,staff?,clef,measures?} (no measures: the whole staff; "4": from bar 4 to the staff's next clef change; "4-6": those bars only); set_harmony_position {part_id,measure,index from 0,quarters from bar start}; engraving {title?,composer?,transcriber?,labels?:compact|full|none,page_size?:a4|letter} (paper size reflows this score and its PDF, preserves notes, does not guarantee one page); rebeam {}; reengrave {key?,program?,staff_split?,voices?,grid?,line?:single} (writes the notes again from the recording: rhythm spelling, voices and note IDs can change; not for page layout). page layout (pages, PDF and panel; notes and playback stay): layout {bars_per_system? 1..32, system_breaks? ["bar"] (start a line), page_breaks? ["bar"] (start a page), staff_size? 50..150 (% of default; smaller fits more per page), staff_spacing? 0..48, system_spacing? 0..48 (default 8), reset?:true}; null resets one field. The overview's layout lists each page's lines; check pages with review_score. MusicXML <print>/<scaling> are not read, except breaks in edited MusicXML. TAB: set_tablature {part_id?,view off|both|tab,tuning?,capo?,strings?}; set_string {note_ids,string|null} (1 = the top line); set_fret {note_ids,string,fret}. marks (saved score marks; kind words|rehearsal|metronome|dynamic|hairpin|fermata|octave (8va|8vb|15ma|15mb, note_id through end_note_id)): add_mark {kind,note_id|part_id+measure+quarters,text?,value?,end_note_id?,placement?}; update_mark {mark_id,kind?,text?,value?,placement?}; move_mark {mark_id,note_id?,end_note_id?}; delete_mark {mark_id}. whole score: transpose_score {interval as M2, -m3 or P8}; set_meter {beats,beat_type,pickup_quarters?}; scale_note_values {factor:2|0.5}; rewrite_rhythm {bpm,beats,beat_type,downbeat? second a bar starts: bars start there} (steady recording); rebeat {bpm,beats,beat_type,downbeat seconds,swing? 0.5..0.75} (wrong tracked piano beat); rebar_pickup {quarters}; set_pickup {enabled} (marks a short first bar, moves no barline); pad_measure {part_id,measure}; repair_bindings {}; undo {}; redo {}. bars (every part; numbers as printed): insert_measures {before "bar"|null=at end,count? 1..16}; delete_measures {from,to?}. recording alignment: set_recording_alignment {measure_id,visit?:1,anchors:[[zero-based quarter beats within bar,recording seconds],...]} (2..64 increasing points; [] clears). This affects comparison/listening, not written music or ordinary score playback. |