home *** CD-ROM | disk | FTP | other *** search
/ PDA Software Library / pdasoftwarelib.iso / PSION / SOUNDS / WAVEFUNC.OPL < prev    next >
Text File  |  1995-02-13  |  4KB  |  198 lines

  1. rem *** this contains all the special functions that
  2. rem *** can be performed on a range or an entire sample
  3. rem *** parameters:
  4. rem *** in%,out% are the file handles
  5. rem *** pos& is the current position in the in% file
  6. rem *** len& is the length we are meant to play with
  7.  
  8.  
  9. proc dblspd&:(in%,out%,pos&,len&)
  10. local n&,p%,ret%,fp&
  11.  
  12.     n&=len& : fp&=pos& : ret%=1
  13.     
  14.     while n&>0 or ret%=0
  15.         ioseek(in%,1,fp&)
  16.         ret%=readbuf%:(in%,n&)
  17.         p%=0 : n&=n&-ret% : fp&=fp&+ret%
  18.         while p%<ret%/2
  19.             pokeb uadd(b%,p%),peekb(uadd(b%,p%*2))
  20.             p%=p%+1
  21.         endwh
  22.         dispprog:(fp&-pos&,len&)
  23.         iowrite(out%,b%,ret%/2)
  24.     endwh
  25.     
  26.     ioseek(in%,1,fp&)
  27.     
  28.     return len&/2
  29. endp
  30.  
  31. proc hlfspd&:(in%,out%,pos&,len&)
  32. local n&,p%,ret%,fp&,outbuf%(1024),ob%
  33.  
  34.     n&=len& : fp&=pos& : ret%=1
  35.  
  36.     ob%=addr(outbuf%(1))
  37.     
  38.     while n&>0 or ret%=0
  39.         ioseek(in%,1,fp&)
  40.         ret%=readbuf%:(in%,n&)
  41.         p%=0 : n&=n&-ret% : fp&=fp&+ret%
  42.         while p%<ret%
  43.             pokeb uadd(ob%,p%*2),peekb(uadd(b%,p%))
  44.             pokeb uadd(ob%,p%*2+1),peekb(uadd(addr(ct%(1)),(et%(peekb(uadd(b%,p%+1))+1) + et%(peekb(uadd(b%,p%))+1)/2) and $1fff) )
  45.             p%=p%+1
  46.         endwh
  47.         dispprog:(fp&-pos&,len&)
  48.         iowrite(out%,ob%,ret%*2)
  49.     endwh
  50.     
  51.     ioseek(in%,1,fp&)
  52.     
  53.     return len&*2
  54. endp
  55.  
  56. proc fade&:(in%,out%,pos&,len&)
  57. local n&,p%,ret%,fp&,i,v,a%,s%,e%
  58.  
  59.     n&=len& : fp&=pos& : ret%=1 : s%=(pos&-32)/iadd
  60.     
  61.     v=flt(rperc1&) : i=(rperc2&-rperc1&)/flt(len&)
  62.     
  63.     while n&>0 or ret%=0
  64.         ioseek(in%,1,fp&)
  65.         ret%=readbuf%:(in%,n&)
  66.         p%=0 : n&=n&-ret% : fp&=fp&+ret%
  67.         while p%<ret%
  68.             a%=(et%(peekb(uadd(b%,p%))+1)*int(v))/100
  69.             if a%>4096 : a%=4095 : endif
  70.             if a%<-4095 : a%=-4095 : endif
  71.             pokeb uadd(b%,p%),peekb(uadd(addr(ct%(1)),(a% and $1fff)))
  72.             p%=p%+1 : v=v+i
  73.         endwh
  74.         dispprog:(fp&-pos&,len&)
  75.         iowrite(out%,b%,ret%)
  76.     endwh
  77.  
  78.     ioseek(in%,1,fp&)
  79.     
  80.     return len&
  81. endp
  82.  
  83. proc revrse&:(in%,out%,pos&,len&)
  84. local n&,p%,ret%,fp&,outbuf%(512),ob%
  85.  
  86.     n&=len& : fp&=pos& : ret%=1
  87.  
  88.     ob%=addr(outbuf%(1))
  89.     
  90.     if n&>1024 : fp&=fp&+n&-1024 : endif
  91.     
  92.     while n&>0 or ret%=0
  93.         ioseek(in%,1,fp&)
  94.         ret%=readbuf%:(in%,n&)
  95.         p%=0 : n&=n&-ret%
  96.         while p%<ret%
  97.             pokeb uadd(ob%,ret%-p%-1),peekb(uadd(b%,p%))
  98.             p%=p%+1
  99.         endwh
  100.         dispprog:((len&-(fp&-pos&))-pos&,len&)
  101.         iowrite(out%,ob%,ret%)
  102.         fp&=fp&-ret%
  103.     endwh
  104.     
  105.     fp&=pos&+len&
  106.     ioseek(in%,1,fp&)
  107.     
  108.     return len&
  109. endp
  110.  
  111.  
  112. proc phase&:(in%,out%,pos&,len&)
  113. local n&,p%,ret%,fp&
  114.  
  115.     n&=len& : fp&=pos& : ret%=1
  116.     
  117.     while n&>0 or ret%=0
  118.         ioseek(in%,1,fp&)
  119.         ret%=readbuf%:(in%,n&)
  120.         p%=0 : n&=n&-ret% : fp&=fp&+ret%
  121.         while p%<ret%
  122.             pokeb uadd(b%,p%),peekb(uadd(b%,p%))
  123.         endwh
  124.         dispprog:(fp&-pos&,len&)
  125.         iowrite(out%,b%,ret%)
  126.     endwh
  127.  
  128.     ioseek(in%,1,fp&)
  129.     
  130.     return len&
  131. endp
  132.  
  133. proc filter&:(in%,out%,pos&,len&)
  134. local n&,p%,ret%,fp&,t%,to&,c%
  135.  
  136.     n&=len& : fp&=pos& : ret%=1
  137.     
  138.     while n&>0 or ret%=0
  139.         ioseek(in%,1,fp&)
  140.         ret%=readbuf%:(in%,n&)
  141.         p%=0 : n&=n&-ret% : fp&=fp&+ret%
  142.         while p%<ret%
  143.             t%=0 : to&=0
  144.             while (p%+t%<ret%) and (t%<fillen&)
  145.                 to&=to&+abs(et%(peekb(uadd(b%,p%+t%))+1))
  146.                 t%=t%+1
  147.             endwh
  148.             to&=to&/t%
  149.             if to&<=filthr&        rem *** Threshold ***
  150.                 c%=0
  151.                 while c%<t%
  152.                     pokeb uadd(b%,p%+c%),peekb(addr(ct%(1)))
  153.                     c%=c%+1
  154.                 endwh
  155.             endif
  156.             p%=p%+t%
  157.         endwh
  158.         dispprog:(fp&-pos&,len&)
  159.         iowrite(out%,b%,ret%)
  160.     endwh
  161.  
  162.     ioseek(in%,1,fp&)
  163.     
  164.     return len&
  165. endp
  166.  
  167. proc smooth&:(in%,out%,pos&,len&)
  168. local n&,p%,ret%,fp&,t%,to&,c%,a%,div,d%
  169.  
  170.     n&=len& : fp&=pos& : ret%=1024
  171.  
  172.     while n&>0 and ret%>fillen&
  173.         ioseek(in%,1,fp&)
  174.         ret%=readbuf%:(in%,n&)
  175.         p%=0 : n&=n&-(ret%-fillen&) : fp&=fp&+ret%-fillen&
  176.         while p%<ret%-fillen&
  177.             a%=et%(peekb(uadd(b%,p%))+1)
  178.             pokeb uadd(b%,p%),peekb(uadd(addr(ct%(1)),((a%+et%(peekb(uadd(b%,p%+fillen&))+1))/2) and $1fff))
  179.             p%=p%+1
  180.         endwh
  181.         dispprog:(fp&-pos&,len&)
  182.         iowrite(out%,b%,ret%-fillen&)
  183.     endwh
  184.     
  185.     while p%<ret%
  186.         a%=et%(peekb(uadd(b%,p%))+1)
  187.         pokeb uadd(b%,p%),peekb(uadd(addr(ct%(1)),(a%/2) and $1fff))
  188.         p%=p%+1
  189.     endwh
  190.     iowrite(out%,uadd(b%,p%-fillen&),fillen&)
  191.  
  192.     ioseek(in%,1,fp&)
  193.     
  194.     return len&
  195. endp
  196.  
  197.  
  198.