diff options
Diffstat (limited to 'src/engine/JackDriver.cpp')
-rw-r--r-- | src/engine/JackDriver.cpp | 23 |
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 |