From 89a8fe6101a2f509acff51d8d0c479336b024bf5 Mon Sep 17 00:00:00 2001 From: petern Date: Wed, 22 Jul 2009 08:14:19 +0000 Subject: [PATCH] -Add: loop quantisation git-svn-id: http://svn.fuzzle.org/mloop/mloop/trunk@10 ba049829-c6ef-42ef-81ac-908dd8d2e907 --- src/jack.cpp | 8 +++++++- src/jack.h | 2 +- src/ui.cpp | 10 +++++++--- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/jack.cpp b/src/jack.cpp index 9693ff1..8c42676 100644 --- a/src/jack.cpp +++ b/src/jack.cpp @@ -131,10 +131,16 @@ int Jack::ProcessCallback(jack_nframes_t nframes) return 0; } -void Jack::ToggleRecording(int loop) +void Jack::ToggleRecording(int loop, int bpm) { if (m_recording) { m_recording = false; + + if (bpm > 0) { + jack_nframes_t chunk = 60 * m_sample_rate / bpm; + m_recording_time -= m_recording_time % chunk; + } + m_loops[m_recording_loop].SetLength(m_recording_time); m_loops[m_recording_loop].SetState(LS_IDLE); m_loops[m_recording_loop].EndFromNoteCache(m_notecache); diff --git a/src/jack.h b/src/jack.h index 376941a..057e593 100644 --- a/src/jack.h +++ b/src/jack.h @@ -49,7 +49,7 @@ public: void Disconnect(); bool Run(); - void ToggleRecording(int loop); + void ToggleRecording(int loop, int bpm); void StartLoop(int loop, bool repeat); void StopLoop(int loop); void EraseLoop(int loop); diff --git a/src/ui.cpp b/src/ui.cpp index d4b90c1..b1d268a 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -57,6 +57,7 @@ int getch() int bpm = 120; int color_map[4]; char status[1024]; +bool quantise = false; bool UI::Run(Jack &j) { @@ -128,14 +129,12 @@ bool UI::Run(Jack &j) switch (c) { case 3: - case 'q': { endwin(); reset_terminal_mode(); return true; - } case 'r': - j.ToggleRecording(m_loop); + j.ToggleRecording(m_loop, quantise ? bpm : 0); if (j.Recording()) { snprintf(status, sizeof status, "Start recording loop %d", m_loop); } else { @@ -173,6 +172,11 @@ bool UI::Run(Jack &j) j.EraseLoop(m_loop); break; + case 'q': + quantise = !quantise; + snprintf(status, sizeof status, "Set quantise %s", quantise ? "on" : "off"); + break; + case KEY_UP: m_loop--; if (m_loop == -1) m_loop = NUM_LOOPS - 1;