From 4d5822a332e685672afd54e513ac826762763a63 Mon Sep 17 00:00:00 2001 From: petern Date: Tue, 21 Jul 2009 21:52:18 +0000 Subject: [PATCH] -Add ability to erase loops. git-svn-id: http://svn.fuzzle.org/mloop/mloop/trunk@5 ba049829-c6ef-42ef-81ac-908dd8d2e907 --- src/jack.cpp | 5 +++++ src/loop.cpp | 17 +++++++++++++---- src/loop.h | 1 + 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/jack.cpp b/src/jack.cpp index 8098e8b..c8f3433 100644 --- a/src/jack.cpp +++ b/src/jack.cpp @@ -249,6 +249,11 @@ void Jack::Run() printf("Stopping loop %d\n", m_recording_loop); m_loops[m_recording_loop].Stop(); break; + + case 'e': + printf("Erasing loop %d\n", m_recording_loop); + m_loops[m_recording_loop].Empty(); + break; } } } diff --git a/src/loop.cpp b/src/loop.cpp index 91c3e6e..0defd43 100644 --- a/src/loop.cpp +++ b/src/loop.cpp @@ -63,6 +63,8 @@ void Loop::Start(bool loop) { if (m_state != LS_IDLE) return; + if (m_length == 0) return; + m_position = 0; m_iterator = m_events.begin(); m_state = loop ? LS_PLAY_LOOP : LS_PLAY_ONCE; @@ -121,10 +123,17 @@ void Loop::EndFromNoteCache(NoteCache &cache) } } -/* -void Loop::Reset() +void Loop::Empty() { - m_state = LS_IDLE; + if (m_state != LS_IDLE) return; + + m_length = 0; m_position = 0; + + for (m_iterator = m_events.begin(); m_iterator != m_events.end(); ++m_iterator) { + jack_midi_event_t &event = (*m_iterator).first; + free(event.buffer); + } + + m_events.clear(); } -*/ diff --git a/src/loop.h b/src/loop.h index 55607d0..18efac8 100644 --- a/src/loop.h +++ b/src/loop.h @@ -35,6 +35,7 @@ public: void SetLength(jack_nframes_t length); void Start(bool loop); void Stop(); + void Empty(); void StartFromNoteCache(NoteCache &cache); void EndFromNoteCache(NoteCache &cache);