diff options
author | David Robillard <d@drobilla.net> | 2014-11-22 04:05:42 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2014-11-22 04:05:42 -0500 |
commit | c1cfa12d6e5136d2e3e5501e83ff74c5009a9e60 (patch) | |
tree | 56d2811bc8b9d6f2a5accfa8e497ddd5976c7c7a /libs/ardour/import.cc | |
parent | cae74309a583c29dd6cc2081425c2e7b673ea13e (diff) |
Wrap MusicalTime in a class.
This lets us get a more explicit handle on time conversions, and is the main
step towards using actual beat:tick time and getting away from floating point
precision problems.
Diffstat (limited to 'libs/ardour/import.cc')
-rw-r--r-- | libs/ardour/import.cc | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/libs/ardour/import.cc b/libs/ardour/import.cc index ae5f751767..38a3da2fdc 100644 --- a/libs/ardour/import.cc +++ b/libs/ardour/import.cc @@ -389,10 +389,11 @@ write_midi_data_to_new_files (Evoral::SMF* source, ImportStatus& status, } smfs->append_event_unlocked_beats( - Evoral::Event<double>(0, - (double)t / (double)source->ppqn(), - size, - buf)); + Evoral::Event<Evoral::MusicalTime>( + 0, + Evoral::MusicalTime::ticks_at_rate(t, source->ppqn()), + size, + buf)); if (status.progress < 0.99) { status.progress += 0.01; @@ -403,10 +404,10 @@ write_midi_data_to_new_files (Evoral::SMF* source, ImportStatus& status, /* we wrote something */ - const framepos_t pos = 0; - const double length_beats = ceil(t / (double)source->ppqn()); - BeatsFramesConverter converter(smfs->session().tempo_map(), pos); - smfs->update_length(pos + converter.to(length_beats)); + const framepos_t pos = 0; + const Evoral::MusicalTime length_beats = Evoral::MusicalTime::ticks_at_rate(t, source->ppqn()); + BeatsFramesConverter converter(smfs->session().tempo_map(), pos); + smfs->update_length(pos + converter.to(length_beats.round_up_to_beat())); smfs->mark_streaming_write_completed (); if (status.cancel) { |