-Add: loop quantisation

git-svn-id: http://svn.fuzzle.org/mloop/mloop/trunk@10 ba049829-c6ef-42ef-81ac-908dd8d2e907
remotes/git-svn@10
petern 2009-07-22 08:14:19 +00:00
parent bfa83efd94
commit 89a8fe6101
3 changed files with 15 additions and 5 deletions

View File

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

View File

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

View File

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