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.2.0-pp39-pypy39_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9d76b03cdf00658d9f267c8dc2953cca2a20d3dd73daf8fd2b660e6f8872b4ed |
|
MD5 | 03260c90837db407fc5fb8e63c15ca08 |
|
BLAKE2b-256 | 960277154ddba63c4d9001e0d1e383ec953edc6df7710ec09bb63fd8e95c02ef |
Hashes for maialib-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6f9b562cc911f780461272b1c60d96674d7ff59c0e594bd273b2238a30944a86 |
|
MD5 | 1d915678c5b8c6d84082b8fd5ad5a292 |
|
BLAKE2b-256 | 08bfdab75ac6730192979cb7cf24b0d5747a73f9d8dbfd71b1b785b3c2857457 |
Hashes for maialib-1.2.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e6368d5aacc0fc6cb9257359de919888c12706f5a4e9f8a7dc938a79421bd86e |
|
MD5 | 7bc6bf1d9a8443d2d6c1b7e51e5a0033 |
|
BLAKE2b-256 | 35d22c3ad5a27d5a7db03e50d07952c97987557af2a081ab947ce36013002785 |
Hashes for maialib-1.2.0-pp38-pypy38_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 880fe15ebe3a6149bc3ee3fc4425e3aa8548df544927f39731e959b7356c4508 |
|
MD5 | b318f51990dfc808409e76a96ecd6852 |
|
BLAKE2b-256 | 597d5252e8da98ff951be50061ac07db05d494bf14f2118576adc9a3d1fb2129 |
Hashes for maialib-1.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e7a04cdb7fc6eefee1562b43171259aeba381f8afef07f71fd89b6900585328e |
|
MD5 | facee92d2ce70a60768113f7d5ca5071 |
|
BLAKE2b-256 | 225c4ce78bd14a16efb858f5602339367c6a0acef9bc5078e3a1058bd7d773c5 |
Hashes for maialib-1.2.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a06828846afad9c587b4ae82d2e0bc92a3103c28d18563a0b5561b7fec546427 |
|
MD5 | d6caa02e1c3daa22f13b4e610539a2cf |
|
BLAKE2b-256 | 12811e8eebe3285556b59083e9ccbb0ad1d24a734c9a1dd63a62957605fe1654 |
Hashes for maialib-1.2.0-cp311-cp311-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3ef22f04f7e8b14889179b736cdeb10d8208f3046a2fd709e26e7b474f817acb |
|
MD5 | 461efaee85449eddfcb9e1a5ddf2b1b0 |
|
BLAKE2b-256 | 3bbf1d5f8d44d9a50f782d7b6ddabcdebc451a6f376e1a266ff92e69af680c93 |
Hashes for maialib-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 54734b267c54c4e97b49009fbded22894d8f8632573d0cb017633a58e1bf29d3 |
|
MD5 | 1a6d630a5b813d8143b0f9b886c3306d |
|
BLAKE2b-256 | 711e86e97177c50bb2993392c6a18852e2fe6352c28d4ee2e3dbd8366af6926d |
Hashes for maialib-1.2.0-cp311-cp311-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fe5a882a8642282d5b3304614b6cef2e4f0adaacb6457116f8135043b1e74041 |
|
MD5 | 0da497048dc75fdca1a473a0305da54e |
|
BLAKE2b-256 | 703f46cfe1a2864ac50d00a83b8c3f3e24f6bfa441e89f6ace6b41baf226ca9a |
Hashes for maialib-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c94f206241131d90e246a8f82e7a25cbfe16139064fc90dd85a1ec814051014a |
|
MD5 | 3b1f198017c4419e436b6467ad6cec3a |
|
BLAKE2b-256 | 22677687201e6936ec06813103c2d4296100d55fd703360d57aa5b8f23c45d46 |
Hashes for maialib-1.2.0-cp311-cp311-macosx_10_15_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 14ca7ee6a1d42b61f837cf64ff33176c4b63a70961f8cfae1b0b33919553fb1c |
|
MD5 | 6522e3cc772abc96904e4039433c4e05 |
|
BLAKE2b-256 | 6df3ff3f334dd8f54fa49a059a2b436bafd849c55584d7c6cf8717c2ac7b7f18 |
Hashes for maialib-1.2.0-cp311-cp311-macosx_10_15_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4726664d10d8442307a994647fb76e1d63e683c3624039bc29232025f5fa7f24 |
|
MD5 | eefd6e724f2ef6f7a2ebcbc92e55c361 |
|
BLAKE2b-256 | 6aba602f935383e139f57e792ce4b0d338b2b2e7d7c702dec3691279a59bff56 |
Hashes for maialib-1.2.0-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bb4c3d564a53beb2e673b00c9aad41cfd0e3635e3245966710f6c3fc0e85f56f |
|
MD5 | 8c4a096e95984ef4121959b8b9a022e5 |
|
BLAKE2b-256 | 17636ed0b03c8c7f22f489908843aed91edf79f5b685b86d084e4d629ed187dd |
Hashes for maialib-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c4e25f147e2d40bbe885faaaed0d68ab977011770e81162b573bbebb0c349f29 |
|
MD5 | 6908843d05f5d3ecd256a792fe3beb3e |
|
BLAKE2b-256 | f59ea7fac1d90565fbc3534d12c3bf47a9da2a5c69f283544d8dfb6b0022cfa3 |
Hashes for maialib-1.2.0-cp310-cp310-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b3698a7dd2791d7f9a2eb8141fda3f5236d83fe922591c6aa361f5266184d683 |
|
MD5 | 82bfafdb87b74c0f5f5eb34f821fa876 |
|
BLAKE2b-256 | 93d536f3bd9b0a7427db25dae16b9e799bb82950c4497eac58d7cfe74c0d4794 |
Hashes for maialib-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7048e1f5a086eaeddf7430a6c3c06a765d0db13586a4314f7a875e7f99ceebe1 |
|
MD5 | 9cba981a8842c12f59a7ec48f1fb8696 |
|
BLAKE2b-256 | 09a27205578a44393b937cc240f86c19b17da32ccb30c60ea358aabef4ae154c |
Hashes for maialib-1.2.0-cp310-cp310-macosx_10_15_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | aa9b729d2cd9f9a3c4c9da9fa6b8d648a629dc7a1d5e76da5b6ee9df7c42dc35 |
|
MD5 | f07be4dd4bbd79e98181d44b60d3adef |
|
BLAKE2b-256 | 84eac119a5ed5cbb10c652df48910ae49d499943512b1e81e824e8591fc36f7a |
Hashes for maialib-1.2.0-cp310-cp310-macosx_10_15_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 09ae04cd3f98c60c6ee692314f5ab002f9e3d8fc49d8bedd4d0c28fe0a8a2e25 |
|
MD5 | 9b853e37aeca90a612e39e029c996009 |
|
BLAKE2b-256 | 45b381803c7e0205b0aa478a74e57addc8eea517f0f7d1767469c798da4c33c1 |
Hashes for maialib-1.2.0-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 686e3e5d36f4f2fc37ffda465fc0ef5a870f74147607f59f49ad1d0c55c0ef37 |
|
MD5 | c14fbde3c6fe7d383af957ee78653509 |
|
BLAKE2b-256 | 1221b628cf9b5608622404489414ffc8ddf524b8c50912f36a67aefbfe66b419 |
Hashes for maialib-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1bda7e1bac6442b06e3e0a2fbb496a4edd5f7d15eb846ff20648ff80d260b666 |
|
MD5 | afd34878ad84c79e7665bba7ec392bfd |
|
BLAKE2b-256 | 665e44fb7eb492e38abd6ea711791b9a9f44de112af765f25b702039fd82b38a |
Hashes for maialib-1.2.0-cp39-cp39-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 99cf3502d1bb39e90dd770cbf95bf241e16922ca6e5ba9a43cddbacdb82d7f43 |
|
MD5 | 277405eecb3ee2407731fc2437f511c4 |
|
BLAKE2b-256 | 7fae5b8d7c098855e4b355e30515a13ee7ba8b601eb52588a8f1cf964c7be1b8 |
Hashes for maialib-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8ed7c9ce7605a881120fdd4ca468d12c4d31f3349fed6f91c1743f8f6a92f788 |
|
MD5 | 44dcc3a657604cc518a1664dd866c310 |
|
BLAKE2b-256 | f23e83ba05eb10dcbbbbb49ebdbac0dc3dbe3e61df7a40084ed098ff191de53a |
Hashes for maialib-1.2.0-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | be551b8b778204c4d891d12f2db99adcb1d00f53de9d2e8df8828e73eddc35d2 |
|
MD5 | d144bea9b823037db4dc96f6944fd454 |
|
BLAKE2b-256 | 21081422c7dbdbd5f5cc090cfff79e0cc6edca126956dbec0733471bf73693de |
Hashes for maialib-1.2.0-cp39-cp39-macosx_10_15_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0e5b2d1908ca9bea5ed9e14c2fc3bbfb246851652250fe5cd1eef8a7041dd3fc |
|
MD5 | fb23172155bd4e4bb80227f60a95ddb6 |
|
BLAKE2b-256 | 3a30c987f0f815160cb7ffd4108fc73895885d6f999f72e6426ae62401b9054e |
Hashes for maialib-1.2.0-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 86051f1d49ecf96113f2da82dac5700ec9b68390d31bc0db36d6dadcd22279ab |
|
MD5 | ba820459ac38055ee3e8b90c7b253e0d |
|
BLAKE2b-256 | f491973ff20164ff7fdf06e9c0940000d51a1018c868aceb2bdfbba287281c16 |
Hashes for maialib-1.2.0-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cb2a202996d00604343539415b1fbd5d621681d036c31975787eae08ab4a12fb |
|
MD5 | 6cf7ae3d26295ee3fe1dc15832c487c3 |
|
BLAKE2b-256 | e95e35fcaf160c19b86a208caba46a679045bb7c81c51c41011a18f89188611b |
Hashes for maialib-1.2.0-cp38-cp38-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b2d093c1f4ee2f993c0db9efbcc51abe1e21d72b16c85ea1bf83ac56f81d4b8 |
|
MD5 | ec21e69fbf6d7bab2a9989b4cdac0c5e |
|
BLAKE2b-256 | fdd85ed0b3ca90133ef06d5c70c36271f68a199e26837a7c07b29fd00846fa91 |
Hashes for maialib-1.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c6200f719eeaf0f10f06cdcbaf641455f133390b40b3e83cae47ec49837db38e |
|
MD5 | 8e72ed0b712ea3b82ffb5943f52decfe |
|
BLAKE2b-256 | 8fdc3f13faffe4d2c11de261ab5698b47ff664dcf11cbc8d0b422957b5ec6eff |
Hashes for maialib-1.2.0-cp38-cp38-macosx_10_15_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8c0174c36b8ad48b838905fca58316e4c64d4a2f804dad7085b207b5211d9965 |
|
MD5 | 9caa261142c9e6f4336aca1d6c3c470c |
|
BLAKE2b-256 | b7a3bc8d1b966040badd6594b310b0effc36c34f2a2cf3f6e680b8e91c0bab4e |
Hashes for maialib-1.2.0-cp38-cp38-macosx_10_15_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fbcc356a9bcbd96d9071b49e176d6783d606f6d3d8fc4f9d082ef7744b1e15aa |
|
MD5 | ee78f734219de1fb71df17bc08c16054 |
|
BLAKE2b-256 | a3e219cdaabefe2bcc9e80d5974ad231b8b1122b022766583eb140d568c1f9ee |