Set new (recorded) MIDI source length to length of entire capture (instead of length...
authorDavid Robillard <d@drobilla.net>
Tue, 21 Dec 2010 00:04:58 +0000 (00:04 +0000)
committerDavid Robillard <d@drobilla.net>
Tue, 21 Dec 2010 00:04:58 +0000 (00:04 +0000)
Precisely set length_beats of newly captured MIDI regions to source length in beats (no conversion).

git-svn-id: svn://localhost/ardour2/branches/3.0@8317 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/ardour/midi_source.h
libs/ardour/midi_diskstream.cc
libs/ardour/midi_region.cc

index f13b71e0f18b7548130601b11eb9830e7e184a8c..c58452c044e70ca1731940493c292f4252c81273 100644 (file)
@@ -96,6 +96,8 @@ class MidiSource : virtual public Source, public boost::enable_shared_from_this<
        int set_state (const XMLNode&, int version);
 
        bool length_mutable() const { return true; }
+
+       void set_length_beats(double l) { _length_beats = l; }
        double length_beats() const { return _length_beats; }
 
        virtual void load_model(bool lock=true, bool force_reload=false) = 0;
index 7227c8ba2ec5894f182ade5c2cc44b1486a3f2c3..c3f85438dbd84474e120e72c1780bef604a03c56 100644 (file)
@@ -968,6 +968,12 @@ MidiDiskstream::transport_stopped_wallclock (struct tm& /*when*/, time_t /*twhen
 
                        _write_source->mark_streaming_write_completed ();
 
+                       /* set length in beats to entire capture length */
+
+                       BeatsFramesConverter converter (_session.tempo_map(), capture_info.front()->start);
+                       const double total_capture_beats = converter.from(total_capture);
+                       _write_source->set_length_beats(total_capture_beats);
+
                        /* make it not a stub anymore */
 
                        _write_source->unstubify ();
index cb1d178b8b025baffbe0195d507611a997738d8f..5cd08d98d5724d183a523ae143a6b7352efcece1 100644 (file)
@@ -72,11 +72,8 @@ MidiRegion::register_properties ()
 /* Basic MidiRegion constructor (many channels) */
 MidiRegion::MidiRegion (const SourceList& srcs)
        : Region (srcs)
-       , _length_beats (Properties::length_beats, (Evoral::MusicalTime) 0)
+       , _length_beats (Properties::length_beats, midi_source(0)->length_beats())
 {
-       _length_beats = midi_source(0)->length_beats();
-       cout << "NEW MIDI REGION LENGTH BEATS: " << _length_beats << endl;
-
        register_properties ();
 
        midi_source(0)->ModelChanged.connect_same_thread (_source_connection, boost::bind (&MidiRegion::model_changed, this));