home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 February / PCWorld_2008-02_cd.bin / audio-video / reaper / reaper2028-install.exe / Effects / SStillwell / drumtrigger < prev    next >
Text File  |  2007-12-03  |  3KB  |  102 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. //The name of Thomas Scott Stillwell may not be used to endorse or 
  15. //promote products derived from this software without specific prior written permission.
  16. //
  17. //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR 
  18. //IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
  19. //FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 
  20. //BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
  21. //(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
  22. //PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
  23. //STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
  24. //THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  25.  
  26. desc:Turn audio signal into velocity-sensitive drum trigger
  27.  
  28. slider1:-17<-60,6,1>Open Threshold (dB)
  29. slider2:-18<-60,6,1>Close Threshold (dB)
  30. slider3:30<0,200,0.1>Retrigger interval (ms)
  31. slider4:0<0,100,0.1>Original Signal Mix%;
  32. slider5:10<1,16,1>MIDI Channel
  33. slider6:69<0,255,1>MIDI Note#
  34. slider7:1<0.1,7.0,0.1>Peak Det. Interval
  35. slider8:1<-5.0,5.0,0.01>Trigger align (ms)
  36.  
  37. @init
  38.   sending=0;
  39.   sent=0;
  40.   noteon=9*16;
  41.   noteoff=8*16;
  42.   measuring=0;
  43.   meascnt=0;
  44.   maxvel=0;
  45.   triggerpos=0;
  46.   threshlat = 0.001 * srate;
  47.  
  48. @block
  49.   pos=0;
  50.   triggerpos=0;
  51.  
  52. @slider
  53.   othresh=2^(slider1/6);
  54.   cthresh=2^(slider2/6);
  55.   retrigger = (slider3 / 1000) * srate;
  56.   mix = slider4 / 100;
  57.   chan=slider5-1;
  58.   note=slider6;
  59.   velperiod=(slider7 / 1000) * srate;
  60.   threshlat=(slider8 / 1000) * srate;
  61.   oncmd=noteon+chan;
  62.   offcmd=noteoff+chan;
  63.  
  64. @sample
  65.   pos += 1;
  66.   trigwait += 1;    
  67.  
  68.   linvel=min(1,max(abs(spl0),abs(spl1)));
  69.   velocity=max(0,min(127,floor(maxvel*127)));
  70.  
  71.   linvel >= othresh && sent==0 && sending==0 && measuring==0 && trigwait >= retrigger ? (
  72.     measuring=1;
  73.     maxvel=linvel;
  74.     meascnt=0;
  75.     triggerpos=pos;
  76.   );
  77.   measuring==1 ? (
  78.     meascnt += 1;
  79.     meascnt >= velperiod ? (
  80.       measuring=0;
  81.       sending=1;
  82.       meascnt=0;
  83.     ) : (
  84.       maxvel=max(maxvel,linvel);
  85.     );
  86.   );
  87.   sent==0 && sending==1 ? (
  88.     sent=1;
  89.     sending=0;
  90.     trigwait=0;
  91.     midisend(max(0,triggerpos-threshlat), oncmd, note|velocity*256);
  92.   );
  93.   linvel <= cthresh && sent==1 && trigwait >= retrigger ? (
  94.     sent=0;
  95.     trigwait=0;
  96.     maxvel=0;
  97.     midisend(max(0,triggerpos-threshlat), offcmd, note);
  98.   );
  99.  
  100.   spl0 = spl0 * mix;
  101.   spl1 = spl1 * mix;
  102.