From d46724515238fdb57f5d21c450883f7cc8897a56 Mon Sep 17 00:00:00 2001 From: Hans Baier Date: Mon, 12 May 2008 10:03:53 +0000 Subject: * fixed various event size bugs git-svn-id: svn://localhost/ardour2/branches/3.0@3336 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/midi_region_view.cc | 12 ++++++++---- libs/ardour/ardour/midi_ring_buffer.h | 6 ++++-- libs/ardour/midi_model.cc | 5 ++--- libs/ardour/midi_track.cc | 9 +++++++-- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index b83630e9fa..18ab4ef74f 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -534,8 +534,9 @@ MidiRegionView::~MidiRegionView () RegionViewGoingAway (this); /* EMIT_SIGNAL */ - if (_active_notes) + if (_active_notes) { end_write(); + } _selection.clear(); clear_events(); @@ -707,12 +708,15 @@ MidiRegionView::resolve_note(uint8_t note, double end_time) void MidiRegionView::extend_active_notes() { - if (!_active_notes) + if (!_active_notes) { return; + } - for (unsigned i=0; i < 128; ++i) - if (_active_notes[i]) + for (unsigned i=0; i < 128; ++i) { + if (_active_notes[i]) { _active_notes[i]->property_x2() = trackview.editor.frame_to_pixel(_region->length()); + } + } } diff --git a/libs/ardour/ardour/midi_ring_buffer.h b/libs/ardour/ardour/midi_ring_buffer.h index ea0013fe46..baa8e9d948 100644 --- a/libs/ardour/ardour/midi_ring_buffer.h +++ b/libs/ardour/ardour/midi_ring_buffer.h @@ -348,12 +348,14 @@ MidiRingBuffer::write(double time, size_t size, const Byte* buf) MidiRingBufferBase::write(sizeof(double), (Byte*)&time); MidiRingBufferBase::write(sizeof(size_t), (Byte*)&size); if (is_channel_event(buf[0]) && get_channel_mode() == ForceChannel) { - assert(size == 3); + assert(size == 2 || size == 3); Byte tmp_buf[3]; // Force event to channel tmp_buf[0] = (buf[0] & 0xF0) | (get_channel_mask() & 0x0F); tmp_buf[1] = buf[1]; - tmp_buf[2] = buf[2]; + if (size == 3) { + tmp_buf[2] = buf[2]; + } MidiRingBufferBase::write(size, tmp_buf); } else { MidiRingBufferBase::write(size, buf); diff --git a/libs/ardour/midi_model.cc b/libs/ardour/midi_model.cc index 2b8755b0f9..168516fcc4 100644 --- a/libs/ardour/midi_model.cc +++ b/libs/ardour/midi_model.cc @@ -363,7 +363,7 @@ bool MidiModel::control_to_midi_event(MIDI::Event& ev, ev.buffer()[0] = MIDI_CMD_PGM_CHANGE + iter.automation_list->parameter().channel(); ev.buffer()[1] = (Byte)iter.y; ev.time() = iter.x; - ev.size() = 3; + ev.size() = 2; return true; case MidiPitchBenderAutomation: @@ -395,7 +395,7 @@ bool MidiModel::control_to_midi_event(MIDI::Event& ev, = MIDI_CMD_CHANNEL_PRESSURE + iter.automation_list->parameter().channel(); ev.buffer()[1] = (Byte)iter.y; ev.time() = iter.x; - ev.size() = 3; + ev.size() = 2; return true; default: @@ -615,7 +615,6 @@ void MidiModel::append_automation_event_unlocked(AutomationType type, Parameter param(type, id, chan); boost::shared_ptr control = Automatable::control(param, true); control->list()->rt_add(time, value); - /*cerr << "control list size after fast simple add: " << control->list()->size() << endl;*/ } void MidiModel::add_note_unlocked(const boost::shared_ptr note) diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc index d22c2171e7..7b95290705 100644 --- a/libs/ardour/midi_track.cc +++ b/libs/ardour/midi_track.cc @@ -729,9 +729,10 @@ MidiTrack::MidiControl::set_value(float val) { assert(val >= _list->parameter().min()); assert(val <= _list->parameter().max()); + size_t size = 3; if ( ! _list->automation_playback()) { - Byte ev[3] = { _list->parameter().channel(), (int)val, 0.0 }; + Byte ev[3] = { _list->parameter().channel(), int(val), 0.0 }; switch(_list->parameter().type()) { case MidiCCAutomation: ev[0] += MIDI_CMD_CONTROL; @@ -740,11 +741,15 @@ MidiTrack::MidiControl::set_value(float val) break; case MidiPgmChangeAutomation: + size = 2; ev[0] += MIDI_CMD_PGM_CHANGE; + ev[1] = int(val); break; case MidiChannelAftertouchAutomation: + size = 2; ev[0] += MIDI_CMD_CHANNEL_PRESSURE; + ev[1] = int(val); break; case MidiPitchBenderAutomation: @@ -756,7 +761,7 @@ MidiTrack::MidiControl::set_value(float val) default: assert(false); } - _route->write_immediate_event(3, ev); + _route->write_immediate_event(size, ev); } AutomationControl::set_value(val); -- cgit v1.2.3