home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2008 February
/
PCWorld_2008-02_cd.bin
/
audio-video
/
reaper
/
reaper2028-install.exe
/
Effects
/
LOSER
/
ZeroCrossingMaximizer
< prev
Wrap
Text File
|
2007-12-03
|
2KB
|
92 lines
// (C) 2006-2007, Michael Gruhn.
// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO,
// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING
// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF
// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN
// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND
// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD
// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR
// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS
// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO
// ENTRUST SOMEBODY ELSE WITH DOING SO.
desc:Zero Crossing Maximizer (Not A Clipper)
slider1:0<-12,0,.1>Threshold (dB)
slider2:0<-12,0,.1>Ceiling (dB)
slider3:500<250,1000,1>Buffer Size (ms)
@slider
thresh = 2^(slider1/6);
buffer = 0;
pdc_delay = bufSize = floor(min(slider3/1000 * srate,500000));
bufOffs = bufSize + 1;
pdc_bot_ch=0; pdc_top_ch=2;
ceiling = 2^(slider2/6);
volume = ceiling/thresh;
@sample
buffer[bufPos] = spl0;
// track zero crossings
spl0 > 0 ? s0=1 : s0=0;
maxSpl0 = max ( maxSpl0, abs(spl0));
s0 != lastS0 ?
(
maxSpl0 > thresh ? gain=thresh/maxSpl0 : gain=1;
adjPos = length0;
loop(length0+1,
buffer[bufPos - adjPos + ((bufPos-adjPos)<0 ? bufSize+1:0;) ] *= gain;
(adjPos -= 1);
);
length0 = -1;
maxSpl0 = 0;
);
(length0+=1) > bufSize ? length0 = maxSpl1 = 0;
lastS0 = s0;
bufOffs[bufPos] = spl1;
// track zero crossings
spl1 > 0 ? s1=1 : s1=0;
maxSpl1 = max ( maxSpl1, abs(spl1));
s1 != lastS1 ?
(
maxSpl1 > thresh ? gain=thresh/maxSpl1 : gain=1;
adjPos = length1;
loop(length1+1,
bufOffs[bufPos - adjPos + ((bufPos-adjPos)<0 ? bufSize+1:0;) ] *= gain;
(adjPos -= 1);
);
length1 = -1;
maxSpl1 = 0;
);
(length1+=1) > bufSize ? length1 = maxSpl1 = 0;
lastS1 = s1;
(bufPos += 1) > bufSize ? bufPos = 0 ;
spl0 = buffer[bufPos]*volume;
spl1 = bufOffs[bufPos]*volume;
// Can comment this out for more speed ;)
spl0 = min(max(spl0,-1),1);
spl1 = min(max(spl1,-1),1);