39 #define GAIN_COEFF_TINY (1e-10) // -200dB
44 , _apply_gain_automation(false)
46 , _current_automation_frame (INT64_MAX)
47 , _gain_automation_buffer(0)
49 , _midi_amp (type !=
"trim")
102 assert(ev.
time() >= 0 && ev.
time() < nframes);
114 Sample*
const sp = i->data();
116 for (
pframes_t nx = 0; nx < nframes; ++nx) {
118 lpf += a * (gab[nx] - lpf);
176 if (initial == target) {
187 if (target < initial) {
189 delta = -(initial - target);
192 delta = target - initial;
201 const gain_t scale = delta * (ev.
time()/(double) nframes);
213 const double a = 156.825 / sample_rate;
216 Sample*
const buffer = i->data();
217 double lpf = initial;
219 for (
pframes_t nx = 0; nx < nframes; ++nx) {
221 lpf += a * (target - lpf);
240 const double fractional_shift = 1.0 /
declick ;
255 Sample*
const buffer = i->data();
257 double fractional_pos = 0.0;
260 buffer[nx] *= initial + (delta * fractional_pos);
261 fractional_pos += fractional_shift;
265 if (declick != nframes) {
267 memset (&buffer[declick], 0,
sizeof (
Sample) * (nframes - declick));
286 if (initial == target) {
292 const double a = 156.825 / sample_rate;
294 double lpf = initial;
295 for (
pframes_t nx = 0; nx < nframes; ++nx) {
297 lpf += a * (target - lpf);
325 memset (i->data(), 0,
sizeof (
Sample) * nframes);
354 memset (buf.
data(), 0,
sizeof (
Sample) * nframes);
367 set_gain (0.000001
f + (0.000001
f * factor), src);
369 set_gain (desired_gain + (desired_gain * factor), src);
446 return std::string(theBuf);
bool transport_rolling() const
double internal_to_interface(double) const
framecnt_t nominal_frame_rate() const
ARDOUR::Session & _session
static double gain_to_slider_position(ARDOUR::gain_t g)
float lower
Minimum value (in Hz, for frequencies)
bool _apply_gain_automation
boost::shared_ptr< GainControl > _gain_control
Session & session() const
int set_state(const XMLNode &, int version)
gain_t * _gain_automation_buffer
void set_gain(gain_t g, void *src)
const ParameterDescriptor _desc
Amp(Session &s, std::string type="amp")
double user_to_internal(double) const
bool configure_io(ChanCount in, ChanCount out)
void run(BufferSet &bufs, framepos_t start_frame, framepos_t end_frame, pframes_t nframes, bool)
int set_state(const XMLNode &, int version)
virtual void add_control(boost::shared_ptr< Evoral::Control >)
static float accurate_coefficient_to_dB(float coeff)
XMLNode & state(bool full)
midi_iterator midi_begin()
Glib::Threads::Mutex & control_lock() const
virtual std::string value_as_string(boost::shared_ptr< AutomationControl >) const
float upper
Maximum value (in Hz, for frequencies)
void inc_gain(gain_t delta, void *src)
audio_iterator audio_begin()
void set_gain_automation_buffer(gain_t *)
static void apply_simple_gain(BufferSet &bufs, framecnt_t nframes, gain_t target, bool midi_amp=true)
virtual bool configure_io(ChanCount in, ChanCount out)
double internal_to_user(double) const
void scale_velocity(float factor)
audio_iterator audio_end()
framepos_t _current_automation_frame
static void declick(BufferSet &bufs, framecnt_t nframes, int dir)
static const std::string xml_node_name
std::string get_user_string() const
XMLProperty * add_property(const char *name, const std::string &value)
void set_value(double val)
void setup_gain_automation(framepos_t start_frame, framepos_t end_frame, framecnt_t nframes)
void add_child_nocopy(XMLNode &)
std::string value_as_string(boost::shared_ptr< AutomationControl >) const
const ChanCount & count() const
bool can_support_io_configuration(const ChanCount &in, ChanCount &out)
bool bounce_processing() const
virtual XMLNode & state(bool full)
static float dB_to_coefficient(float dB)
XMLNode * child(const char *) const
double interface_to_internal(double) const
const Sample * data(framecnt_t offset=0) const
static LilvNode * get_value(LilvWorld *world, const LilvNode *subject, const LilvNode *predicate)
LIBARDOUR_API apply_gain_to_buffer_t apply_gain_to_buffer
virtual double internal_to_user(double i) const
std::string display_name() const
static ARDOUR::gain_t slider_position_to_gain(double pos)
void set_velocity(uint8_t value)