music21-rs

Reports

commit e8fde9d / music21 11.0.0b9

Line coverage 94.6% 28480 of 30106 lines
music21-rs's own tests 5231 passing, 115 failing
Median speedup 1.01× music21-rs-wheel over music21, across 3305 of its own tests music21's tests passed 100.0% 6826 of 6827 examples
music21 API ported 92.1% 568 of 617 members

Test coverage

of music21-rs, across every suite below

Lines
94.6%28480 of 30106
Functions
96.1%3437 of 3576
Regions
94.0%47067 of 50075

Every suite above is run instrumented and the profiles merged, except those going through the installed wheel. Generated tables and the tooling crates are excluded. Read it file by file.

music21-rs's own tests

115 failing, 5231 passing

SuiteResultPassedFailedCommand
Workspace passed 709 0 cargo test --workspace --all-targets
Workspace doctests passed 21 0 cargo test --workspace --doc
Python parity and music21's doctests passed 49 0 cargo test --manifest-path python-parity/Cargo.toml -- --test-threads=1
Python wheelmusic21_rs-0.5.0-cp313-cp313-manylinux_2_34_x86_64.whl passed maturin build --release --manifest-path python/Cargo.toml
Python wheel tests passed 41 0 python -m pytest python/tests
music21's own test suiteRun twice, once on music21 and once on the crate, and diffed: music21's own suite fails a number of its own tests in any environment, so what counts is that the two sets match.114 of these fail on music21 itself; 0 fail only under music21_rs passed 4411 115 cargo run --release -p xtask --features python -- music21-suite

A suite whose tooling is not installed is skipped, with the reason, rather than failed.

Speedups over music21

12.6× median across 21 cases

Casemusic21cratewheelSpeedup
construction
Pitch('C#4') 2.8 µs 453 ns 764 ns 3.7×
Note('C#4') 8.1 µs 459 ns 1.2 µs 7.0×
Interval('P5') 14.9 µs 481 ns 957 ns 15.6×
Chord('C4 E4 G4') 31.6 µs 1.4 µs 6.2 µs 5.1×
chord analysis
Chord.commonName5 chords 1.0 ms 25.4 µs 49.4 µs 20.5×
Chord.root()5 chords 244.6 µs 11.3 µs 38.2 µs 6.4×
Chord.inversion()5 chords 396.3 µs 10.4 µs 36.8 µs 10.8×
Chord.forteClass5 chords 486.8 µs 12.3 µs 37.4 µs 13.0×
Chord.primeForm5 chords 487.8 µs 13.4 µs 38.0 µs 12.8×
Chord.intervalVector5 chords 491.7 µs 13.5 µs 37.6 µs 13.1×
Chord.isDominantSeventh()5 chords 506.4 µs 15.3 µs 40.1 µs 12.6×
Chord.orderedPitchClasses5 chords 226.0 µs 11.0 µs 35.2 µs 6.4×
Chord: forteClass + primeForm + intervalVectorone chord, three questions 110.6 µs 4.4 µs 9.9 µs 11.1×
pitch
Pitch.transpose('M3') 63.2 µs 1.2 µs 1.9 µs 33.9×
Pitch.frequency 2.3 µs 532 ns 1.0 µs 2.2×
Pitch.getEnharmonic() 54.0 µs 694 ns 1.2 µs 43.6×
Interval(p1, p2) 20.8 µs 852 ns 2.6 µs 7.9×
serial
pcToToneRow(...).matrix() 5.6 ms 9.2 µs 10.0 µs 563.8×
ToneRow.zeroCenteredTransformation 591.7 µs 678 ns 756 ns 783.0×
warm object
Chord.commonName (cached)music21 memoizes 118 ns 67 ns 1.8×
Chord.forteClass (cached)music21 memoizes 2.1 µs 70 ns 30.1×
What each costs to install
music21
88.0 MBinstalled package, corpus and all
music21-rs
3.0 MBthe source cargo publishes
music21-rs wheel
2.1 MBwhat pip installs

music21 11.0.0b9, Python 3.13.15 (Linux-6.17.0-1022-azure-x86_64-with-glibc2.39). Every side must agree on the answer before any of them is timed. wheel is what a caller installs and what the speedup is taken from; crate is the same operation in Rust with no Python in the way, so the gap between them is what the binding costs. Each case builds a fresh object, except those marked cached.

3305 of music21's own tests, timed on every side101s on music21, 90s on music21-rs, 91s on music21-rs-wheel; music21-rs median 1.01×, music21-rs-wheel median 1.01×

Testmusic21music21-rsmusic21-rs-wheelmusic21-rs ×music21-rs-wheel ×
furthest ahead
fromIntervalVector (music21.chord)84 ms3 ms3 ms26.98×27.42×
testMelodicMinorB (music21.scale.test_scale_main.Test.testMelodicMinorB)74 ms3 ms3 ms23.12×23.44×
fromForteClass (music21.chord)52 ms2 ms2 ms22.55×22.84×
testRagMarwaC (music21.scale.test_scale_main.Test.testRagMarwaC)49 ms3 ms3 ms18.73×18.90×
figureTuples (music21.roman)32 ms2 ms2 ms16.85×16.64×
romanNumeralFromChord (music21.roman)263 ms16 ms16 ms16.38×16.12×
testImportMei3 (music21.converter.subConverters.Test.testImportMei3)22 ms1 ms1 ms15.93×15.75×
_postFigureFromChordAndKey (music21.roman)32 ms2 ms2 ms15.89×15.93×
testKeyAnalysisSpelling (music21.analysis.discrete.Test.testKeyAnalysisSpelling)37 ms2 ms2 ms15.58×16.29×
testRagMarwaB (music21.scale.test_scale_main.Test.testRagMarwaB)24 ms2 ms2 ms14.34×14.75×
TranspositionChecker (music21.analysis.transposition)51 ms4 ms4 ms13.31×12.90×
fromPitchAndReference (music21.roman.FigureTuple)22 ms2 ms2 ms13.28×13.64×
furthest behind
testARFFNumericClassValues (music21.features.outputFormats.Test.testARFFNumericClassValues)18 ms129 ms119 ms0.14×0.15×
testPartitionByInstrumentB (music21.instrument.Test.testPartitionByInstrumentB)3 ms13 ms11 ms0.21×0.25×
testCoreIntegration5 (music21.mei.test_base.Test.testCoreIntegration5)1 ms7 ms8 ms0.21×0.18×
testGetIntervalList (music21.analysis.segmentByRests.Test.testGetIntervalList)3 ms10 ms12 ms0.31×0.26×
testExplicitNaturalDisplayStatusNone (music21.test.test_pitch.Test.testExplicitNaturalDisplayStatusNone)3 ms7 ms3 ms0.39×0.97×
testMakeBeamsOnEmptyChord (music21.stream.makeNotation.Test.testMakeBeamsOnEmptyChord)4 ms8 ms3 ms0.44×1.11×
quarterConversion (music21.duration)16 ms36 ms36 ms0.45×0.46×
testUnit3AddSlurs (music21.mei.test_base.Test.testUnit3AddSlurs)4 ms7 ms7 ms0.57×0.51×
testGetTimeSignatures (music21.stream.tests.Test.testGetTimeSignatures)8 ms14 ms14 ms0.60×0.56×
test_example07_5a (music21.braille.test.Test.test_example07_5a)6 ms11 ms12 ms0.60×0.53×
testConversionMusedata (music21.converter.Test.testConversionMusedata)11 ms18 ms19 ms0.61×0.58×
testMakeAccidentalsD (music21.stream.tests.Test.testMakeAccidentalsD)1 ms2 ms2 ms0.61×0.62×

A test counts only where every side ran it, passed it, and took longer than a millisecond, and what the garbage collector took inside a test is taken off before the sides are compared — a full collection lands on whichever test is running, and each test is timed once. music21-rs is the crate linked into the binary that ran the suite — the working tree — and music21-rs-wheel is the wheel a caller installs, so what lies between those two columns is the packaging rather than the code. All 3305 tests, side by side →

Beyond music21

10 capabilities

Capabilitymusic21-rsmusic21
PolyrhythmCross-rhythms as a first-class thing: the cycle two or more pulses make together, where the hits fall in it, and the chord that cycle maps onto when its ratios are read as pitches. music21 has no counterpart. present nothing of the kind
Tuning systemsExact ratio tables - just intonation, meantone, Bohlen-Pierce, the Carlos scales - with frequencies derived from the ratios rather than from equal temperament, and available with no features turned on. Fourteen of them are the historical keyboard temperaments, Salinas 1577 through Lehman 2005, reachable together as HISTORICAL_TEMPERAMENTS; they are counted here rather than again, being the same tables. 23 of the 28 are in the bundled Scala archive too - the same scales stored the other way, exact ratios against parsed cents - which is deliberate and pinned by a test. music21 tunes a scale only by reading a Scala file. 28 systems nothing of the kind
Adaptive tuningTuning where a pitch's frequency depends on the harmony it is sounding in rather than on a fixed table - recursive just intonation, five-limit from whichever note is the root. present nothing of the kind
Scala archiveEvery scale music21 ships, plus the hexatone collection, parsed into one table at build time rather than read from disk. The reader also handles the inline comments and EDO notation that music21's own parser mis-reads. 3994 scales 3932 scales
Regular temperamentsA mapping from the primes onto a period and its generators, the commas it tempers out, and the scales that come of stacking it. Every one is checked against the Xenharmonic Wiki, so a mistranscribed number fails the build. 95 temperaments nothing of the kind
Monzos and valsAn interval as the exponents of the primes in its ratio, so 81/80 is [-4 4 -1>, and how many steps of a tuning each prime is worth, 12edo being <12 19 28]. A val mapping a comma to nothing tempers it out. present nothing of the kind
Moments of symmetryThe scales a single generator makes. Seven fifths folded into an octave give exactly two step sizes, which is the diatonic scale, 5L 2s. The pattern is kept apart from the tuning, and nothing assumes the period is an octave. present nothing of the kind
Equal divisions of anythingEqual steps of any interval, not only of the octave: Bohlen-Pierce divides a twelfth into thirteen. The octave-repeating tables above cannot express those by construction. present nothing of the kind
Harte chord notationChord labels as harte-library reads them, C:maj7/3 or Bb:(b3,5,b7,9), built into chords with the root fixed as the label names it. Ported from harte-library and checked against every label in that library's 8,064-chord coverage set. 48 shorthands nothing of the kind
Duplicate detectionWhich of these are the same tuning under another name, compared by sound rather than spelling. It finds 44 groups of repeats among the archive's 3,994 scales. present nothing of the kind

651 public members the map matches to nothing in music2137 fn, 501 method, 37 struct, 32 enum, 2 trait, 3 type, 39 const, across 39 modules

notation62 members
  • ALL const
  • Beam struct
  • Beam::beam_type method
  • Beam::set_beam_type method
  • Beam::set_direction method
  • Beam::set_number method
  • BeamDirection enum
  • BeamDirection::as_str method
  • BeamDirection::from_music21_name method
  • BeamType enum
  • BeamType::as_str method
  • BeamType::from_music21_name method
  • Beams::beams_mut method
  • Beams::feathered method
  • Beams::fill_levels method
  • Beams::is_empty method
  • Beams::len method
  • Beams::levels_for method
  • Beams::set_beams method
  • Beams::set_feathered method
  • LEVELS const
  • Lyric::clear_text method
  • Lyric::elision_before method
  • Lyric::explicit_identifier method
  • Lyric::explicit_syllabic method
  • Lyric::explicit_text method
  • Lyric::from_raw_text method
  • Lyric::set_components method
  • Lyric::set_elision_before method
  • Lyric::set_identifier method
  • Lyric::set_number method
  • Lyric::set_raw_text method
  • Lyric::set_syllabic method
  • Lyric::set_text method
  • Lyric::unsung method
  • NAMES const
  • Notehead enum
  • Notehead::as_str method
  • Notehead::from_name method
  • Placement enum
  • Placement::as_str method
  • Placement::from_name method
  • StemDirection enum
  • StemDirection::as_str method
  • StemDirection::from_name method
  • Syllabic enum
  • Syllabic::as_str method
  • Syllabic::from_name method
  • Tie struct
  • Tie::from_name method
  • Tie::placement method
  • Tie::set_placement method
  • Tie::set_style method
  • Tie::set_tie_type method
  • Tie::style method
  • Tie::tie_type method
  • TieStyle enum
  • TieStyle::as_str method
  • TieStyle::from_name method
  • TieType enum
  • TieType::as_str method
  • TieType::from_name method
tuningsystem49 members
  • A0 const
  • A4 const
  • ALL_TUNING_SYSTEMS const
  • AN1 const
  • AnyTuningSystem enum
  • AnyTuningSystem::cents_at method
  • AnyTuningSystem::frequency_at method
  • AnyTuningSystem::is_adaptive method
  • C0 const
  • C4 const
  • CN1 const
  • COMMON_EQUAL_TEMPERAMENTS const
  • COMMON_TWELVE_TONE_TUNING_SYSTEMS const
  • FORTYTHREE_TONE const
  • Fraction struct
  • Fraction::base method
  • Fraction::label method
  • Fraction::new_with_base method
  • Fraction::ratio method
  • Fraction::with_octaves method
  • HISTORICAL_TEMPERAMENTS const
  • INDIAN_SCALE_NAMES const
  • JAVANESE const
  • OCTAVE_SIZE const
  • THAI const
  • TWELVE_TONE_NAMES const
  • TWELVE_TONE_NAMES_FLAT const
  • TWELVE_TONE_NAMES_SHARP const
  • TuningSystem enum
  • TuningSystem::cents_at method
  • TuningSystem::description method
  • TuningSystem::display_name method
  • TuningSystem::fraction method
  • TuningSystem::frequency_at method
  • TuningSystem::id method
  • TuningSystem::label method
  • TuningSystem::octave_size method
  • TuningSystem::ratio method
  • WHOLE_TONE_NAMES const
  • equal_temperament fn
  • equal_temperament_12 fn
  • equal_temperament_default fn
  • get_cents fn
  • get_cents_at fn
  • get_fraction fn
  • get_frequency fn
  • get_frequency_at fn
  • get_label fn
  • get_ratio fn
stream33 members
  • ALL const
  • Stream struct
  • Stream::end_offset method
  • Stream::events method
  • Stream::events_mut method
  • Stream::flatten method
  • Stream::from_events method
  • Stream::insert method
  • Stream::is_empty method
  • Stream::iter method
  • Stream::key_signature_at method
  • Stream::kind method
  • Stream::len method
  • Stream::measures method
  • Stream::metronome_mark_at method
  • Stream::parts method
  • Stream::push method
  • Stream::recurse method
  • Stream::set_kind method
  • Stream::streams_of_kind method
  • Stream::time_signature_at method
  • Stream::voices method
  • Stream::with_kind method
  • StreamElement enum
  • StreamElement::as_stream method
  • StreamElement::is_note_or_chord method
  • StreamEvent struct
  • StreamEvent::element method
  • StreamEvent::element_mut method
  • StreamEvent::end_offset method
  • StreamEvent::offset method
  • StreamKind enum
  • StreamKind::as_str method
meter::sequence30 members
  • MeterTerminal struct
  • MeterTerminal::depth method
  • MeterTerminal::division_options method
  • MeterTerminal::flattened method
  • MeterTerminal::from_ratio_string method
  • MeterTerminal::is_empty method
  • MeterTerminal::is_uniform_partition method
  • MeterTerminal::len method
  • MeterTerminal::level method
  • MeterTerminal::level_list method
  • MeterTerminal::level_span method
  • MeterTerminal::offset_to_depth method
  • MeterTerminal::offset_to_index method
  • MeterTerminal::offset_to_span method
  • MeterTerminal::offset_to_weight method
  • MeterTerminal::partition_by_count method
  • MeterTerminal::partition_by_list method
  • MeterTerminal::partition_by_parts method
  • MeterTerminal::partition_display method
  • MeterTerminal::partition_string method
  • MeterTerminal::parts method
  • MeterTerminal::parts_mut method
  • MeterTerminal::set_weight method
  • MeterTerminal::set_weights_at_level method
  • MeterTerminal::subdivide method
  • MeterTerminal::subdivide_by_count method
  • MeterTerminal::subdivide_by_list method
  • MeterTerminal::subdivide_partitions_equal method
  • MeterTerminal::weight method
  • OffsetAlign enum
meter29 members
  • BeamedNote struct
  • BeatDivision enum
  • BeatDivision::count method
  • TimeSignature::accent_partition_quarter_length method
  • TimeSignature::accent_sequence method
  • TimeSignature::accent_sequence_mut method
  • TimeSignature::accent_weight_at_level method
  • TimeSignature::accent_weight_with method
  • TimeSignature::accent_weights method
  • TimeSignature::bar_quarter_length method
  • TimeSignature::beam_sequence method
  • TimeSignature::beam_sequence_mut method
  • TimeSignature::beat_division method
  • TimeSignature::beat_division_quarter_lengths method
  • TimeSignature::beat_duration_at method
  • TimeSignature::beat_quarter_length method
  • TimeSignature::beat_sequence method
  • TimeSignature::beat_sequence_mut method
  • TimeSignature::common method
  • TimeSignature::cut method
  • TimeSignature::display_sequence method
  • TimeSignature::display_sequence_mut method
  • TimeSignature::divide_beats method
  • TimeSignature::favors_compound method
  • TimeSignature::from_ratio_string method
  • TimeSignature::is_compound method
  • TimeSignature::parts method
  • TimeSignature::set_beat_count method
  • snapped_fraction fn
pitch28 members
  • Pitch::builder method
  • Pitch::explicit_accidental method
  • Pitch::explicit_accidental_mut method
  • Pitch::frequency_hz_in method
  • Pitch::from_frequency method
  • Pitch::from_midi method
  • Pitch::from_name method
  • Pitch::from_name_and_octave method
  • Pitch::from_number method
  • Pitch::from_options method
  • Pitch::from_pitch_class method
  • Pitch::from_pitch_space method
  • Pitch::from_step method
  • Pitch::fundamental method
  • Pitch::has_accidental method
  • Pitch::pitch_space method
  • Pitch::set_accidental method
  • Pitch::set_accidental_alter method
  • Pitch::set_microtone_cents method
  • Pitch::set_octave method
  • Pitch::set_octave_is_implicit method
  • Pitch::set_spelling_is_inferred method
  • Pitch::spelling_is_inferred method
  • PitchName enum
  • PitchOptions struct
  • PitchOptions::build method
  • PitchOptions::fundamental method
  • PitchOptions::pitch_space method
chord26 members
  • Chord::empty method
  • Chord::found_bass method
  • Chord::found_root method
  • Chord::guitar_fingering method
  • Chord::guitar_fingering_with_tuning method
  • Chord::is_empty method
  • Chord::iter_pitches method
  • Chord::len method
  • Chord::note_for_pitch method
  • Chord::note_for_pitch_mut method
  • Chord::notes_mut method
  • Chord::overridden_bass method
  • Chord::overridden_root method
  • Chord::polyrhythm_components method
  • Chord::polyrhythm_ratio_string method
  • Chord::remove_named method
  • Chord::remove_redundant_pitch_classes_reporting method
  • Chord::remove_redundant_pitch_names_reporting method
  • Chord::remove_redundant_pitches_reporting method
  • Chord::set_bass method
  • Chord::set_duration method
  • Chord::set_inversion method
  • Chord::set_root method
  • Chord::simplify_enharmonics_in_place method
  • Chord::with_duration method
  • IntoNotes trait
roman26 members
  • FUNCTIONALITY_SCORES const
  • FigureTuple struct
  • ImpliedQuality enum
  • ImpliedQuality::correct_semitones method
  • ImpliedQuality::from_name method
  • Minor67Default enum
  • NumeralAlone struct
  • PitchFigureTuple struct
  • RomanNumeral::added_steps method
  • RomanNumeral::bracketed_alterations method
  • RomanNumeral::case_matters method
  • RomanNumeral::degree method
  • RomanNumeral::effective_key_of method
  • RomanNumeral::figure_numbers method
  • RomanNumeral::figures_notation method
  • RomanNumeral::figures_written method
  • RomanNumeral::implied_quality method
  • RomanNumeral::omitted_steps method
  • RomanNumeral::over_scale method
  • RomanNumeral::roman_numeral_alone method
  • RomanNumeral::secondary method
  • RomanNumeral::seventh_minor method
  • RomanNumeral::sixth_minor method
  • RomanNumeral::with_minor_defaults method
  • RomanNumeral::with_options method
  • RomanNumeral::written_accidental method
polyrhythm24 members
  • Polyrhythm struct
  • Polyrhythm::analysis method
  • Polyrhythm::beat_timings method
  • Polyrhythm::coincidence_ticks method
  • Polyrhythm::component_intervals method
  • Polyrhythm::current_tick method
  • Polyrhythm::cycle_len method
  • Polyrhythm::events method
  • Polyrhythm::from_time_signature method
  • Polyrhythm::hit_events method
  • Polyrhythm::measure_duration method
  • Polyrhythm::ratio_chord method
  • Polyrhythm::ratio_pitches method
  • Polyrhythm::ratio_tones method
  • Polyrhythm::reset method
  • Polyrhythm::set_tempo method
  • Polyrhythm::tempo method
  • Polyrhythm::tick_duration method
  • Polyrhythm::to_chord method
  • Polyrhythm::to_polypitch method
  • Polyrhythm::with_tempo method
  • PolyrhythmAnalysis struct
  • PolyrhythmEvent struct
  • PolyrhythmRatioTone struct
tuningsystem::scala24 members
  • ScalaArchive struct
  • ScalaArchive::bundled method
  • ScalaArchive::bundled_len method
  • ScalaArchive::bundled_with_failures method
  • ScalaArchive::get method
  • ScalaArchive::insert method
  • ScalaArchive::insert_scale method
  • ScalaArchive::is_empty method
  • ScalaArchive::iter method
  • ScalaArchive::len method
  • ScalaArchive::names method
  • ScalaArchive::search method
  • ScalaDegree enum
  • ScalaDegree::as_fraction method
  • ScalaDegree::ratio method
  • ScalaScale::cents_above_root method
  • ScalaScale::degrees method
  • ScalaScale::description method
  • ScalaScale::frequency_at method
  • ScalaScale::is_empty method
  • ScalaScale::len method
  • ScalaScale::parse method
  • ScalaScale::parse_bytes method
  • ScalaScale::ratio_at method
harte22 members
  • Harte struct
  • Harte::bass_degree method
  • Harte::bass_is_root method
  • Harte::contains_shorthand method
  • Harte::degrees method
  • Harte::into_chord method
  • Harte::is_empty method
  • Harte::label method
  • Harte::midi_pitches method
  • Harte::multi_hot_encoding method
  • Harte::prettify method
  • Harte::root_name method
  • Harte::shorthand method
  • Harte::sounding_degrees method
  • Harte::unwrap_shorthand method
  • HarteInterval struct
  • HarteInterval::written method
  • SHORTHAND_DEGREES const
  • Shorthand type
  • convert_interval fn
  • degree_sort_key fn
  • shorthand_degrees fn
tuningsystem::monzo22 members
  • Monzo struct
  • Monzo::divide method
  • Monzo::exponent_of method
  • Monzo::exponents method
  • Monzo::from_fraction method
  • Monzo::from_ratio method
  • Monzo::inverse method
  • Monzo::limit method
  • Monzo::multiply method
  • Monzo::pow method
  • Monzo::ratio method
  • Monzo::unison method
  • PRIMES const
  • Val struct
  • Val::divisions method
  • Val::entries method
  • Val::error_cents method
  • Val::limit method
  • Val::map method
  • Val::patent method
  • Val::reaches method
  • Val::tempers_out method
tuningsystem::temperament22 members
  • Temperament struct
  • Temperament::equave method
  • Temperament::equave_cents method
  • Temperament::error_cents method
  • Temperament::from_mapping method
  • Temperament::from_mapping_rows method
  • Temperament::from_published method
  • Temperament::generator_cents method
  • Temperament::generator_map method
  • Temperament::map method
  • Temperament::moments method
  • Temperament::mos method
  • Temperament::pattern method
  • Temperament::period_cents method
  • Temperament::period_map method
  • Temperament::periods_per_equave method
  • Temperament::primes method
  • Temperament::rank method
  • Temperament::repeats_at_the_octave method
  • Temperament::subgroup_name method
  • Temperament::tempers_out method
  • crate::tuningsystem::NamedTemperament::temperament method
serial18 members
  • ALL const
  • HistoricalRow struct
  • HistoricalRow::row method
  • IndexedTransformation type
  • LinkClassification struct
  • ToneRow::find_transformations method
  • ToneRow::from_pitches method
  • ToneRow::is_empty method
  • ToneRow::len method
  • ToneRow::transformation method
  • Transformation enum
  • Transformation::from_name method
  • Transformation::label method
  • TransformationConvention enum
  • TransformationConvention::from_name method
  • TwelveToneMatrix struct
  • TwelveToneMatrix::row method
  • TwelveToneMatrix::rows method
scale::scaletype17 members
  • ALL const
  • DegreeComparison enum
  • HUMDRUM_SOLFEG_SYLLABLES const
  • SOLFEG_SYLLABLES const
  • ScaleType enum
  • ScaleType::ascending_degrees method
  • ScaleType::beyond_terminus method
  • ScaleType::derive_ranked_by method
  • ScaleType::descending_form method
  • ScaleType::descending_steps method
  • ScaleType::dominant_degree method
  • ScaleType::from_music21_name method
  • ScaleType::is_plagal method
  • ScaleType::music21_descriptive_name method
  • ScaleType::realization_steps method
  • ScaleType::tonic_degree method
  • SolfegVariant enum
tuningsystem::equal17 members
  • EqualDivision struct
  • EqualDivision::approximation_of method
  • EqualDivision::cents_at method
  • EqualDivision::degrees method
  • EqualDivision::divisions method
  • EqualDivision::error_at_cents method
  • EqualDivision::mos method
  • EqualDivision::nearest_degree method
  • EqualDivision::of_ratio method
  • EqualDivision::patent_val method
  • EqualDivision::period_cents method
  • EqualDivision::period_ratio method
  • EqualDivision::ratio_at method
  • EqualDivision::repeats_at_the_octave method
  • EqualDivision::step_cents method
  • EqualDivision::tritave method
  • TRITAVE_CENTS const
duration16 members
  • ALL const
  • Duration::eighth method
  • Duration::from_type method
  • Duration::half method
  • Duration::quarter method
  • Duration::set_quarter_length method
  • Duration::set_tuplets method
  • Duration::whole method
  • DurationType enum
  • DurationType::from_music21_name method
  • DurationType::quarter_length_with_dots method
  • Tuplet::actual method
  • Tuplet::normal method
  • Tuplet::normal_dots method
  • Tuplet::normal_duration_type method
  • Tuplet::with_normal method
figuredbass16 members
  • EXTENDER const
  • Figure::has_extender method
  • Figure::set_number method
  • Modifier::written method
  • Notation struct
  • Notation::column method
  • Notation::extenders method
  • Notation::figure_strings method
  • Notation::figures method
  • Notation::figures_as_written method
  • Notation::has_extenders method
  • Notation::modifier_strings method
  • Notation::modifiers method
  • Notation::original_modifiers method
  • Notation::original_numbers method
  • Notation::parse method
tempo16 members
  • DEFAULT_TEMPO_VALUES const
  • MetronomeMark::from_text method
  • MetronomeMark::number_implicit method
  • MetronomeMark::quarter_length_to_seconds method
  • MetronomeMark::set_number method
  • MetronomeMark::set_number_implicit method
  • MetronomeMark::set_number_sounding method
  • MetronomeMark::set_referent method
  • MetronomeMark::set_text method
  • MetronomeMark::sounding_quarter_bpm method
  • MetronomeMark::text_implicit method
  • MetronomeMark::with_number_and_text method
  • MetronomeMark::with_number_sounding method
  • MetronomeMark::with_referent method
  • default_number_for_text fn
  • default_text_for_number fn
tuningsystem::mos16 members
  • Mos struct
  • Mos::brightest_word method
  • Mos::inverted method
  • Mos::large method
  • Mos::small method
  • MosScale struct
  • MosScale::degrees method
  • MosScale::from_equal_division method
  • MosScale::generator method
  • MosScale::is_equal method
  • MosScale::is_moment_of_symmetry method
  • MosScale::pattern method
  • MosScale::steps method
  • MosScale::word method
  • OCTAVE_CENTS const
  • moment_of_symmetry_sizes fn
interval15 members
  • Interval::between_notes method
  • Interval::diatonic_interval_cent_shift method
  • Interval::from_chromatic method
  • Interval::from_diatonic method
  • Interval::from_diatonic_and_chromatic method
  • Interval::from_name method
  • Interval::from_semitones method
  • Interval::generic_number method
  • Interval::is_implicit_diatonic method
  • Interval::short_name method
  • Interval::transpose_pitch_in_place method
  • Interval::transpose_pitch_with_options method
  • Interval::whole_semitones method
  • IntervalDirection enum
  • IntervalDirection::as_int method
note13 members
  • IntoNote trait
  • Note::beams_mut method
  • Note::from_name method
  • Note::from_number method
  • Note::from_pitch method
  • Note::lyrics method
  • Note::lyrics_mut method
  • Note::set_beams method
  • Note::set_duration method
  • Note::set_lyric method
  • Note::set_notehead_parenthesis method
  • Note::set_pitch method
  • Note::with_duration method
analysis12 members
  • ALL const
  • KeyEstimate struct
  • KeyEstimate::score method
  • KeyProfile enum
  • KeyProfile::major_weights method
  • KeyProfile::minor_weights method
  • KeyProfile::music21_class_name method
  • estimate_key_from_chords fn
  • estimate_key_from_chords_with fn
  • estimate_key_from_pitches fn
  • estimate_key_from_pitches_with fn
  • tonal_certainty_from_scores fn
key::keysignature11 members
  • KeySignature::accidentals_apply_only_to_octave method
  • KeySignature::description method
  • KeySignature::from_altered_pitches method
  • KeySignature::is_non_traditional method
  • KeySignature::set_accidentals_apply_only_to_octave method
  • KeySignature::set_altered_pitches method
  • KeySignature::set_non_traditional method
  • KeySignature::set_sharps method
  • KeySignature::try_as_key method
  • mode_sharps_alter fn
  • pitch_name_to_sharps fn
chordsymbol10 members
  • ChordAlteration struct
  • ChordAlteration::degree method
  • ChordQuality enum
  • ChordSymbol::additions method
  • ChordSymbol::alterations method
  • ChordSymbol::extensions method
  • ChordSymbol::kind method
  • ChordSymbol::omissions method
  • ChordSymbol::parse method
  • ChordSymbol::to_chord method
key10 members
  • Key::as_scale method
  • Key::derive_by_degree_of method
  • Key::from_tonic method
  • Key::from_tonic_mode method
  • Key::harmonized_sevenths method
  • Key::harmonized_triads method
  • Key::mode method
  • Key::seventh_chord_from_degree method
  • Key::tonic_pitch method
  • Key::triad_from_degree method
sieve10 members
  • Sieve::contains method
  • Sieve::intersection method
  • Sieve::interval_widths method
  • Sieve::parse method
  • Sieve::segment_binary method
  • Sieve::segment_unit method
  • Sieve::segment_widths method
  • Sieve::shifted method
  • Sieve::symmetric_difference method
  • Sieve::union method
volume10 members
  • Volume::from_velocity method
  • Volume::from_velocity_scalar method
  • Volume::has_velocity_information method
  • Volume::realized_dynamic method
  • Volume::realized_with method
  • Volume::set_velocity method
  • Volume::set_velocity_is_relative method
  • Volume::set_velocity_scalar method
  • Volume::velocity_is_relative method
  • rounded_str fn
midi8 members
  • DEFAULT_TICKS_PER_QUARTER const
  • MidiNote struct
  • MidiNote::with_channel method
  • midi_notes_from_stream fn
  • read_midi_bytes fn
  • read_midi_bytes_with_tempo fn
  • stream_from_midi_notes fn
  • write_midi_bytes fn
voiceleading8 members
  • MotionType enum
  • MotionType::as_str method
  • ParallelRequirement enum
  • VoiceLeadingQuartet::from_names method
  • VoiceLeadingQuartet::horizontal_intervals method
  • VoiceLeadingQuartet::set_key method
  • VoiceLeadingQuartet::vertical_intervals method
  • VoiceLeadingQuartet::with_key method
abc6 members
  • abc_chord fn
  • abc_duration fn
  • abc_note fn
  • abc_rest fn
  • pitch_name_from_abc_note fn
  • pitch_names_from_abc_chord fn
chord::guitar6 members
  • GuitarFingering struct
  • GuitarStringFingering struct
  • GuitarTuning struct
  • GuitarTuning::standard method
  • GuitarTuning::strings method
  • GuitarTuningString struct
scale::hexatonicblues5 members
  • ALL const
  • BluesForm enum
  • WeightedHexatonicBlues struct
  • WeightedHexatonicBlues::form_for_seed method
  • WeightedHexatonicBlues::sample method
tuningsystem::adaptive5 members
  • AdaptiveTuningSystem enum
  • AdaptiveTuningSystem::cents_at method
  • AdaptiveTuningSystem::cents_vs_fixed_at method
  • AdaptiveTuningSystem::frequency_at method
  • RECURSIVE_JI const
scale::diatonicscale3 members
  • DiatonicScale::mode method
  • DiatonicScale::seventh_chord_from_degree method
  • DiatonicScale::triad_from_degree method
error2 members
  • Error enum
  • Result type
scale::stepscale2 members
  • StepScale struct
  • StepScale::steps method
chord::tables1 member
  • read_address fn
rest1 member
  • Rest::set_duration method

Counts are read out of the crate's own tables, so the report fails when one it names has gone. The list below is derived: every public member of the crate, less every name music21 uses. It is bounded by what the map enumerates, so a member of a music21 class the map does not carry can appear here.

music21-rs against music21's tests

music21-rs passes 6826 of 6827 examples and 274 of 275 unit tests, across 19 modules

ModuleDocstringsExamplesUnit tests
music21.chord
105 of 105
970 of 970
28 of 28
music21.pitch
83 of 83
930 of 930
27 of 27
music21.interval
107 of 107
771 of 771
13 of 13
music21.duration
53 of 53
588 of 588
15 of 15
music21.roman
34 of 34
560 of 560
33 of 33
music21.voiceLeading
61 of 61
513 of 513
2 of 2
music21.meter.base
34 of 34
387 of 387
22 of 22
music21.harmony
25 of 25
361 of 361
26 of 26
music21.scale
62 of 62
344 of 344
39 of 39
music21.note
33 of 33
341 of 341
12 of 13
music21.key
18 of 18
245 of 245
7 of 7
music21.tempo
27 of 27
196 of 196
17 of 17
music21.serial
22 of 22
149 of 149
6 of 6
music21.figuredBass.notation
12 of 12
129 of 129
3 of 3
music21.beam
13 of 13
112 of 112
2 of 2
music21.sieve
24 of 25
106 of 107
8 of 8
music21.chord.tables
10 of 10
65 of 65
5 of 5
music21.volume
9 of 9
46 of 46
9 of 9
music21.tie
2 of 2
13 of 13
0 of 0
every module
734 of 735
6826 of 6827
274 of 275

music21's own docstrings and unit tests, run against the crate. A docstring passes only when every one of its examples does. The unit-test column is the music21's own test suite row above, attributed per module; a test music21 itself fails counts here as not passing.

Ported from music21

617 members: 568 ported49 still to port590 in the wheel30 in the wheel only

48 classes
Chordchord/__init__.py 95 of 9595 in the wheel

Chord analysis and the notation its notes carry. The per-note getters and setters music21 deprecated in v11 are the note's own methods here, reached through `notes_mut`.

music21Statusmusic21-rsWheel
formatVectorStringportedformat_vector_stringyes
addportedaddyes
annotateIntervalsportedannotate_intervalsyes
areZRelationsportedare_z_relationsyes
bassportedbassyes
canBeDominantVportedcan_be_dominant_vyes
canBeTonicportedcan_be_tonicyes
closedPositionportedclosed_positionyes
containsSeventhportedcontains_seventhyes
containsTriadportedcontains_triadyes
geometricNormalFormportedgeometric_normal_formyes
getChordStepportedchord_stepyes
getColorportedcoloryes
getNoteheadportednoteheadyes
getNoteheadFillportednotehead_fillyes
getStemDirectionportedstem_directionyes
getTieportedtieyes
getVolumeportedvolumeyes
getZRelationportedz_relationyes
hasAnyEnharmonicSpelledPitchesportedhas_any_enharmonic_spelled_pitchesyes
hasAnyRepeatedDiatonicNoteportedhas_any_repeated_diatonic_noteyes
hasRepeatedChordStepportedhas_repeated_chord_stepyes
intervalFromChordStepportedinterval_from_chord_stepyes
inversionportedinversionyes
inversionNameportedinversion_nameyes
inversionTextportedinversion_textyes
isAugmentedSixthportedis_augmented_sixthyes
isAugmentedTriadportedis_augmented_triadyes
isConsonantportedis_consonantyes
isDiminishedSeventhportedis_diminished_seventhyes
isSeventhOfTypeportedis_seventh_of_typeyes
isDiminishedTriadportedis_diminished_triadyes
isDominantSeventhportedis_dominant_seventhyes
isFalseDiminishedSeventhportedis_false_diminished_seventhyes
isFrenchAugmentedSixthportedis_french_augmented_sixthyes
isGermanAugmentedSixthportedis_german_augmented_sixthyes
isHalfDiminishedSeventhportedis_half_diminished_seventhyes
isIncompleteMajorTriadportedis_incomplete_major_triadyes
isIncompleteMinorTriadportedis_incomplete_minor_triadyes
isItalianAugmentedSixthportedis_italian_augmented_sixthyes
isMajorTriadportedis_major_triadyes
isMinorTriadportedis_minor_triadyes
isTranspositionallySymmetricalportedis_transpositionally_symmetricalyes
isSeventhportedis_seventhyes
isNinthportedis_ninthyes
isSwissAugmentedSixthportedis_swiss_augmented_sixthyes
isTriadportedis_triadyes
removeRedundantPitchesportedremove_redundant_pitchesyes
removeRedundantPitchClassesportedremove_redundant_pitch_classesyes
removeRedundantPitchNamesportedremove_redundant_pitch_namesyes
rootportedrootyes
semiClosedPositionportedsemi_closed_positionyes
semitonesFromChordStepportedsemitones_from_chord_stepyes
setColorportedset_coloryes
setNoteheadportedset_noteheadyes
setNoteheadFillportedset_notehead_fillyes
setStemDirectionportedset_stem_directionyes
setTieportedset_tieyes
setVolumeportedset_volumeyes
simplifyEnharmonicsportedsimplify_enharmonicsyes
sortAscendingportedsort_ascendingyes
sortChromaticAscendingportedsort_chromatic_ascendingyes
sortDiatonicAscendingportedsort_diatonic_ascendingyes
sortFrequencyAscendingportedsort_frequency_ascendingyes
transposeportedtransposeyes
chordTablesAddressportedchord_tables_address_entryyes
commonNameportedcommon_nameyes
durationporteddurationyes
fifthportedfifthyes
forteClassportedforte_classyes
forteClassNumberportedforte_class_numberyes
forteClassTnportedforte_class_tnyes
forteClassTnIportedforte_class_tniyes
fullNameportedfull_nameyes
hasZRelationportedhas_z_relationyes
intervalVectorportedinterval_class_vectoryes
intervalVectorStringportedinterval_vector_stringyes
isPrimeFormInversionportedis_prime_form_inversionyes
multisetCardinalityportedmultiset_cardinalityyes
notesportednotesyes
normalOrderportednormal_orderyes
normalOrderStringportednormal_order_stringyes
orderedPitchClassesportedpitch_classesyes
orderedPitchClassesStringportedordered_pitch_classes_stringyes
pitchClassCardinalityportedpitch_class_cardinalityyes
pitchClassesportednote_pitch_classesyes
pitchNamesportedpitch_namesyes
pitchedCommonNameportedpitched_common_nameyes
pitchesportedpitchesyes
primeFormportedprime_formyes
primeFormStringportedprime_form_stringyes
qualityportedqualityyes
scaleDegreesportedscale_degreesyes
seventhportedseventhyes
thirdportedthirdyes
Pitchpitch.py 43 of 4545 in the wheel
2 missing
music21Statusmusic21-rsWheel
groupsmissingstream groupingyes
informClientmissingobserver callback for a containing note; there is noneyes
accidentalportedaccidentalyes
microtoneportedmicrotoneyes
isTwelveToneportedis_twelve_toneyes
getCentShiftFromMidiportedcent_shift_from_midiyes
alterportedalteryes
convertQuarterTonesToMicrotonesportedconvert_quarter_tones_to_microtonesyes
convertMicrotonesToQuarterTonesportedconvert_microtones_to_quarter_tonesyes
psportedpsyes
midiportedmidiyes
nameportednameyes
unicodeNameportedunicode_nameyes
nameWithOctaveportedname_with_octaveyes
unicodeNameWithOctaveportedunicode_name_with_octaveyes
fullNameportedfull_nameyes
stepportedstepyes
pitchClassportedpitch_classyes
pitchClassStringportedpitch_class_stringyes
octaveportedoctaveyes
octaveIsImplicitportedoctave_is_implicityes
implicitOctaveportedimplicit_octaveyes
germanportedgermanyes
italianporteditalianyes
spanishportedspanishyes
frenchportedfrenchyes
frequencyportedfrequency_hzyes
freq440portedfrequency_hzyes
getHarmonicportedharmonicyes
harmonicFromFundamentalportedharmonic_from_fundamentalyes
harmonicStringportedharmonic_stringyes
harmonicAndFundamentalFromPitchportedharmonic_and_fundamental_from_pitchyes
harmonicAndFundamentalStringFromPitchportedharmonic_and_fundamental_string_from_pitchyes
isEnharmonicportedis_enharmonicyes
getHigherEnharmonicportedget_higher_enharmonicyes
getLowerEnharmonicportedget_lower_enharmonicyes
simplifyEnharmonicportedsimplify_enharmonicyes
getEnharmonicportedget_enharmonicyes
getAllCommonEnharmonicsportedall_common_enharmonicsyes
diatonicNoteNumporteddiatonic_note_numberyes
transposeportedtransposeyes
transposeBelowTargetportedtranspose_below_targetyes
transposeAboveTargetportedtranspose_above_targetyes
updateAccidentalDisplayportedupdate_accidental_displayyes
getStringHarmonicportedstring_harmonicyes
Accidentalpitch.py 12 of 1212 in the wheel
music21Statusmusic21-rsWheel
listNamesportedlist_namesyes
setportedsetyes
isTwelveToneportedis_twelve_toneyes
setAttributeIndependentlyportedset_attribute_independentlyyes
inheritDisplayportedinherit_displayyes
nameportednameyes
alterportedalteryes
modifierportedmodifieryes
displayTypeporteddisplay_typeyes
displayStatusporteddisplay_statusyes
unicodeportedunicodeyes
fullNameportedfull_nameyes
Microtonepitch.py 3 of 33 in the wheel
music21Statusmusic21-rsWheel
alterportedalteryes
centsportedcentsyes
harmonicShiftportedharmonic_shiftyes
Intervalinterval.py 29 of 2929 in the wheel
music21Statusmusic21-rsWheel
genericportedgenericyes
nameportednameyes
niceNameportednameyes
simpleNameportedsimple_nameyes
simpleNiceNameportedsimple_nice_nameyes
semiSimpleNameportedsemi_simple_nameyes
semiSimpleNiceNameportedsemi_simple_nice_nameyes
directedNameporteddirected_nameyes
directedNiceNameporteddirected_nice_nameyes
directedSimpleNameporteddirected_simple_nameyes
directedSimpleNiceNameporteddirected_simple_nice_nameyes
semitonesportedsemitonesyes
directionporteddirectionyes
specifierportedspecifieryes
specificNameportedspecific_nameyes
isDiatonicStepportedis_diatonic_stepyes
isChromaticStepportedis_chromatic_stepyes
isStepportedis_stepyes
isSkipportedis_skipyes
isConsonantportedis_consonantyes
complementportedcomplementyes
intervalClassportedinterval_classyes
centsportedcentsyes
transposePitchportedtranspose_pitchyes
reverseportedreversedyes
pitchStartportedpitch_startyes
pitchEndportedpitch_endyes
noteStartportednote_startyes
noteEndportednote_endyes
GenericIntervalinterval.py 26 of 2626 in the wheel
music21Statusmusic21-rsWheel
valueportedvalueyes
directedporteddirectedyes
undirectedportedundirectedyes
directionporteddirectionyes
isSkipportedis_skipyes
isDiatonicStepportedis_diatonic_stepyes
isStepportedis_stepyes
isUnisonportedis_unisonyes
simpleUndirectedportedsimple_undirectedyes
semiSimpleUndirectedportedsemi_simple_undirectedyes
undirectedOctavesportedundirected_octavesyes
octavesportedoctavesyes
simpleDirectedportedsimple_directedyes
semiSimpleDirectedportedsemi_simple_directedyes
perfectableportedis_perfectableyes
niceNameportednice_nameyes
simpleNiceNameportedsimple_nice_nameyes
semiSimpleNiceNameportedsemi_simple_nice_nameyes
staffDistanceportedstaff_distanceyes
mod7inversionportedmod7_inversionyes
mod7portedmod7yes
complementportedcomplementyes
reverseportedreverseyes
transposePitchportedtranspose_pitchyes
transposePitchKeyAwareportedtranspose_pitch_key_awareyes
getDiatonicportedget_diatonicyes
DiatonicIntervalinterval.py 25 of 2525 in the wheel
music21Statusmusic21-rsWheel
nameportednameyes
niceNameportednice_nameyes
specificNameportedspecific_nameyes
simpleNameportedsimple_nameyes
simpleNiceNameportedsimple_nice_nameyes
semiSimpleNameportedsemi_simple_nameyes
semiSimpleNiceNameportedsemi_simple_nice_nameyes
directionporteddirectionyes
directedNameporteddirected_nameyes
directedNiceNameporteddirected_nice_nameyes
directedSimpleNameporteddirected_simple_nameyes
directedSimpleNiceNameporteddirected_simple_nice_nameyes
directedSemiSimpleNameporteddirected_semi_simple_nameyes
directedSemiSimpleNiceNameporteddirected_semi_simple_nice_nameyes
isStepportedis_stepyes
isDiatonicStepportedis_diatonic_stepyes
isSkipportedis_skipyes
perfectableportedis_perfectableyes
mod7inversionportedmod7_inversionyes
mod7portedmod7yes
reverseportedreverseyes
getChromaticportedget_chromaticyes
transposePitchportedtranspose_pitchyes
specifierAbbreviationportedspecifier_abbreviationyes
centsportedcentsyes
ChromaticIntervalinterval.py 13 of 1313 in the wheel
music21Statusmusic21-rsWheel
centsportedcentsyes
directedporteddirectedyes
undirectedportedundirectedyes
directionporteddirectionyes
mod12portedmod12yes
simpleUndirectedportedsimple_undirectedyes
simpleDirectedportedsimple_directedyes
intervalClassportedinterval_classyes
isChromaticStepportedis_chromatic_stepyes
isStepportedis_stepyes
reverseportedreverseyes
getDiatonicportedget_diatonicyes
transposePitchportedtranspose_pitchyes
Specifierinterval.py 4 of 44 in the wheel
music21Statusmusic21-rsWheel
niceNameportednice_nameyes
inversionportedinversionyes
semitonesAbovePerfectportedsemitones_above_perfectyes
semitonesAboveMajorportedsemitones_above_majoryes
interval.py functionsinterval.py 20 of 2020 in the wheel

Module-level helpers.

music21Statusmusic21-rsWheel
convertStaffDistanceToIntervalportedstaff_distance_to_generic_numberyes
convertDiatonicNumberToStepportedconvert_diatonic_number_to_stepyes
parseSpecifierportedparse_specifieryes
convertGenericportedconvert_genericyes
convertSemitoneToSpecifierGenericMicrotoneportedconvert_semitone_to_specifier_generic_microtoneyes
convertSemitoneToSpecifierGenericportedconvert_semitone_to_specifier_genericyes
intervalToPythagoreanRatioportedpythagorean_ratioyes
notesToGenericportednotes_to_genericyes
notesToChromaticportednotes_to_chromaticyes
intervalsToDiatonicportedintervals_to_diatonicyes
intervalFromGenericAndChromaticportedfrom_generic_and_chromaticyes
getWrittenHigherNoteportedwritten_higher_pitchyes
getAbsoluteHigherNoteportedabsolute_higher_pitchyes
getWrittenLowerNoteportedwritten_lower_pitchyes
getAbsoluteLowerNoteportedabsolute_lower_pitchyes
transposePitchportedtranspose_pitchyes
transposeNoteportedtranspose_noteyes
notesToIntervalportedbetween_pitchesyes
addportedsumyes
subtractporteddifferenceyes
KeySignaturekey.py 7 of 77 in the wheel
music21Statusmusic21-rsWheel
asKeyportedas_keyyes
alteredPitchesportedaltered_pitchesyes
accidentalByStepportedaccidental_by_stepyes
transposeportedtransposeyes
transposePitchFromCportedtranspose_pitch_from_cyes
getScaleportedscaleyes
sharpsportedsharpsyes
Keykey.py 6 of 66 in the wheel

tonalCertainty belongs to a key that came out of analysis, so it lives on the ranked estimates in `analysis`.

music21Statusmusic21-rsWheel
relativeportedrelativeyes
parallelportedparallelyes
tonicPitchNameWithCaseportedtonic_pitch_name_with_caseyes
deriveByDegreeportedderive_by_degreeyes
tonalCertaintyportedtonal_certaintyyes
transposeportedtransposeyes
ConcreteScalescale/__init__.py 23 of 2725 in the wheel
4 missing
music21Statusmusic21-rsWheel
isConcretemissingthe AbstractScale layer is not modelledyes
abstractmissingthe AbstractScale layer is not modelledyes
writemissingnotation outputno
showmissingnotation outputno
nameportedmusic21_nameyes
getTonicportedtonicyes
getDegreeMaxUniqueporteddegree_countyes
transposeportedtransposeyes
tuneportedtuneyes
romanNumeralportedroman_numeralyes
getPitchesportedpitchesyes
getChordportedchordyes
pitchFromDegreeportedpitch_at_degreeyes
pitchesFromScaleDegreesportedpitches_from_scale_degreesyes
intervalBetweenDegreesportedinterval_between_degreesyes
getScaleDegreeFromPitchporteddegree_ofyes
getScaleDegreeAndAccidentalFromPitchporteddegree_and_accidental_ofyes
solfegportedsolfegyes
nextPitchportednext_pitch_aboveyes
isNextportedis_nextyes
matchportedmatch_pitchesyes
findMissingportedfind_missingyes
deriveRankedportedderive_rankedyes
deriveportedderiveyes
deriveAllportedderive_allyes
deriveByDegreeportedderive_by_degreeyes
getScalaDataportedscala_datayes
scale/__init__.py classesscale/__init__.py 22 of 3222 in the wheel
10 missing

The ConcreteScale subclasses, as ScaleType variants or runtime constructors.

music21Statusmusic21-rsWheel
Scalemissingthe abstract baseyes
AbstractScalemissingthe IntervalNetwork layer; the steps are read off it into ScaleTypeyes
AbstractDiatonicScalemissingthe IntervalNetwork layerno
AbstractOctatonicScalemissingthe IntervalNetwork layerno
AbstractHarmonicMinorScalemissingthe IntervalNetwork layerno
AbstractMelodicMinorScalemissingthe IntervalNetwork layerno
AbstractCyclicalScalemissingthe IntervalNetwork layerno
AbstractOctaveRepeatingScalemissingthe IntervalNetwork layerno
ConcreteScalemissingrealized by Scale, StepScale and ScalaScaleyes
DiatonicScalemissingthe diatonic modes are ScaleType variantsyes
MajorScaleportedMajorScaleyes
MinorScaleportedMinorScaleyes
DorianScaleportedDorianScaleyes
PhrygianScaleportedPhrygianScaleyes
LydianScaleportedLydianScaleyes
MixolydianScaleportedMixolydianScaleyes
HypodorianScaleportedHypodorianScaleyes
HypophrygianScaleportedHypophrygianScaleyes
HypolydianScaleportedHypolydianScaleyes
HypomixolydianScaleportedHypomixolydianScaleyes
LocrianScaleportedLocrianScaleyes
HypolocrianScaleportedHypolocrianScaleyes
HypoaeolianScaleportedHypoaeolianScaleyes
HarmonicMinorScaleportedHarmonicMinorScaleyes
MelodicMinorScaleportedMelodicMinorScaleyes
OctatonicScaleportedOctatonicScaleyes
OctaveRepeatingScaleportedoctave_repeatingno
CyclicalScaleportedcyclicalno
ChromaticScaleportedChromaticScaleyes
WholeToneScaleportedWholeToneScaleyes
SieveScaleportedsieveno
ScalaScaleportedScalaScaleno
RomanNumeralroman.py 11 of 1111 in the wheel
music21Statusmusic21-rsWheel
adjustMinorVIandVIIByQualityportedadjust_minor_vi_and_vii_by_qualityyes
transposeportedtransposeyes
romanNumeralportedroman_numeralyes
figureportedfigureyes
figureAndKeyportedfigure_and_keyyes
keyportedkeyyes
scaleDegreeWithAlterationportedscale_degree_with_alterationyes
bassScaleDegreeFromNotationportedbass_scale_degree_from_notationyes
functionalityScoreportedfunctionality_scoreyes
isNeapolitanportedis_neapolitanyes
isMixtureportedis_mixtureyes
TimeSignaturemeter/base.py 29 of 3332 in the wheel
4 missing

The bar, the beats, the beams and the accent partitions, as the four MeterSequences music21 hangs off a meter; the tree is modelled here rather than the numbers being derived from the ratio alone.

music21Statusmusic21-rsWheel
resetValuesmissingrebuilding a meter in place; a new one is built insteadyes
loadmissingrebuilding a meter in place; a new one is built insteadyes
summedNumeratormissingwhether a meter was written (3+2)/8 rather than 3/8+2/8; the parts are kept either way, and music21 refuses to read the first spelling at allno
getMeasureOffsetOrMeterModulusOffsetmissingwhere an element sits in its stream is music21's to know; the wheel answers it thereyes
ratioStringportedratio_stringyes
ratioEqualportedratio_equalyes
numeratorportednumeratoryes
denominatorporteddenominatoryes
barDurationportedbar_durationyes
beatLengthToQuarterLengthRatioportedbeat_length_to_quarter_length_ratioyes
quarterLengthToBeatLengthRatioportedquarter_length_to_beat_length_ratioyes
beatCountportedbeat_countyes
beatCountNameportedbeat_count_nameyes
beatDurationportedbeat_durationyes
beatDivisionCountportedbeat_division_countyes
beatDivisionCountNameportedbeat_division_count_nameyes
beatDivisionDurationsportedbeat_division_durationsyes
beatSubDivisionDurationsportedbeat_sub_division_durationsyes
classificationportedclassificationyes
getBeamsportedbeams_foryes
setDisplayportedset_displayyes
getAccentportedaccentyes
setAccentWeightportedset_accent_weightyes
averageBeatStrengthportedaverage_beat_strengthyes
getAccentWeightportedaccent_weightyes
getBeatportedbeat_at_offsetyes
getBeatOffsetsportedbeat_offsetsyes
getBeatDurationportedbeat_durationyes
getOffsetFromBeatportedoffset_from_beatyes
getBeatProgressportedbeat_progressyes
getBeatProportionportedbeat_proportionyes
getBeatProportionStrportedbeat_proportion_stringyes
getBeatDepthportedbeat_depthyes
MetronomeMarktempo.py 10 of 1010 in the wheel
music21Statusmusic21-rsWheel
referentportedreferentyes
numberSoundingportednumber_soundingyes
getQuarterBPMportedquarter_bpmyes
setQuarterBPMportedquarter_bpmyes
getTextExpressionportedtext_expressionyes
getEquivalentByReferentportedequivalent_by_referentyes
getMaintainedNumberWithReferentportedmaintained_number_with_referentyes
secondsPerQuarterportedseconds_per_quarteryes
durationToSecondsportedduration_to_secondsyes
secondsToDurationportedseconds_to_durationyes
Durationduration.py 17 of 2424 in the wheel
7 missing

A quarter length, the note values it is written as, and the tuplets it is written inside.

music21Statusmusic21-rsWheel
linkedmissingan unlinked duration is written as one value and sounds as another, which needs a written value the length does not decideyes
consolidatemissingthe written values are read off the length here rather than assembled by handyes
getGraceDurationmissinga grace note is written but does not sound, which is the note's business and not the length'syes
informClientmissingobserver callback for a containing note; there is noneyes
sliceComponentAtPositionmissingthe written values are read off the length here rather than assembled by handyes
currentComponentsmissingthe working-out is not deferred here, so there is no half-worked-out state to readyes
splitDotGroupsmissingdot groups are a way of writing one length twice over; the crate keeps the lengthyes
addDurationTupleportedadd_duration_tupleyes
appendTupletportedappend_tupletyes
augmentOrDiminishportedaugment_or_diminishyes
clearportedclearyes
componentIndexAtQtrPositionportedcomponent_index_at_qtr_positionyes
componentStartTimeportedcomponent_start_timeyes
componentsportedcomponentsyes
dotGroupsporteddot_groupsyes
dotsporteddotsyes
fullNameportedfull_nameyes
isComplexportedis_complexyes
ordinalportedordinalyes
quarterLengthNoTupletsportedquarter_length_no_tupletsyes
quarterLengthportedquarter_lengthyes
tupletsportedtupletsyes
aggregateTupletMultiplierportedaggregate_tuplet_multiplieryes
typeportedduration_typeyes
ToneRowserial.py 10 of 1010 in the wheel
music21Statusmusic21-rsWheel
pitchClassesportedpitch_classesyes
noteNamesportednote_namesyes
isTwelveToneRowportedis_twelve_tone_rowyes
makeTwelveToneRowportedmake_twelve_tone_rowyes
isSameRowportedis_same_rowyes
getIntervalsAsStringportedintervals_as_stringyes
zeroCenteredTransformationportedzero_centered_transformationyes
originalCenteredTransformationportedoriginal_centered_transformationyes
findZeroCenteredTransformationsportedfind_zero_centered_transformationsyes
findOriginalCenteredTransformationsportedfind_original_centered_transformationsyes
TwelveToneRowserial.py 7 of 77 in the wheel
music21Statusmusic21-rsWheel
matrixportedmatrixyes
findHistoricalportedfind_historicalyes
findTransformedHistoricalportedfind_transformed_historicalyes
isAllIntervalportedis_all_intervalyes
getLinkClassificationportedlink_classificationyes
isLinkChordportedis_link_chordyes
areCombinatorialportedare_combinatorialyes
serial.py functionsserial.py 3 of 33 in the wheel

Module-level helpers.

music21Statusmusic21-rsWheel
getHistoricalRowByNameportedhistorical_row_by_nameyes
pcToToneRowportednewyes
rowToMatrixportedrow_to_matrixyes
VoiceLeadingQuartetvoiceLeading.py 30 of 3030 in the wheel
music21Statusmusic21-rsWheel
keyportedkeyyes
v1n1portedv1n1yes
v1n2portedv1n2yes
v2n1portedv2n1yes
v2n2portedv2n2yes
motionTypeportedmotion_typeyes
noMotionportedno_motionyes
obliqueMotionportedoblique_motionyes
similarMotionportedsimilar_motionyes
parallelMotionportedparallel_motionyes
contraryMotionportedcontrary_motionyes
outwardContraryMotionportedoutward_contrary_motionyes
inwardContraryMotionportedinward_contrary_motionyes
antiParallelMotionportedanti_parallel_motionyes
parallelIntervalportedparallel_intervalyes
parallelFifthportedparallel_fifthyes
parallelOctaveportedparallel_octaveyes
parallelUnisonportedparallel_unisonyes
parallelUnisonOrOctaveportedparallel_unison_or_octaveyes
hiddenIntervalportedhidden_intervalyes
hiddenFifthportedhidden_fifthyes
hiddenOctaveportedhidden_octaveyes
voiceOverlapportedvoice_overlapyes
voiceCrossingportedvoice_crossingyes
isProperResolutionportedis_proper_resolutionyes
leapNotSetWithStepportedleap_not_set_with_stepyes
modalOpeningportedmodal_openingyes
opensIncorrectlyportedopens_incorrectlyyes
clausulaVeraportedclausula_verayes
closesIncorrectlyportedcloses_incorrectlyyes
Sievesieve.py 3 of 97 in the wheel
6 missing

The sieve as written: parse, membership, the segment formats and the interval widths of one period.

music21Statusmusic21-rsWheel
expandmissingthe compressed reading of a sieve is not modelledno
compressmissingthe compressed reading of a sieve is not modelledno
setZmissingthe range is an argument of each question here, not state on the sieveyes
setZRangemissingthe range is an argument of each question here, not state on the sieveyes
setSegmentFormatmissingthe segment format is an argument of each question here, not state on the sieveyes
representmissingthe sieve is written by `Display`, which is not a function the map can nameyes
segmentportedsegmentyes
periodportedperiodyes
collectportedcollectyes
Beamsbeam.py 11 of 1212 in the wheel
1 missing

All the beams over one note, and the rules for a run of them.

music21Statusmusic21-rsWheel
naiveBeamsmissingit asks each object for its written value and whether it sounds, which is the facade's to ask; the rules it feeds are here as pure functions over the beamsyes
removeSandwichedUnbeamablesportedremove_sandwiched_unbeamablesyes
mergeConnectingPartialBeamsportedmerge_connecting_partial_beamsyes
sanitizePartialBeamsportedsanitize_partial_beamsyes
appendportedappendyes
fillportedfillyes
getByNumberportedby_numberyes
getNumbersportednumbersyes
getTypeByNumberportedby_numberyes
getTypesportedtypesyes
setAllportedset_allyes
setByNumberportedset_by_numberyes
Volumevolume.py 6 of 99 in the wheel
3 missing

How loud a note sounds, as a velocity and as a scalar.

music21Statusmusic21-rsWheel
getDynamicContextmissingthe dynamic in force is a search through the stream the note sits in; `realized_with` takes it as an argument insteadyes
cachedRealizedmissingthe crate caches nothing -- a value that answers the same question twice is doing arithmetic. The wheel caches as music21 doesyes
cachedRealizedStrmissingthe crate caches nothing -- a value that answers the same question twice is doing arithmetic. The wheel caches as music21 doesyes
mergeAttributesportedmerge_attributesyes
getRealizedStrportedrealized_stryes
getRealizedportedrealizedyes
realizedportedrealizedyes
velocityportedvelocityyes
velocityScalarportedvelocity_scalaryes
volume.py functionsvolume.py 0 of 10 in the wheel
1 missing
music21Statusmusic21-rsWheel
realizeVolumemissingwalks a stream, setting each note's volume from the dynamics in forceno
FigurefiguredBass/notation.py 1 of 11 in the wheel

One number of that column, with the accidental written against it.

music21Statusmusic21-rsWheel
isPureExtenderportedis_pure_extenderyes
ModifierfiguredBass/notation.py 2 of 22 in the wheel

The mark as written beside the accidental it means: figured bass has marks no accidental name covers, a `+` that raises and a `/` that lowers.

music21Statusmusic21-rsWheel
modifyPitchNameportedmodify_pitch_nameyes
modifyPitchportedmodifyyes
figuredBass/notation.py functionsfiguredBass/notation.py 1 of 11 in the wheel
music21Statusmusic21-rsWheel
convertToPitchportedconvert_to_pitchyes
sieve.py functionssieve.py 6 of 66 in the wheel

The number helpers music21 keeps beside the sieve: primes, and spacings across the unit interval.

music21Statusmusic21-rsWheel
eratosthenesportederatosthenesyes
rabinMillerportedrabin_milleryes
discreteBinaryPadporteddiscrete_binary_padyes
unitNormRangeportedunit_norm_rangeyes
unitNormEqualportedunit_norm_equalyes
unitNormStepportedunit_norm_stepyes
GeneralNotenote.py 7 of 88 in the wheel
1 missing

What every written note and chord has: a length, what is sung to it, and the marks over it. The crate has no type of its own for it -- the GeneralNote to NotRest to Note chain was mirrored here once as wrapper structs and taken out again -- so its members are matched against the types that carry them.

music21Statusmusic21-rsWheel
getGracemissinga grace note is written and does not sound, which is a duration music21 keeps unlinked; the wheel makes one by swapping that duration inyes
tieportedtieyes
lyricportedlyricyes
addLyricportedadd_lyricyes
insertLyricportedinsert_lyricyes
fullNameportedfull_nameyes
pitchesportedpitchesyes
augmentOrDiminishportedaugment_or_diminishyes
NotRestnote.py 6 of 88 in the wheel
2 missing

A note or chord as distinct from a rest: what it is written as, which way its stem goes, and how loud it sounds.

music21Statusmusic21-rsWheel
storedInstrumentmissingthe crate models no instrumentsyes
getInstrumentmissingthe crate models no instrumentsyes
stemDirectionportedstem_directionyes
noteheadportednoteheadyes
noteheadFillportednotehead_fillyes
noteheadParenthesisportednotehead_parenthesisyes
hasVolumeInformationportedhas_volume_informationyes
volumeportedvolumeyes
Lyricnote.py 7 of 77 in the wheel

A syllable sung to a note.

music21Statusmusic21-rsWheel
isCompositeportedis_compositeyes
textportedtextyes
syllabicportedsyllabicyes
identifierportedidentifieryes
rawTextportedraw_textyes
numberportednumberyes
setTextAndSyllabicportedset_text_and_syllabicyes
Restnote.py 1 of 10 in the wheel

A silence of a written length.

music21Statusmusic21-rsWheel
fullNameportedfull_nameno
ChordBasechord/__init__.py 7 of 77 in the wheel

What a chord is before it is asked anything: the notes it holds, and adding to and taking from them.

music21Statusmusic21-rsWheel
addportedaddyes
removeportedremoveyes
notesportednotesyes
tieportedtieyes
volumeportedvolumeyes
hasComponentVolumesportedhas_component_volumesyes
setVolumesportedset_volumesyes
Tupletduration.py 10 of 1010 in the wheel

The bracket that says a length is written as one thing and sounds as another.

music21Statusmusic21-rsWheel
augmentOrDiminishportedaugment_or_diminishyes
setDurationTypeportedset_duration_typeyes
setRatioportedset_ratioyes
totalTupletLengthportedtotal_tuplet_lengthyes
tupletMultiplierportedmultiplieryes
durationActualportedduration_actualyes
durationNormalportedduration_normalyes
fullNameportedfull_nameyes
tupletActualportedtuplet_actualyes
tupletNormalportedtuplet_normalyes
Notenote.py 7 of 88 in the wheel
1 missing

A pitch and an optional duration.

music21Statusmusic21-rsWheel
pitchChangedmissingobserver callback; there is noneyes
nameportedpitch_nameyes
nameWithOctaveportedpitch_name_with_octaveyes
stepportedstepyes
octaveportedoctaveyes
pitchesportedpitchesyes
transposeportedtransposeyes
fullNameportedfull_nameyes
ChordSymbolharmony.py 3 of 30 in the wheel
music21Statusmusic21-rsWheel
findFigureportedfind_figureno
inversionIsValidportedinversion_is_validno
transposeportedtransposeno
pitch.py functionspitch.py 4 of 44 in the wheel

Module-level helpers.

music21Statusmusic21-rsWheel
isValidAccidentalNameportedis_valid_nameyes
standardizeAccidentalNameportedstandardize_nameyes
convertPitchClassToStrportedconvert_pitch_class_to_stryes
simplifyMultipleEnharmonicsportedsimplify_multiple_enharmonicsyes
key.py functionskey.py 3 of 33 in the wheel

Module-level helpers.

music21Statusmusic21-rsWheel
convertKeyStringToMusic21KeyStringportedconvert_key_string_to_music21_key_stringyes
sharpsToPitchportedsharps_to_pitchyes
pitchToSharpsportedpitch_to_sharpsyes
duration.py functionsduration.py 12 of 1212 in the wheel

Module-level helpers.

music21Statusmusic21-rsWheel
nextLargerTypeportednext_largeryes
nextSmallerTypeportednext_smalleryes
quarterLengthToClosestTypeportedquarter_length_to_closest_typeyes
convertQuarterLengthToTypeportedfrom_quarter_lengthyes
dottedMatchportedtype_and_dotsyes
quarterLengthToNonPowerOf2Tupletportedquarter_length_to_non_power_of_2_tupletyes
quarterLengthToTupletportedquarter_length_to_tupletyes
quarterConversionportedquarter_conversionyes
convertTypeToQuarterLengthportedquarter_lengthyes
convertTypeToNumberportedtype_numberyes
durationTupleFromQuarterLengthportedtype_and_dotsyes
durationTupleFromTypeDotsportedfrom_type_with_dotsyes
tempo.py functionstempo.py 1 of 21 in the wheel
1 missing

Module-level helpers.

music21Statusmusic21-rsWheel
interpolateElementsmissinginterpolates tempo across the elements of a streamno
convertTempoByReferentportedconvert_tempo_by_referentyes
roman.py functionsroman.py 8 of 88 in the wheel

Module-level helpers.

music21Statusmusic21-rsWheel
expandShortHandportedexpand_shorthandyes
correctSuffixForChordQualityportedcorrect_suffix_for_chord_qualityyes
figureTuplesportedfigure_tuplesyes
figureTupleSoloportedfrom_pitch_and_referenceyes
identifyAsTonicOrDominantportedidentify_as_tonic_or_dominantyes
romanInversionNameportedroman_inversion_nameyes
correctRNAlterationForMinorportedcorrect_rn_alteration_for_minoryes
romanNumeralFromChordportedroman_numeral_from_chordyes
chord/__init__.py functionschord/__init__.py 2 of 22 in the wheel

Module-level helpers.

music21Statusmusic21-rsWheel
fromForteClassportedfrom_forte_classyes
fromIntervalVectorportedfrom_interval_vectoryes
chord/tables.py functionschord/tables.py 9 of 99 in the wheel

The Forte tables of set classes, read without a chord in hand. The data is generated from music21's own and checked by `xtask verify-tables`.

music21Statusmusic21-rsWheel
forteIndexToInversionsAvailableportedinversions_availableyes
addressToTransposedNormalFormportednormal_formyes
addressToPrimeFormportedprime_formyes
addressToIntervalVectorportedinterval_class_vectoryes
intervalVectorToAddressportedset_classes_with_interval_vectoryes
addressToZAddressportedz_related_classyes
addressToCommonNamesportedcommon_namesyes
addressToForteNameportedforte_nameyes
seekChordTablesAddressportedaddress_of_pitch_classesyes
harmony.py functionsharmony.py 5 of 95 in the wheel
4 missing

Module-level helpers.

music21Statusmusic21-rsWheel
addNewChordSymbolmissingmutates music21's global chord-type table; the table here is a constantno
changeAbbreviationFormissingmutates music21's global chord-type table; the table here is a constantno
removeChordSymbolsmissingmutates music21's global chord-type table; the table here is a constantno
realizeChordSymbolDurationsmissingstretches chord symbols across a streamno
chordSymbolFigureFromChordportedchord_symbol_figure_from_chordyes
chordSymbolFromChordportedchord_symbol_from_chordyes
getAbbreviationListGivenChordTypeportedabbreviations_for_kindyes
getCurrentAbbreviationForportedcurrent_abbreviation_for_kindyes
getNotationStringGivenChordTypeportednotation_for_kindyes
meter/base.py functionsmeter/base.py 1 of 11 in the wheel

Module-level helpers.

music21Statusmusic21-rsWheel
bestTimeSignatureportedbest_time_signatureyes
voiceLeading.py functionsvoiceLeading.py 0 of 20 in the wheel
2 missing

Module-level helpers.

music21Statusmusic21-rsWheel
getVerticalityFromObjectmissingwalks a streamno
iterateAllVoiceLeadingQuartetsmissingwalks a streamno

Every public member of the music21 classes the crate ports, read from the submodule. A reason for not porting one is shown beside it but still counts against the total. The wheel is asked separately and under music21's own names: the crate may leave a member out on purpose, but one the wheel lacks is a member a program loses when it calls install_into_music21(). It runs the other way too — a member counted in the wheel only is one the facade answers and the crate has no function for, because what it answers is Python's rather than music theory: a cached value, a callback from the object that holds it, an instrument, or a walk through the stream a note sits in.