diff --git a/src/jack.cpp b/src/jack.cpp index ca64c4c..6bb0719 100644 --- a/src/jack.cpp +++ b/src/jack.cpp @@ -184,3 +184,12 @@ bool Jack::Run() return false; } +void Jack::Save() const +{ + FILE *f = fopen("test.txt", "w"); + for (int i = 0; i < NUM_LOOPS; i++) { + fprintf(f, "LOOP %d\n", i); + m_loops[i].Save(f); + } + fclose(f); +} diff --git a/src/jack.h b/src/jack.h index 5ab8c79..79e746e 100644 --- a/src/jack.h +++ b/src/jack.h @@ -89,6 +89,8 @@ public: { return m_loops[loop].Tempo(); } + + void Save() const; }; #endif /* JACK_H */ diff --git a/src/loop.cpp b/src/loop.cpp index 989745f..3de3d3f 100644 --- a/src/loop.cpp +++ b/src/loop.cpp @@ -1,5 +1,6 @@ /* $Id$ */ +#include #include "loop.h" Loop::Loop() @@ -147,3 +148,19 @@ void Loop::Empty() m_events.clear(); } + +void Loop::Save(FILE *f) const +{ + fprintf(f, "%u %f %f\n", m_length, m_position, m_tempo); + fprintf(f, "%lu\n", m_events.size()); + + EventList::const_iterator it; + for (it = m_events.begin(); it != m_events.end(); ++it) { + const jack_midi_event_t &ev = *it; + fprintf(f, "%u %lu", ev.time, ev.size); + for (uint i = 0; i < ev.size; i++) { + fprintf(f, " %02X", ev.buffer[i]); + } + fprintf(f, "\n"); + } +} diff --git a/src/loop.h b/src/loop.h index 9d8ddf7..b2d0777 100644 --- a/src/loop.h +++ b/src/loop.h @@ -3,6 +3,7 @@ #ifndef LOOP_H #define LOOP_H +#include #include #include #include @@ -79,6 +80,8 @@ public: { return m_loop; } + + void Save(FILE *f) const; }; #endif /* LOOP_H */ diff --git a/src/ui.cpp b/src/ui.cpp index 2955236..7aa4b42 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -314,6 +314,10 @@ bool UI::Run(Jack &j) m_edit_timer = EDIT_TIMER_RESET; } break; + + case 'S': + j.Save(); + break; } return false;