A C++/Python library to manipulate sheet music data
Project description
Maialib - Music Analysis Library {#mainpage}
Official website: Maialib Documentation
This library is a multiplatform set of musical tools that enable musical score analisys and composition in a easy and fast way.
The project core was wrote in C++17
, but it also has a Python
wrapper that allows a greater number of people (ie musicians not trained in IT) to also have in their hands the same power and musical tools available in maialib
.
Advantages
- Easy to use to musicians and musical researchers
- High computer perfomance and fast calculations
- Read and write musical scores (MusicXML file format)
You can easily import your sheet music to Python environment using:
from maialib import *
score = Score('examples/Beethoven/Symphony_9th.xml')
Now you can explore some maialib
features like:
- Find musical patterns
- Write your own scores from your custom algorithms
- Analyse scores in a musical statistical data perspective
- And much more!
Requirements
To run-only
- Python 3.8 (or greater)
To build from source
Applications:
- C++17 compatible compiler
- CMake 3.26
- Python 3.8
- Make
- Doxygen (Optional: To build documentation)
- Buildcache (Optional: To accelerate the build process)
- CppCheck (Optional: C++ Static Analyzer)
Python Dev-only dependencies
pip install pathlib
pip install cpplint
pip install wheel
pip install mypy
# To generate Python stubs
pip install pybind11-stubgen
# Mac users: May be you have to add the coverage and pybind11-stubgen on your `PATH` - /etc/paths
pybind11_mkdoc (github)
sudo apt install clang (pybind11_mkdoc dependency) - Linux/Mac Only
Tested Environments
Operational System | Compilers |
---|---|
Windows 10 x64 | Clang 15.0 (MSYS2) |
Linux Ubuntu 20.04 | GCC 9.3 |
Apple OSX 10.15 | XCode 11.5 (Command Line Tools) |
Documentation
This project have 2 documentation levels. One for each user type:
- Level 1 - User documentation: for musicians, musical researchers and non-professional IT people
- Level 2 - Developer documentation: A deeper information for professional C++ programmers.
Code Coverage
Click here to check the maiacore
C++ code coverage
Level 1: Python Tutorial
You can explore maialib
features looking at python-tutorial
folder.
There you will learn how to use and mix maialib
classes and functions to reach your musical goals
Level 2: Developer Documentation
You can browse the compiled doxygen
documentation opening docs/index.html
.
Quick Start
Build Python module from C++ source
Open a terminal (or CMD in Windows), enter inside of the maialib
folder.
Type: make
to build the Python module
When the build process finishes, type: make install
Done!
Frequent Asked Questions
1) Where can I find the XML file of a specific musical score?
To import musical scores the file extensions must be: *.xml
, *.mxl
or *.musicxml
You can easily export your music files to these file formats above from score editors, like:
- MuseScore (free!)
- Sibelius
- Finale
- Others
Many MusicXML
files are avaliable for free in the internet for download.
But if you don't have a specific MusicXML file, you can import the MIDI file in a score editor (like MuseScore) and then export the MusicXML
file from it.
Known issues to build from source
All Platforms
- Multiple Python versions installed, like:
Official Python
,Microsoft Python
,MSYS2 Python
and others can direct the build system to choose a wrong version to build and install the library.
To check all Python versions installed on your system, open theTerminal
(orCMD
on Windows) and type: - Linux or Mac: -which python
-which python3
- Windows: -where.exe python
-where.exe python3
Windows-Only
- Disable your antivirus or create a exception (CMake permissions)
Contact
Nycholas Maia - nyckmaia@gmail.com
Contributing
If you want...
License
Maialib is licensed under (GPLv3 License) [https://www.gnu.org/licenses/gpl-3.0.html]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Hashes for maialib-1.1.0-pp39-pypy39_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2fd6db5071231787758040a192cdc50bd79e711cb388553a53df025f4fcf8970 |
|
MD5 | fe93f5037821690884410b84dfeb8c99 |
|
BLAKE2b-256 | 76ba657aa830470e48706efa36bd8db92363b01bc7315fceeda93828e1bfd78a |
Hashes for maialib-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 188c51a117edc964a460877e0aec00cf694b84f356e21abb2998ff85e95a2773 |
|
MD5 | b19a2b118ec1298ef3935bf0853e0cda |
|
BLAKE2b-256 | ca1d98ca4faedbc6a0d036ab7ccb55460196326a297a8994354e71f087474c9e |
Hashes for maialib-1.1.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 23102d89343fa8ac055f4bf977976cd0bbe92baa2f7c44153ab14d0215f2bfa6 |
|
MD5 | fd509a84d7023c5c3b88548a00411297 |
|
BLAKE2b-256 | 912a443dd19ca52dc928d6eefbaee891d09c3687b5a5ee51729febcafeeffc35 |
Hashes for maialib-1.1.0-pp38-pypy38_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 738176d3ab981f5933390aa3fffc86e15d9ac5931fdfbf81b4cd920f786a9eb8 |
|
MD5 | 4d6023ad3f3a50219e9cfb4cc24a7c49 |
|
BLAKE2b-256 | d99dd7937b1f716359c68f37977ef2126fff5c265f5a59c07fb9a09e47201604 |
Hashes for maialib-1.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9bdb1d47e842ee7aec15954798b3fcc17d9c944dffa8df5677bc8228457fd7e0 |
|
MD5 | 5e71ee0b4ad7f32a7f754d97bd09c632 |
|
BLAKE2b-256 | cc433f078f36c5f6290deadf346f804218debb5ada7188b08f822a83a3bfd345 |
Hashes for maialib-1.1.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | daafe573d9f3bdf8efa4ca6305051512b56f11e3a6f73331be0c75dc63b28197 |
|
MD5 | fb0da8c5a091c454aa6ee89342d4b789 |
|
BLAKE2b-256 | 2aa4b0286e09762c488e3f96e7e52493f45253b05bb75af14b5585e83a9c0dbf |
Hashes for maialib-1.1.0-cp311-cp311-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b62193b4201e164871b00c3cff98a8d71fd8e680148aa76fcfa866ce788a5700 |
|
MD5 | 62c0fc8b0fcb014a03bc3174355559ba |
|
BLAKE2b-256 | 55f9a3c7d4a1435a08b30ac4bf0ccd9a32655f4248d767998451d5f884e72130 |
Hashes for maialib-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1e0c760091505f04936ccd7e1f5f60b872aca0053014c7430d7e613240271d04 |
|
MD5 | c3b8113260c20e139c2848afa44df782 |
|
BLAKE2b-256 | 43c88b5e7b63c5b1c9f47a4c9054a76a14450fa3c7aa09a7a1f8821298d77446 |
Hashes for maialib-1.1.0-cp311-cp311-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 549e1b147fa8a59b15c80c8479b7bd651c71beeebbe0597ff53796b1e6ca68c8 |
|
MD5 | b1f2ef763ae65ad7e9b54fb135cff034 |
|
BLAKE2b-256 | e02dde21f6a0dec5d2af274be5a6cc4745e48cf470fc7f433f60be8521987135 |
Hashes for maialib-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4b21240bd3f51312206b70014d6bf4156a1ef283108f47a004359340991eb396 |
|
MD5 | 16c4cbf9948c1b2c1bbce800b0e9684e |
|
BLAKE2b-256 | 2c6c9e7dff02c938e89e88a5178ea37570402f4412b1703d1f30ee6246eae827 |
Hashes for maialib-1.1.0-cp311-cp311-macosx_10_15_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 099b327f04c239a72c3256ed979939dff7f0dc123faf830832c638b05ca05db1 |
|
MD5 | d07d93ef62b263838ca485ec91dfe642 |
|
BLAKE2b-256 | 988c9397e365703de84745a51d25f8644cb83e1d21ee1a8b0d081c977240e177 |
Hashes for maialib-1.1.0-cp311-cp311-macosx_10_15_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 55700b8091a234bd7ee5a7392b76c0f7b74fbf427d34fe4a363d1e1fd42baf16 |
|
MD5 | 0092b721850242a915af9a61a2d59655 |
|
BLAKE2b-256 | fcc86c3e991be72334a661ef589ec84639c5b0653ef388f4592fe929f177736b |
Hashes for maialib-1.1.0-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 70cb17e2eb9910ed095d9b61d75f376a0fa7b8b16018512aa85e30a9c7c5d981 |
|
MD5 | 00f49bb8e2d00d888332b326166b936f |
|
BLAKE2b-256 | 63f235010479d83ce4b99d0999447e8590be2cfec5ec0581ae11ec7633ea3707 |
Hashes for maialib-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cc5f294ddd126e3402c05367f92dec18020b61a19310c65b16dced39173be83c |
|
MD5 | 0d7d743e17cb2ac6082d2769095eeb5a |
|
BLAKE2b-256 | f8ecef8ccc9be1f9ad5623bcc6a01fd2b83da8dff9c0e0a9f2a10ac4b4ecb7ab |
Hashes for maialib-1.1.0-cp310-cp310-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2ef72b083ad8d015731c59523187ce512018253c9f1471e04322921a5c2b5bd8 |
|
MD5 | 9b2dfa05bb5490f6e9239a588acc827d |
|
BLAKE2b-256 | 8dff68fc70cd522ecd0a7b45f3cb0666eb3650af11e46abf8298d3fed0f0d714 |
Hashes for maialib-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 08cb41866cba5a0a11e5550935c376a30372b6871f158254f029bdc2acef99ef |
|
MD5 | 2fbd41b74ea0bd28df660379abc8b288 |
|
BLAKE2b-256 | 1ab7d193ba760ed3cc044ebd9623081a4ff61a5d3b1dbaa2b70131a186467ba5 |
Hashes for maialib-1.1.0-cp310-cp310-macosx_10_15_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 24fd77b694bd277432b5a86dbaaf7a6a8d7a0b4bc8ef7adbe6e3d3bf7567eba9 |
|
MD5 | f90c0bf3edcd8b5694f22478eb5ba027 |
|
BLAKE2b-256 | 319963cdc0e079c2e0b0d91acf4061f93d080f0fd4f2347cac038acca53bfe8c |
Hashes for maialib-1.1.0-cp310-cp310-macosx_10_15_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3e67ce06dc44d0add5057bd8c233822f09b097a5db853533cba8395d66570d1c |
|
MD5 | 88ee92ba4709367a8b5a31cc6656024e |
|
BLAKE2b-256 | 34d49d4dfbe76525bc4462571730249192a6cf40789d3287ea94efa22e32abf6 |
Hashes for maialib-1.1.0-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6ba8635ef4c825877a5e7893c52f4674ab12531d8d298968a88301ff4c4f2d92 |
|
MD5 | 4ddd125bcb663192e3e784e60be15f31 |
|
BLAKE2b-256 | dc852bb4d57c51e9fa09e8ca78145afda9f2df6fe8d0445cf28a26fd650dc018 |
Hashes for maialib-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f578d4067a1153d843929ffb51f5dfb4f6223c68e63fdf70bc056ed202c835fc |
|
MD5 | 753582f443d3bb0ce337758dc13820b7 |
|
BLAKE2b-256 | f9e3fcc1b73eb645e840892dc08d5271d00ce172f3d43b7ac3f81c7b9a86ba98 |
Hashes for maialib-1.1.0-cp39-cp39-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5fd8c601b472f77ffe81cdce61095fabf7bd57164aaca582cc84458e4edd78f8 |
|
MD5 | e4af7fce286c84a9d6c092d79d9fe27c |
|
BLAKE2b-256 | 5558f9f91139827c8da21c5e7000cf8e774edd9b48052c46e98e710bb8310477 |
Hashes for maialib-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2f5afcdc530315dd4e9c499aedfcb50c0a57e7262621bd92c52cf24ae35f10de |
|
MD5 | e7dc28443ece338283adb8b8e1f96653 |
|
BLAKE2b-256 | 1e8206f0dd305cd3d68bf12a8bc707fb47886b40481b7cd1c765bf863b01e4f7 |
Hashes for maialib-1.1.0-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9452fc51df445e9ed54d10eb3b19039c01a6af7e8a618dd7182f4538168dd7d3 |
|
MD5 | 30f8b196e1bda371b1ae57f9d1ed1064 |
|
BLAKE2b-256 | 1496ee908889997ea4774e9aa3f6e5d8e415beb244f18b3bea2092927cd98eca |
Hashes for maialib-1.1.0-cp39-cp39-macosx_10_15_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 85278401134bf11e09c681b4abb38d4dee1b5530d0cb583868dc16dc3bcc6d8d |
|
MD5 | febbda64c0d63fa8f3ab17c16fcba4a4 |
|
BLAKE2b-256 | 3456fc21342f909164772547fee18c2b1329996a7b0d51a7c6c9ec76dc683284 |
Hashes for maialib-1.1.0-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6ef00216e5dcb086e2b27030b8e0bbf3eda4498f2cb64281306deeb6b4ed1aab |
|
MD5 | 6c85b974a8a82d367b00eab7792b1281 |
|
BLAKE2b-256 | 13bd960873830391c8821a820593ac492b7d6c6bf8267757f060207f52929504 |
Hashes for maialib-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 29eee07e890dace597bd70a4d6537c433fa001de000ac09b4a9dabc6e8897657 |
|
MD5 | 3cb3bb7e6b3aa9e5c2dd69eee68d0dc0 |
|
BLAKE2b-256 | 5c7ded1ba08878ad37e56b0413a6aaf0745be397a6a3a900249d6b861e8752b6 |
Hashes for maialib-1.1.0-cp38-cp38-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e2dd4ea228539db7a29309b8803746b880060158d262dd72803cd29bb031be81 |
|
MD5 | f288e9cb7d5fcad837adc7f34d1bc80a |
|
BLAKE2b-256 | 52ecf784e5d42fbabb9266021acb9aedfe3f80ace24ca21ad239bdfb7a79da41 |
Hashes for maialib-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 427ac29422c8e923a5195f954bc17fc2ab2f6452f8d6aa467205b2089d4dbc51 |
|
MD5 | da8cc5da4c6a51aab350863983cf7aed |
|
BLAKE2b-256 | 1c43088edceb6789dd78d4963ea48f5c6a0e5fec73c774fea918c93cd416e320 |
Hashes for maialib-1.1.0-cp38-cp38-macosx_10_15_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a51a985a5fc6038d34429ff0717fccac3a737684bd4a6a936da2583086059a66 |
|
MD5 | 333d35e63b934542cb6161a8c83ccc5c |
|
BLAKE2b-256 | 0755f165348089a789d2b02ed460b576f7507bac5cf2896cffb3438e4851e70d |
Hashes for maialib-1.1.0-cp38-cp38-macosx_10_15_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d27a880fc7a9684d03343a5271c1191b57a61eacfda3135c8b3cbd5e0675f10c |
|
MD5 | 300d22daf8f8eb09f71e469074d6d835 |
|
BLAKE2b-256 | 0b61fdf9de367eb9aa4cec91dd111e268202d337cbc311236a239c8499f7ffa2 |