diff options
author | David Robillard <d@drobilla.net> | 2013-01-13 07:49:49 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2013-01-13 07:49:49 +0000 |
commit | 67a8adbc93991acfb688f378f52392995a272fac (patch) | |
tree | a4e629bd9c0d7da4cc5c7cb644b3352ca6f0dc78 /src/engine/machina/Driver.hpp | |
parent | 33aa54fa98783d1da2a322ee136c17df7f9c98a5 (diff) | |
download | machina-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.hpp | 24 |
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 |