Remove _midi_regions_use_bbt_beats from Session, _start_pulse and _length_pulse from MidiRegion.

- _start/length_beats are now quarter notes regardless
	  of loaded session version.

	- also restores note colour update
This commit is contained in:
nick_m 2016-09-23 03:39:05 +10:00
parent d1d8b1aae7
commit 080e7755a6
8 changed files with 34 additions and 90 deletions

View file

@ -932,8 +932,7 @@ MidiRegionView::create_note_at (framepos_t t, double y, Evoral::Beats length, ui
// Start of note in frames relative to region start // Start of note in frames relative to region start
const int32_t divisions = trackview.editor().get_grid_music_divisions (state); const int32_t divisions = trackview.editor().get_grid_music_divisions (state);
const double snapped_qn = snap_frame_to_grid_underneath (t, divisions).to_double(); Evoral::Beats beat_time = snap_frame_to_grid_underneath (t, divisions);
Evoral::Beats beat_time = Evoral::Beats (snapped_qn);
const double note = view->y_to_note(y); const double note = view->y_to_note(y);
const uint8_t chan = mtv->get_channel_for_add(); const uint8_t chan = mtv->get_channel_for_add();
@ -1672,8 +1671,8 @@ bool
MidiRegionView::note_in_region_range (const boost::shared_ptr<NoteType> note, bool& visible) const MidiRegionView::note_in_region_range (const boost::shared_ptr<NoteType> note, bool& visible) const
{ {
const boost::shared_ptr<ARDOUR::MidiRegion> midi_reg = midi_region(); const boost::shared_ptr<ARDOUR::MidiRegion> midi_reg = midi_region();
const bool outside = (note->time() < midi_reg->start_pulse() * 4.0 || const bool outside = (note->time() < midi_reg->start_beats() ||
note->time() > (midi_reg->start_pulse() + midi_reg->length_pulse()) * 4.0); note->time() > midi_reg->start_beats() + midi_reg->length_beats());
visible = (note->note() >= midi_stream_view()->lowest_note()) && visible = (note->note() >= midi_stream_view()->lowest_note()) &&
(note->note() <= midi_stream_view()->highest_note()); (note->note() <= midi_stream_view()->highest_note());
@ -1703,7 +1702,7 @@ MidiRegionView::update_sustained (Note* ev, bool update_ghost_regions)
TempoMap& map (trackview.session()->tempo_map()); TempoMap& map (trackview.session()->tempo_map());
const boost::shared_ptr<ARDOUR::MidiRegion> mr = midi_region(); const boost::shared_ptr<ARDOUR::MidiRegion> mr = midi_region();
boost::shared_ptr<NoteType> note = ev->note(); boost::shared_ptr<NoteType> note = ev->note();
const double qn_note_time = note->time().to_double() + ((_region->pulse() - mr->start_pulse()) * 4.0); const double qn_note_time = note->time().to_double() + ((_region->pulse() * 4.0) - mr->start_beats().to_double());
const framepos_t note_start_frames = map.frame_at_quarter_note (qn_note_time) - _region->position(); const framepos_t note_start_frames = map.frame_at_quarter_note (qn_note_time) - _region->position();
const double x0 = trackview.editor().sample_to_pixel (note_start_frames); const double x0 = trackview.editor().sample_to_pixel (note_start_frames);
double x1; double x1;
@ -1714,10 +1713,10 @@ MidiRegionView::update_sustained (Note* ev, bool update_ghost_regions)
if (note->length() > 0) { if (note->length() > 0) {
Evoral::Beats note_end_time = note->end_time(); Evoral::Beats note_end_time = note->end_time();
if (note->end_time().to_double() > (mr->start_pulse() + mr->length_pulse()) * 4.0) { if (note->end_time() > mr->start_beats() + mr->length_beats()) {
note_end_time = Evoral::Beats ((mr->start_pulse() + mr->length_pulse()) * 4.0); note_end_time = mr->start_beats() + mr->length_beats();
} }
const double session_qn_start = (_region->pulse() - mr->start_pulse()) * 4.0; const double session_qn_start = (_region->pulse() * 4.0) - mr->start_beats().to_double();
const double quarter_note_end_time = session_qn_start + note_end_time.to_double(); const double quarter_note_end_time = session_qn_start + note_end_time.to_double();
const framepos_t note_end_frames = map.frame_at_quarter_note (quarter_note_end_time) - _region->position(); const framepos_t note_end_frames = map.frame_at_quarter_note (quarter_note_end_time) - _region->position();
@ -1753,9 +1752,9 @@ MidiRegionView::update_sustained (Note* ev, bool update_ghost_regions)
} }
// Update color in case velocity has changed // Update color in case velocity has changed
//const uint32_t base_col = ev->base_color(); const uint32_t base_col = ev->base_color();
//ev->set_fill_color(base_col); ev->set_fill_color(base_col);
//ev->set_outline_color(ev->calculate_outline(base_col, ev->selected())); ev->set_outline_color(ev->calculate_outline(base_col, ev->selected()));
if (update_ghost_regions) { if (update_ghost_regions) {
for (std::vector<GhostRegion*>::iterator i = ghosts.begin(); i != ghosts.end(); ++i) { for (std::vector<GhostRegion*>::iterator i = ghosts.begin(); i != ghosts.end(); ++i) {
@ -1772,7 +1771,7 @@ MidiRegionView::update_hit (Hit* ev, bool update_ghost_regions)
{ {
boost::shared_ptr<NoteType> note = ev->note(); boost::shared_ptr<NoteType> note = ev->note();
const double note_time_qn = note->time().to_double() + ((_region->pulse() - midi_region()->start_pulse()) * 4.0); const double note_time_qn = note->time().to_double() + ((_region->pulse() * 4.0) - midi_region()->start_beats().to_double());
const framepos_t note_start_frames = trackview.session()->tempo_map().frame_at_quarter_note (note_time_qn) - _region->position(); const framepos_t note_start_frames = trackview.session()->tempo_map().frame_at_quarter_note (note_time_qn) - _region->position();
const double x = trackview.editor().sample_to_pixel(note_start_frames); const double x = trackview.editor().sample_to_pixel(note_start_frames);
@ -2587,7 +2586,7 @@ MidiRegionView::note_dropped(NoteBase *, frameoffset_t dt, int8_t dnote)
for (Selection::iterator i = _selection.begin(); i != _selection.end() ; ++i) { for (Selection::iterator i = _selection.begin(); i != _selection.end() ; ++i) {
double const start_qn = (_region->pulse() - midi_region()->start_pulse()) * 4.0; double const start_qn = (_region->pulse() * 4.0) - midi_region()->start_beats().to_double();
framepos_t new_frames = map.frame_at_quarter_note (start_qn + (*i)->note()->time().to_double()) + dt; framepos_t new_frames = map.frame_at_quarter_note (start_qn + (*i)->note()->time().to_double()) + dt;
Evoral::Beats new_time = Evoral::Beats (map.quarter_note_at_frame (new_frames) - start_qn); Evoral::Beats new_time = Evoral::Beats (map.quarter_note_at_frame (new_frames) - start_qn);
if (new_time < 0) { if (new_time < 0) {
@ -4120,24 +4119,22 @@ Evoral::Beats
MidiRegionView::snap_frame_to_grid_underneath (framepos_t p, int32_t divisions) const MidiRegionView::snap_frame_to_grid_underneath (framepos_t p, int32_t divisions) const
{ {
TempoMap& map (trackview.session()->tempo_map()); TempoMap& map (trackview.session()->tempo_map());
double eqaf = map.exact_qn_at_frame (p + _region->position(), divisions);
const double qaf = map.quarter_note_at_frame (p + _region->position());
double eqaf;
if (divisions != 0) { if (divisions != 0) {
eqaf = map.exact_qn_at_frame (p + _region->position(), divisions); const double qaf = map.quarter_note_at_frame (p + _region->position());
/* Hack so that we always snap to the note that we are over, instead of snapping /* Hack so that we always snap to the note that we are over, instead of snapping
to the next one if we're more than halfway through the one we're over. to the next one if we're more than halfway through the one we're over.
*/ */
const Evoral::Beats grid_beats = get_grid_beats (p + _region->position()); const Evoral::Beats grid_beats = get_grid_beats (p + _region->position());
const double rem = fmod (qaf, grid_beats.to_double()); const double rem = eqaf - qaf;
if (rem >= grid_beats.to_double() / 2.0) { if (rem >= 0.0 && eqaf - grid_beats.to_double() > _region->pulse() * 4.0) {
eqaf -= grid_beats.to_double(); eqaf -= grid_beats.to_double();
} }
} else {
eqaf = qaf;
} }
const double session_start_off = (_region->pulse() * 4.0) - midi_region()->start_beats().to_double();
return Evoral::Beats (eqaf - ((_region->pulse() - midi_region()->start_pulse()) * 4.0)); return Evoral::Beats (eqaf - session_start_off);
} }
ChannelMode ChannelMode

View file

@ -107,11 +107,10 @@ class LIBARDOUR_API MidiRegion : public Region
void fix_negative_start (); void fix_negative_start ();
Evoral::Beats start_beats () {return _start_beats.val(); } Evoral::Beats start_beats () {return _start_beats.val(); }
void set_start_beats (const Evoral::Beats start_beats) {_start_beats = start_beats; }
Evoral::Beats length_beats () {return _length_beats.val(); } Evoral::Beats length_beats () {return _length_beats.val(); }
double start_pulse () const {return _start_pulse; } void set_length_beats (const Evoral::Beats length_beats) {_length_beats = length_beats; }
void set_start_pulse (const double start_pulse) {_start_pulse = start_pulse; }
double length_pulse () const {return _length_pulse; }
void set_length_pulse (const double length_pulse) {_length_pulse = length_pulse; }
protected: protected:
virtual bool can_trim_start_before_source_start () const { virtual bool can_trim_start_before_source_start () const {
@ -123,9 +122,6 @@ class LIBARDOUR_API MidiRegion : public Region
PBD::Property<Evoral::Beats> _start_beats; PBD::Property<Evoral::Beats> _start_beats;
PBD::Property<Evoral::Beats> _length_beats; PBD::Property<Evoral::Beats> _length_beats;
double _start_pulse;
double _length_pulse;
MidiRegion (const SourceList&); MidiRegion (const SourceList&);
MidiRegion (boost::shared_ptr<const MidiRegion>); MidiRegion (boost::shared_ptr<const MidiRegion>);
MidiRegion (boost::shared_ptr<const MidiRegion>, frameoffset_t offset, const int32_t sub_num = 0); MidiRegion (boost::shared_ptr<const MidiRegion>, frameoffset_t offset, const int32_t sub_num = 0);

View file

@ -98,7 +98,7 @@ class LIBARDOUR_API MidiSource : virtual public Source, public boost::enable_sha
MidiChannelFilter* filter, MidiChannelFilter* filter,
const std::set<Evoral::Parameter>& filtered, const std::set<Evoral::Parameter>& filtered,
const double pulse, const double pulse,
const double start_pulse) const; const double start_beats) const;
/** Write data from a MidiRingBuffer to this source. /** Write data from a MidiRingBuffer to this source.
* @param source Source to read from. * @param source Source to read from.

View file

@ -1149,8 +1149,6 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
VCAManager& vca_manager() { return *_vca_manager; } VCAManager& vca_manager() { return *_vca_manager; }
bool midi_regions_use_bbt_beats () { return _midi_regions_use_bbt_beats; }
protected: protected:
friend class AudioEngine; friend class AudioEngine;
void set_block_size (pframes_t nframes); void set_block_size (pframes_t nframes);
@ -2030,8 +2028,6 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
boost::shared_ptr<Route> get_midi_nth_route_by_id (PresentationInfo::order_t n) const; boost::shared_ptr<Route> get_midi_nth_route_by_id (PresentationInfo::order_t n) const;
std::string created_with; std::string created_with;
bool _midi_regions_use_bbt_beats;
}; };

View file

@ -79,8 +79,6 @@ MidiRegion::MidiRegion (const SourceList& srcs)
: Region (srcs) : Region (srcs)
, _start_beats (Properties::start_beats, Evoral::Beats()) , _start_beats (Properties::start_beats, Evoral::Beats())
, _length_beats (Properties::length_beats, midi_source(0)->length_beats()) , _length_beats (Properties::length_beats, midi_source(0)->length_beats())
, _start_pulse (0)
, _length_pulse (midi_source(0)->length_pulse())
{ {
register_properties (); register_properties ();
midi_source(0)->ModelChanged.connect_same_thread (_source_connection, boost::bind (&MidiRegion::model_changed, this)); midi_source(0)->ModelChanged.connect_same_thread (_source_connection, boost::bind (&MidiRegion::model_changed, this));
@ -93,8 +91,6 @@ MidiRegion::MidiRegion (boost::shared_ptr<const MidiRegion> other)
: Region (other) : Region (other)
, _start_beats (Properties::start_beats, other->_start_beats) , _start_beats (Properties::start_beats, other->_start_beats)
, _length_beats (Properties::length_beats, other->_length_beats) , _length_beats (Properties::length_beats, other->_length_beats)
, _start_pulse (other->_start_pulse)
, _length_pulse (other->_length_pulse)
{ {
//update_length_beats (); //update_length_beats ();
register_properties (); register_properties ();
@ -109,11 +105,8 @@ MidiRegion::MidiRegion (boost::shared_ptr<const MidiRegion> other, frameoffset_t
: Region (other, offset, sub_num) : Region (other, offset, sub_num)
, _start_beats (Properties::start_beats, Evoral::Beats()) , _start_beats (Properties::start_beats, Evoral::Beats())
, _length_beats (Properties::length_beats, other->_length_beats) , _length_beats (Properties::length_beats, other->_length_beats)
, _start_pulse (0)
, _length_pulse (other->_length_pulse)
{ {
_start_beats = Evoral::Beats (_session.tempo_map().exact_beat_at_frame (other->_position + offset, sub_num) - other->beat()) + other->_start_beats; _start_beats = Evoral::Beats (_session.tempo_map().exact_qn_at_frame (other->_position + offset, sub_num) - (other->pulse() * 4.0)) + other->_start_beats;
_start_pulse = ((_session.tempo_map().exact_qn_at_frame (other->_position + offset, sub_num) / 4.0) - other->_pulse) + other->_start_pulse;
update_length_beats (sub_num); update_length_beats (sub_num);
register_properties (); register_properties ();
@ -203,8 +196,6 @@ MidiRegion::clone (boost::shared_ptr<MidiSource> newsrc) const
boost::shared_ptr<MidiRegion> ret (boost::dynamic_pointer_cast<MidiRegion> (RegionFactory::create (newsrc, plist, true))); boost::shared_ptr<MidiRegion> ret (boost::dynamic_pointer_cast<MidiRegion> (RegionFactory::create (newsrc, plist, true)));
ret->set_beat (beat()); ret->set_beat (beat());
ret->set_pulse (pulse()); ret->set_pulse (pulse());
ret->set_start_pulse (start_pulse());
ret->set_length_pulse (length_pulse());
return ret; return ret;
} }
@ -225,8 +216,7 @@ MidiRegion::post_set (const PropertyChange& pc)
void void
MidiRegion::set_start_beats_from_start_frames () MidiRegion::set_start_beats_from_start_frames ()
{ {
_start_beats = Evoral::Beats (beat() - _session.tempo_map().beat_at_frame (_position - _start)); _start_beats = Evoral::Beats ((pulse() * 4.0) - _session.tempo_map().quarter_note_at_frame (_position - _start));
_start_pulse = pulse() - _session.tempo_map().pulse_at_frame (_position - _start);
} }
void void
@ -268,11 +258,10 @@ MidiRegion::update_after_tempo_map_change (bool /* send */)
For now, the musical position at the region start is retained, but subsequent events For now, the musical position at the region start is retained, but subsequent events
will maintain their beat distance according to the map. will maintain their beat distance according to the map.
*/ */
_start = _position - _session.tempo_map().frame_at_beat (beat() - _start_beats.val().to_double()); _start = _position - _session.tempo_map().frame_at_pulse (pulse() - (_start_beats.val().to_double() / 4.0));
/* _length doesn't change for audio-locked regions. update length_beats to match. */ /* _length doesn't change for audio-locked regions. update length_beats to match. */
_length_beats = Evoral::Beats (_session.tempo_map().quarter_note_at_frame (_position + _length) - _session.tempo_map().quarter_note_at_frame (_position)); _length_beats = Evoral::Beats (_session.tempo_map().quarter_note_at_frame (_position + _length) - _session.tempo_map().quarter_note_at_frame (_position));
_length_pulse = _session.tempo_map().pulse_at_frame (_position + _length) - _session.tempo_map().pulse_at_frame (_position);
s_and_l.add (Properties::start); s_and_l.add (Properties::start);
s_and_l.add (Properties::length_beats); s_and_l.add (Properties::length_beats);
@ -284,7 +273,7 @@ MidiRegion::update_after_tempo_map_change (bool /* send */)
Region::update_after_tempo_map_change (false); Region::update_after_tempo_map_change (false);
/* _start has now been updated. */ /* _start has now been updated. */
_length = _session.tempo_map().frame_at_pulse (pulse() + _length_pulse) - _position; _length = _session.tempo_map().frame_at_pulse (pulse() + (_length_beats.val().to_double() / 4.0)) - _position;
if (old_start != _start) { if (old_start != _start) {
s_and_l.add (Properties::start); s_and_l.add (Properties::start);
@ -303,7 +292,6 @@ void
MidiRegion::update_length_beats (const int32_t sub_num) MidiRegion::update_length_beats (const int32_t sub_num)
{ {
_length_beats = Evoral::Beats (_session.tempo_map().exact_qn_at_frame (_position + _length, sub_num) - (pulse() * 4.0)); _length_beats = Evoral::Beats (_session.tempo_map().exact_qn_at_frame (_position + _length, sub_num) - (pulse() * 4.0));
_length_pulse = (_session.tempo_map().exact_qn_at_frame (_position + _length, sub_num) / 4.0) - pulse();
} }
void void
@ -312,7 +300,7 @@ MidiRegion::set_position_internal (framepos_t pos, bool allow_bbt_recompute, con
Region::set_position_internal (pos, allow_bbt_recompute, sub_num); Region::set_position_internal (pos, allow_bbt_recompute, sub_num);
/* set _start to new position in tempo map */ /* set _start to new position in tempo map */
_start = _position - _session.tempo_map().frame_at_beat (beat() - _start_beats.val().to_double()); _start = _position - _session.tempo_map().frame_at_pulse (pulse() - (_start_beats.val().to_double() / 4.0));
/* in construction from src */ /* in construction from src */
if (_length_beats == Evoral::Beats()) { if (_length_beats == Evoral::Beats()) {
@ -321,12 +309,11 @@ MidiRegion::set_position_internal (framepos_t pos, bool allow_bbt_recompute, con
if (position_lock_style() == AudioTime) { if (position_lock_style() == AudioTime) {
_length_beats = Evoral::Beats (_session.tempo_map().quarter_note_at_frame (_position + _length) - _session.tempo_map().quarter_note_at_frame (_position)); _length_beats = Evoral::Beats (_session.tempo_map().quarter_note_at_frame (_position + _length) - _session.tempo_map().quarter_note_at_frame (_position));
_length_pulse = _session.tempo_map().pulse_at_frame (_position + _length) - _session.tempo_map().pulse_at_frame (_position);
} else { } else {
/* leave _length_beats alone, and change _length to reflect the state of things /* leave _length_beats alone, and change _length to reflect the state of things
at the new position (tempo map may dictate a different number of frames). at the new position (tempo map may dictate a different number of frames).
*/ */
Region::set_length_internal (_session.tempo_map().frame_at_pulse (pulse() + _length_pulse) - _position, sub_num); Region::set_length_internal (_session.tempo_map().frame_at_pulse (pulse() + (_length_beats.val().to_double() / 4.0)) - _position, sub_num);
} }
} }
@ -426,7 +413,7 @@ MidiRegion::_read_at (const SourceList& /*srcs*/,
filter, filter,
_filtered_parameters, _filtered_parameters,
pulse(), pulse(),
start_pulse() _start_beats.val().to_double()
) != to_read) { ) != to_read) {
return 0; /* "read nothing" */ return 0; /* "read nothing" */
} }
@ -450,17 +437,6 @@ MidiRegion::set_state (const XMLNode& node, int version)
if (position_lock_style() == AudioTime) { if (position_lock_style() == AudioTime) {
update_length_beats (0); update_length_beats (0);
} }
if (_session.midi_regions_use_bbt_beats()) {
info << _("Updating midi region start and length beats") << endmsg;
TempoMap& map (_session.tempo_map());
_start_beats = Evoral::Beats ((map.pulse_at_beat (_beat) - map.pulse_at_beat (_beat - _start_beats.val().to_double())) * 4.0);
_length_beats = Evoral::Beats ((map.pulse_at_beat (_beat + _length_beats.val().to_double()) - map.pulse_at_beat (_beat)) * 4.0);
}
_start_pulse = _start_beats.val().to_double() / 4.0;
_length_pulse = _length_beats.val().to_double() / 4.0;
} }
return ret; return ret;
@ -587,7 +563,6 @@ MidiRegion::fix_negative_start ()
model()->insert_silence_at_start (c.from (-_start)); model()->insert_silence_at_start (c.from (-_start));
_start = 0; _start = 0;
_start_beats = Evoral::Beats(); _start_beats = Evoral::Beats();
_start_pulse = 0.0;
} }
void void
@ -613,8 +588,6 @@ MidiRegion::trim_to_internal (framepos_t position, framecnt_t length, const int3
working in beats seems the correct thing to do, but reports of a missing first note working in beats seems the correct thing to do, but reports of a missing first note
on playback suggest otherwise. for now, we work in exact beats. on playback suggest otherwise. for now, we work in exact beats.
*/ */
const double pos_beat = _session.tempo_map().exact_beat_at_frame (position, sub_num);
const double beat_delta = pos_beat - beat();
const double pos_pulse = _session.tempo_map().exact_qn_at_frame (position, sub_num) / 4.0; const double pos_pulse = _session.tempo_map().exact_qn_at_frame (position, sub_num) / 4.0;
const double pulse_delta = pos_pulse - pulse(); const double pulse_delta = pos_pulse - pulse();
@ -631,19 +604,16 @@ MidiRegion::trim_to_internal (framepos_t position, framecnt_t length, const int3
set_position_internal (position, true, sub_num); set_position_internal (position, true, sub_num);
what_changed.add (Properties::position); what_changed.add (Properties::position);
const double new_start_beat = _start_beats.val().to_double() + beat_delta; const double new_start_pulse = (_start_beats.val().to_double() / 4.0) + pulse_delta;
const double new_start_pulse = _start_pulse + pulse_delta;
const framepos_t new_start = _position - _session.tempo_map().frame_at_pulse (pulse() - new_start_pulse); const framepos_t new_start = _position - _session.tempo_map().frame_at_pulse (pulse() - new_start_pulse);
if (!verify_start_and_length (new_start, length)) { if (!verify_start_and_length (new_start, length)) {
return; return;
} }
_start_beats = Evoral::Beats (new_start_beat); _start_beats = Evoral::Beats (new_start_pulse * 4.0);
what_changed.add (Properties::start_beats); what_changed.add (Properties::start_beats);
_start_pulse = new_start_pulse;
set_start_internal (new_start, sub_num); set_start_internal (new_start, sub_num);
what_changed.add (Properties::start); what_changed.add (Properties::start);
} }

View file

@ -198,12 +198,12 @@ MidiSource::midi_read (const Lock& lm,
MidiChannelFilter* filter, MidiChannelFilter* filter,
const std::set<Evoral::Parameter>& filtered, const std::set<Evoral::Parameter>& filtered,
const double pulse, const double pulse,
const double start_pulse) const const double start_beats) const
{ {
//BeatsFramesConverter converter(_session.tempo_map(), source_start); //BeatsFramesConverter converter(_session.tempo_map(), source_start);
const int32_t tpb = Timecode::BBT_Time::ticks_per_beat; const int32_t tpb = Timecode::BBT_Time::ticks_per_beat;
const double pulse_tick_res = floor ((pulse * 4.0 * tpb) + 0.5) / tpb; const double pulse_tick_res = floor ((pulse * 4.0 * tpb) + 0.5) / tpb;
const double start_qn = (pulse - start_pulse) * 4.0; const double start_qn = (pulse * 4.0) - start_beats;
DEBUG_TRACE (DEBUG::MidiSourceIO, DEBUG_TRACE (DEBUG::MidiSourceIO,
string_compose ("MidiSource::midi_read() %5 sstart %1 start %2 cnt %3 tracker %4\n", string_compose ("MidiSource::midi_read() %5 sstart %1 start %2 cnt %3 tracker %4\n",

View file

@ -317,7 +317,6 @@ Session::Session (AudioEngine &eng,
, _midi_ports (0) , _midi_ports (0)
, _mmc (0) , _mmc (0)
, _vca_manager (new VCAManager (*this)) , _vca_manager (new VCAManager (*this))
, _midi_regions_use_bbt_beats (false)
{ {
uint32_t sr = 0; uint32_t sr = 0;
@ -477,10 +476,10 @@ Session::Session (AudioEngine &eng,
} }
} }
#endif #endif
_midi_regions_use_bbt_beats = false;
_is_new = false; _is_new = false;
session_loaded (); session_loaded ();
BootMessage (_("Session loading complete")); BootMessage (_("Session loading complete"));
} }

View file

@ -1003,20 +1003,6 @@ Session::load_state (string snapshot_name)
return -1; return -1;
} }
} }
} else {
XMLNode* child;
if ((child = find_named_node (root, "ProgramVersion")) != 0) {
if ((prop = child->property ("modified-with")) != 0) {
std::string modified_with = prop->value ();
const double modified_with_version = atof (modified_with.substr ( modified_with.find(" ", 0) + 1, string::npos).c_str());
const int modified_with_revision = atoi (modified_with.substr (modified_with.find("-", 0) + 1, string::npos).c_str());
if (modified_with_version <= 5.3 && !(modified_with_version == 5.3 && modified_with_revision > 42)) {
_midi_regions_use_bbt_beats = true;
}
}
}
} }
save_snapshot_name (snapshot_name); save_snapshot_name (snapshot_name);