summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_audio_import.cc
diff options
context:
space:
mode:
authornick_m <mainsbridge@gmail.com>2017-01-05 03:49:59 +1100
committernick_m <mainsbridge@gmail.com>2017-01-05 03:49:59 +1100
commitb95ab61ce978ee3513c7d3ffa7388e262ed58b3b (patch)
tree7f7d7e84e9c50a6596b607b49c708185686879e3 /gtk2_ardour/editor_audio_import.cc
parent7674ef1c2c3d25862cb0841fd0ea1dcb76b83a3f (diff)
allow import of Beethoven's fifth.
- more popular tunes to follow.
Diffstat (limited to 'gtk2_ardour/editor_audio_import.cc')
-rw-r--r--gtk2_ardour/editor_audio_import.cc27
1 files changed, 19 insertions, 8 deletions
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index 76f716f091..a75ecad7e0 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -276,23 +276,34 @@ Editor::import_smf_tempo_map (Evoral::SMF const & smf)
const framecnt_t sample_rate = _session->frame_rate ();
TempoMap new_map (sample_rate);
- bool have_meter = false;
+ Meter last_meter (4.0, 4.0);
+ bool have_initial_meter = false;
for (size_t n = 0; n < num_tempos; ++n) {
Evoral::SMF::Tempo* t = smf.nth_tempo (n);
assert (t);
- Tempo tempo (60 * (1000000 / t->microseconds_per_quarter_note), 4.0);
- new_map.add_tempo (tempo, (t->time_pulses/smf.ppqn()) / 4.0, 0, TempoSection::Constant, MusicTime);
-
+ Tempo tempo (60 * (1000000 / (double) t->microseconds_per_quarter_note), 4.0);
Meter meter (t->numerator, t->denominator);
Timecode::BBT_Time bbt; /* 1|1|0 which is correct for the no-meter case */
- if (have_meter) {
- bbt = new_map.bbt_at_beat ((t->time_pulses/smf.ppqn()));
+
+ if (have_initial_meter) {
+ new_map.add_tempo (tempo, (t->time_pulses/smf.ppqn()) / 4.0, 0, TempoSection::Constant, MusicTime);
+ if (!(meter == last_meter)) {
+ bbt = new_map.bbt_at_quarter_note ((t->time_pulses/smf.ppqn()));
+ new_map.add_meter (meter, t->time_pulses, bbt, 0, MusicTime);
+ }
+
+ } else {
+ new_map.replace_tempo (new_map.tempo_section_at_frame (0), tempo, (t->time_pulses/smf.ppqn()) / 4.0, 0, TempoSection::Constant, AudioTime);
+ new_map.replace_meter (new_map.meter_section_at_frame (0), meter, bbt, 0, AudioTime);
+ have_initial_meter = true;
+
}
- new_map.add_meter (meter, t->time_pulses, bbt, 0, MusicTime);
- have_meter = true;
+
+ last_meter = meter;
+
cerr << "@ " << t->time_pulses/smf.ppqn() << " ("
<< t->time_seconds << ") Add T " << tempo << " M " << meter << endl;
}