home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 January / PCWorld_2007-01_cd.bin / temacd / reaper / reaper147-install.exe / Effects / SStillwell / drumtrigger < prev    next >
Text File  |  2006-08-14  |  3KB  |  105 lines

  1. // drumtrigger: generates MIDI note information from audio impulses
  2. // Copyright 2006, Thomas Scott Stillwell
  3. // All rights reserved.
  4. //
  5. //Redistribution and use in source and binary forms, with or without modification, are permitted 
  6. //provided that the following conditions are met:
  7. //
  8. //Redistributions of source code must retain the above copyright notice, this list of conditions 
  9. //and the following disclaimer. 
  10. //
  11. //Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
  12. //and the following disclaimer in the documentation and/or other materials provided with the distribution. 
  13.  
  14. //
  15. //The name of Thomas Scott Stillwell may not be used to endorse or 
  16. //promote products derived from this software without specific prior written permission. 
  17. //
  18.  
  19.  
  20. //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR 
  21. //IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
  22. //FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 
  23. //BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
  24. //(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
  25. //PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
  26. //STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
  27. //THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  28.  
  29. desc:Turn audio signal into velocity-sensitive drum trigger
  30.  
  31. slider1:-17<-60,6,1>Open Threshold (dB)
  32. slider2:-18<-60,6,1>Close Threshold (dB)
  33. slider3:30<0,200,0.1>Retrigger interval (ms)
  34. slider4:0<0,100,0.1>Original Signal Mix%;
  35. slider5:10<1,16,1>MIDI Channel
  36. slider6:69<0,255,1>MIDI Note#
  37. slider7:1<0.1,7.0,0.1>Peak Det. Interval
  38. slider8:1<-5.0,5.0,0.01>Trigger align (ms)
  39.  
  40. @init
  41.   sending=0;
  42.   sent=0;
  43.   noteon=9*16;
  44.   noteoff=8*16;
  45.   measuring=0;
  46.   meascnt=0;
  47.   maxvel=0;
  48.   triggerpos=0;
  49.   threshlat = 0.001 * srate;
  50.  
  51. @block
  52.   pos=0;
  53.   triggerpos=0;
  54.  
  55. @slider
  56.   othresh=2^(slider1/6);
  57.   cthresh=2^(slider2/6);
  58.   retrigger = (slider3 / 1000) * srate;
  59.   mix = slider4 / 100;
  60.   chan=slider5-1;
  61.   note=slider6;
  62.   velperiod=(slider7 / 1000) * srate;
  63.   threshlat=(slider8 / 1000) * srate;
  64.   oncmd=noteon+chan;
  65.   offcmd=noteoff+chan;
  66.  
  67. @sample
  68.   pos += 1;
  69.   trigwait += 1;    
  70.  
  71.   linvel=min(1,max(abs(spl0),abs(spl1)));
  72.   velocity=max(0,min(127,floor(maxvel*127)));
  73.  
  74.   linvel >= othresh && sent==0 && sending==0 && measuring==0 && trigwait >= retrigger ? (
  75.     measuring=1;
  76.     maxvel=linvel;
  77.     meascnt=0;
  78.     triggerpos=pos;
  79.   );
  80.   measuring==1 ? (
  81.     meascnt += 1;
  82.     meascnt >= velperiod ? (
  83.       measuring=0;
  84.       sending=1;
  85.       meascnt=0;
  86.     ) : (
  87.       maxvel=max(maxvel,linvel);
  88.     );
  89.   );
  90.   sent==0 && sending==1 ? (
  91.     sent=1;
  92.     sending=0;
  93.     trigwait=0;
  94.     midisend(max(0,triggerpos-threshlat), oncmd, note|velocity*256);
  95.   );
  96.   linvel <= cthresh && sent==1 && trigwait >= retrigger ? (
  97.     sent=0;
  98.     trigwait=0;
  99.     maxvel=0;
  100.     midisend(max(0,triggerpos-threshlat), offcmd, note);
  101.   );
  102.  
  103.   spl0 = spl0 * mix;
  104.   spl1 = spl1 * mix;
  105.