Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
🎉ISMIR 2024 LBD Demo Vedio: Youtube Bilibili
Symusic("Sybolic Music") is a cross-platform note level
midi decoding library with lightening speed, which is hundreds of times faster (100x to 1000x depending on your file size) 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.
And a document is also available. Not complete though.
score = symusic.Score("path to midi", ttype="tick")
score.dump_midi("path")
time unit (ttype)
is now supported (currently tick
and quarter
)Score
and Track
class:
pickle
is now supported.numpy()
method for getting SoA data.filter(func, inplace)
method for filtering objets in all the "List" in symusicCurrently, synthesizing audio with symusic on linux gives a probability of hearing strange noise at the end of the audio. This phenomenon cannot be reproduced consistently and does not occur on windows.
You can temporarily fix this by adding a few seconds of notes at the end and removing those seconds of audio at the end.
It is important to note that the audio synthesis functionality was implemented by us rather than using an off-the-shelf project, and it is still experimental at this time. Feel free to give us feedback on any bugs you find.
pip install symusic
Make sure that your system has cmake and c++ compilers
You could clone from github and install it by pip
git clone --recursive https://github.com/Yikai-Liao/symusic
pip install ./symusic
Or you could install the source distribution from pypi
pip install symusic --no-binary symusic
For debugging purpose, you could pass -Ccmake.define.MEM_LEAK_WARNING=True
to pip install
to enable the memory leak warning from nanobind
.
pip install -Ccmake.define.MEM_LEAK_WARNING=True ./symusic
midifile
is writen in cpp, and could parse midi files to both event level
and note level
. It is slow mostly because of iostream
.mido
is writen in pure python, and only parses midi files to event level
pretty_midi
and miditoolkit
is based on mido
, and parse midi files to note level
timeit
to measure the time cost of parsing the midi file. nanobench
for cpp libraries and BenchmarkTools
for julia libraries.Common MIDI File
benchmarks could be found in symusic-benchmark. And they are tested on (AMD Ryzen 7 8845H, 32GB 7500 MT/s, Linux 6.11.7)parsing time
(the percentage of time of loading file gets more significant when file is smaller)library | level | absolute time | relative time |
---|---|---|---|
minimidi | event | 2.86 ms | 1.0x |
symusic | note | 3.47 ms ± 113 µs | 1.2x |
midifile | event | 44.0 ms | 15.4x |
midifile | note | 45.6 ms | 15.9x |
MIDI.jl | note | 109.707 ms | 38.4x |
mido | event | 2.92 s ± 42.7 ms | 1021.0x |
miditoolkit | note | 3.15 s ± 38.2 ms | 1101.4x |
pretty_midi | note | 3.16 s ± 9.56 ms | 1104.9x |
music21 | note | 4.23 s ± 34.5 ms | 1479.0x |
@inproceedings{symusic2024,
title={symusic: A swift and unified toolkit for symbolic music processing},
author={Yikai Liao, Zhongqi Luo, et al.},
booktitle={Extended Abstracts for the Late-Breaking Demo Session of the 25th International Society for Music Information Retrieval Conference},
year={2024},
url={https://ismir2024program.ismir.net/lbd_426.html#lbd},
}
FAQs
A high performance MIDI file parser with comprehensible interface.
We found that symusic demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.