Remove redundant beat arg from TempoMap::add_meter
authornick_m <mainsbridge@gmail.com>
Mon, 17 Jul 2017 16:48:04 +0000 (02:48 +1000)
committernick_m <mainsbridge@gmail.com>
Fri, 21 Jul 2017 16:15:20 +0000 (02:15 +1000)
BBT time should be enough to determine the beat.

gtk2_ardour/editor_audio_import.cc
gtk2_ardour/editor_drag.cc
gtk2_ardour/editor_tempodisplay.cc
libs/ardour/ardour/tempo.h
libs/ardour/tempo.cc
libs/ardour/test/bbt_test.cc
libs/ardour/test/framepos_plus_beats_test.cc
libs/ardour/test/midi_clock_slave_test.h
libs/ardour/test/tempo_test.cc

index c217f058235cbdc289ddf4cc5841698709c53c69..0ee0810ff29f855885463f5b3d396c25b5fc4fc8 100644 (file)
@@ -293,7 +293,7 @@ Editor::import_smf_tempo_map (Evoral::SMF const & smf, framepos_t pos)
                        new_map.add_tempo (tempo, (t->time_pulses/smf.ppqn()) / 4.0, 0, 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);
+                               new_map.add_meter (meter, bbt, 0, MusicTime);
                        }
 
                } else {
index e59e047f1c637560c374a33703224887a7ee2195..be2cbbcf06f63cbc3373e4f8ad752edc42511ce5 100644 (file)
@@ -3308,10 +3308,9 @@ MeterMarkerDrag::motion (GdkEvent* event, bool first_move)
                        } else {
                                --bbt.bars;
                        }
-                       const double beat = map.beat_at_bbt (bbt);
-                       const framepos_t frame = map.frame_at_beat (beat);
+                       const framepos_t frame = map.frame_at_bbt (bbt);
                        _real_section = map.add_meter (Meter (_marker->meter().divisions_per_bar(), _marker->meter().note_divisor())
-                                                      , beat, bbt, frame, _real_section->position_lock_style());
+                                                      , bbt, frame, _real_section->position_lock_style());
                        if (!_real_section) {
                                aborted (true);
                                return;
index 35f74b6d5417832842eaa4761c7b7039a861bfd2..b71ab32087ae52c959ba99d21c25c099c94d6de1 100644 (file)
@@ -452,15 +452,14 @@ Editor::mouse_add_new_meter_event (framepos_t frame)
        Timecode::BBT_Time requested;
        meter_dialog.get_bbt_time (requested);
 
-       const double beat = map.beat_at_bbt (requested);
-       const double al_frame = map.frame_at_beat (beat);
+       const double al_frame = map.frame_at_bbt (requested);
        begin_reversible_command (_("add meter mark"));
        XMLNode &before = map.get_state();
 
        if (meter_dialog.get_lock_style() == MusicTime) {
-               map.add_meter (Meter (bpb, note_type), beat, requested, 0, MusicTime);
+               map.add_meter (Meter (bpb, note_type), requested, 0, MusicTime);
        } else {
-               map.add_meter (Meter (bpb, note_type), beat, requested, al_frame, AudioTime);
+               map.add_meter (Meter (bpb, note_type), requested, al_frame, AudioTime);
        }
 
        _session->add_command(new MementoCommand<TempoMap>(map, &before, &map.get_state()));
index 816ec67d3345df68bda829bb5c000286a485755d..5ab84cc3ced6d67ea98bfc7e621ed2d54ed2eb1f 100644 (file)
@@ -391,7 +391,6 @@ class LIBARDOUR_API TempoMap : public PBD::StatefulDestructible
 
        /** add a meter section locked to pls.. ignored values will be set in recompute_meters()
         * @param meter the Meter to be added
-        * @param beat beat position of new section
         * @param where bbt position of new section
         * @param frame frame position of new section. ignored if pls == MusicTime
         * note that @frame may also be ignored if it would create an un-solvable map
@@ -402,7 +401,7 @@ class LIBARDOUR_API TempoMap : public PBD::StatefulDestructible
         * adding an audio-locked meter will add a meter-locked tempo section at the meter position.
         * the meter-locked tempo tempo will be the Tempo at @beat
         */
-       MeterSection* add_meter (const Meter& meter, const double& beat, const Timecode::BBT_Time& where, framepos_t frame, PositionLockStyle pls);
+       MeterSection* add_meter (const Meter& meter, const Timecode::BBT_Time& where, framepos_t frame, PositionLockStyle pls);
 
        void remove_tempo (const TempoSection&, bool send_signal);
        void remove_meter (const MeterSection&, bool send_signal);
@@ -610,7 +609,7 @@ private:
        TempoSection* add_tempo_locked (const Tempo&, double pulse, double minute
                               , PositionLockStyle pls, bool recompute, bool locked_to_meter = false);
 
-       MeterSection* add_meter_locked (const Meter&, double beat, const Timecode::BBT_Time& where, framepos_t frame, PositionLockStyle pls, bool recompute);
+       MeterSection* add_meter_locked (const Meter&, const Timecode::BBT_Time& where, framepos_t frame, PositionLockStyle pls, bool recompute);
 
        bool remove_tempo_locked (const TempoSection&);
        bool remove_meter_locked (const MeterSection&);
index 020f4390ce8d9a3a90ddd3cc28decfa82ce9394c..5209d6c66476b805fb204c6afd1fbecfa8bd6a19 100644 (file)
@@ -1144,12 +1144,12 @@ TempoMap::add_tempo_locked (const Tempo& tempo, double pulse, double minute
 }
 
 MeterSection*
-TempoMap::add_meter (const Meter& meter, const double& beat, const Timecode::BBT_Time& where, framepos_t frame, PositionLockStyle pls)
+TempoMap::add_meter (const Meter& meter, const Timecode::BBT_Time& where, framepos_t frame, PositionLockStyle pls)
 {
        MeterSection* m = 0;
        {
                Glib::Threads::RWLock::WriterLock lm (lock);
-               m = add_meter_locked (meter, beat, where, frame, pls, true);
+               m = add_meter_locked (meter, where, frame, pls, true);
        }
 
 
@@ -1168,11 +1168,10 @@ TempoMap::replace_meter (const MeterSection& ms, const Meter& meter, const BBT_T
 {
        {
                Glib::Threads::RWLock::WriterLock lm (lock);
-               const double beat = beat_at_bbt_locked (_metrics, where);
 
                if (!ms.initial()) {
                        remove_meter_locked (ms);
-                       add_meter_locked (meter, beat, where, frame, pls, true);
+                       add_meter_locked (meter, where, frame, pls, true);
                } else {
                        MeterSection& first (first_meter());
                        TempoSection& first_t (first_tempo());
@@ -1195,24 +1194,25 @@ TempoMap::replace_meter (const MeterSection& ms, const Meter& meter, const BBT_T
 }
 
 MeterSection*
-TempoMap::add_meter_locked (const Meter& meter, double beat, const BBT_Time& where, framepos_t frame, PositionLockStyle pls, bool recompute)
+TempoMap::add_meter_locked (const Meter& meter, const BBT_Time& bbt, framepos_t frame, PositionLockStyle pls, bool recompute)
 {
-       const MeterSection& prev_m = meter_section_at_minute_locked  (_metrics, minute_at_beat_locked (_metrics, beat) - minute_at_frame (1));
-       const double pulse = ((where.bars - prev_m.bbt().bars) * (prev_m.divisions_per_bar() / prev_m.note_divisor())) + prev_m.pulse();
-       const double time_minutes = minute_at_pulse_locked (_metrics, pulse);
-       TempoSection* mlt = 0;
+       double const minute_at_bbt = minute_at_bbt_locked (_metrics, bbt);
+       const MeterSection& prev_m = meter_section_at_minute_locked  (_metrics, minute_at_bbt - minute_at_frame (1));
+       double const pulse = ((bbt.bars - prev_m.bbt().bars) * (prev_m.divisions_per_bar() / prev_m.note_divisor())) + prev_m.pulse();
+       /* the natural time of the BBT position */
+       double const time_minutes = minute_at_pulse_locked (_metrics, pulse);
 
        if (pls == AudioTime) {
-               /* add meter-locked tempo */
-               mlt = add_tempo_locked (tempo_at_minute_locked (_metrics, time_minutes), pulse, minute_at_frame (frame), AudioTime, true, true);
+               /* add meter-locked tempo at the natural time in the current map (frame may differ). */
+               Tempo const tempo_at_time = tempo_at_minute_locked (_metrics, time_minutes);
+               TempoSection* mlt = add_tempo_locked (tempo_at_time, pulse, time_minutes, AudioTime, true, true);
 
                if (!mlt) {
                        return 0;
                }
-
        }
-
-       MeterSection* new_meter = new MeterSection (pulse, minute_at_frame (frame), beat, where, meter.divisions_per_bar(), meter.note_divisor(), pls, _frame_rate);
+       /* still using natural time for the position, ignoring lock style. */
+       MeterSection* new_meter = new MeterSection (pulse, time_minutes, beat_at_bbt_locked (_metrics, bbt), bbt, meter.divisions_per_bar(), meter.note_divisor(), pls, _frame_rate);
 
        bool solved = false;
 
@@ -1221,6 +1221,7 @@ TempoMap::add_meter_locked (const Meter& meter, double beat, const BBT_Time& whe
        if (recompute) {
 
                if (pls == AudioTime) {
+                       /* now set the audio locked meter's position to frame */
                        solved = solve_map_minute (_metrics, new_meter, minute_at_frame (frame));
                        /* we failed, most likely due to some impossible frame requirement wrt audio-locked tempi.
                           fudge frame so that the meter ends up at its BBT position instead.
@@ -1229,7 +1230,7 @@ TempoMap::add_meter_locked (const Meter& meter, double beat, const BBT_Time& whe
                                solved = solve_map_minute (_metrics, new_meter, minute_at_frame (prev_m.frame() + 1));
                        }
                } else {
-                       solved = solve_map_bbt (_metrics, new_meter, where);
+                       solved = solve_map_bbt (_metrics, new_meter, bbt);
                        /* required due to resetting the pulse of meter-locked tempi above.
                           Arguably  solve_map_bbt() should use solve_map_pulse (_metrics, TempoSection) instead,
                           but afaict this cannot cause the map to be left unsolved (these tempi are all audio locked).
index c9daaa753b4445318f7ffe767bcdd22f770477f1..f1a8934905d4c3ce3d442bb77d3aefb4e72a2d54 100644 (file)
@@ -17,7 +17,7 @@ BBTTest::addTest ()
        Meter    meter(4.0, 4.0);
 
        /* no need to supply the frame for a new music-locked meter */
-       map.add_meter (meter, 4.0, BBT_Time(2, 1, 0), 0, MusicTime);
+       map.add_meter (meter, BBT_Time(2, 1, 0), 0, MusicTime);
 
        /* add some good stuff here */
 }
index cb5211b0078c74c1ebbcf77f90d63147ec12e7ea..d52717bb60a45b87d6b8ff5597acc69f74bd7c21 100644 (file)
@@ -120,7 +120,7 @@ FrameposPlusBeatsTest::doubleTempoWithMeterTest ()
        Tempo tempoB (240, 4.0);
        map.add_tempo (tempoB, 12.0 / tempoA.note_type(), 0, MusicTime);
        Meter meterB (3, 8);
-       map.add_meter (meterB, 12.0, BBT_Time (4, 1, 0), 0, MusicTime);
+       map.add_meter (meterB, BBT_Time (4, 1, 0), 0, MusicTime);
 
        /* Now some tests */
 
@@ -177,7 +177,7 @@ FrameposPlusBeatsTest::doubleTempoWithComplexMeterTest ()
        Tempo tempoB (240, 4.0);
        map.add_tempo (tempoB, 12.0 / 4.0, 0, MusicTime);
        Meter meterB (5, 8);
-       map.add_meter (meterB, 9.0, BBT_Time (4, 1, 0), 0, MusicTime);
+       map.add_meter (meterB, BBT_Time (4, 1, 0), 0, MusicTime);
        /* Now some tests */
 
        /* Add 1 beat to 1|2 */
index 3423fede13c22e27f03fd14ef61d30c2755c005c..0996c6360deb26d5bf9e8df69c5e5462a7ed352d 100644 (file)
@@ -49,7 +49,7 @@ class TestSlaveSessionProxy : public ISlaveSessionProxy {
         {
           _tempo_map = new TempoMap (FRAME_RATE);
           _tempo_map->add_tempo (tempo, 0.0, 0, AudioTime);
-          _tempo_map->add_meter (meter, 0.0, Timecode::BBT_Time(1, 1, 0), 0, AudioTime);
+          _tempo_map->add_meter (meter, Timecode::BBT_Time(1, 1, 0), 0, AudioTime);
         }
 
         // Controlling the mock object
index 6ef9e8899081e8490b246b7f5e13a4afa893b1d8..c3ca93f86a6d1adef978c7fda78c2f689c056452 100644 (file)
@@ -40,7 +40,7 @@ TempoTest::recomputeMapTest48 ()
        Tempo tempoB (240.0, 4.0);
        map.add_tempo (tempoB, 3.0, 0, MusicTime);
        Meter meterB (3, 4);
-       map.add_meter (meterB, 12.0, BBT_Time (4, 1, 0), 0, MusicTime);
+       map.add_meter (meterB, BBT_Time (4, 1, 0), 0, MusicTime);
        //map.dump (map._metrics, std::cout);
        list<MetricSection*>::iterator i = map._metrics.begin();
        CPPUNIT_ASSERT_EQUAL (framepos_t (0), (*i)->frame ());
@@ -138,7 +138,7 @@ TempoTest::recomputeMapTest44 ()
        Tempo tempoB (240.0, 4.0);
        map.add_tempo (tempoB, 3.0, 0, MusicTime);
        Meter meterB (3, 4);
-       map.add_meter (meterB, 12.0, BBT_Time (4, 1, 0), 288e3, MusicTime);
+       map.add_meter (meterB, BBT_Time (4, 1, 0), 288e3, MusicTime);
 
        list<MetricSection*>::iterator i = map._metrics.begin();
        CPPUNIT_ASSERT_EQUAL (framepos_t (0), (*i)->frame ());
@@ -251,7 +251,7 @@ TempoTest::qnDistanceTestConstant ()
        map.add_tempo (tempoG, 0.0, (framepos_t) 2 * 60 * sampling_rate, AudioTime);
 
        Meter meterB (3, 4);
-       map.add_meter (meterB, 12.0, BBT_Time (4, 1, 0), 288e3, MusicTime);
+       map.add_meter (meterB, BBT_Time (4, 1, 0), 288e3, MusicTime);
 
        list<MetricSection*>::iterator i = map._metrics.begin();
        CPPUNIT_ASSERT_EQUAL (framepos_t (0), (*i)->frame ());
@@ -329,7 +329,7 @@ TempoTest::qnDistanceTestRamp ()
        Tempo tempoG (111.8, 4.0);
        map.add_tempo (tempoG, 0.0, (framepos_t) 2 * 60 * sampling_rate, AudioTime);
        Meter meterB (3, 4);
-       map.add_meter (meterB, 4.0, BBT_Time (2, 1, 0), 288e3, AudioTime);
+       map.add_meter (meterB, BBT_Time (2, 1, 0), 288e3, AudioTime);
        map.recompute_map (map._metrics, 1);
 
        list<MetricSection*>::iterator i = map._metrics.begin();