ms3

ms3: A parser for MuseScore files, serving as data factory for annotated music corpora - Published in JOSS (2023)

https://github.com/johentsch/ms3

Science Score: 95.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 1 DOI reference(s) in JOSS metadata
  • Academic publication links
  • Committers with academic emails
    2 of 8 committers (25.0%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
    Published in Journal of Open Source Software

Keywords

corpus corpus-data corpus-generator corpus-processing corpus-tools musescore musescore2 musescore3 musescore4 music-score music-scores parser sheet-music sheet-music-parser tsv tsv-files tsv-format xml-parser xml-parser-library xml-parsing

Keywords from Contributors

standardization
Last synced: 6 months ago · JSON representation

Repository

A parser for annotated MuseScore 3 files.

Basic Info
  • Host: GitHub
  • Owner: johentsch
  • License: gpl-3.0
  • Language: Python
  • Default Branch: main
  • Homepage: https://ms3.readthedocs.io
  • Size: 105 MB
Statistics
  • Stars: 49
  • Watchers: 1
  • Forks: 4
  • Open Issues: 26
  • Releases: 60
Topics
corpus corpus-data corpus-generator corpus-processing corpus-tools musescore musescore2 musescore3 musescore4 music-score music-scores parser sheet-music sheet-music-parser tsv tsv-files tsv-format xml-parser xml-parser-library xml-parsing
Created almost 6 years ago · Last pushed 11 months ago
Metadata Files
Readme Contributing License Authors Codemeta

README.rst

|license| |version| |release|  |size|

.. |license| image:: https://img.shields.io/github/license/johentsch/ms3?color=%230000ff
    :alt: GitHub

.. |release| image:: https://img.shields.io/github/release-date/johentsch/ms3
    :alt: GitHub Release Date

.. |size| image:: https://img.shields.io/github/repo-size/johentsch/ms3
    :alt: GitHub repo size

.. .. |tests| image:: https://img.shields.io/github/workflow/status/johentsch/ms3/run_tests/main?label=tests
    :alt: GitHub Workflow Status (branch)

.. |version| image:: https://img.shields.io/pypi/v/ms3?color=%2300
    :alt: PyPI

.. These are examples of badges you might want to add to your README:
   please update the URLs accordingly

    .. image:: https://readthedocs.org/projects/ms3/badge/?version=latest
        :alt: ReadTheDocs
        :target: https://ms3.readthedocs.io/en/stable/
    .. image:: https://img.shields.io/coveralls/github//ms3/main.svg
        :alt: Coveralls
        :target: https://coveralls.io/r//ms3
    .. image:: https://img.shields.io/pypi/v/ms3.svg
        :alt: PyPI-Server
        :target: https://pypi.org/project/ms3/
    .. image:: https://pepy.tech/badge/ms3/month
        :alt: Monthly Downloads
        :target: https://pepy.tech/project/ms3


===============================
ms3 - Parsing MuseScore 3 and 4
===============================

..
    Plan to use
    .. include:: ./docs/intro.rst
    failed because of PyPi


Welcome to **ms3**, a Python library for parsing `MuseScore `__ files.

Statement of need
=================

Here comes a list of functionalities to help you decide if this library could be useful for you.

* parses MuseScore 3 and 4 files, dispensing with lossy conversion to musicXML. The file formats in question are

  * uncompressed ``*.mscx`` files,
  * compressed ``*.mscz`` files,

* extracts and processes the information contained in one or many scores in the form of
  `DataFrames `__:

  * **notes** (start, duration, pitch etc.) and/or rests,
  * **measures** (time signature, lengths, repeat structure etc.)
  * **labels**, such as

    * guitar/Jazz chord labels
    * arbitrary annotation labels
    * **expanded** harmony labels following the `DCML annotation standard `__
    * **cadences** (part of the same annotation syntax)
    * **form_labels** (annotation standard currently in press)

  * **chords**, that is, onset positions that have musical markup attached, e.g. dynamics, lyrics, slurs, 8va signs...
  * **metadata** from the respective fields, but also score statistics, such as length, number of notes, etc.

* stores the extracted information in a uniform and interoperable tabular format (``*.tsv``)
* writes information from tabular ``*.tsv`` files into MuseScore files, especially

  * chord and annotation labels
  * metadata
  * header information (title, subtitle, etc.)
  * note coloring

* uses a locally installed or standalone MuseScore executable for

  * batch-converting files to any output format supported by MuseScore (mscz, mscx, mp3, midi, pdf etc.)
  * on-the-fly converting any file that MuseScore can read (including MuseScore 2, cap, capx, midi, and musicxml) to parse it

* offers its functionality via the convenient ``ms3`` commandline interface.

View the `full documentation here `__.

For a demo video (using an old, pre-1.0.0 version) on YouTube, `click here `__

Installation
============

ms3 requires Python >= 3.10 (type ``python3 --version`` to check). Once you have switched to a virtual environment
that has Python 3.10 installed you can pip-install the library via one of the two commands::

    python3 -m pip install ms3
    pip install ms3

If successful, the installation will make the ``ms3`` commands available in your PATH (try by typing ``ms3``).

Quick demo
==========

Parsing a single score
----------------------

.. code-block:: python

    import ms3
    score = ms3.Score('musescore_file.mscz')

Parsing a corpus
----------------

.. code-block:: python

    import ms3
    corpus = ms3.Corpus('score_directory')
    corpus.parse()

Parsing several corpora
-----------------------

.. code-block:: python

    import ms3
    corpora = ms3.Parse('my_research_corpora')
    corpora.parse()


.. _pyscaffold-notes:

Making Changes & Contributing
=============================

This project uses `pre-commit `__ to ensure code quality. If you are a developer,
please make sure to install it before making any changes::

    cd ms3
    pip install -e ".[dev]" # includes "pip install pre-commit"
    pre-commit install


Acknowledgements
================

Development of this software tool was supported by the Swiss National Science Foundation within the project “Distant
Listening – The Development of Harmony over Three Centuries (1700–2000)” (Grant no. 182811). This project is being
conducted at the Latour Chair in Digital and Cognitive Musicology, generously funded by Mr. Claude Latour.

.. image:: https://img.shields.io/badge/-PyScaffold-005CA0?logo=pyscaffold
    :alt: Project generated with PyScaffold
    :target: https://pyscaffold.org/

Owner

  • Name: Johannes Hentschel
  • Login: johentsch
  • Kind: user
  • Location: Lausanne
  • Company: @DCMLab

Music education, music theory, and Romance studies in Freiburg i. Br., Lübeck, and Helsinki. PhD candidate @ Digital and Cognitive Musicology Lab @ EPFL

JOSS Publication

ms3: A parser for MuseScore files, serving as data factory for annotated music corpora
Published
August 14, 2023
Volume 8, Issue 88, Page 5195
Authors
Johannes Hentschel ORCID
École Polytechnique Fédérale de Lausanne, Switzerland
Martin Rohrmeier ORCID
École Polytechnique Fédérale de Lausanne, Switzerland
Editor
Fabian-Robert Stöter ORCID
Tags
python music scores corpus corpora data musescore tab-separated values

CodeMeta (codemeta.json)

{
  "@context": "https://doi.org/10.5063/schema/codemeta-2.0",
  "@type": "SoftwareSourceCode",
  "license": "https://spdx.org/licenses/AGPL-3.0",
  "codeRepository": "git+https://github.com/johentsch/ms3.git",
  "dateCreated": "2020-05-03",
  "datePublished": "2020-07-06",
  "issueTracker": "https://github.com/johentsch/ms3/issues",
  "name": "ms3",
  "description": "A parser for MuseScore 3 files and data factory for annotated music corpora.",
  "applicationCategory": "Music",
  "funding": "Swiss National Science Foundation (Grant no. 182811), Mr. Claude Latour (Latour Chair in Digital and Cognitive Musicology)",
  "funder": {
    "@type": "Organization",
    "name": "École Polytechnique Fédérale de Lausanne, Digital and Cognitive Musicology Lab"
  },
  "keywords": [
    "python",
    "music",
    "scores",
    "corpus",
    "corpora",
    "data",
    "musescore",
    "tab-separated values"
  ],
  "programmingLanguage": [
    "Python 3"
  ],
  "operatingSystem": [
    "Linux",
    "Windows",
    "macOS"
  ],
  "softwareRequirements": [
    "https://musescore.org/en/3.6.2 (optional)"
  ],
  "relatedLink": [
    "https://github.com/DCMLab/dcml_corpora"
  ],
  "author": [
    {
      "@type": "Person",
      "@id": "https://orcid.org/0000-0002-1986-9545",
      "givenName": "Johannes",
      "familyName": "Hentschel",
      "email": "johannes.hentschel@epfl.ch",
      "affiliation": {
        "@type": "Organization",
        "name": "Digital and Cognitive Musicology Lab, École Polytechnique Fédérale de Lausanne"
      }
    }
  ],
  "contributor": [
    {
      "@type": "Person",
      "givenName": "Arina",
      "familyName": "Lozhkina",
      "email": "arina.lozhkina@epfl.ch",
      "affiliation": {
        "@type": "Organization",
        "name": "École Polytechnique Fédérale de Lausanne"
      }
    }
  ]
}

GitHub Events

Total
  • Create event: 7
  • Release event: 2
  • Issues event: 7
  • Watch event: 8
  • Delete event: 7
  • Issue comment event: 2
  • Push event: 11
  • Pull request review event: 1
  • Pull request event: 7
Last Year
  • Create event: 7
  • Release event: 2
  • Issues event: 7
  • Watch event: 8
  • Delete event: 7
  • Issue comment event: 2
  • Push event: 11
  • Pull request review event: 1
  • Pull request event: 7

Committers

Last synced: 7 months ago

All Time
  • Total Commits: 1,508
  • Total Committers: 8
  • Avg Commits per committer: 188.5
  • Development Distribution Score (DDS): 0.072
Past Year
  • Commits: 29
  • Committers: 3
  • Avg Commits per committer: 9.667
  • Development Distribution Score (DDS): 0.345
Top Committers
Name Email Commits
johentsch j****l@e****h 1,399
arinalozhkina a****a@e****h 61
naulitus 9****u 28
github-actions[bot] 4****] 8
johentsch j****l@b****t 7
Johannes Hentschel j****l 3
Fabian-Robert Stöter f****t 1
laserjeyes j****s@w****e 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 76
  • Total pull requests: 59
  • Average time to close issues: 5 months
  • Average time to close pull requests: 4 days
  • Total issue authors: 12
  • Total pull request authors: 6
  • Average comments per issue: 0.87
  • Average comments per pull request: 0.63
  • Merged pull requests: 55
  • Bot issues: 0
  • Bot pull requests: 10
Past Year
  • Issues: 7
  • Pull requests: 10
  • Average time to close issues: N/A
  • Average time to close pull requests: 26 minutes
  • Issue authors: 1
  • Pull request authors: 2
  • Average comments per issue: 0.0
  • Average comments per pull request: 0.3
  • Merged pull requests: 10
  • Bot issues: 0
  • Bot pull requests: 5
Top Authors
Issue Authors
  • johentsch (45)
  • allorens (14)
  • apmcleod (4)
  • TGabor (3)
  • schef (1)
  • mattblessing (1)
  • fabianmoss (1)
  • m-k94 (1)
  • DIDONEproject (1)
  • kevinlinxc (1)
  • faroit (1)
  • martianbug (1)
Pull Request Authors
  • johentsch (40)
  • github-actions[bot] (16)
  • arinaLozhkina (6)
  • leobruneau (3)
  • Pythouille2 (1)
  • faroit (1)
Top Labels
Issue Labels
enhancement (24) bug (22) wontfix (1)
Pull Request Labels
autorelease: tagged (8) autorelease: pending (8)

Packages

  • Total packages: 1
  • Total downloads:
    • pypi 397 last-month
  • Total dependent packages: 2
  • Total dependent repositories: 1
  • Total versions: 62
  • Total maintainers: 1
pypi.org: ms3

A parser for MuseScore files, serving as data factory for annotated music corpora.

  • Versions: 62
  • Dependent Packages: 2
  • Dependent Repositories: 1
  • Downloads: 397 Last month
Rankings
Dependent packages count: 3.1%
Stargazers count: 11.7%
Downloads: 13.2%
Average: 13.3%
Forks count: 16.8%
Dependent repos count: 21.7%
Maintainers (1)
Last synced: 6 months ago

Dependencies

docs/requirements.txt pypi
  • cloud_sptheme *
  • sphinx *
pyproject.toml pypi
setup.py pypi
.github/workflows/release-please.yml actions
  • google-github-actions/release-please-action v3 composite