projects
/
ardour.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
83519fa
)
linear declick
author
Robin Gareus
<robin@gareus.org>
Tue, 7 Apr 2015 01:54:31 +0000
(
03:54
+0200)
committer
Robin Gareus
<robin@gareus.org>
Tue, 7 Apr 2015 03:25:12 +0000
(
05:25
+0200)
libs/ardour/amp.cc
patch
|
blob
|
history
diff --git
a/libs/ardour/amp.cc
b/libs/ardour/amp.cc
index cca465a0b466908415253b03b0250a26f6f05fa4..523b538359e097d0417821f7be6ede8a962ccccc 100644
(file)
--- a/
libs/ardour/amp.cc
+++ b/
libs/ardour/amp.cc
@@
-210,51
+210,39
@@
Amp::apply_gain (BufferSet& bufs, framecnt_t sample_rate, framecnt_t nframes, ga
void
Amp::declick (BufferSet& bufs, framecnt_t nframes, int dir)
{
void
Amp::declick (BufferSet& bufs, framecnt_t nframes, int dir)
{
- /* Similar to ::apply_gain() but skips MIDI buffers
- * and use cos() Sigmoid decay with fixed initial+target values.
- */
-
if (nframes == 0 || bufs.count().n_total() == 0) {
return;
}
if (nframes == 0 || bufs.count().n_total() == 0) {
return;
}
- const framecnt_t declick = std::min ((framecnt_t) 128, nframes);
- gain_t delta, initial, target;
- double fractional_shift = -1.0/(declick-1);
- double fractional_pos;
+ const framecnt_t declick = std::min ((framecnt_t) 512, nframes);
+ const double fractional_shift = 1.0 / declick ;
+ gain_t delta, initial;
if (dir < 0) {
/* fade out: remove more and more of delta from initial */
delta = -1.0;
initial = 1.0;
if (dir < 0) {
/* fade out: remove more and more of delta from initial */
delta = -1.0;
initial = 1.0;
- target = 0.0;
} else {
/* fade in: add more and more of delta from initial */
delta = 1.0;
initial = 0.0;
} else {
/* fade in: add more and more of delta from initial */
delta = 1.0;
initial = 0.0;
- target = 1.0;
}
/* Audio Gain */
}
/* Audio Gain */
-
for (BufferSet::audio_iterator i = bufs.audio_begin(); i != bufs.audio_end(); ++i) {
Sample* const buffer = i->data();
for (BufferSet::audio_iterator i = bufs.audio_begin(); i != bufs.audio_end(); ++i) {
Sample* const buffer = i->data();
-
fractional_pos = 1
.0;
+
double fractional_pos = 0
.0;
for (pframes_t nx = 0; nx < declick; ++nx) {
for (pframes_t nx = 0; nx < declick; ++nx) {
- buffer[nx] *=
(initial + (delta * (0.5 + 0.5 * cos (M_PI * fractional_pos)))
);
+ buffer[nx] *=
initial + (delta * fractional_pos
);
fractional_pos += fractional_shift;
}
/* now ensure the rest of the buffer has the target value applied, if necessary. */
fractional_pos += fractional_shift;
}
/* now ensure the rest of the buffer has the target value applied, if necessary. */
-
if (declick != nframes) {
if (declick != nframes) {
-
- if (target == 0.0) {
+ if (dir < 0) {
memset (&buffer[declick], 0, sizeof (Sample) * (nframes - declick));
memset (&buffer[declick], 0, sizeof (Sample) * (nframes - declick));
- } else if (target != 1.0) {
- apply_gain_to_buffer (&buffer[declick], nframes - declick, target);
}
}
}
}
}
}