1 #ifndef AL_SEQUENCERECORDER_H
2 #define AL_SEQUENCERECORDER_H
46 #include <condition_variable>
54 #include "al/ui/al_PresetHandler.hpp"
55 #include "al/ui/al_PresetSequencer.hpp"
96 void startRecord(std::string name =
"",
bool overwrite =
false);
99 bool recording() {
return mRecording; }
101 void setMaxRecordTime(al_sec maxTime) { mMaxRecordTime = maxTime; }
103 std::string lastSequenceName();
104 std::string lastSequenceSubDir();
115 std::string getCurrentPath() {
return mPresetHandler->
getCurrentPath(); }
118 registerPresetHandler(handler);
122 void registerPresetHandler(PresetHandler &handler) {
123 mPresetHandler = &handler;
124 if (mPresetHandler) {
125 for (
auto *presetParam : mPresetHandler->parameters()) {
126 for (
auto *p : mParameters) {
127 if (presetParam->getFullAddress() == p->getFullAddress()) {
128 std::cerr <<
"ERROR: Parameters registered with sequence recorder "
129 "must not be part of registered presets: "
130 << p->getFullAddress() << std::endl;
139 SequenceRecorder &operator<<(ParameterMeta ¶m) {
140 registerParameter(param);
144 void registerParameter(ParameterMeta &p);
148 std::string rootOSCPath)
override;
151 static void presetChanged(
int index,
void *sender,
void *userData);
153 std::string sequenceName);
162 std::string mDirectory;
164 std::vector<ParameterMeta *> mParameters;
167 std::string mLastSequenceName;
168 std::string mLastSequenceSubDir;
170 std::mutex mSequenceLock;
171 std::condition_variable mSequenceConditionVar;
174 std::thread *mRecorderThread;
178 al_sec mMaxRecordTime;
The PresetHandler class handles sorting and recalling of presets.
void registerPresetCallback(std::function< void(int index, void *sender, void *userData)> cb, void *userData=nullptr)
Register a callback to be notified when a preset is loaded.
std::string getCurrentPath()
Path including subdirectory if any.
The SequenceRecorder class records preset changes in a ".sequence" file.
void startRecord(std::string name="", bool overwrite=false)
startRecord begins recording preset changes
virtual bool consumeMessage(osc::Message &m, std::string rootOSCPath) override
Returns true if message was consumed by this class.
void setDirectory(std::string directory)
setDirectory sets the working directory for the SequenceRecorder