mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-09 08:14:58 +01:00
This significantly speeds up parsing MIDI files with complex
tempo-maps. e.g. "Black MIDI Trilogy_2.mid" has 24134 Tempo
changes. Prior to this commit parsing that file took over 5 minutes.
now it loads in under one seconds (libsmf only; libardour still
add overhead, and now needs about 30-40 seconds, previously
it took about 10 mins).
The problem was that every call to `smf_track_add_event_pulses()`
calls `seconds_from_pulses()` which calls `smf_get_tempo_by_seconds()`
which iterates over the tempo-map:
for every midi-event { for ever tempo until that midi-event {..} }
This does not scale to 3.5M events and 24k tempo-changes.
|
||
|---|---|---|
| .. | ||
| COPYING | ||
| README | ||
| smf.c | ||
| smf.h | ||
| smf_decode.c | ||
| smf_load.c | ||
| smf_private.h | ||
| smf_save.c | ||
| smf_tempo.c | ||
| smfsh.c | ||
This is a stripped down version of libsmf 1.2 by Edward Tomasz Napiera for internal use by Evoral. See COPYING for licensing information. The complete version can be found at <http://libsmf.sf.net>.