diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/transformhelpers.udo | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/examples/transformhelpers.udo b/examples/transformhelpers.udo new file mode 100644 index 0000000..d3168a1 --- /dev/null +++ b/examples/transformhelpers.udo @@ -0,0 +1,99 @@ + +#define DEFAULT_SIZE #1024# +#define DEFAULT_HOPSIZE #128# + +opcode tfin, k[], ajj + a1, isize, ihopsize xin + if (isize == -1) then + isize = $DEFAULT_SIZE + endif + if (ihopsize == -1) then + ihopsize = $DEFAULT_HOPSIZE + endif + + iolaps = isize/ihopsize + kcnt init 0 + krow init 0 + kTemp[] init isize + kOla[] init isize + kIn[] init isize + kOut[][] init iolaps, isize + + if (kcnt == ihopsize) then + kWin[] window kIn, krow*ihopsize + kSpec[] tfhaar1 kWin + krow = (krow+1) % iolaps + kcnt = 0 + endif + + kIn shiftin a1 + + xout kSpec + kcnt += ksmps +endop + + +opcode tfout, a, k[]jj + kSpec[], isize, ihopsize xin + if (isize == -1) then + isize = $DEFAULT_SIZE + endif + if (ihopsize == -1) then + ihopsize = $DEFAULT_HOPSIZE + endif + + iolaps = isize/ihopsize ; overlaps + kcnt init 0 ; counting vars + krow init 0 + kTemp[] init isize + kOla[] init isize ; overlap-add buffer + kIn[] init isize ; input buffer + kOut[][] init iolaps, isize ; output buffers + + if (kcnt == ihopsize) then + kRow[] tfhaar1inv kSpec + kWin[] window kRow, krow*ihopsize + kOut setrow kWin, krow + kOla = 0 + ki = 0 + until (ki == iolaps) do + kRow getrow kOut, ki + kOla = kOla + kRow + ki += 1 + od + + krow = (krow+1)%iolaps + kcnt = 0 + endif + a2 shiftout kOla + aout = (a2/iolaps) + xout aout + kcnt += ksmps +endop + + +opcode scramble, k[], k[] + kin[] xin + inum random lenarray(kin)*0.2, lenarray(kin) + kndx = 0 + while (kndx < inum) do + ksrc random 0, lenarray(kin) + kdest random 0, lenarray(kin) + kin[int(kdest)] = kin[int(ksrc)] + kndx += 1 + od + xout kin +endop + + +opcode invert, k[], k[] + kin[] xin + kout[] init lenarray(kin) + kwritex = 0 + imax = lenarray(kin) - 1 + while (kwritex < lenarray(kin)) do + kout[kwritex] = kin[imax - kwritex] + kwritex += 1 + od + xout kout +endop |