ardour/libs/evoral/libsmf
Robin Gareus cd53301d06
Significantly speed up loading SMF tempo-maps
Files that have many tracks, each with tempo information
were near impossible to load (30+ mins on modern 4.2Ghz CPU!),
because tempo is parsed incrementally:

```
For each new track:
  for each new tempo-event:
    rewind()
    for each loaded track so far:
      for each event on this track so far
```

This reduces the complexity from O(tracks^2 * tempos^2)
to O(tracks * tempos).

"Come Thou Fount Tempo Map.mid" has 238 Tracks and 56168 total
Tempo Changes (236 per track). This now requires only 56168 iterations
in smf_create_tempo_map_and_compute_seconds, rather than 1.64e+9
iterations
2022-02-05 17:33:21 +01:00
..
COPYING move evoral/src/* to evoral/ 2019-11-02 16:32:18 -06:00
README move evoral/src/* to evoral/ 2019-11-02 16:32:18 -06:00
smf_decode.c move evoral/src/* to evoral/ 2019-11-02 16:32:18 -06:00
smf_load.c Significantly speed up loading SMF tempo-maps 2022-02-05 17:33:21 +01:00
smf_private.h move evoral/src/* to evoral/ 2019-11-02 16:32:18 -06:00
smf_save.c Remove unused libsmf seconds/time API 2020-07-16 18:38:03 +02:00
smf_tempo.c Remove unused libsmf seconds/time API 2020-07-16 18:38:03 +02:00
smf.c Significantly speed up loading SMF tempo-maps 2022-02-05 17:33:21 +01:00
smf.h Significantly speed up loading SMF tempo-maps 2022-02-05 17:33:21 +01:00
smfsh.c move evoral/src/* to evoral/ 2019-11-02 16:32:18 -06:00

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>.