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);