diff options
author | David Robillard <d@drobilla.net> | 2008-09-22 16:28:02 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2008-09-22 16:28:02 +0000 |
commit | a2d2f738cb63dbf0fb89e0a00c424ce883fb7888 (patch) | |
tree | 8ff8b9067a8884566b023de2dabedc2b57b856ab /libs/ardour/smf_source.cc | |
parent | ff2d51ddd8288ec967efab2cb8192f43c893909e (diff) |
Move event specific ringbuffer stuff to evoral.
Sane event type interface between evoral and libardour (no more shared magic numbers).
Cleanup Evoral::Sequence iterator, fix bugs, probably introduce new ones.
Move MIDI specific event functions to Evoral::MIDIEvent (is-a Evoral::Event).
git-svn-id: svn://localhost/ardour2/branches/3.0@3785 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/smf_source.cc')
-rw-r--r-- | libs/ardour/smf_source.cc | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc index 2d5c0af0d5..03a8b98199 100644 --- a/libs/ardour/smf_source.cc +++ b/libs/ardour/smf_source.cc @@ -39,6 +39,7 @@ #include <ardour/tempo.h> #include <ardour/audioengine.h> #include <ardour/smf_reader.h> +#include <ardour/event_type_map.h> #include "i18n.h" @@ -385,6 +386,7 @@ SMFSource::read_unlocked (MidiRingBuffer& dst, nframes_t start, nframes_t cnt, n // Output parameters for read_event (which will allocate scratch in buffer as needed) uint32_t ev_delta_t = 0; + uint32_t ev_type = 0; uint32_t ev_size = 0; uint8_t* ev_buffer = 0; @@ -407,6 +409,8 @@ SMFSource::read_unlocked (MidiRingBuffer& dst, nframes_t start, nframes_t cnt, n break; } + ev_type = EventTypeMap::instance().midi_event_type(ev_buffer[0]); + time += ev_delta_t; // accumulate delta time if (ret == 0) { // meta-event (skipped, just accumulate time) @@ -419,7 +423,7 @@ SMFSource::read_unlocked (MidiRingBuffer& dst, nframes_t start, nframes_t cnt, n ((time / (double)_ppqn) * frames_per_beat)) + stamp_offset; if (ev_frame_time <= start + cnt) - dst.write(ev_frame_time - negative_stamp_offset, ev_size, ev_buffer); + dst.write(ev_frame_time - negative_stamp_offset, ev_type, ev_size, ev_buffer); else break; } @@ -441,8 +445,9 @@ SMFSource::write_unlocked (MidiRingBuffer& src, nframes_t cnt) { _write_data_count = 0; - double time; - size_t size; + EventTime time; + EventType type; + uint32_t size; size_t buf_capacity = 4; uint8_t* buf = (uint8_t*)malloc(buf_capacity); @@ -450,14 +455,14 @@ SMFSource::write_unlocked (MidiRingBuffer& src, nframes_t cnt) if (_model && ! _model->writing()) _model->start_write(); - Evoral::Event ev(0.0, 4, NULL, true); + Evoral::MIDIEvent ev(0, 0.0, 4, NULL, true); while (true) { - bool ret = src.full_peek(sizeof(double), (uint8_t*)&time); + bool ret = src.peek_time(&time); if (!ret || time - _timeline_position > _length + cnt) break; - ret = src.read_prefix(&time, &size); + ret = src.read_prefix(&time, &type, &size); if (!ret) break; @@ -476,6 +481,7 @@ SMFSource::write_unlocked (MidiRingBuffer& src, nframes_t cnt) time -= _timeline_position; ev.set(buf, size, time); + ev.set_event_type(EventTypeMap::instance().midi_event_type(ev.buffer()[0])); if (! (ev.is_channel_event() || ev.is_smf_meta_event() || ev.is_sysex()) ) { //cerr << "SMFSource: WARNING: caller tried to write non SMF-Event of type " << std::hex << int(ev.buffer()[0]) << endl; continue; |