1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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
|