Changelog

Version 0.5.0

  • considerable changes to Parse objects (bugs might still be abundant, please report them)
    • abolished custom DataFrame indices

    • behaviour shaped towards ms3’s standard corpus structure
      • automatic detection of corpora and generation of keys

      • this enables better matching of files that belong together through View objects (access via p['key'])

      • new method iter() for iterating through metadata and files that belong together

    • all JSON files passed under the paths argument are now scanned for a contained list of file paths to be extracted (as opposed to before where the JSON file had to be passed as a single path)

    • new iterator p.annotation_objects()

  • new module transformations
    • just as utils, members can be imported directly via from ms3 import

    • includes a couple of functions that were previously part of utils or expand_dcml

    • includes a couple of new functions:
      • get_chord_sequences()

      • group_annotations_by_features()

      • make_gantt_data()

      • transform_annotations()

      • transform_multiple()

  • handling hierarchical localkeys and pedals (i.e. we can modulate to the key of V/III)

  • Renamed column ‘durations_quarterbeats’ to ‘duration_qb’

  • You can now set interval_index = True to add quarterbeat columns and an index with quarterbeat intervals

  • New behaviour of the folder_re argument: It now gets to all paths matching the regEx rather than stopping at a higher level that doesn’t match. Effectively, this allows, for example, to do Parse(path, folder_re='notes') to select all files from folders called notes.

  • bug fixes (e.g. failing less on incoherent repeat structures)

Version 0.4.10

  • Enabled extraction of score labels.

  • Made the use of labels_cfg more consistent.

  • improved chord lists:
    • include system and tempo texts

    • new algorithm for correct spanner IDs (i.e. for Slurs, Pedal, HairPins, Ottava)

    • lyrics: still extracts only the last verse but now in the corresponding column, e.g. lyrics:3 for verse 3.

  • new feature (still in beta): extraction of form labels
    • Score.mscx.form_labels

    • Parse.form_labels()

    • added form_labels -related parameters to Parse.get_lists() and Parse.store_lists()

    • added utils.expand_form_labels() for hierarchical display of form labels

Version 0.4.9

  • enabled import from ms3 for all utils

  • new command ms3 update for converting files and moving annotations to the Roman Numeral Analysis layer

  • new command ms3 metadata for writing manually changed information from metadata.tsv to the metadata fields of the corresponding MuseScore files

  • improved the ms3 extract command:
    • added option -D for extracting and updating metadata.tsv and README.md

    • added option -q for adding ‘quarterbeats’ and ‘durations_quarterbeats’ columns

    • included default paths for the capital-letter parameters

  • improved the ms3 compare command:
    • now works with ‘expanded’ TSVs, too (not only with ‘labels’)

    • allows ‘label’ column to include NaN values

  • improvements to Parse() objects:
    • attempts to parse scores that need file conversion (e.g. XML, MIDI)

    • get_lists() method now allows for adding the columns quarterbeats and durations_quarterbeats, even without unfolding repeats

    • adding ‘quarterbeats’ without unfolding repeats excludes voltas

    • new method get_tsvs() for retrieving and concatenating parsed TSV files

    • Parse() now recognizes metadata.tsv files, expanded TSVs, and TSVs containing cadence labels only

    • parsed metadata.tsv files can be retrieved/included via the method metadata()

    • new method update_metadata() for the new ms3 metadata command

    • decided on standard index levels rel_paths and fnames

    • improved matching of corresponding score and TSV files

  • improvements to Score() objects:
    • new property Score.mscx.volta_structure for retrieving information on first and second endings

  • improvements to Annotations() objects:
    • correct propagation of localkey for voltas

  • improvements to commandline interface:
    • added parameter -o for specifying output directory

    • harmonized the interface of the ms3 convert command

    • parameter exclude_re now also filters paths passed via -f

  • changed logging behaviours:
    • write only WARNINGs to log file

    • combine loggers for filenames independently of file extensions

  • improved extraction of instrument names for metadata

  • improved ms3 compare functionality

  • restructured code architecture

  • renamed master branch to ‘main’

  • many bug fixes

Version 0.4.8

  • now reads DCML labels with cadence annotations

  • unified command-line interface file options and included -f file.json

  • Parse got more options for creating DataFrame index levels

  • Parse.measures property for convenience

  • bug fixes for better GitHub workflows

Version 0.4.7

  • Labels can be attached to MuseScore’s Roman Numeral Analysis (RNA) layer
    • parameter label_type=1 in both Score.attach_labels() and Parse.attach_labels()

    • Annotations.remove_initial_dots() before inserting into the RNA layer

    • Annotations.add_initial_dots() before inserting into the absolute chord layer

  • interpret all #vii in major contexts as vii when computing chord tones

  • code cosmetics and bug fixes

Version 0.4.6

  • ms3 extract and Parse.store_lists() now have the option unfold to account for repeats

  • minor bug fixes

Version 0.4.5

  • added ‘ms3 compare’ command

  • support for parsing cap, capx, midi, musicxml, mxl, and xml files through temporary conversion

  • support for parsing MuseScore 2 files through temporary conversion

Version 0.4.3

  • added ‘ms3 check’ command

  • support of coloured labels

  • write coloured labels to score comparing attached and detached labels to each other

  • better interface for defining log file paths (more options, now conforming to the Parse.store_lists() interface)

  • fixed erroneous separation of alternative labels

Version 0.4.2

  • small bug fixes

  • correct computation of chord tones for new DCML syntax elements +M, -, ^, and v

Version 0.4.1

  • ms3 0.4.1 supports parsing (but not storing) compressed MuseScore files (.mscz)

  • Installs “ms3 convert” command to your system for batch conversion using your local MuseScore installation

  • “ms3 extract” command now supports creation of log files

  • take labels_cfg into account when creating expanded chord tables

Version 0.4.0

  • The standard column ‘onset’ has been renamed to ‘mc_onset’ and ‘mn_onset’ has been added as an additional standard column.

  • Parse TSV files as Annotations objects

  • Parse.attach_labels() for inserting annotations into MuseScore files

  • Prepare detached labels so that they can actually be attached

  • Install “ms3 extract” command to the system

  • Including da capo, dal segno, fine, and coda for calculating ‘next’ column in measures tables (for correct unfolding of repeats)

  • Simulate parsing and table extraction

  • Passing labels_cfg to Score/Parse to control the format of annotation lists

  • Easy access to individual parsed files through Parse[ID] or Parse[ix]

  • parse annotation files with diverging column names

Version 0.3.0

  • Parse.detach_levels() for emptying all parsed scores from annotations

  • Parse.store_mscx() for storing altered (e.g. emptied) score objects as MuseScore files

  • Parse.metadata() to return a DataFrame with all parsed pieces’ metadata

  • Parse.get_labels() to retrieve labels of a particular kind

  • Parse.info() has improved the information that objects return about themselves

  • Parse.key for a quick overview of the files of a given key

  • Parse can be used with a custom index instead of IDs [an ID is an (key, i) tuple]

  • Score.store_list() for easily storing TSVs

  • renamed Score.output_mscx() to store_mscx() for consistency.

  • improved expansion of DCML harmony labels

Version 0.2.0

Beta stage:

  • attaching and detaching labels

  • parsing multiple pieces at once

  • extraction of metadata from scores

  • inclusion of staff text, dynamics and articulation in chord lists, added ‘auto’ mode

  • conversion of MuseScore’s encoding of absolute chords

  • first version of docs

Version 0.1.3

At this stage, the library can parse MuseScore 3 files to different types of lists:

  • measures

  • chords (= groups of notes)
    • including slurs and spanners such as pedal, 8va or hairpin markings

    • including lyrics

  • notes

  • harmonies

and also some basic metadata.

Version 0.1.0

  • Basic parser implemented

  • Logging

  • Measure lists