aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine/JackDriver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/JackDriver.cpp')
-rw-r--r--src/engine/JackDriver.cpp23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/engine/JackDriver.cpp b/src/engine/JackDriver.cpp
index e5601d8..840573e 100644
--- a/src/engine/JackDriver.cpp
+++ b/src/engine/JackDriver.cpp
@@ -24,6 +24,7 @@
#include "Edge.hpp"
#include "JackDriver.hpp"
#include "LearnRequest.hpp"
+#include "MachineBuilder.hpp"
#include "MidiAction.hpp"
using namespace machina;
@@ -340,6 +341,7 @@ JackDriver::on_process(jack_nframes_t nframes)
read_input_playing(machine, _context.time());
break;
case PlayState::RECORDING:
+ case PlayState::STEP_RECORDING:
read_input_recording(machine, _context.time());
break;
}
@@ -399,6 +401,7 @@ JackDriver::set_play_state(PlayState state)
case PlayState::STOPPED:
break;
case PlayState::RECORDING:
+ case PlayState::STEP_RECORDING:
finish_record();
// nobreak
case PlayState::PLAYING:
@@ -407,10 +410,14 @@ JackDriver::set_play_state(PlayState state)
}
break;
case PlayState::RECORDING:
- start_record(false); // FIXME: step record?
+ start_record(false);
+ break;
+ case PlayState::STEP_RECORDING:
+ start_record(true);
break;
case PlayState::PLAYING:
- if (_play_state == PlayState::RECORDING) {
+ if (_play_state == PlayState::RECORDING ||
+ _play_state == PlayState::STEP_RECORDING) {
finish_record();
}
}
@@ -420,14 +427,20 @@ JackDriver::set_play_state(PlayState state)
void
JackDriver::start_record(bool step)
{
- if (_play_state.load() != PlayState::RECORDING) {
- // FIXME: Choose an appropriate maximum ringbuffer size
+ switch (_play_state) {
+ case PlayState::STOPPED:
+ case PlayState::PLAYING:
_recorder = SPtr<Recorder>(
new Recorder(_forge, 1024, _beats_unit, _quantization.get(), step));
_recorder->start();
_record_dur = 0;
- _play_state = PlayState::RECORDING;
+ break;
+ case PlayState::RECORDING:
+ case PlayState::STEP_RECORDING:
+ _recorder->builder()->set_step(true);
+ break;
}
+ _play_state = step ? PlayState::STEP_RECORDING : PlayState::RECORDING;
}
void