|
|
@ -1,8 +1,8 @@ |
|
|
|
#ifndef HECK_OSP_UTILS_HH |
|
|
|
#define HECK_OSP_UTILS_HH |
|
|
|
#ifndef HECK_DAISY_UTILS_HH |
|
|
|
#define HECK_DAISY_UTILS_HH |
|
|
|
|
|
|
|
#include "daisy_seed.h" |
|
|
|
#include "main_osp.hh" |
|
|
|
#include "types.hh" |
|
|
|
|
|
|
|
namespace Heck { |
|
|
|
void GetMidiTypeAsString(const ld::MidiEvent& msg, char* str); |
|
|
@ -21,10 +21,40 @@ namespace Heck { |
|
|
|
void set_period(u32 time_units); |
|
|
|
void set_callback(const Callback& cb); |
|
|
|
bool is_it_already_time_again(u32 time_now); |
|
|
|
|
|
|
|
private: |
|
|
|
Callback callback_{}; |
|
|
|
u32 time_last_exec_{}; |
|
|
|
u32 time_period_{}; |
|
|
|
}; |
|
|
|
} // namespace Heck
|
|
|
|
|
|
|
|
namespace Heck { |
|
|
|
template<typename T> class Observer { |
|
|
|
|
|
|
|
public: |
|
|
|
bool on_change(T val_new, std::function<void(T val_current)> fn) |
|
|
|
{ |
|
|
|
if (val_new != val_current_) { |
|
|
|
val_current_ = val_new; |
|
|
|
fn(val_current_); |
|
|
|
return true; |
|
|
|
} |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
bool on_change_fuzzy(T val_new, T min_deviation, std::function<void(T val_current)> fn) |
|
|
|
{ |
|
|
|
if (std::abs(val_new - val_current_) >= min_deviation) { |
|
|
|
val_current_ = val_new; |
|
|
|
fn(val_current_); |
|
|
|
return true; |
|
|
|
} |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
private: |
|
|
|
static inline T val_current_{}; |
|
|
|
}; |
|
|
|
} // namespace Heck
|
|
|
|
#endif // HECK_DAISY_UTILS_HH
|