Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jpcima/fmidi
A library to read and play back MIDI files
https://github.com/jpcima/fmidi
file-format midi music-player player sequencer
Last synced: 2 months ago
JSON representation
A library to read and play back MIDI files
- Host: GitHub
- URL: https://github.com/jpcima/fmidi
- Owner: jpcima
- License: bsl-1.0
- Created: 2018-01-18T16:05:54.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2022-08-24T08:22:27.000Z (over 2 years ago)
- Last Synced: 2023-03-04T12:00:00.114Z (almost 2 years ago)
- Topics: file-format, midi, music-player, player, sequencer
- Language: C++
- Size: 159 KB
- Stars: 19
- Watchers: 4
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# fmidi
Fmidi is a library to read and play back MIDI files. It supports both standard MIDI files and RIFF MIDI files.The functionality is exposed as a C programming interface, and it is implemented with C++.
It is a simple library which is good for implementing a MIDI file player, or any program taking MIDI files as inputs.
In fact, a player with a terminal interface is provided as an [example](https://github.com/jpcima/fmidi/blob/master/programs/midi-play.cc). Build it with [ncurses](https://www.gnu.org/software/ncurses/), [libev](https://github.com/enki/libev) and [RtMidi](https://github.com/thestk/rtmidi).## Design goals
This library is designed for excellent compatibility. Downloaded MIDI files often come as corrupted, incomplete, or non-standard in many ways. Fmidi has a permissive reader, which attempts repairs when errors are detected, without compromise on the MIDI file standard.
## Quality comparison
Fmidi is tested on a collection of MIDI files and the results are displayed in the table below. The data gives an idea of the relative compatibility and robustness of the library.
Tests are performed under different libraries with AddressSanitizer and identical environments. Under each error situation, the data indicates the number of problematic files.
LibraryReading errorAddressSanitizer issueLeakSanitizer issue
Fmidi 0.12000
libsmf 1.3468265108
portsmf 22897970
libtimidity 0.2.549300
Total files86808