pub mod model;
pub use model::arrange::{
AccordionAnalysis, ArrangeResult, PartCandidate, analyze_for_accordion, arrange_for_accordion,
};
pub use model::change_hint::{ChangeHint, ChangeScope};
pub use model::commands::{
AddHairpinCmd, AddMeasureCmd, AddNoteCmd, AddPartCmd, AddPedalCmd, AddPitchCmd, AddSpannerCmd,
AddStaffCmd, BatchCmd, Command, CommandStack, CycleEnharmonicSpellingCmd, DeleteMeasureCmd,
DeleteNoteCmd, DeletePartCmd, DeleteStaffCmd, DurationScale, ExchangeVoicesCmd,
ExplodeChordPitchesCmd, ExplodeVoicesCmd, ImplodeStavesCmd, JoinMeasuresCmd,
MoveOrCopyVoiceRangeCmd, NewScoreCmd, PasteRangeCmd, PasteScoreFragmentCmd, PasteVoiceCmd,
RemoveScoreViewCmd, RemoveSpannerCmd, RemoveTrailingEmptyMeasuresCmd, ReorderPartsCmd,
ResequenceRehearsalMarksCmd, RespellScoreCmd, RespellScoreToKeyCmd, RespellStaffRegionCmd,
ScaleVoiceRangeCmd, ScoreFragmentPastePolicy, SetArpeggioCmd, SetBarlineCmd, SetChordSymbolCmd,
SetClefCmd, SetCrossStaffCmd, SetCueCmd, SetDurationCmd, SetDynamicCmd, SetExpressionTextCmd,
SetFiguredBassCmd, SetFingeringCmd, SetFingeringsCmd, SetGlissandoCmd, SetGraceCmd,
SetGuitarBendAlterCmd, SetGuitarBendCurveCmd, SetGuitarTechniqueCmd, SetHarmonyRangeCmd,
SetHarpPedalDiagramsCmd, SetInstrumentDefinitionCmd, SetInstrumentIdCmd, SetKeySignatureCmd,
SetLyricCmd, SetMeasureInstrumentChangeCmd, SetMeasureTablatureChangeCmd, SetMeasureTextCmd,
SetMetadataCmd, SetMidiInstrumentCmd, SetMultiRestCmd, SetNavigationMarkCmd, SetNoteHeadCmd,
SetNotePlacementCmd, SetObjectStyleOverridesCmd, SetOttavaCmd, SetPageBreakCmd,
SetPartGroupCmd, SetPartNameCmd, SetPercussionKitCmd, SetRehearsalMarkCmd,
SetScoreStyleOverridesCmd, SetScoreTextCmd, SetSectionBreakCmd, SetStaffPresentationCmd,
SetStemCmd, SetStringNumberCmd, SetSystemBreakCmd, SetSystemBreakIntervalCmd,
SetTabPositionCmd, SetTablatureConfigCmd, SetTechniqueTextCmd, SetTempoAtMeasureCmd,
SetTempoCmd, SetTimeSignatureCmd, SetTransposeCmd, SetTupletCmd, SetUnpitchedCmd, SetVoltaCmd,
SplitMeasureCmd, ToggleArticulationCmd, ToggleSlurCmd, ToggleTieCmd, ToggleTrillLineCmd,
TransposeStaffRegionCmd, TupletScalePolicy, UpdateSpannerCmd, UpsertScoreViewCmd, command_key,
command_label,
};
pub use model::duration::Duration;
pub use model::engine::{EngineHistory, HistoryConflict, HistoryRelation, ScoreEngine};
pub use model::fragment::{
MIN_SUPPORTED_SCORE_FRAGMENT_CONTRACT_VERSION, SCORE_FRAGMENT_CONTRACT_VERSION, ScoreFragment,
ScoreFragmentCrossStaffTarget, ScoreFragmentDiagnostic, ScoreFragmentMeasure,
ScoreFragmentMeasureAttributes, ScoreFragmentSelection, ScoreFragmentVoice,
extract_score_fragment,
};
pub use model::gm::{drum_name, program_name};
pub use model::harmony::{detect_chord, roman_numeral};
pub use model::interval::{Interval, IntervalQuality};
pub use model::notation::{
Articulation, Barline, BeamState, ChordBarre, ChordDefinition, ChordDefinitionMember,
ChordDegree, ChordSymbol, Clef, CrossStaff, Dynamic, FiguredBassFigure,
FingeringSelectionPolicy, GuitarTechnique, HairpinKind, KeySignature, Lyric, NoteHead,
OttavaKind, StyledText, TabPosition, TablatureConfig, TextStyle, TimeSignature, TupletInfo,
VerseLyric,
};
pub use model::pitch::{Pitch, Step};
pub use model::playback::{
MAX_PLAYBACK_COMPARISON_EVENTS, MAX_TAB_PERFORMANCE_EVENTS, MetronomeConfig,
OFFLINE_RENDER_CONTRACT_VERSION, OfflineRenderDiagnostic, OfflineRenderDiagnosticKind,
OfflineRenderFormat, OfflineRenderFrameEvent, OfflineRenderManifest,
OfflineRenderMeasureAddress, OfflineRenderNavigationPolicy, OfflineRenderRequest,
OfflineRenderResult, OfflineRenderScope, OfflineRenderSemanticEventKind,
OfflineRenderSemanticFrameEvent, PLAYBACK_COMPARISON_CONTRACT_VERSION,
PLAYBACK_ROUTING_CONTRACT_VERSION, PLAYBACK_TIMING_CORPUS_CONTRACT_VERSION, PlaybackAuxSend,
PlaybackBusRoute, PlaybackEffectRoute, PlaybackEvent, PlaybackOptions, PlaybackPosition,
PlaybackRealizationProfile, PlaybackRoutingConfig, PlaybackRoutingManifest, PlaybackTimingCase,
PlaybackTimingCaseReport, PlaybackTimingCorpusReport, PlaybackTimingMismatch,
PlaybackTimingReport, PlaybackTimingTolerance, TAB_PERFORMANCE_CONTRACT_VERSION,
TAB_ROUND_TRIP_CONTRACT_VERSION, TablaturePerformanceDiagnostic, TablaturePerformanceEvent,
TablaturePerformanceReport, TablatureRoundTripDiagnostic, TablatureRoundTripReport,
build_offline_render_manifest, build_playback_routing_manifest, compare_playback_timing,
compute_playback_position, evaluate_playback_timing_corpus, project_tablature_performance,
tablature_round_trip_report, to_playback_events, to_playback_events_bounded,
};
pub use model::repeat::measure_sequence;
pub use model::scale::{Scale, ScaleKind};
pub use model::score::{
GuitarBendPoint, HarpPedalDiagram, HarpPedalPosition, InstrumentDefinition, InstrumentRange,
Measure, MeasureLength, MidiAftertouch, MidiControlChange, MidiPitchBend, MidiProgramChange,
NotationSpanner, NotationSpannerKind, Note, NoteAddr, ObjectStyleOverride, ObjectStyleTarget,
Part, PartGroup, PartGroupSymbol, PercussionInstrument, RegionalTranspositionTarget,
RespellPolicy, Score, ScoreChange, ScoreMetadata, ScorePatch, ScoreSettings, ScoreStats,
ScoreTemplate, ScoreView, ScoreViewLayoutOverrides, Staff, StaffGroup, StaffKind,
StaffNoteheadScheme, StaffPresentation, StyleImportProvenance, TablatureFretMarkStyle,
TablatureRhythmDisplay, ViewStaffKindOverride, ViewStaffRef, ViewStyle, ViewStyleOverride,
ViewStyleProperty, ViewTranspositionPolicy, VoltaBracket, apply_patch,
assign_tablature_positions, compute_beams, diff, measure_beats_remaining,
optimize_tablature_positions, respell_score, respell_score_to_key, respell_staff_region,
score_duration_secs, score_duration_secs_region, score_patch, suggested_stem_up, transpose,
transpose_checked, transpose_staff_region_checked,
};
pub use model::structural_plan::{
STRUCTURAL_CHANGE_PLAN_CONTRACT_VERSION, StructuralChangeDiagnostic,
StructuralChangeDiagnosticKind, StructuralChangePlan, StructuralMeasureStructure,
plan_structural_change,
};
pub use model::validate::{
GuitarBendCurveValidationReason, InstrumentDefinitionValidationReason, InstrumentRangeKind,
ObjectStyleValidationReason, PercussionInstrumentValidationReason, ScoreViewValidationReason,
SpannerEndpoint, StaffPresentationValidationReason, TablatureValidationReason, ValidationError,
ValidationReport, ValidationWarning, validate,
};
pub const SCORE_SCHEMA_VERSION: u32 = 1;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("part index {0} out of range")]
PartNotFound(usize),
#[error("staff index {0} out of range")]
StaffNotFound(usize),
#[error("measure index {0} out of range")]
MeasureNotFound(usize),
#[error("note index {0} out of range")]
NoteNotFound(usize),
#[error("voice index {0} out of range")]
VoiceOutOfRange(usize),
#[error("{0}")]
InvalidCommand(String),
#[error("nothing to undo")]
NothingToUndo,
#[error("nothing to redo")]
NothingToRedo,
#[error("clipboard is empty")]
ClipboardEmpty,
#[error("cannot delete the last staff of a part")]
CannotDeleteLastStaff,
#[error("invalid patch: {0}")]
InvalidPatch(String),
#[error("score failed structural validation")]
InvalidScore,
#[error("engine history base score does not match the supplied score")]
HistoryBaseMismatch,
#[error("engine history is not a safe append-only extension")]
HistoryNotAppendable,
#[error("invalid playback comparison tolerance")]
InvalidPlaybackComparison,
#[error("invalid offline render request")]
InvalidOfflineRenderRequest,
#[error("invalid playback routing configuration")]
InvalidPlaybackRouting,
#[error("invalid playback timing corpus")]
InvalidPlaybackTimingCorpus,
#[error("playback comparison contains too many events ({0})")]
PlaybackComparisonTooLarge(usize),
#[error("tablature performance projection contains too many events ({0})")]
TabPerformanceTooLarge(usize),
#[error("tablature round-trip serialization failed: {0}")]
TabRoundTripSerialization(String),
}