1pub mod model;
6
7pub use model::arrange::{
8 AccordionAnalysis, AccordionBassMode, AccordionDroneOptions, AccordionDroneResult,
9 AccordionInversion, AccordionLossPolicy, AccordionMelodicVoice, AccordionPattern,
10 AccordionReductionDiagnostic, AccordionReductionOptions, AccordionReductionResult,
11 AccordionSourceMapping, AccordionSwingPolicy, ArrangeResult, GuidedAccordionOptions,
12 GuidedAccordionResult, GuidedArrangeDiagnostic, LayeredAccordionOptions,
13 LayeredAccordionResult, PartCandidate, PositionedAccordionChord, analyze_for_accordion,
14 arrange_for_accordion, arrange_for_accordion_with_options, arrange_with_drone,
15 arrange_with_explicit_chords, arrange_with_layers,
16};
17pub use model::arrange_presets::{
18 AccordionLayerConfig, AccordionLayerResult, AccordionLayerShuffleOptions,
19 AccordionPresetCapabilities, AccordionPresetConfig, AccordionPresetDescription,
20 AccordionPresetResult, AccordionPresetSelection, AccordionPreviousConfig,
21 AccordionShuffleOptions, accordion_preset_capabilities, arrange_accordion_layers,
22 arrange_accordion_preset, arrange_from_resolved_layers, arrange_from_resolved_preset,
23 shuffle_accordion_layers, shuffle_accordion_preset,
24};
25pub use model::authored_chords::{
26 AuthoredChordAnnotation, AuthoredChordDiagnostic, AuthoredChordOptions, AuthoredChordResult,
27 annotate_from_authored_chords,
28};
29pub use model::change_hint::{ChangeHint, ChangeScope};
30pub use model::chord_plan::{
31 BeatFraction, CHORD_PLAN_CONTRACT_VERSION, ChordPlan, ChordPlanCoverage, ChordPlanDiagnostic,
32 ChordPlanEntry, ChordPlanExtractionMode, ChordPlanExtractionOptions, ChordPlanExtractionResult,
33 ChordPlanOrigin, ChordPlanPosition, ChordPlanPresetResult, ChordPlanSource,
34 chord_plan_to_preset_selection, extract_chord_plan,
35};
36pub use model::chord_proposals::{
37 CHORD_PROPOSAL_CONTRACT_VERSION, CHORD_PROPOSAL_MAX_MEASURES, ChordChangedSpan,
38 ChordPresetAssessment, ChordPresetAssessmentResult, ChordProposalArrangementResult,
39 ChordProposalCandidate, ChordProposalDiagnostic, ChordProposalRequest, ChordProposalResult,
40 ResolvedChordProposal, SourceRangeViolation, arrange_from_chord_proposal, assess_chord_presets,
41 suggest_chord_plans,
42};
43pub use model::commands::{
44 AddHairpinCmd, AddMeasureCmd, AddNoteCmd, AddPartCmd, AddPedalCmd, AddPitchCmd, AddSpannerCmd,
45 AddStaffCmd, BatchCmd, Command, CommandStack, CycleEnharmonicSpellingCmd, DeleteMeasureCmd,
46 DeleteNoteCmd, DeletePartCmd, DeleteStaffCmd, DurationScale, ExchangeVoicesCmd,
47 ExplodeChordPitchesCmd, ExplodeVoicesCmd, ImplodeStavesCmd, JoinMeasuresCmd,
48 MoveOrCopyVoiceRangeCmd, NewScoreCmd, PasteRangeCmd, PasteScoreFragmentCmd, PasteVoiceCmd,
49 RealizeChordSymbolsCmd, RemoveScoreViewCmd, RemoveSpannerCmd, RemoveTrailingEmptyMeasuresCmd,
50 ReorderPartsCmd, ResequenceRehearsalMarksCmd, RespellScoreCmd, RespellScoreToKeyCmd,
51 RespellStaffRegionCmd, ScaleVoiceRangeCmd, ScoreFragmentPastePolicy, SetArpeggioCmd,
52 SetBarlineCmd, SetChordSymbolCmd, SetClefCmd, SetCrossStaffCmd, SetCueCmd, SetDurationCmd,
53 SetDynamicCmd, SetExpressionTextCmd, SetFiguredBassCmd, SetFingeringCmd, SetFingeringsCmd,
54 SetGlissandoCmd, SetGraceCmd, SetGuitarBendAlterCmd, SetGuitarBendCurveCmd,
55 SetGuitarTechniqueCmd, SetHarmonyRangeCmd, SetHarpPedalDiagramsCmd, SetHiddenCmd,
56 SetInstrumentDefinitionCmd, SetInstrumentIdCmd, SetKeySignatureCmd, SetLyricCmd,
57 SetMeasureInstrumentChangeCmd, SetMeasureTablatureChangeCmd, SetMeasureTextCmd, SetMetadataCmd,
58 SetMidMeasureClefsCmd, SetMidiInstrumentCmd, SetMultiRestCmd, SetNavigationMarkCmd,
59 SetNoteHeadCmd, SetNotePlacementCmd, SetObjectStyleOverridesCmd, SetOttavaCmd, SetPageBreakCmd,
60 SetPartGroupCmd, SetPartNameCmd, SetPercussionKitCmd, SetRehearsalMarkCmd,
61 SetScoreStyleOverridesCmd, SetScoreTextCmd, SetSectionBreakCmd, SetStaffPresentationCmd,
62 SetStemCmd, SetStringNumberCmd, SetSystemBreakCmd, SetSystemBreakIntervalCmd,
63 SetTabPositionCmd, SetTablatureConfigCmd, SetTechniqueTextCmd, SetTempoAtMeasureCmd,
64 SetTempoCmd, SetTimeSignatureCmd, SetTransposeCmd, SetTupletCmd, SetUnpitchedCmd, SetVoltaCmd,
65 SplitMeasureCmd, ToggleArticulationCmd, ToggleSlurCmd, ToggleTieCmd, ToggleTrillLineCmd,
66 TransposeStaffRegionCmd, TupletScalePolicy, UnrollRepeatsCmd, UpdateSpannerCmd,
67 UpsertScoreViewCmd, command_key, command_label,
68};
69pub use model::duration::Duration;
70pub use model::engine::{EngineHistory, HistoryConflict, HistoryRelation, ScoreEngine};
71pub use model::fragment::{
72 MIN_SUPPORTED_SCORE_FRAGMENT_CONTRACT_VERSION, SCORE_FRAGMENT_CONTRACT_VERSION, ScoreFragment,
73 ScoreFragmentCrossStaffTarget, ScoreFragmentDiagnostic, ScoreFragmentMeasure,
74 ScoreFragmentMeasureAttributes, ScoreFragmentSelection, ScoreFragmentVoice,
75 extract_score_fragment,
76};
77pub use model::free_bass::{
78 AccordionHandLimits, FreeBassDiagnostic, FreeBassOptions, FreeBassPitchMapping, FreeBassResult,
79 split_for_free_bass,
80};
81pub use model::gm::{drum_name, program_name};
82pub use model::harmony::{detect_chord, roman_numeral, roman_numeral_figured};
83pub use model::interval::{Interval, IntervalQuality};
84pub use model::melodic_insert::{
85 MelodicInsertion, MelodicInsertionCandidate, MelodicInsertionContext,
86 MelodicInsertionContextResult, MelodicInsertionDiagnostic, MelodicInsertionKind,
87 MelodicInsertionOptions, MelodicInsertionOutcome, MelodicInsertionResult,
88 MelodicInsertionSelection, MelodicInsertionSource, MelodicLocalKey, MelodicSourceMapping,
89 insert_melodic_notes, insert_melodic_notes_with_context,
90};
91pub use model::musical_diff::{
92 MusicalChange, MusicalChangeKind, MusicalComparisonDiagnostic, MusicalComparisonOptions,
93 MusicalComparisonResult, NoteCorrespondence, StructurePolicy, VoiceAddr, VoiceCorrespondence,
94 compare_musical_positions,
95};
96pub use model::notation::{
97 AccidentalDisplay, Articulation, Barline, BeamState, ChordBarre, ChordDefinition,
98 ChordDefinitionMember, ChordDegree, ChordSymbol, Clef, CrossStaff, Dynamic, FiguredBassFigure,
99 FiguredBassGroup, FingeringSelectionPolicy, GuitarTechnique, HairpinKind, KeySignature, Lyric,
100 NoteHead, OttavaKind, StyledText, TabPosition, TablatureConfig, TextStyle, TimeSignature,
101 TimeSymbol, TupletBoundary, TupletInfo, VerseLyric,
102};
103pub use model::omr::{
104 MAX_OMR_ANNOTATIONS, MAX_OMR_EVENTS_PER_MEASURE, MAX_OMR_MEASURES, MAX_OMR_PAGES,
105 OMR_PROPOSAL_CONTRACT_VERSION, OmrCommandPlan, OmrDiagnostic, OmrDiagnosticKind,
106 OmrMeasureProposal, OmrMeasureTarget, OmrNoteAnnotation, OmrNoteAnnotationProposal,
107 OmrNoteTarget, OmrPage, OmrProposal, OmrRegion, OmrRhythmicEvent, OmrUnresolvedItem,
108};
109pub use model::pitch::{Pitch, Step};
110pub use model::playback::{
111 DynamicTimeline, MAX_PLAYBACK_COMPARISON_EVENTS, MAX_TAB_PERFORMANCE_EVENTS, MetronomeConfig,
112 OFFLINE_RENDER_CONTRACT_VERSION, OfflineRenderDiagnostic, OfflineRenderDiagnosticKind,
113 OfflineRenderFormat, OfflineRenderFrameEvent, OfflineRenderManifest,
114 OfflineRenderMeasureAddress, OfflineRenderNavigationPolicy, OfflineRenderRequest,
115 OfflineRenderResult, OfflineRenderScope, OfflineRenderSemanticEventKind,
116 OfflineRenderSemanticFrameEvent, PLAYBACK_COMPARISON_CONTRACT_VERSION,
117 PLAYBACK_ROUTING_CONTRACT_VERSION, PLAYBACK_TIMING_CORPUS_CONTRACT_VERSION, PlaybackAuxSend,
118 PlaybackBusRoute, PlaybackEffectRoute, PlaybackEvent, PlaybackOptions, PlaybackPosition,
119 PlaybackRealizationProfile, PlaybackRoutingConfig, PlaybackRoutingManifest, PlaybackTimingCase,
120 PlaybackTimingCaseReport, PlaybackTimingCorpusReport, PlaybackTimingMismatch,
121 PlaybackTimingReport, PlaybackTimingTolerance, SharedUnisonPlaybackEvent,
122 TAB_PERFORMANCE_CONTRACT_VERSION, TAB_ROUND_TRIP_CONTRACT_VERSION,
123 TablaturePerformanceDiagnostic, TablaturePerformanceEvent, TablaturePerformanceReport,
124 TablatureRoundTripDiagnostic, TablatureRoundTripReport, build_offline_render_manifest,
125 build_playback_routing_manifest, coalesce_shared_unisons, compare_playback_timing,
126 compute_playback_position, evaluate_playback_timing_corpus, playback_fermata_pauses,
127 project_tablature_performance, tablature_round_trip_report, to_playback_events,
128 to_playback_events_bounded,
129};
130pub use model::repeat::measure_sequence;
131pub use model::scale::{Scale, ScaleKind};
132pub use model::score::{
133 GuitarBendPoint, HarpPedalDiagram, HarpPedalPosition, InstrumentDefinition, InstrumentRange,
134 Measure, MeasureLength, MetronomeMark, MidMeasureClef, MidiAftertouch, MidiControlChange,
135 MidiPitchBend, MidiProgramChange, NamedInstrumentChannel, NotationSpanner, NotationSpannerKind,
136 Note, NoteAddr, ObjectStyleOverride, ObjectStyleTarget, Part, PartGroup, PartGroupSymbol,
137 PercussionInstrument, RegionalTranspositionTarget, RespellPolicy, Score, ScoreChange,
138 ScoreMetadata, ScorePatch, ScoreSettings, ScoreStats, ScoreTemplate, ScoreView,
139 ScoreViewLayoutOverrides, Staff, StaffGroup, StaffKind, StaffNoteheadScheme, StaffPresentation,
140 StyleImportProvenance, TablatureFretMarkStyle, TablatureRhythmDisplay, TieSourceLocation,
141 TimedPedalDirection, ViewStaffKindOverride, ViewStaffRef, ViewStyle, ViewStyleOverride,
142 ViewStyleProperty, ViewTranspositionPolicy, VoiceChannelSwitch, VoltaBracket, apply_patch,
143 assign_tablature_positions, compute_beams, diff, measure_beats_remaining,
144 optimize_tablature_positions, respell_score, respell_score_to_key, respell_staff_region,
145 score_duration_secs, score_duration_secs_region, score_patch, staff_ottava_octave_shifts,
146 suggested_stem_up, transpose, transpose_checked, transpose_staff_region_checked,
147 tuplet_group_ranges, voice_duration_beats,
148};
149pub use model::structural_plan::{
150 STRUCTURAL_CHANGE_PLAN_CONTRACT_VERSION, StructuralChangeDiagnostic,
151 StructuralChangeDiagnosticKind, StructuralChangePlan, StructuralMeasureStructure,
152 plan_structural_change,
153};
154pub use model::validate::{
155 GuitarBendCurveValidationReason, InstrumentDefinitionValidationReason, InstrumentRangeKind,
156 ObjectStyleValidationReason, PercussionInstrumentValidationReason, ScoreViewValidationReason,
157 SpannerEndpoint, StaffPresentationValidationReason, TablatureValidationReason, ValidationError,
158 ValidationReport, ValidationWarning, validate,
159};
160
161pub const SCORE_SCHEMA_VERSION: u32 = 1;
163
164#[derive(Debug, thiserror::Error)]
165pub enum Error {
166 #[error("part index {0} out of range")]
167 PartNotFound(usize),
168 #[error("staff index {0} out of range")]
169 StaffNotFound(usize),
170 #[error("measure index {0} out of range")]
171 MeasureNotFound(usize),
172 #[error("note index {0} out of range")]
173 NoteNotFound(usize),
174 #[error("voice index {0} out of range")]
175 VoiceOutOfRange(usize),
176 #[error("{0}")]
177 InvalidCommand(String),
178 #[error("nothing to undo")]
179 NothingToUndo,
180 #[error("nothing to redo")]
181 NothingToRedo,
182 #[error("clipboard is empty")]
183 ClipboardEmpty,
184 #[error("cannot delete the last staff of a part")]
185 CannotDeleteLastStaff,
186 #[error("invalid patch: {0}")]
187 InvalidPatch(String),
188 #[error("score failed structural validation")]
189 InvalidScore,
190 #[error("engine history base score does not match the supplied score")]
191 HistoryBaseMismatch,
192 #[error("engine history is not a safe append-only extension")]
193 HistoryNotAppendable,
194 #[error("invalid playback comparison tolerance")]
195 InvalidPlaybackComparison,
196 #[error("invalid offline render request")]
197 InvalidOfflineRenderRequest,
198 #[error("invalid playback routing configuration")]
199 InvalidPlaybackRouting,
200 #[error("invalid playback timing corpus")]
201 InvalidPlaybackTimingCorpus,
202 #[error("playback comparison contains too many events ({0})")]
203 PlaybackComparisonTooLarge(usize),
204 #[error("tablature performance projection contains too many events ({0})")]
205 TabPerformanceTooLarge(usize),
206 #[error("tablature round-trip serialization failed: {0}")]
207 TabRoundTripSerialization(String),
208}