1 #ifndef AL_COMPOSITION_H
2 #define AL_COMPOSITION_H
50 #include "al/ui/al_PresetHandler.hpp"
51 #include "al/ui/al_PresetSequencer.hpp"
59 std::string sequenceName;
67 Composition(std::string fileName, std::string path);
73 bool playArchive(std::string archiveName);
75 std::string getName();
80 void setSubDirectory(std::string subDir) { mSubDirectory = subDir; }
82 static bool archive(std::string compositionName, std::string path =
"",
83 bool overwrite =
true);
84 static bool restore(std::string compositionName, std::string path =
"",
85 bool overwrite =
true);
89 void insertStep(std::string name,
float deltaTime,
int index);
90 void deleteStep(
int index);
94 void registerBeginCallback(
95 std::function<
void(
Composition *sender,
void *userData)> beginCallback,
96 void *userData =
nullptr);
98 void enableBeginCallback(
bool enable) { mBeginCallbackEnabled = enable; }
100 void registerEndCallback(
101 std::function<
void(
bool finished,
Composition *sender,
void *userData)>
103 void *userData =
nullptr);
105 void enableEndCallback(
bool enable) { mEndCallbackEnabled = enable; }
108 mSequencer = &sequencer;
112 return registerSequencer(sequencer);
117 std::string rootOSCPath)
override;
120 std::vector<CompositionStep> mCompositionSteps;
122 std::string mSubDirectory;
123 std::string mCompositionName;
125 std::thread *mPlayThread;
128 std::mutex mPlayerLock;
129 std::mutex mPlayWaitLock;
130 std::condition_variable mPlayWaitVariable;
134 bool mBeginCallbackEnabled;
135 std::function<void(
Composition *,
void *userData)> mBeginCallback;
136 void *mBeginCallbackData;
137 bool mEndCallbackEnabled;
138 std::function<void(
bool,
Composition *,
void *userData)> mEndCallback;
139 void *mEndCallbackData;
141 std::function<void(
bool,
PresetSequencer *)> mSequencerEndCallbackCache;
143 std::vector<CompositionStep> loadCompositionSteps(
144 std::string compositionSteps);
145 std::string getRootPath();
146 std::string getCurrentPath();
148 static void playbackThread(
Composition *composition);
virtual bool consumeMessage(osc::Message &m, std::string rootOSCPath) override
Returns true if message was consumed by this class.
The PresetSequencer class allows triggering presets from a PresetHandler over time.