From 7e598788b002dcb4343ccdc6fcc16181bd8515c8 Mon Sep 17 00:00:00 2001 From: petern Date: Wed, 22 Jul 2009 19:11:57 +0000 Subject: [PATCH] -Change: Store loop-relative timestamp in midi event queue instead of period and period-relative timestamps. git-svn-id: http://svn.fuzzle.org/mloop/trunk@21 ba049829-c6ef-42ef-81ac-908dd8d2e907 --- src/jack.cpp | 8 +++----- src/loop.cpp | 21 ++++++++------------- src/loop.h | 5 ++--- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/src/jack.cpp b/src/jack.cpp index 6137185..301150e 100644 --- a/src/jack.cpp +++ b/src/jack.cpp @@ -103,7 +103,7 @@ int Jack::ProcessCallback(jack_nframes_t nframes) * or empty. */ if (m_loop_buffer->Free() > sizeof ev.time + sizeof ev.size + ev.size) { - m_loop_buffer->Write((uint8_t *)&m_recording_time, sizeof m_recording_time); + ev.time += m_recording_time; m_loop_buffer->Write((uint8_t *)&ev.time, sizeof ev.time); m_loop_buffer->Write((uint8_t *)&ev.size, sizeof ev.size); m_loop_buffer->Write((uint8_t *)ev.buffer, ev.size); @@ -174,7 +174,6 @@ void Jack::EraseLoop(int loop) bool Jack::Run() { - static jack_nframes_t recording_time; static jack_midi_event_t ev; static bool first = true; if (first) { @@ -183,8 +182,7 @@ bool Jack::Run() } if (ev.time == UINT_MAX) { - if (m_loop_buffer->Size() >= sizeof recording_time + sizeof ev.time + sizeof ev.size) { - m_loop_buffer->Read((uint8_t *)&recording_time, sizeof recording_time); + if (m_loop_buffer->Size() >= sizeof ev.time + sizeof ev.size) { m_loop_buffer->Read((uint8_t *)&ev.time, sizeof ev.time); m_loop_buffer->Read((uint8_t *)&ev.size, sizeof ev.size); } @@ -195,7 +193,7 @@ bool Jack::Run() } if (m_recording) { - m_loops[m_recording_loop].AddEvent(recording_time, &ev); + m_loops[m_recording_loop].AddEvent(&ev); } ev.time = UINT_MAX; } diff --git a/src/loop.cpp b/src/loop.cpp index 77713ab..989745f 100644 --- a/src/loop.cpp +++ b/src/loop.cpp @@ -33,10 +33,8 @@ void Loop::PlayFrame(void *port_buffer, jack_nframes_t frame) } for (; m_iterator != m_events.end(); ++m_iterator) { - - jack_midi_event_t &event = (*m_iterator).first; - jack_nframes_t position = (*m_iterator).second; - if (event.time + position > m_position) break; + jack_midi_event_t &event = *m_iterator; + if (event.time > m_position) break; jack_midi_event_write(port_buffer, frame, event.buffer, event.size); } @@ -52,12 +50,9 @@ void Loop::PlayFrame(void *port_buffer, jack_nframes_t frame) } } -void Loop::AddEvent(jack_nframes_t position, jack_midi_event_t *event) +void Loop::AddEvent(jack_midi_event_t *event) { - Event e; - e.first = *event; - e.second = position; - m_events.push_back(e); + m_events.push_back(*event); } void Loop::SetLength(jack_nframes_t length) @@ -109,7 +104,7 @@ void Loop::StartFromNoteCache(NoteCache &cache) event.buffer = buffer; event.size = 3; - AddEvent(0, &event); + AddEvent(&event); } } } @@ -128,11 +123,11 @@ void Loop::EndFromNoteCache(NoteCache &cache) buffer[2] = 0; jack_midi_event_t event; - event.time = 0; + event.time = m_length - 1; event.buffer = buffer; event.size = 3; - AddEvent(m_length - 1, &event); + AddEvent(&event); } } } @@ -146,7 +141,7 @@ void Loop::Empty() m_position = 0; for (m_iterator = m_events.begin(); m_iterator != m_events.end(); ++m_iterator) { - jack_midi_event_t &event = (*m_iterator).first; + jack_midi_event_t &event = *m_iterator; free(event.buffer); } diff --git a/src/loop.h b/src/loop.h index 5ce84f8..9d8ddf7 100644 --- a/src/loop.h +++ b/src/loop.h @@ -17,8 +17,7 @@ enum LoopState { LS_RECORDING, }; -typedef std::pair Event; -typedef std::list EventList; +typedef std::list EventList; class Loop { private: @@ -36,7 +35,7 @@ public: ~Loop(); void PlayFrame(void *port_buffer, jack_nframes_t frame); - void AddEvent(jack_nframes_t position, jack_midi_event_t *event); + void AddEvent(jack_midi_event_t *event); void SetState(LoopState state) {