home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 January / PCWorld_2007-01_cd.bin / temacd / reaper / reaper147-install.exe / Effects / SStillwell / ozzifier < prev    next >
Text File  |  2006-10-05  |  4KB  |  113 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.  
  17.  
  18. //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR 
  19. //IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
  20. //FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 
  21. //BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
  22. //(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
  23. //PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
  24. //STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
  25. //THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  26.  
  27. desc: ozzifier - pitch/delay doubler
  28.  
  29. slider1:2<0,6,1>Number of voices
  30. slider2:10<0,120,0.1>time spread (ms)
  31. slider3:20<0,120,1>pitch spread (cent)
  32. slider4:-6<-120,6,1>wet mix (dB)
  33. slider5:-6<-120,6,1>dry mix (dB)
  34. slider6:100<0,100>pan spread%
  35.  
  36. @init
  37.   bufsize = srate;
  38.   bufloc0 = 10000;
  39.   bufloc1 = bufloc0+bufsize+1000;
  40.   voiceptr0loc = bufloc1+bufsize+1000;
  41.   voiceptr1loc = voiceptr0loc+1000;
  42.   voicerateloc = voiceptr1loc+1000;
  43.   cospanloc = voicerateloc+1000;
  44.   sinpanloc = cospanloc+1000;
  45.  
  46.   buffer0 = bufloc0;
  47.   buffer1 = bufloc1;
  48.   voiceptr0 = voiceptr0loc;
  49.   voiceptr1 = voiceptr1loc;
  50.   voicerate = voicerateloc;
  51.   cospan = cospanloc;
  52.   sinpan = sinpanloc;
  53.  
  54. @slider
  55.   numvoices = slider1;
  56.  
  57.   delaytime = slider2*0.001*srate;
  58.  
  59.   pitchspread = slider3;
  60.  
  61.   totalpitch = pitchspread * numvoices;
  62.  
  63.   bufsize = delaytime;
  64.   overlap = bufsize / 16;
  65.  
  66.   drymix = 2 ^ (slider5/6); 
  67.   wetmix = 2 ^ (slider4/6);
  68.  
  69.   panwidth = slider6/100;
  70.   lpan = 0.5 - (panwidth/2);
  71.   panincr = panwidth/max(1,numvoices-1);
  72.  
  73.   i = 1;
  74.  
  75.   loop(numvoices,
  76.     voicerate[i] = 2 ^ (-((totalpitch / 2) - (pitchspread * i)) / 1200);
  77.     voiceptr0[i] = bufloc0 + bufsize - (i/numvoices) * delaytime;
  78.     voiceptr1[i] = bufloc1 + bufsize - (i/numvoices) * delaytime;
  79.     (voiceptr0[i] < bufloc0) ? voiceptr0[i] += bufsize;
  80.     (voiceptr1[i] < bufloc1) ? voiceptr1[i] += bufsize;
  81.     cospan[i] = cos((lpan + (i - 1) * panincr) * $pi / 2);
  82.     sinpan[i] = sin((lpan + (i - 1) * panincr) * $pi / 2);
  83.     i += 1;
  84.   );
  85.  
  86. @sample
  87.   buffer0[0] = spl0;
  88.   buffer1[0] = spl1;
  89.  
  90.   wet0 = wet1 = 0;
  91.  
  92.   i = 1;
  93.   loop(numvoices,
  94.     wet0 += cospan[i] * voiceptr0[i][0];
  95.     wet1 += sinpan[i] * voiceptr1[i][0];
  96.  
  97.     voiceptr0[i] += voicerate[i];
  98.     voiceptr1[i] += voicerate[i];
  99.  
  100.     (voiceptr0[i] >= (bufloc0+bufsize)) ? voiceptr0[i] = bufloc0;
  101.     (voiceptr1[i] >= (bufloc1+bufsize)) ? voiceptr1[i] = bufloc1;
  102.     i += 1;
  103.   );
  104.  
  105.   spl0 = wet0 * wetmix + spl0 * drymix;
  106.   spl1 = wet1 * wetmix + spl1 * drymix;
  107.  
  108.   buffer0 += 1;
  109.   buffer1 += 1;
  110.  
  111.   (buffer0 >= (bufloc0 + bufsize)) ? buffer0 = bufloc0;
  112.   (buffer1 >= (bufloc1 + bufsize)) ? buffer1 = bufloc1;
  113.