X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fmonitor_processor.h;h=d369cb9c282002b8330d02330260dea509bce53b;hb=cf52d6e4b40111eb04b244ec054055a4ec15dbe0;hp=41e911f57c2a399c3f172406565f4c05e277378b;hpb=b855e5f3220027502a3c88f189d511fe2a5a3c2b;p=ardour.git diff --git a/libs/ardour/ardour/monitor_processor.h b/libs/ardour/ardour/monitor_processor.h index 41e911f57c..d369cb9c28 100644 --- a/libs/ardour/ardour/monitor_processor.h +++ b/libs/ardour/ardour/monitor_processor.h @@ -32,6 +32,8 @@ #include "ardour/types.h" #include "ardour/processor.h" +#include "ardour/dB.h" + class XMLNode; namespace ARDOUR { @@ -39,7 +41,7 @@ namespace ARDOUR { class Session; template -class LIBARDOUR_API MPControl : public PBD::Controllable { +class /*LIBARDOUR_API*/ MPControl : public PBD::Controllable { public: MPControl (T initial, const std::string& name, PBD::Controllable::Flag flag, float lower = 0.0f, float upper = 1.0f) @@ -47,15 +49,16 @@ public: , _value (initial) , _lower (lower) , _upper (upper) + , _normal (initial) {} /* Controllable API */ - void set_value (double v) { + void set_value (double v, PBD::Controllable::GroupControlDisposition gcd) { T newval = (T) v; if (newval != _value) { _value = std::max (_lower, std::min (_upper, newval)); - Changed(); /* EMIT SIGNAL */ + Changed (true, gcd); /* EMIT SIGNAL */ } } @@ -63,15 +66,25 @@ public: return (float) _value; } + double internal_to_user (double i) const { return accurate_coefficient_to_dB (i);} + double user_to_internal (double u) const { return dB_to_coefficient(u) ;} + + std::string get_user_string () const + { + char theBuf[32]; sprintf( theBuf, "%3.1f dB", accurate_coefficient_to_dB (get_value())); + return std::string(theBuf); + } + double lower () const { return _lower; } double upper () const { return _upper; } + double normal () const { return _normal; } /* "access as T" API */ MPControl& operator=(const T& v) { if (v != _value) { _value = std::max (_lower, std::min (_upper, v)); - Changed (); /* EMIT SIGNAL */ + Changed (true, PBD::Controllable::UseGroup); /* EMIT SIGNAL */ } return *this; } @@ -103,6 +116,7 @@ protected: T _value; T _lower; T _upper; + T _normal; }; class LIBARDOUR_API MonitorProcessor : public Processor @@ -113,7 +127,7 @@ public: bool display_to_user() const; - void run (BufferSet& /*bufs*/, framepos_t /*start_frame*/, framepos_t /*end_frame*/, pframes_t /*nframes*/, bool /*result_required*/); + void run (BufferSet& /*bufs*/, framepos_t /*start_frame*/, framepos_t /*end_frame*/, double /*speed*/, pframes_t /*nframes*/, bool /*result_required*/); XMLNode& state (bool full); int set_state (const XMLNode&, int /* version */); @@ -140,6 +154,8 @@ public: bool dim_all () const; bool mono () const; + bool monitor_active () const { return _monitor_active; } + PBD::Signal0 Changed; boost::shared_ptr channel_cut_control (uint32_t) const; @@ -184,6 +200,8 @@ private: std::vector _channels; uint32_t solo_cnt; + bool _monitor_active; + /* pointers - created first, but managed by boost::shared_ptr<> */ @@ -210,6 +228,7 @@ private: MPControl& _solo_boost_level; void allocate_channels (uint32_t); + void update_monitor_state (); }; } /* namespace */