summaryrefslogtreecommitdiff
path: root/libs/ardour/import.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2014-11-22 04:05:42 -0500
committerDavid Robillard <d@drobilla.net>2014-11-22 04:05:42 -0500
commitc1cfa12d6e5136d2e3e5501e83ff74c5009a9e60 (patch)
tree56d2811bc8b9d6f2a5accfa8e497ddd5976c7c7a /libs/ardour/import.cc
parentcae74309a583c29dd6cc2081425c2e7b673ea13e (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.cc17
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) {