A high performance MIDI file parser with comprehensible interface.
Project description
symusic
Symusic("Sybolic Music") is a cross-platform note level
midi decoding library with lightening speed, which is over 100 times faster than mido, the main midi parsing library in python.
The library is written in cpp and based on minimidi. It offers a python binding using pybind11.
Here, we have added a tutorial.ipynb for you to learn about how to use the library.
Features
- You can just read a midi file like
score = symusic.Score("path to midi", ttype="tick")
- Writing back to midi is now supported!
score.dump_midi("path")
- Multiple
time unit (ttype)
is now supported (currentlytick
andquarter
) - The tempo attribute in the tempo event represents quarter per minute (qpm)
- We offer some batch operation functions for both
Score
andTrack
class:- shift_pitch(offset: int)
- shift_velocity(offset: int)
- shift_time(offset: float)
- sort(key, reverse)
- You can operate each note just like you did before in python (like PrettyMidi)
- Extremely fast
pickle
is now supported
TODO
Notice that this library is under development:
- Re-implement
filter_notes
andNote Array
.
Installation
Use pre-compiled version
pip install symusic
Build from source
Make sure that your system has cmake and c++ compilers
git clone --recursive https://github.com/Yikai-Liao/symusic
pip install ./symusic
Benchmark
Parsing MIDI
- test using mahler.mid from minimidi/example in colab
mido
is writen in pure python, and only parses midi files toevent level
pretty_midi
andmiditoolkit
is based onmido
, and parse midi files tonote level
library | time |
---|---|
symusic | 21.8 ms ± 11.7 ms |
MIDI.jl | 128.024 ms |
mido | 5.68 s ± 2 s |
pretty_midi | 5.59 s ± 844 ms |
miditoolkit | 6.27 s ± 1.79 s |
music21 | 8.59 s ± 1.2 s |
Acknowledgement
- minimidi : A fast and lightweight midi parsing library written in cpp, which is the foundation of this project.
- pybind11 : A great header-only library to help you create python binding for your cpp code.
- pybind11-stubgen A nice tool to generate stub files for pybind11 projects.
- zpp_bits : An extraordinary fast and lightweight single header library for serialization and deserialization. I use it to support pickle.
- geek_time_cpp The example code of the book "Modern C++ Programming Practice". We use the metamacro.h in it for shortening the code.
- Intel® Vtune Profiler : A great tool to help you profile your code. We use it to greatly improve the performance of this project.
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 Distribution
symusic-0.2.5.tar.gz
(1.5 MB
view hashes)
Built Distributions
symusic-0.2.5-cp312-cp312-win32.whl
(408.8 kB
view hashes)
symusic-0.2.5-cp311-cp311-win32.whl
(407.6 kB
view hashes)
symusic-0.2.5-cp310-cp310-win32.whl
(406.9 kB
view hashes)
symusic-0.2.5-cp39-cp39-win_amd64.whl
(518.1 kB
view hashes)
symusic-0.2.5-cp39-cp39-win32.whl
(407.4 kB
view hashes)
Close
Hashes for symusic-0.2.5-pp39-pypy39_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2cdcf9f54e7559a9484741ff2bd0ead25d23596ceb2fb5355978a261c0dc37ce |
|
MD5 | f9ff4555a4d457d404d58e7315b6fd81 |
|
BLAKE2b-256 | a563defa23092b3c293f06459b737fd66492787ffa1e6c229f16fa0d8408a73c |
Close
Hashes for symusic-0.2.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 94229fa22e587cee41639a4ced69ccd0a79b460b29fe5ff7976d801cff1ef8af |
|
MD5 | 4bc5a462be4f516cbb264f9e075e6e92 |
|
BLAKE2b-256 | 4d5ff1ff041e184df3b2f475b9ba222e06e9e4d3112565bf5db26ca2474e9112 |
Close
Hashes for symusic-0.2.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.manylinux_2_27_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4c4f5aaf2829c7aa403db598c37d427324969db47a858d355ce97fa03bbd6a6f |
|
MD5 | 119dc29ad4da27749ac80546d7aa82ce |
|
BLAKE2b-256 | 45cd931435354da48b6dec61dd4bdae19e31e9e908b339508483ad9d5fe94e9d |
Close
Hashes for symusic-0.2.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2806967da5a8b63fad1ae37ea9129feafefe81a338502eb227ef0d03ddeaccab |
|
MD5 | c1013ef08703c017dd0436b16ab8e5dd |
|
BLAKE2b-256 | 0841ae4d379acf5a18844b3467ea00236b21192c69be95f87b9118d3078b8475 |
Close
Hashes for symusic-0.2.5-cp312-cp312-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e806acd3857b78193d7be4633845895b136c598146ff36d68f8ac25901a250e5 |
|
MD5 | 8ce0d5579f9700f67f6753ecde328987 |
|
BLAKE2b-256 | 139daee4b66c9146c767ef0dce319718b4211ea51ead9a730bc180938a16a329 |
Close
Hashes for symusic-0.2.5-cp312-cp312-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 09062f5a05f96a7dea690040ab09a8dc5d0d532c2c0ebd94d0c62c015be8e3d4 |
|
MD5 | 7d116e0e2fe6fcb0067a5699c08cbbd0 |
|
BLAKE2b-256 | dd9a4004f93d0d8901e5f59061f93b051e961f353a9cbd62df19a3cfee199354 |
Close
Hashes for symusic-0.2.5-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7d015d011833d370d3257dc05b615e8e92321e5eafb64ebf42eb6be26e5bff2d |
|
MD5 | 9635e43eccda840b6268cfffe362777b |
|
BLAKE2b-256 | 2bb481d6e0f1cf528ba160f2e970606ff4a9f0bb609520ab07db47b423e76484 |
Close
Hashes for symusic-0.2.5-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 178a440862053346b6a7b47ff066be409650195f3bd15f83b60b653323221169 |
|
MD5 | a216c5f972701ef4b3244b0123086b93 |
|
BLAKE2b-256 | 961661c3f25e20a23a1b0d378fb5c436c43f5bd2a1244d82e649bc3f89303acc |
Close
Hashes for symusic-0.2.5-cp312-cp312-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fb473b82140fdb4efa1158c17feee7d4d7fc44078f6578742a1af95fc5c01bb5 |
|
MD5 | ebdd6b61f65ff9b3bec28138b67ed72a |
|
BLAKE2b-256 | 13169f5ef46a2121aca2ca9f53d1656d678ac2c8267107895315f4d0c95d5d0b |
Close
Hashes for symusic-0.2.5-cp312-cp312-manylinux_2_28_aarch64.manylinux_2_27_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b5930bc56bdbcedea8468e40ff8c4bdb15dd7154d2cba02bbee974fac5161c5f |
|
MD5 | 3b0f06beee10966f904b45a0b36e5ccf |
|
BLAKE2b-256 | 411601b42a3600cf5b7b889ed23dfd4524aad52e7cbd21be92e1d578e56d3d6d |
Close
Hashes for symusic-0.2.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1f100d4ae17dd3fbb200a0861be1e1c65221b860f58c63eadded4719769a78de |
|
MD5 | 6a1b41ffffc7de5178001d94b1b09652 |
|
BLAKE2b-256 | 2e1b8742a9c4e7f86fe3e325cdcf7d19ea3f787b671f043065a82d876a7cc5df |
Close
Hashes for symusic-0.2.5-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4708f3ae1bbb2641a0ef9ddd7464366f2c29e1422b15f3c7ea9b6c312d5e3c49 |
|
MD5 | fba2a4c9644ae833362ba325909b11c3 |
|
BLAKE2b-256 | 2b336b7b4e020c6685a7505846c6e331c659b9db671882249966844d17d64de4 |
Close
Hashes for symusic-0.2.5-cp311-cp311-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 22f7ef1d9858320d94e9ef7ab9d7ae7855cf60710ef47d9406c718c50e157f45 |
|
MD5 | cec4262195dfb3441d32fb74790df8c2 |
|
BLAKE2b-256 | 25ea823f8105ebe4e74b9e0b9a2f043f1f43ae46db5e8c38d4bf8a48a38b4f35 |
Close
Hashes for symusic-0.2.5-cp311-cp311-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5cd984fe0d1eef17556127c3d6a2ddb1e9212315d7f4162f055e7455f8bf76e9 |
|
MD5 | 9fbf1790110e92132c7e910a8058b935 |
|
BLAKE2b-256 | ddab67827e9c8475cfdd2ad4cb5d74600cbb3e68cff02d7eb9b36a2ade59a7d2 |
Close
Hashes for symusic-0.2.5-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | be6c04f2d6ffcd209d005c513e6c202de7149140b9d2968e6a4929600e3a4dbc |
|
MD5 | b1d368644c491ff51c3d3a089c616123 |
|
BLAKE2b-256 | d786bf95c88709416259577f1df19a321c951c82d9b295c12c6b7401d848a132 |
Close
Hashes for symusic-0.2.5-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b9bf7ad6d656a81a72b40ed6e06fe2f500aa50455c5accee868ed94af3b85bff |
|
MD5 | e9dd3afd004d6e2ac83f0390861b9133 |
|
BLAKE2b-256 | 97f67d0f278ca7d16c54ad70933c446fd33fed4787dca9d8bef31cce761d6322 |
Close
Hashes for symusic-0.2.5-cp311-cp311-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a2767faa5590b01a1b18b769501b5d1e45fbf26c54ebeadbb488884158d6a50b |
|
MD5 | fe654c5af81dc508f1fa2d31fef5b8c0 |
|
BLAKE2b-256 | fe3c26e4c15bbb9d5ec89f22f51cb367bc6247f082ae15b1b377da84d7ef85bd |
Close
Hashes for symusic-0.2.5-cp311-cp311-manylinux_2_28_aarch64.manylinux_2_27_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 228a3aa0211eb3ffbb4195c81b9ab1a2a385729272050be927269659923dea0f |
|
MD5 | f81ed8bc88168ed53326c624c003c74e |
|
BLAKE2b-256 | 7114f48c4f7f1a0915196b8695efb2468a1fba3025e9065199c9f3a983d916cc |
Close
Hashes for symusic-0.2.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fb7445f2b9f0bfd8ce32d8a6323789baccc16ab2a18e45736f20e75cb4494d76 |
|
MD5 | 4d674c0bd9b86dc8b50ca6f5217013da |
|
BLAKE2b-256 | 755136e0a72bfb15370482607762b91e0f1a844cfcf9f5e9cf386df7a9045ce5 |
Close
Hashes for symusic-0.2.5-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1722704e8275b64fb352a143baf4661083285c75996229da71b1a9307e9406e9 |
|
MD5 | c5e25f37109e87a2a1d29ee26095a7d4 |
|
BLAKE2b-256 | 34762f3587319af2838476df57ec816ea657519b82238dc0f073912537b80474 |
Close
Hashes for symusic-0.2.5-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 011fc6066ba959f07398b7d8fa71c6eb743153e61df2a174aedb7e8cca941c6d |
|
MD5 | b10df928c4dc8285f273e801f5b2cccc |
|
BLAKE2b-256 | 3706acf8c14e26a56e4b0134dc3e8364f70d7e1e58c0bf324017dc0b03ec0724 |
Close
Hashes for symusic-0.2.5-cp310-cp310-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9ae91850b00894d5f3a9b254a844226a3323a043a2eb2f1d20c1c7597eb973b1 |
|
MD5 | ffc1382c889ee750a3680219fb712f14 |
|
BLAKE2b-256 | 0ec259929a94afa498366b3a9576945d7aa9a79e7d0cd939be04e07c7003642c |
Close
Hashes for symusic-0.2.5-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | eb1edc55a37a5ddbcc4d960cbeef18bda5606ca4ea80e6eca3ad78a480f3952f |
|
MD5 | ddfbe6c53ddbeb14747b9939d67e3d6b |
|
BLAKE2b-256 | 9f3eb7f50c56dbfaa84e8579727b770df542065fb034bee6bc8747d6f9137c81 |
Close
Hashes for symusic-0.2.5-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 77f8b855125066da3c2e266244ae70a0c089c3393adbd5a52fb9fe900bdaa0bf |
|
MD5 | aceaff53835e68e75f3b0f8c9a342d75 |
|
BLAKE2b-256 | 47f48f8a3ec3f0107afc5d01e0d22ff8b19de04eedf3d113f5a926e7648b4f1d |
Close
Hashes for symusic-0.2.5-cp310-cp310-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 74d5742ef091409d727bd03f036b2e5c197fcc1dd4a5b24e2d11c6dbdcd75088 |
|
MD5 | da3c5bfcc56b69a3c5f3778a689a6d7b |
|
BLAKE2b-256 | fa5891bcb7d507b964e15316c0edc9032447e3f722c9c0ea2debcfbb8b99de4c |
Close
Hashes for symusic-0.2.5-cp310-cp310-manylinux_2_28_aarch64.manylinux_2_27_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4e9916832353d227e6effe146a22eed50e613d62f7fe707e8290fe5e7b060942 |
|
MD5 | dcccf6d0fb7a004ab34503d1f88b352b |
|
BLAKE2b-256 | 23d065c170986310b48f358a8c57876c810e20208e16df834e994db8522bce87 |
Close
Hashes for symusic-0.2.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0cbc0d4f479aa8f36239b22490db6e853fdcf427bacfc67e27dd6c85d791f4b3 |
|
MD5 | bf8dd7ddbcace1f7759468ee8a6a6d10 |
|
BLAKE2b-256 | 4be7ecee56d5dc56e49739c0320a982b596aedd5ba17a8cc92a1837e742dd767 |
Close
Hashes for symusic-0.2.5-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 076bd439b55432fcca2249f759247de41c7fd99f8e2613aa76c96eeb75a38cc8 |
|
MD5 | eb9b327d888f6fdf6f23cb7e056c70af |
|
BLAKE2b-256 | 82591303f25969bb44c65b8829a42ceb0b254a420033cb22cde7a0db19a8588c |
Close
Hashes for symusic-0.2.5-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 25c49c48bc0dfd87b6ee5f7abcf293c7652a4d41182cf6d5252ce25148501fbd |
|
MD5 | 269c86e977d00a6de453a7a33cd26017 |
|
BLAKE2b-256 | 460dda37ab208c905316a40ee8aa521ad7eeebc54dd08f140577a2537f2dbe89 |
Close
Hashes for symusic-0.2.5-cp39-cp39-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 65228ecf51c3e706da49cf261c9010f409318082905cc95ce52a98d665fcd10a |
|
MD5 | 9ca01e8d388f3a6f409a34fb5caff75e |
|
BLAKE2b-256 | 669e49b814a022c1052868853a24e680ca5b2ad8194793e7e33941b7c6ecdbdb |
Close
Hashes for symusic-0.2.5-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 63a4ffa7b1d34ca1b9ad1cb58c42fab259285e083e4644ab50e6dd9066e31ce6 |
|
MD5 | f41f01bc184a9b894d10ee1e8c7cda6c |
|
BLAKE2b-256 | 6cea95ced758cd5d9671835d4ea5d075928438cd07c12e0b7aa23936b0048c2c |
Close
Hashes for symusic-0.2.5-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f2cb15809f81071080148f89496bd6473908cade2c3420b761b73d4009c26c49 |
|
MD5 | 0c2460fb57ca8ef26f562a56e9c9ec56 |
|
BLAKE2b-256 | 22e5e8e7bdefdfba03be4daee28ffdd6ad030c28109243f16ec0aebd188ec7f8 |
Close
Hashes for symusic-0.2.5-cp39-cp39-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7d82e0486cb39832f0db7c2cdd291bb5abe46ba5d69be0b3966103a5d6f2ecd9 |
|
MD5 | 15401176e301ff2af4698df8bfcd89cc |
|
BLAKE2b-256 | 6b2197cab200c8ff74b475a9bd3296945e09f9a4d21b7d5807b7810a40b83475 |
Close
Hashes for symusic-0.2.5-cp39-cp39-manylinux_2_28_aarch64.manylinux_2_27_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9b8b95380359f3d64cca08d5dd0d78eabcf5551e94b618585cd123024737e120 |
|
MD5 | 384bd847ccdecdc8affb36a69939c86b |
|
BLAKE2b-256 | 7dbbb68e83aa928b121cdbc679b65e4e8301070b891d8d980fc14573d84471b6 |
Close
Hashes for symusic-0.2.5-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 11ca830d703e40f4d7c66d6362f323afba6390c3e18af69a412d1e1f8ff6f855 |
|
MD5 | 9b6daa1f5d53bd6dda5375217b7a5aca |
|
BLAKE2b-256 | 7e97a964c37172b04c3bf3d10b2f6e24481dbe292c222215add84c90c527bdb7 |
Close
Hashes for symusic-0.2.5-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 930cfa9e24ace77b104f1d5b04042f768a3e82b5d4e332048abd6054e868a789 |
|
MD5 | 5229ef419269c5035eda32a1c90359db |
|
BLAKE2b-256 | 4dd0ffe60eaf96f0c3290b141d80c0f55ef786650aad62be39cb98f131dc6586 |