aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine/JackDriver.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2013-01-13 20:46:13 +0000
committerDavid Robillard <d@drobilla.net>2013-01-13 20:46:13 +0000
commitac0438352410a5af5d64d2268d3541b47e8a2669 (patch)
tree0fc9f575b80493fda4df0e8121a3b34b51a6cbc7 /src/engine/JackDriver.cpp
parentb73a80441f0ddd09654a6d4cc337d11f51d0e1c1 (diff)
downloadmachina-ac0438352410a5af5d64d2268d3541b47e8a2669.tar.gz
machina-ac0438352410a5af5d64d2268d3541b47e8a2669.tar.bz2
machina-ac0438352410a5af5d64d2268d3541b47e8a2669.zip
Fix step recording.
git-svn-id: http://svn.drobilla.net/lad/trunk/machina@4965 a436a847-0d15-0410-975c-d299462d15a1
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