musdl
NOTE
The author of musdl does NOT condone piracy in any way, and is not responsible for anything that happens as a result of piracy arising from the use of musdl.
musdl (musscore downloader) is a downloader for Musescore, written in Python.
The easiest way to download the score is through the CLI:
musdl (musescore url)
To convert to another format, use -f/--format
:
# export as midi
musdl -f mid (musescore url)
For a complete list of formats, run musdl --help
.
If you want to export in any format besides mscz
, you need to install musescore first.
It can also be imported and used as a module:
from musdl import Score, OnlineScore
my_score = OnlineScore("musescore_url")
# Read the score's metadata,
name = my_score["workTitle"]
# or save the whole score...
my_score.export("mscz", "my_score.mscz")
# ...and then load it again.
my_score = Score.from_file("my_score.mscz")
For API documentation, see here.
How it works
I just copied over the IPNS-specific constants and used them to download the score file from Xmader's dataset.
Other approaches were considered:
- Create a native Python interpreter just to decode the musescore js (like Js2py). (Will problably break with every API change.)
- Use a headless JS browser with Selenium. (Resource-heavy, not really cross-platform.)
- Run a JS engine like PyMiniRacer/PyQt5. (Better speed, but needs C extensions.)
So I decided to roll with the IPNS dataset.
takedown request, et tu
Take a look at this issue in the same repo.
Hacking
All my python projects now use flit to build and publish.
So you need to python3 -m pip install flit
first.
flit build
Install
(python3 -m) pip install musdl
Optionally, to export the score in other formats (midi, mp3, etc.) install musescore.
musdl relies on its command-line tool mscore
to export scores:
# Linux
sudo (package manager/snap) install musescore
# Windows
scoop bucket add extras # add the extras bucket if you haven't
scoop install musescore
License
MIT.