aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine/machina/Driver.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2013-01-13 07:49:49 +0000
committerDavid Robillard <d@drobilla.net>2013-01-13 07:49:49 +0000
commit67a8adbc93991acfb688f378f52392995a272fac (patch)
treea4e629bd9c0d7da4cc5c7cb644b3352ca6f0dc78 /src/engine/machina/Driver.hpp
parent33aa54fa98783d1da2a322ee136c17df7f9c98a5 (diff)
downloadmachina-67a8adbc93991acfb688f378f52392995a272fac.tar.gz
machina-67a8adbc93991acfb688f378f52392995a272fac.tar.bz2
machina-67a8adbc93991acfb688f378f52392995a272fac.zip
Change model to have a single initial node.
Merge multiple recording into branches off the same initial node. Make transport state sane with 3 distinct states. Handle announcing objects several times correctly. Don't send useless zero coordinates for new nodes, position in visible area. Rewrite and clean up Machine code. Update help. git-svn-id: http://svn.drobilla.net/lad/trunk/machina@4954 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/machina/Driver.hpp')
-rw-r--r--src/engine/machina/Driver.hpp24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/engine/machina/Driver.hpp b/src/engine/machina/Driver.hpp
index 3e65c9d..84a6cfd 100644
--- a/src/engine/machina/Driver.hpp
+++ b/src/engine/machina/Driver.hpp
@@ -18,6 +18,8 @@
#ifndef MACHINA_DRIVER_HPP
#define MACHINA_DRIVER_HPP
+#include <atomic>
+
#include "raul/RingBuffer.hpp"
#include "machina/types.hpp"
@@ -28,15 +30,21 @@ namespace machina {
class Machine;
-class Driver
- : public MIDISink
+class Driver : public MIDISink
{
public:
Driver(Raul::Forge& forge, SPtr<Machine> machine)
: _forge(forge)
, _machine(machine)
+ , _play_state(PlayState::STOPPED)
{}
+ enum class PlayState {
+ STOPPED,
+ PLAYING,
+ RECORDING
+ };
+
virtual ~Driver() {}
SPtr<Machine> machine() { return _machine; }
@@ -51,23 +59,21 @@ public:
_updates = b;
}
- virtual void set_bpm(double bpm) = 0;
- virtual void set_quantization(double q) = 0;
+ virtual void set_bpm(double bpm) = 0;
+ virtual void set_quantization(double q) = 0;
+ virtual void set_play_state(PlayState state) = 0;
virtual bool is_activated() const { return false; }
virtual void activate() {}
virtual void deactivate() {}
- virtual void stop() {}
-
- virtual bool recording() { return false; }
- virtual void start_record(bool step) {}
- virtual void finish_record() {}
+ PlayState play_state() const { return _play_state.load(); }
protected:
Raul::Forge& _forge;
SPtr<Machine> _machine;
SPtr<Raul::RingBuffer> _updates;
+ std::atomic<PlayState> _play_state;
};
} // namespace machina