home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 February / PCWorld_2008-02_cd.bin / audio-video / reaper / reaper2028-install.exe / Effects / SStillwell / badbussmojo_aa < prev    next >
Text File  |  2007-12-03  |  6KB  |  180 lines

  1. // Copyright 2006, Thomas Scott Stillwell
  2. // All rights reserved.
  3. //
  4. //Redistribution and use in source and binary forms, with or without modification, are permitted 
  5. //provided that the following conditions are met:
  6. //
  7. //Redistributions of source code must retain the above copyright notice, this list of conditions 
  8. //and the following disclaimer. 
  9. //
  10. //Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
  11. //and the following disclaimer in the documentation and/or other materials provided with the distribution. 
  12. //
  13. //The name of Thomas Scott Stillwell may not be used to endorse or 
  14. //promote products derived from this software without specific prior written permission. 
  15. //
  16. //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR 
  17. //IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
  18. //FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 
  19. //BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
  20. //(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
  21. //PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
  22. //STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
  23. //THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  24. desc:oversampling nonlinear waveshaper
  25.  
  26. slider1:0<-60,0,0.01>Pos. Thresh (dB)
  27. slider2:0<-60,0,0.01>Neg. Thresh (dB)
  28. slider3:1<1,2,0.001>Pos. Nonlinearity
  29. slider4:1<1,2,0.001>Neg. Nonlinearity
  30. slider5:0<0,6,0.01>Pos. Knee (dB)
  31. slider6:0<0,6,0.01>Neg. Knee (dB)
  32. slider7:0<0,100,0.1>Mod A
  33. slider8:0<0,100,0.1>Mod B
  34. slider9:2<1,32,1>Oversampling amount
  35. slider10:0<0,1,1{disabled,enabled}>Limit to +0dB
  36.  
  37. @init
  38.   log2db = 8.6858896380650365530225783783321; // 20 / ln(10)
  39.   db2log = 0.11512925464970228420089957273422; // ln(10) / 20 
  40.   pi = 3.1415926535;
  41.   halfpi = pi / 2;  
  42.   last_aa=0;
  43.  
  44. @slider
  45.   pt=slider1;
  46.   nt=slider2;
  47.   pl=slider3-1;
  48.   nl=slider4-1;
  49.   mixa=slider7/100;
  50.   mixb=slider8/100;
  51.   drivea=1;
  52.   mixa1 = 1 - mixa;
  53.   drivea1 = 1 / (1 - (drivea / 2));
  54.   drivea2 = drive / 2;
  55.   mixb1 = 1 - mixb;
  56.   pts=slider5;
  57.   nts=slider6;
  58.   ptt=pt - pts;
  59.   ntt=nt - nts;
  60.  
  61.   ptsv=exp(ptt * db2log);
  62.   ntsv=-exp(ntt * db2log);
  63.  
  64.   aasize=(slider9+0.5)|0;
  65.   aasize<1?aasize=1:aasize>256?aasize=256;
  66.  
  67.   aasize != last_aa ? (
  68.   
  69.     aasize>1 ? (
  70.       Q=0.707;
  71.       pos=0.9/aasize * $pi;
  72.  
  73.       cpos=cos(pos);
  74.       spos=sin(pos);
  75.     
  76.       alpha=spos/(2.0*Q);
  77.     
  78.       sc=1.0/( 1 + alpha);
  79.       b1 = (1-cpos) * sc;
  80.       b2 = b0 = b1*0.5;
  81.       a1 =  -2 * cpos * sc;
  82.       a2 = (1-alpha)*sc;
  83.     );
  84.     last_aa=aasize;
  85.  
  86.     hist4=hist5=hist6=hist7=0;
  87.     hist8=hist9=hist10=hist11=0;
  88.     hist12=hist13=hist14=hist15=0;
  89.     hist16=hist17=hist18=hist19=0;
  90.   );
  91.  
  92.  
  93. @sample
  94.   sspos=0;
  95.   src0=spl0;
  96.   src1=spl1;
  97.   loop(aasize,
  98.  
  99.     // run input filter
  100.     aasize > 1 ? (
  101.        sspl0 = src0*b0 + hist4*b1 + hist5*b2 - hist6*a1 - hist7*a2;
  102.        hist5=hist4; hist4=src0; hist7=hist6; hist6=sspl0;
  103.  
  104.        sspl1 = src1*b0 + hist8*b1 + hist9*b2 - hist10*a1 - hist11*a2;
  105.        hist9=hist8; hist8=src1; hist11=hist10; hist10=sspl1;      
  106.     ) : (
  107.       sspl0=src0; 
  108.       sspl1=src1;
  109.     );
  110.  
  111.  
  112.     mixa > 0 ? (
  113.       wet0 = drivea1 * sspl0 * (1 - abs(sspl0 * drivea2));
  114.       wet1 = drivea1 * sspl1 * (1 - abs(sspl1 * drivea2)); 
  115.       sspl0 = mixa1 * sspl0 + (mixa) * wet0;
  116.       sspl1 = mixa1 * sspl1 + (mixa) * wet1;  
  117.     );
  118.   
  119.     mixb > 0 ? (
  120.       wet0 = sin(sspl0 * halfpi);
  121.       wet1 = sin(sspl1 * halfpi); 
  122.       sspl0 = mixb1 * sspl0 + (mixb) * wet0;
  123.       sspl1 = mixb1 * sspl1 + (mixb) * wet1;  
  124.     );
  125.  
  126.     db0 = log(abs(sspl0)) * log2db;
  127.     db1 = log(abs(sspl1)) * log2db;
  128.  
  129.     sspl0>ptsv ? (
  130.       diff=max(min((db0 - ptt),0),pts);
  131.       pts == 0 ? mult = 0 : mult=diff/pts;
  132.       sspl0 = ptsv + ((sspl0 - ptsv) / (1 + (pl * mult)));
  133.     );
  134.     sspl0<ntsv ? (
  135.       diff=max(min((db0 - ntt),0),nts);
  136.       nts == 0 ? mult = 0 : mult=diff/nts;
  137.       sspl0 = ntsv + ((sspl0 - ntsv) / (1 + (nl * mult)));
  138.     );
  139.     sspl1>ptsv ? (
  140.       diff=max(min((db1 - ptt),0),pts);
  141.       pts == 0 ? mult = 0 : mult=diff/pts;
  142.       sspl1 = ptsv + ((sspl1 - ptsv) / (1 + (pl * mult)));
  143.     );
  144.     sspl1<ntsv ? (
  145.       diff=max(min((db1 - ntt),0),nts);
  146.       nts == 0 ? mult = 0 : mult=diff/nts;
  147.       sspl1 = ntsv + ((sspl1 - ntsv) / (1 + (nl * mult)));
  148.     );
  149.  
  150.  
  151.     slider10>0.5?(
  152.       sspl0>1.0?sspl0=1.0:sspl0<-1.0?sspl0=-1.0;
  153.       sspl1>1.0?sspl1=1.0:sspl1<-1.0?sspl1=-1.0;
  154.     );
  155.  
  156.     // run output filters
  157.  
  158.     aasize > 1 ? (
  159.  
  160.       (sspos+=1)==1 ? (
  161.         spl0 = sspl0*b0 + hist12*b1 + hist13*b2 - hist14*a1 - hist15*a2;
  162.         spl1 = sspl1*b0 + hist16*b1 + hist17*b2 - hist18*a1 - hist19*a2;
  163.  
  164.         hist13=hist12; hist12=sspl0; hist15=hist14; hist14=spl0;
  165.         hist17=hist16; hist16=sspl1; hist19=hist18; hist18=spl1;
  166.  
  167.       ) : (
  168.         tmp0 = sspl0*b0 + hist12*b1 + hist13*b2 - hist14*a1 - hist15*a2;
  169.         tmp1 = sspl1*b0 + hist16*b1 + hist17*b2 - hist18*a1 - hist19*a2;
  170.  
  171.         hist13=hist12; hist12=sspl0; hist15=hist14; hist14=tmp0;
  172.         hist17=hist16; hist16=sspl1; hist19=hist18; hist18=tmp1;
  173.       );
  174.     ) : (
  175.       spl0=sspl0; 
  176.       spl1=sspl1;
  177.     );
  178.  
  179.   );
  180.