summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorHans Baier <hansfbaier@googlemail.com>2008-05-12 10:03:53 +0000
committerHans Baier <hansfbaier@googlemail.com>2008-05-12 10:03:53 +0000
commitd46724515238fdb57f5d21c450883f7cc8897a56 (patch)
treebb1487333ddcc99900e9614c2bebbfa4d6ce28d6 /libs/ardour
parent8ca72c4eca3a712f5368680ba0fbce5beb831324 (diff)
* fixed various event size bugs
git-svn-id: svn://localhost/ardour2/branches/3.0@3336 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/midi_ring_buffer.h6
-rw-r--r--libs/ardour/midi_model.cc5
-rw-r--r--libs/ardour/midi_track.cc9
3 files changed, 13 insertions, 7 deletions
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<Byte>::write(sizeof(double), (Byte*)&time);
MidiRingBufferBase<Byte>::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<Byte>::write(size, tmp_buf);
} else {
MidiRingBufferBase<Byte>::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<AutomationControl> 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> 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);