rdk

Check-in [05d68b88ce]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:compiled /initrd/mnt/dev_save/dsp/rdk/SchlemmerReverb/ga_large_room_faust.dsp to ga_large_room_faust.jgtk using f2jgtk.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | www
Files: files | file ages | folders
SHA1:05d68b88ce8ce07d576ba23ce99f9e360721d0e1
User & Date: root 2018-12-23 04:27:41
Context
2018-12-23
11:17
compiled /initrd/mnt/dev_save/dsp/rdk/SchlemmerReverb/ga_large_room_faust-us.dsp to ga_large_room_faust-us.dll using f2w32vst. y check-in: f03ed161f9 user: root tags: www
04:27
compiled /initrd/mnt/dev_save/dsp/rdk/SchlemmerReverb/ga_large_room_faust.dsp to ga_large_room_faust.jgtk using f2jgtk. check-in: 05d68b88ce user: root tags: www
2018-12-20
15:11
SchlemmerReverb/zita_ref1b.jgtk --> preset: def () (/initrd/mnt/dev_save/dsp/rdk/SchlemmerReverb/zita_ref1b-presets) good to go check-in: 984b163d1b user: root tags: www
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Added SchlemmerReverb/ga_large_room_faust.dsp.



















































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
100
101
102
103
104
105
import("classic6.lib");//cl.

process = ga.large_room(1);

//gardner model large room
ga = environment {

dxga(maxdel,i,j) = delay(maxdel,
	gui.GA_DEL_MS(i,j)*SR/1000.:min(maxdel))
	;

//allpass
ap0(maxSize, d    , gain) = (+ <:  delay (maxSize,d:max(0)),*(-gain)) ~ *(gain) : @(1),_ : + ;
apga(maxdel,i,j) = ap0(maxdel,
	gui.GA_DEL_MS(i,j)*SR/1000.:min(maxdel),
	gui.GA_G(i,j))
	;

//diffusor (allpass series)
gadiff2(i) = 
	  dxga(1<<9,i,1)
	: apga(1<<9,i,2) 
	: dxga(1<<9,i,3)
	: apga(1<<10,i,4);

//nestet allpass
nested1(i) = dxga(1<<10,i,5) : 
	(+ <: innerloop(i),*(-outerFB)) ~ *(outerFB) : @(1),_ : +  
  with {
		outerFB = gui.GA_OUT_FB(i,6) ;
		innerloop(i) = 
			  dxga(1<<12,i,6)
			: apga(1<<14,i,7)
			: dxga(1<<13,i,8);
	};

nested2(i) = dxga(1<<10,i,9) : 
	(+ <: innerloop(i),*(-outerFB)) ~ *(outerFB) : @(1),_ : +  
	with {
		outerFB = gui.GA_OUT_FB(i,10); 
		innerloop(i) = 
			  dxga(1<<12,i,10)
			: apga(1<<14,i,11) 
			: dxga(1<<13,i,12) 
			: apga(1<<12,i,13) 
			: dxga(1<<14,i,14); 
	};
  
large_room_delayline(i) = + : ( _ : gadiff2(i)
	<: ( ((nested1(i)))
	<: ( ((nested2(i)))
	<: ( (dxga(1<<10,i,15)))
,(tab(i,18)) )
,(tab(i,17)) )
,(tab(i,16)) ) //first out tap
: _,(_,_,_:>_) with {
  
  tab(i,j) = dxga(1<<12,i,j)*gui.GA_OUT_LV(i,j);
  };

large_room(i) = large_room_delayline(i)~(*(gui.GA_MAIN_FEEDBACK)):!,_;

//tuning
def = environment {
	GA_DEL_MS(i,1) = 2;
	GA_DEL_MS(i,2) = 8;
	GA_G(i,2) = 0.3;
	GA_DEL_MS(i,3) = 3;
	GA_DEL_MS(i,4) = 12;
	GA_G(i,4) = 0.3;
	GA_DEL_MS(i,5) = 21;
	GA_OUT_FB(i,6) = 0.5;
	GA_DEL_MS(i,6) = 46;
	GA_DEL_MS(i,7) = 62;
	GA_G(i,7) = 0.25;
	GA_DEL_MS(i,8) = 23.8;
	GA_DEL_MS(i,9) = 34;
	GA_OUT_FB(i,10) = 0.5;
	GA_DEL_MS(i,10) = 0.5;     
	GA_DEL_MS(i,11) = 76;
	GA_G(i,11) = 0.25;
	GA_DEL_MS(i,12) = 0.5;
	GA_DEL_MS(i,13) = 30;
	GA_G(i,13) = 0.25;
	GA_DEL_MS(i,14) = 0.5;
	GA_DEL_MS(i,15) = 12;
	GA_DEL_MS(i,16) = 0;
	GA_OUT_LV(i,16) = 0.58;
	GA_DEL_MS(i,17) = 0;
	GA_OUT_LV(i,17) = 0.08;
	GA_DEL_MS(i,18) = 0;
	GA_OUT_LV(i,18) = 0.65;
  GA_MAIN_FEEDBACK = 0.44;
  };

//example gui
  gui = environment {
      GA_MAIN_FEEDBACK = nentry("[0]GA_MAIN_FEEDBACK",def.GA_MAIN_FEEDBACK,-0.5,0.5,0.01);
    	GA_DEL_MS(i,j)= vgroup("%i",hgroup("%j",nentry("GA_DEL_MS(%i,%j)",def.GA_DEL_MS(i,j),0,100,0.01)));
      GA_G(i,j)     = vgroup("%i",hgroup("%j",nentry("GA_G(%i,%j)",def.GA_G(i,j),-0.99,0.99,0.01)));
      GA_OUT_FB(i,j)= vgroup("%i",hgroup("%j",nentry("GA_OUT_FB(%i,%j)",def.GA_OUT_FB(i,j),-0.99,0.99,0.01)));
      GA_OUT_LV(i,j)= vgroup("%i",hgroup("%j",nentry("GA_OUT_LV(%i,%j)",def.GA_OUT_LV(i,j),-2,2,0.01)));
	};

};

Changes to SchlemmerReverb/zita_ref1.gui.

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
..
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
  SIM_GUI_ROOM(i)       =guigroup1(hgroup("1",hslider("SIM_ROOM(%i)[unit:m]",SIM_ROOM(i),0,100,0.01)));
  SIM_GUI_SOURCE(i)     =guigroup1(hgroup("2",hslider("SIM_SOURCE(%i)[unit:percent]",SIM_SOURCE(i),0,1,.001))); 
  SIM_GUI_DESTINATION(i)=guigroup1(hgroup("3",hslider("SIM_DESTINATION(%i)[unit:percent]",SIM_DESTINATION(i),0,1,.001))); 
  SIM_GUI_RS            =guigroup2(hslider("[0]RoomSize",RoomSize,0.010,4,.001));

  ZE_GUI_APG(i)         =guigroup2(hslider("[15]AP_G",AP_G,0,.9,.01)); 
  ZE_GUI_FLTON          =guigroup2(checkbox("compare_loss_filters"));
  
  ZE_GUI_MAINFB         =guigroup2(hslider("[12]RT",RT,0,.999,.001));
  ZE_GUI_ERCOMPRESSION  =guigroup2(hslider("[17]ER_COMPRESSION_FACTOR",ER_COMPRESSION_FACTOR,0,1,.01));
  ZE_GUI_APPERCENT      =guigroup2(hslider("[13]APDELAY_PERCENT",APDELAY_PERCENT,0,1,.01));
  
  ZE_GUI_OUTDELAY       =guigroup3(vgroup("[2]Out2",nentry("[0]Outdelay",Outdelay,0,4000,1)));
  ZE_GUI_OUTLEVEL(1)    =guigroup3(vgroup("[1]Out1",nentry("[0]Outlevel(1)",Outlevel(1),-1,1,0.001)*BYBOX(1)));
  ZE_GUI_OUTLEVEL(2)    =guigroup3(vgroup("[2]Out2",nentry("[0]Outlevel(2)",Outlevel(2),-1,1,0.001)*BYBOX(2)));
  BYBOX(i) = 1-checkbox("BY(%i)");
  DIR_GUI_DIRECTIVITY_WD=guigroup3(vgroup("[3]",hgroup("[0]Directivity",vgroup("[3]Flute",nentry("[4]DIR_WD[style:knob]",DIR_WD,0,1,0.01)))));
  ZE_GUI_SinusDepth     =guigroup3(vgroup("[3]",vgroup("[1]LFO",nentry("[0]ZE_SinusDepth",ZE_SinusDepth,0,1,0.001))));
  ZE_GUI_SinusFreqHz    =guigroup3(vgroup("[3]",vgroup("[1]LFO",nentry("[2]ZE_SinusFreqHz",ZE_SinusFreqHz,0,10,0.01))));
  SIM_GUI_MOVEMENT      =guigroup3(vgroup("[3]",vgroup("[1]LFO",nentry("[0]SIM_MOVEMENT",SIM_MOVEMENT,0,1,0.001))));
  
gui=environment {



//AP_G(i)         =guigroup2(hslider("[15]AP_G",AP_G,0,.9,.01));    



  
};
  
//info groups
desc1(fx)=hgroup("Large Hall Algorithm 480L",fx);
desc2(fx)=hgroup("[1]Main User Interface",fx);
smallgroup(fx)=hgroup("",hgroup("",hgroup("",fx)));
warning(fx)=hgroup("Expert settings",fx);

................................................................................
    k2g(parm) = hgroup("[1]", hgroup("[1]k2", parm ));
      TAPE_GUI_K2SMOOTH 	= gutgroup(tapegroup( k2g(nentry("T_SMOOTH_ABS[style:knob]",T_SMOOTH_ABS,93,99.9,.01)/100.)));
      TAPE_GUI_K2LV 		= gutgroup(tapegroup( k2g(nentry("T_K2LV[style:knob]",T_K2LV,-50,50,.001))));
    k3g(parm) = hgroup("[1]", hgroup("[2]k3", parm ));
      TAPE_GUI_K3LV 		= gutgroup(tapegroup( k3g(nentry("T_K3LV[style:knob]",T_K3LV,-50,50,.001))));
      TAPE_GUI_K3DRIVE	= gutgroup(tapegroup( k3g(nentry("T_K3DRIVE[style:knob]",T_K3DRIVE,0,1,.001))));
      TAPE_GUI_K3OFFSET	= gutgroup(tapegroup( k3g(nentry("T_K3OFFSET[style:knob]",T_K3OFFSET,0,1,.001))));
      
  p1=1;
  allpassgroup(fx) = gutgroup(hgroup("[%p1]Allpass Options",warning(smallgroup(hgroup("Early Reflection Allpass (LR)",fx)))));
    AP_GUI_WD 		= allpassgroup(vgroup("1",nentry("AP_DRY_WET[style:knob]",0.57,0,1,.01))); //--> trans!
    AP_GUI_BY   	= allpassgroup(vgroup("1",checkbox("AP_BY"))); //allways defaults to on. --> trans:phase=0 ==> off
    //AP_GUI_WD 		= allpassgroup(vgroup("1.1",nentry("[1]1:Dry<->Wet[unit: ms][style:knob]",0.57,0,1,.01)));
    AP_GUI_RS2DEL = allpassgroup(vgroup("1",nentry("AP_RS2DEL[unit: percent][style:knob]",AP_RS2DEL,0,1,.01)));
    AP_GUI_PHASE(i)  = allpassgroup(vgroup("2.%i",nentry("AP_PHASE(%i)",AP_PHASE(i),-1,1,1))); //old style=1 
    AP_GUI_DEL_MS(i) = allpassgroup(vgroup("2.%i",nentry("AP_DEL_MS(%i)[unit: ms][style:knob]",AP_DEL_MS(i),.025,500,.001))); 
    AP_GUI_MODAMT(i) = allpassgroup(vgroup("2.%i",nentry("AP_MODAMT(%i)[unit: percent]",AP_MODAMT(i), -2., 2., 0.01)));
    AP_GUI_MODS_S(i) = allpassgroup(vgroup("2.%i",nentry("AP_MODS_S(%i)[unit: seconds]",AP_MODS_S(i),0,.5,.001)));
    //AP_GUI_FEEDBK(i) = allpassgroup(vgroup("2.%i",nentry("AP_FEEDBK(%i)[unit: percent]",AP_FEEDBK(i), -.99, .99, 0.01)));
    decoptgroup(fx) = allpassgroup(vgroup("3 Decay Optimization",fx));
      DO_GUI_VMETER_APGR(i) = allpassgroup(hgroup("3",cl.vmeter(i)));
      GUI_DEC_OPT_SMOO = decoptgroup(nentry("DO_ATTACK",DO_ATTACK,0,9.999,.001))/10. ;  
      GUI_DEC_OPT_RESP = decoptgroup(nentry("DO_RELEASE",DO_RELEASE,0,20,.001)) ;
      GUI_DEC_OPTPHASE = decoptgroup(nentry("DO_DIRECTION",DO_DIRECTION,0,1,1)) ;
      GUI_DEC_OPT_BY   = decoptgroup(checkbox("DO_BY")); //0=default=ON.
    TEST_GUI_BUTTON2=allpassgroup(vgroup("0 Test",button("[0]LR")));
    AP_GUI_SEND2SIM =allpassgroup(vgroup("4 Sends",hslider("[0]AP_SEND2SIM",AP_SEND2SIM,-2,2,.01))); 
    //AP_GUI_SEND2LATE=allpassgroup(vgroup("4 Sends",hslider("[1]AP_SEND2LATE",AP_SEND2LATE,-2,2,.01))); 

  p2=2;
  simgroup(fx)=gutgroup(vgroup("[%p2]Room Model", warning(vgroup("Source Image Calculation",fx)))); 
    //ER_GUI_BY=simgroup(checkbox("[0]%p2.0:Bypass ER")) : ==(0) ;

  p3=3;
  simctlgroup(fx)=gutgroup(vgroup("[%p3]ER ctl",vgroup("Reverb In",fx))); 
    ER_GUI_SIMCX       =simctlgroup(hgroup("[2]",nentry("[2]ER_SIMCX",ER_SIMCX,0,1,1)));
    ER_GUI_SIMLV       =simctlgroup(hgroup("[2]",nentry("[3]ER_SIMLV[style:knob]",ER_SIMLV,0,1,.001)));
    ER_GUI_DIRECTLV    =simctlgroup(hgroup("[2]",nentry("[0]ER_DIRECTLV[style:knob]",ER_DIRECTLV,-1,1,.001)));
    ER_GUI_DIR2REVIN   =simctlgroup(hgroup("[2]",nentry("[0]ER_DIR2REVIN[style:knob]",ER_DIR2REVIN,-1,1,.001)));
    ER_GUI_INDRYWET    =simctlgroup(hgroup("[2]",nentry("[0]ER_INDRYWET[style:knob]", ER_INDRYWET,0,1,.01)));
    //ER_GUI_DIRECTPAN(i)=simctlgroup(hgroup("[2]",nentry("[1]ER_DIRECTPAN(%i)[style:knob]",ER_DIRECTPAN(i),-90,90,0.1)));
    
    ER_GUI_PAN(i)=simctlgroup(hgroup("[1]",(nentry("[%s]ER_PAN(%i)[style:knob]",ER_PAN(i),-90,90,0.1))))with{s=i+100;};
    ER_GUI_LV(i)= simctlgroup(hgroup("[0]",(nentry("ER_LV(%i)",ER_LV(i),0,1,0.001))));
  
  //p4=4;
  //directivitygroup(fx)=gutgroup(vgroup("[%p4]Directivity", warning(vgroup("Directivity Flute Settings",fx)))); 
  //  DIR_GUI_WD=directivitygroup(hgroup("%p4.0",nentry("DIR_WD[style:knob]",DIR_WD,0,1,0.01)));
  
  p5=5;
  /*g1 = environment { //ga gui 1
    p=5;
    //GUI groups
    gagroup(i,fx) = gutgroup(tgroup("%p.Reverb Tail Ch(%i)",fx));

    gadiff_group(fx) = hgroup("[0]Diffusor",warning(fx));
    nested1group(fx) = hgroup("[1]Nested Allpass 1",warning(fx));
    nested2group(fx) = hgroup("[2]Nested Allpass 2",warning(fx));
    gactl_group(fx) = hgroup("[3]WD",fx);
    tapgroup(fx) = hgroup("[3]Outs",warning(hgroup("Out Taps",fx)));

    //GUI generic
    GA_GUI_DEL_MS(i,j) = vgroup("%p.%j.%i",nentry("GA_DEL(%i,%j)[unit: ms][style:knob]",GA_DEL(i,j),.025,100,.001)); 
    GA_GUI_MODAMT(i,j) = vgroup("%p.%j.%i",nentry("GA_MODAMT(%i,%j)[unit: percent]",GA_MODAMT(i,j), -2., 2., 0.01));
    GA_GUI_MODSPD(i,j) = vgroup("%p.%j.%i",nentry("GA_MODSPD(%i,%j)[unit: seconds]",GA_MODSPD(i,j),0,.5,.001));
    GA_GUI_FEEDBK(i,j) = vgroup("%p.%j.%i",nentry("GA_FEEDBK(%i,%j)[unit: percent]",GA_FEEDBK(i,j), -.99, .99, 0.01));

    GA_GUI_OFB(i,j) = nentry("GA_OUT_FB(%i,%j)[style:knob]",GA_OUT_FB(i,j),0,.99,.01); 
    GA_GUI_OUT_LV(i,j) = vgroup("%p.%j.%i",nentry("GA_OUT_LV(%i,%j)[style:knob]",GA_OUT_LV(i,j),-2,2,0.01));
    GA_GUI_RT = guigroup(nentry("[2]ReverbTime[style:knob]",ReverbTime,0,.5,0.01)); 
    GA_GUI_WD = gutgroup(gactl_group(nentry("GA_DRY_WET[style:knob]",GA_DRY_WET,0,1,.01))); 
    }; */
  /*g2 = environment { //ga gui 2
    //GUI groups
    gagroup(i,fx) = gutgroup(tgroup("[5]Reverb Tail",fx));

    gadiff_group(i,fx) = hgroup("[%i][0]Diffusor (%i)",warning(fx));
    nested1group(i,fx) = hgroup("[%i][1]Nested1 (%i)",warning(fx));
    nested2group(i,fx) = hgroup("[%i][2]Nested2 (%i)",warning(fx));
    tapgroup(i,fx)     = hgroup("[%i][3]Out Tabs (%i)",warning(hgroup("Channel (%i)",fx)));
    //gactl_group(fx)    = gagroup(0,hgroup("[3]Out Tabs",warning(fx)));
    
    //GUI generic
    GA_GUI_DEL_MS(i,j) = vgroup("[%p5.%j.%i]",nentry("GA_DEL(%i,%j)[unit: ms][style:knob]",GA_DEL(i,j),.025,100,.001)); 
    GA_GUI_MODAMT(i,j) = vgroup("[%p5.%j.%i]",nentry("GA_MODAMT(%i,%j)[unit: percent]",GA_MODAMT(i,j), -2., 2., 0.01));
    GA_GUI_MODSPD(i,j) = vgroup("[%p5.%j.%i]",nentry("GA_MODSPD(%i,%j)[unit: seconds]",GA_MODSPD(i,j),0,.5,.001));
    GA_GUI_FEEDBK(i,j) = vgroup("[%p5.%j.%i]",nentry("GA_FEEDBK(%i,%j)[unit: percent]",GA_FEEDBK(i,j), -.99, .99, 0.01));

    GA_GUI_OFB(i,j) = nentry("GA_OUT_FB(%i,%j)[style:knob]",GA_OUT_FB(i,j),0,.99,.01); 
    GA_GUI_OUT_LV(i,j) = vgroup("[%p5.%j.%i]",nentry("GA_OUT_LV(%i,%j)[style:knob]",GA_OUT_LV(i,j),-2,2,0.01));
  }; */
  g3 = environment { //ga gui 3
    //GUI groups
    gagroup(i,fx) = gutgroup(tgroup("[5]Reverb Tail",fx));

    gadiff_group(i,fx) = gagroup(i,hgroup("[%i][0]Diffusor (%i)",warning(fx)));
    nested1group(i,fx) = gagroup(i,hgroup("[%i][1]Nested1 (%i)",warning(fx)));
    nested2group(i,fx) = gagroup(i,hgroup("[%i][2]Nested2 (%i)",warning(fx)));
    tapgroup(i,fx)     = gagroup(i,hgroup("[%i][3]Out Tabs (%i)",warning(hgroup("Channel (%i)",fx))));

    //GUI generic
    GA_GUI_DEL_MS(i,j) = vgroup("[%p5.%j.%i]",nentry("GA_DEL(%i,%j)[unit: ms][style:knob]",GA_DEL(i,j),.025,100,.001)); 
    GA_GUI_MODAMT(i,j) = vgroup("[%p5.%j.%i]",nentry("GA_MODAMT(%i,%j)[unit: percent]",GA_MODAMT(i,j), -2., 2., 0.01));
    GA_GUI_MODSPD(i,j) = vgroup("[%p5.%j.%i]",nentry("GA_MODSPD(%i,%j)[unit: seconds]",GA_MODSPD(i,j),0,.5,.001));
    GA_GUI_FEEDBK(i,j) = vgroup("[%p5.%j.%i]",nentry("GA_FEEDBK(%i,%j)[unit: percent]",GA_FEEDBK(i,j), -.99, .99, 0.01));
    GA_GUI_OFB(i,j)    = nentry("GA_OUT_FB(%i,%j)[style:knob]",GA_OUT_FB(i,j),0,.99,.01); 
    GA_GUI_OUT_LV(i,j) = vgroup("[%p5.%j.%i]",nentry("GA_OUT_LV(%i,%j)[style:knob]",GA_OUT_LV(i,j),-2,2,0.01));
  };  
  
  p6=6;
  xm_group(i,fx) = gutgroup(hgroup("[%p6]Phazor",warning(hgroup("Channel (%i)",fx))));
    XM_GUI_DIRECTPAN(i) = xm_group(i,vgroup("[0]",nentry("XM_DIRPAN(%i)[style:knob]",XM_DIRPAN(i),-90,90,1)));
    XM_GUI_MODAMT(i) 	= xm_group(i,vgroup("[1]",nentry("[0]XM_MODAMT(%i)[style:knob]",XM_MODAMT(i),0,10,.001)));
    XM_GUI_DELPAN(i) 	= xm_group(i,vgroup("[1]",nentry("[5]XM_DELPAN(%i)[style:knob]",XM_DELPAN(i),-90,90,1))); 
    XM_GUI_DEL_LV(i) 	= xm_group(i,vgroup("[1]",nentry("[0]XM_DEL_LV(%i)[style:knob]",XM_DEL_LV(i),-4,4,.01)));
    XM_GUI_DEL_BY(i) 	= xm_group(i,vgroup("[0]",nentry("[0]XM_DEL_BY(%i)",XM_DEL_BY(i),0,1,1)));
    XM_GUI_XMIXDEL(i) = xm_group(i,vgroup("[1]",nentry("[0]XM_DEL_SAMPS(%i)",XM_DEL_SAMPS(i),0,4410,1))); //samps!
    XM_GUI_2DLYBY(i)	= xm_group(i,vgroup("[0]",nentry("[0]XM_2DLYBY(%i)",XM_2DLYBY(i),0,1,1)));
  
  p7=7;
  chogroup(fx) = gutgroup(vgroup("[%p7]Chorus",warning(smallgroup(smallgroup(fx))))) ;
    CHO_GUI_WET = nentry("CHO_DRY[style:knob]",CHO_DRY,0,1,0.01) ;
    CHO_GUI_DRY = nentry("CHO_WET[style:knob]",CHO_WET,-2,2,0.01) ;

mixgroup(fx) 	= tgroup("",hgroup("[3]Mix",desc1(fx)));
  GA_GUI_WD = mixgroup(nentry("GA_DRY_WET[style:knob]",GA_DRY_WET,0,1,.01));
  GA_GUI_BASSX = mixgroup(nentry("GA_BASSX[style:knob]",GA_BASSX,0,3,.01));
  //MAIN_GUI_DRY = mixgroup(hgroup("[8]Out",vgroup("[0]Out Dry",nentry("Dry[style:knob]",Dry,0,4,.01)*(1-checkbox("BY")))));
  //MAIN_GUI_WET = mixgroup(hgroup("[8]Out",vgroup("[1]Out Wet",nentry("Wet[style:knob]",Wet,0,4,.01)*(1-checkbox("BY")))));
  MX_GUI_LV(i) = mixgroup(vgroup("%i", vslider("[3]MX_LV(%i)",MX_LV(i),0,2,.01)));
  MX_GUI_PHS(i)= mixgroup(vgroup("%i",  nentry("[4]MX_PHS(%i)",MX_PHS(i),-1,1,1)));
  MX_GUI_MUTE(i)=mixgroup(vgroup("%i",checkbox("[5]MX_MUTE(%i)")));
  MX_GUI_SEND(i)=mixgroup(vgroup("%i",  nentry("[2]MX_SEND(%i)[style:knob]",MX_SEND(i),-2,2,.001)));
  MX_GUI_SMUTE(i)=mixgroup(vgroup("%i",checkbox("[1]SMUTE(%i)")));
  
  MX_LABEL(1)=mixgroup(vgroup("1",button("[0]dry_sound")));
  MX_LABEL(2)=mixgroup(vgroup("2",button("[0]in_ap")));
  MX_LABEL(3)=mixgroup(vgroup("3",button("[0]sim_dry")));
  MX_LABEL(4)=mixgroup(vgroup("4",button("[0]directivity")));
  MX_LABEL(5)=mixgroup(vgroup("5",button("[0]late_rev")));
  
inmixgroup(fx)=tgroup("",hgroup("[0]in_distrib",desc1(fx)));
  IN_GUI_LV(i) = inmixgroup(vgroup("%i", vslider("[3]IN_LV(%i)",IN_LV(i),0,2,.01)));
  IN_GUI_PHS(i)= inmixgroup(vgroup("%i",  nentry("[4]IN_PHS(%i)",IN_PHS(i),-1,1,1)));
  IN_GUI_MUTE(i)=inmixgroup(vgroup("%i",checkbox("[5]IN_MUTE(%i)")));
  IN_GUI_CX(i)=inmixgroup(vgroup("%i",checkbox("[0]IN_CX(%i)")));
  
  IN_LABEL(0)=inmixgroup(vgroup("0",button("[1]in_master")));
  IN_LABEL(1)=inmixgroup(vgroup("1",button("[1]2in_ap")));
  IN_LABEL(2)=inmixgroup(vgroup("2",button("[1]2sim")));
  IN_LABEL(3)=inmixgroup(vgroup("3",button("[1]2late")));

  







<













<

<
<
<
<
<
<
<
<







 







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
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
..
65
66
67
68
69
70
71


















































































































































  SIM_GUI_ROOM(i)       =guigroup1(hgroup("1",hslider("SIM_ROOM(%i)[unit:m]",SIM_ROOM(i),0,100,0.01)));
  SIM_GUI_SOURCE(i)     =guigroup1(hgroup("2",hslider("SIM_SOURCE(%i)[unit:percent]",SIM_SOURCE(i),0,1,.001))); 
  SIM_GUI_DESTINATION(i)=guigroup1(hgroup("3",hslider("SIM_DESTINATION(%i)[unit:percent]",SIM_DESTINATION(i),0,1,.001))); 
  SIM_GUI_RS            =guigroup2(hslider("[0]RoomSize",RoomSize,0.010,4,.001));

  ZE_GUI_APG(i)         =guigroup2(hslider("[15]AP_G",AP_G,0,.9,.01)); 
  ZE_GUI_FLTON          =guigroup2(checkbox("compare_loss_filters"));

  ZE_GUI_MAINFB         =guigroup2(hslider("[12]RT",RT,0,.999,.001));
  ZE_GUI_ERCOMPRESSION  =guigroup2(hslider("[17]ER_COMPRESSION_FACTOR",ER_COMPRESSION_FACTOR,0,1,.01));
  ZE_GUI_APPERCENT      =guigroup2(hslider("[13]APDELAY_PERCENT",APDELAY_PERCENT,0,1,.01));
  
  ZE_GUI_OUTDELAY       =guigroup3(vgroup("[2]Out2",nentry("[0]Outdelay",Outdelay,0,4000,1)));
  ZE_GUI_OUTLEVEL(1)    =guigroup3(vgroup("[1]Out1",nentry("[0]Outlevel(1)",Outlevel(1),-1,1,0.001)*BYBOX(1)));
  ZE_GUI_OUTLEVEL(2)    =guigroup3(vgroup("[2]Out2",nentry("[0]Outlevel(2)",Outlevel(2),-1,1,0.001)*BYBOX(2)));
  BYBOX(i) = 1-checkbox("BY(%i)");
  DIR_GUI_DIRECTIVITY_WD=guigroup3(vgroup("[3]",hgroup("[0]Directivity",vgroup("[3]Flute",nentry("[4]DIR_WD[style:knob]",DIR_WD,0,1,0.01)))));
  ZE_GUI_SinusDepth     =guigroup3(vgroup("[3]",vgroup("[1]LFO",nentry("[0]ZE_SinusDepth",ZE_SinusDepth,0,1,0.001))));
  ZE_GUI_SinusFreqHz    =guigroup3(vgroup("[3]",vgroup("[1]LFO",nentry("[2]ZE_SinusFreqHz",ZE_SinusFreqHz,0,10,0.01))));
  SIM_GUI_MOVEMENT      =guigroup3(vgroup("[3]",vgroup("[1]LFO",nentry("[0]SIM_MOVEMENT",SIM_MOVEMENT,0,1,0.001))));
  










  
//info groups
desc1(fx)=hgroup("Large Hall Algorithm 480L",fx);
desc2(fx)=hgroup("[1]Main User Interface",fx);
smallgroup(fx)=hgroup("",hgroup("",hgroup("",fx)));
warning(fx)=hgroup("Expert settings",fx);

................................................................................
    k2g(parm) = hgroup("[1]", hgroup("[1]k2", parm ));
      TAPE_GUI_K2SMOOTH 	= gutgroup(tapegroup( k2g(nentry("T_SMOOTH_ABS[style:knob]",T_SMOOTH_ABS,93,99.9,.01)/100.)));
      TAPE_GUI_K2LV 		= gutgroup(tapegroup( k2g(nentry("T_K2LV[style:knob]",T_K2LV,-50,50,.001))));
    k3g(parm) = hgroup("[1]", hgroup("[2]k3", parm ));
      TAPE_GUI_K3LV 		= gutgroup(tapegroup( k3g(nentry("T_K3LV[style:knob]",T_K3LV,-50,50,.001))));
      TAPE_GUI_K3DRIVE	= gutgroup(tapegroup( k3g(nentry("T_K3DRIVE[style:knob]",T_K3DRIVE,0,1,.001))));
      TAPE_GUI_K3OFFSET	= gutgroup(tapegroup( k3g(nentry("T_K3OFFSET[style:knob]",T_K3OFFSET,0,1,.001))));


















































































































































Changes to SchlemmerReverb/zita_ref1.lib.

21
22
23
24
25
26
27

28
29
30
31
32
33
34
35
..
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
...
123
124
125
126
127
128
129
130
131
132
133
134
           ¦      ¦  
         0 +------+  
          0       > y 
             rear     

*********************************/ 


lfox= osci(2)*SIM_GUI_MOVEMENT;// *nentry("[1 unit:%%]rdk.lfoDepth",.02,0,.02,.001) + 1 ;
lfoy= osci(3)*SIM_GUI_MOVEMENT;
lfoz= osci(5)*SIM_GUI_MOVEMENT*0.5;

Rx = SIM_GUI_ROOM(1)*SIM_GUI_RS;
Ry = SIM_GUI_ROOM(2)*SIM_GUI_RS;
Rz = SIM_GUI_ROOM(3)*SIM_GUI_RS;

................................................................................
Sy = SIM_GUI_SOURCE(2)*Ry +lfoy;
Sz = SIM_GUI_SOURCE(3)*Rz/SIM_GUI_RS +lfoz;

Dx = SIM_GUI_DESTINATION(1)*Rx; 
Dy = SIM_GUI_DESTINATION(2)*Ry;
Dz = SIM_GUI_DESTINATION(3)*Rz/SIM_GUI_RS;

//mirror images in shoebox room
r(Rx,Ry,Rz,Sx,Sy,Sz) = Rx,Ry,Rz,      Sx, 2*Ry-Sy,      Sz;
l(Rx,Ry,Rz,Sx,Sy,Sz) = Rx,Ry,Rz,      Sx,     -Sy,      Sz;
v(Rx,Ry,Rz,Sx,Sy,Sz) = Rx,Ry,Rz, 2*Rx-Sx,      Sy,      Sz;
h(Rx,Ry,Rz,Sx,Sy,Sz) = Rx,Ry,Rz,     -Sx,      Sy,      Sz;
b(Rx,Ry,Rz,Sx,Sy,Sz) = Rx,Ry,Rz,      Sx,      Sy,     -Sz;
d(Rx,Ry,Rz,Sx,Sy,Sz) = Rx,Ry,Rz,      Sx,      Sy, 2*Rz-Sz;




//Direct sound
D0 = vec(Dx,Dy,Dz, Sx,Sy,Sz):max(0.5); //meter (allows 1st reflection +6dB if distance >1m)
//Vector arithmetics
vec(Dx,Dy,Dz,SSQx,SSQy,SSQz) = sqrt( pow(SSQx-Dx, 2) + pow(SSQy-Dy, 2) + pow(SSQz-Dz, 2)) ; //meter


refm(image) = (Rx,Ry,Rz,Sx,Sy,Sz : image : !,!,!,_,_,_ : vec(Dx,Dy,Dz)) ; //meter

//pattern

ref(1) = refm(l);
ref(2) = refm(r);
ref(3) = refm(l:d);
ref(4) = refm(r:d);
ref(5) = refm(l:v);
ref(6) = refm(r:v);
ref(7) = refm(l:d:h);
ref(8) = refm(r:d:h);

ssq(1) = ref(1)-D0:max(1):cl.m2ms;
ssq(2) = ref(2)-D0:max(1):cl.m2ms;
ssq(3) = ref(3)-D0:max(1):cl.m2ms;
ssq(4) = ref(4)-D0:max(1):cl.m2ms;
ssq(5) = ref(5)-D0:max(1):cl.m2ms;
ssq(6) = ref(6)-D0:max(1):cl.m2ms;
ssq(7) = ref(7)-D0:max(1):cl.m2ms;
ssq(8) = ref(8)-D0:max(1):cl.m2ms;

//ssq(i) = ref(i)-(D0):cl.m2ms; //milliseconds

//lev(i) = D0/(ref(i);

};

dir = environment {

//convert maxmsp filtergraf~ data to FAUST maxmsp.lib...
//bq(a,b,c,d,e,x) = biquad(x,a,b,c,-d,-e) ; //faust < 0.9.58
................................................................................

eq81 = f1,f2,f3,f4,_,_,_,_;
eq82 = cl.wdn(4,(f1,f2,f3,f4),DIR_GUI_DIRECTIVITY_WD),_,_,_,_;
eq83 = bus(8):>bus(4):f1,f2,f3,f4<:bus(8);

};

cla = environment {

wdn(n,fx,ctl)=par(i,n,_)<:(fx : par(i,n,*(ctl))),par(i,n,*(1-(ctl))):>par(i,n,_); // ctl=1; => wet

};







>
|







 







|
|
|
|
|
|
|

>
>
>
|
|
<
<
>
>


<
>
|








|
<
<
<
<
<
<
<
<
|
<
<







 







<
<
<
<
<
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
..
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
...
117
118
119
120
121
122
123





           ¦      ¦  
         0 +------+  
          0       > y 
             rear     

*********************************/ 

//coordinates
lfox= osci(2)*SIM_GUI_MOVEMENT;
lfoy= osci(3)*SIM_GUI_MOVEMENT;
lfoz= osci(5)*SIM_GUI_MOVEMENT*0.5;

Rx = SIM_GUI_ROOM(1)*SIM_GUI_RS;
Ry = SIM_GUI_ROOM(2)*SIM_GUI_RS;
Rz = SIM_GUI_ROOM(3)*SIM_GUI_RS;

................................................................................
Sy = SIM_GUI_SOURCE(2)*Ry +lfoy;
Sz = SIM_GUI_SOURCE(3)*Rz/SIM_GUI_RS +lfoz;

Dx = SIM_GUI_DESTINATION(1)*Rx; 
Dy = SIM_GUI_DESTINATION(2)*Ry;
Dz = SIM_GUI_DESTINATION(3)*Rz/SIM_GUI_RS;

//mirror conditions
r(Rx,Ry,Rz,Sx,Sy,Sz) = Rx,Ry,Rz,      Sx, 2*Ry-Sy,      Sz; //left wall
l(Rx,Ry,Rz,Sx,Sy,Sz) = Rx,Ry,Rz,      Sx,     -Sy,      Sz; //right wall
v(Rx,Ry,Rz,Sx,Sy,Sz) = Rx,Ry,Rz, 2*Rx-Sx,      Sy,      Sz; //front
h(Rx,Ry,Rz,Sx,Sy,Sz) = Rx,Ry,Rz,     -Sx,      Sy,      Sz; //rear
b(Rx,Ry,Rz,Sx,Sy,Sz) = Rx,Ry,Rz,      Sx,      Sy,     -Sz; //floor
d(Rx,Ry,Rz,Sx,Sy,Sz) = Rx,Ry,Rz,      Sx,      Sy, 2*Rz-Sz; //ceiling

//subtract 2 vectors
vec(a1,a2,a3,b1,b2,b3) = sqrt(pow(b1-a1,2) + pow(b2-a2,2) + pow(b3-a3,2)) ; //meter

//direct sound
D0 = vec(Dx,Dy,Dz,Sx,Sy,Sz):max(0.5); //meter (allows 1st reflection +6dB if distance<1m)



//calculate mirror image coordinates and subtract destination vector
refm(image) = (Rx,Ry,Rz,Sx,Sy,Sz : image : !,!,!,_,_,_ : vec(Dx,Dy,Dz)) ; //meter


//define a pattern of 8 reflections
ref(1) = refm(l); //meter
ref(2) = refm(r);
ref(3) = refm(l:d);
ref(4) = refm(r:d);
ref(5) = refm(l:v);
ref(6) = refm(r:v);
ref(7) = refm(l:d:h);
ref(8) = refm(r:d:h);

//time after direct sound








ssq(i) = ref(i)-D0:cl.m2ms; //milliseconds



};

dir = environment {

//convert maxmsp filtergraf~ data to FAUST maxmsp.lib...
//bq(a,b,c,d,e,x) = biquad(x,a,b,c,-d,-e) ; //faust < 0.9.58
................................................................................

eq81 = f1,f2,f3,f4,_,_,_,_;
eq82 = cl.wdn(4,(f1,f2,f3,f4),DIR_GUI_DIRECTIVITY_WD),_,_,_,_;
eq83 = bus(8):>bus(4):f1,f2,f3,f4<:bus(8);

};






Changes to SchlemmerReverb/zita_ref1b.dsp.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
..
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
..
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
//import("all.lib");
import("maxmsp.lib");
import("classic6.lib");
import("zita_ref1.lib");
import("zita_ref1.gui");
import("zita_ref1.defaults");

// klingt der _sim-lfo_ wirklich genau so gut?
sinusi(freq,phase)=component("../rdk.lib").rdk.sinusi(freq,phase);
zitaLFO(i)=sinusi(ZE_GUI_SinusFreqHz,i*.125 )*(ZE_GUI_SinusDepth)+1.0;

process = zt.zita_distrib2(8):
  //zt.zita_rev_fdn(zt.f1,zt.f2,zt.t60dc,zt.t60m,zt.fsmax)
  zitaCore
  :ze.reflevel(zt.N)
................................................................................
fbdelaylines(N)=par(i,N,(fdelay(zt.maxfbdelay(i),(ze.fbdelay(i)))));
///step 2.1: change *g to UI
allpass_combs(N)=par(i,zt.N,(allpass_fcomb(zt.maxapdelay(i),ze.apdelay(i),ZE_GUI_APG(i)))) with {
  
  allpass_fcomb(maxdel,N,aN) = (+ <: fdelay(maxdel,N-1),*(aN)) ~ *(-aN) : mem,_ : + ;//filters.lib
  }; 
///step 3: change delay(i) lenths to reflect SIM
apdelay(i)=sim.ssq(i+1)*gui.ZE_GUI_APPERCENT*SR/1000.0*zitaLFO(i); //samples //rename ssq reflection
fbdelay(i)=sim.ssq(i+1)*SR/1000.0;

///step 4: change delay(i) lenths to reflect SIM
reflevel(N) = par(i,N,*(reflectionlevel(i)));
reflectionlevel(i) = sim.D0/(sim.ref(i+1)) *(ZE_GUI_ERCOMPRESSION) + makeup ;
 makeup = 1 - ZE_GUI_ERCOMPRESSION ;

................................................................................
with {
  reva=bus(N):>bus(2):par(i,2,*(ZE_GUI_OUTLEVEL(1)));
  refb=bus(N):>bus(2):par(i,2,@(ZE_GUI_OUTDELAY)):par(i,2,*(ZE_GUI_OUTLEVEL(2)));
  };

};

  //apdelay(i) = SR/1000.*(apdelay_ms(i)) *zitaLFO(i) ; //ff_del
  //tdelay_ms(i) = reflectiondelay_ms(i) - (1-(APDELAY_PERCENT(i))) ; //fdn_del
  //                                     ^BUG?: * intended?
  //apdelay_ms(i) = reflectiondelay_ms(i) * APDELAY_PERCENT(i) ; 

my_apdelay(i)=sim.ssq(i+1)*gui.ZT_GUI_APPERCENT*SR/1000.0;
my_tdelay(i)=sim.ssq(i+1)*SR/1000.0;//bug wie oben ///samples



/*
revb=bus(8):>bus(2):par(i,2,*(ZT_GUI_L1));
ref8=//pot(8,1):
  bus(8):>bus(2):par(i,2,@(ZT_GUI_DX)):par(i,2,*(ZT_GUI_L2));

ch=8;
pot(n,j) = par(i,n,cl.panpot(ZTMX_PAN(i+1,j)));

//some GUI. todo: rename param
ZT_GUI_DX = nentry("[0]ZT_DX",ZT_DX,0,4000,1);
ZT_GUI_L2 = nentry("[0]ZT_L2",ZT_L2,-1,1,0.001);
ZT_GUI_L1 = nentry("[0]ZT_L1",ZT_L1,-1,1,0.001);
*/

//import lit. from old/effect.lib:
zt = environment {
  
  zita_rev_fdn(f1,f2,t60dc,t60m,fsmax) =
  ((bus(2*N) :> allpass_combs(N) : feedbackmatrix(N)) ~
   (delayfilters(N,freqs,durs) : fbdelaylines(N)));








|







 







|







 







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
..
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
..
47
48
49
50
51
52
53
























54
55
56
57
58
59
60
//import("all.lib");
import("maxmsp.lib");
import("classic6.lib");
import("zita_ref1.lib");
import("zita_ref1.gui");
import("zita_ref1.defaults");

// klingt der _sim-lfo_ wirklich genau so gut? - ja. muss rein.
sinusi(freq,phase)=component("../rdk.lib").rdk.sinusi(freq,phase);
zitaLFO(i)=sinusi(ZE_GUI_SinusFreqHz,i*.125 )*(ZE_GUI_SinusDepth)+1.0;

process = zt.zita_distrib2(8):
  //zt.zita_rev_fdn(zt.f1,zt.f2,zt.t60dc,zt.t60m,zt.fsmax)
  zitaCore
  :ze.reflevel(zt.N)
................................................................................
fbdelaylines(N)=par(i,N,(fdelay(zt.maxfbdelay(i),(ze.fbdelay(i)))));
///step 2.1: change *g to UI
allpass_combs(N)=par(i,zt.N,(allpass_fcomb(zt.maxapdelay(i),ze.apdelay(i),ZE_GUI_APG(i)))) with {
  
  allpass_fcomb(maxdel,N,aN) = (+ <: fdelay(maxdel,N-1),*(aN)) ~ *(-aN) : mem,_ : + ;//filters.lib
  }; 
///step 3: change delay(i) lenths to reflect SIM
apdelay(i)=sim.ssq(i+1)*ZE_GUI_APPERCENT*SR/1000.0*zitaLFO(i); //samples //rename ssq reflection
fbdelay(i)=sim.ssq(i+1)*SR/1000.0;

///step 4: change delay(i) lenths to reflect SIM
reflevel(N) = par(i,N,*(reflectionlevel(i)));
reflectionlevel(i) = sim.D0/(sim.ref(i+1)) *(ZE_GUI_ERCOMPRESSION) + makeup ;
 makeup = 1 - ZE_GUI_ERCOMPRESSION ;

................................................................................
with {
  reva=bus(N):>bus(2):par(i,2,*(ZE_GUI_OUTLEVEL(1)));
  refb=bus(N):>bus(2):par(i,2,@(ZE_GUI_OUTDELAY)):par(i,2,*(ZE_GUI_OUTLEVEL(2)));
  };

};

























//import lit. from old/effect.lib:
zt = environment {
  
  zita_rev_fdn(f1,f2,t60dc,t60m,fsmax) =
  ((bus(2*N) :> allpass_combs(N) : feedbackmatrix(N)) ~
   (delayfilters(N,freqs,durs) : fbdelaylines(N)));

Added SchlemmerReverb/zita_ref1c.dsp.



























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
import("maxmsp.lib");
import("effect.lib");//modified

import("classic6.lib");//cl.
import("zita_ref1.lib");
import("zita_ref1.gui");
import("zita_ref1.defaults");

///Extending Zita Reverb with Virtual Room Acoustics 
//Life coding/sound processing and modification of the famous zita reverb by fons adriaensen.

//---------------------------------------------------------------------------------------
re=library("effect.lib"); // doesn't work because with {} is used for 'member' functions.
//---------------------------------------------------------------------------------------



/* klingt der _sim-lfo_ wirklich genau so gut?
sinusi=library("../rdk.lib").sinusi(freq,phase);
zitaLFO(i)=sinusi(ZT_GUI_SinusFreqHz,i*.125 )*(ZT_GUI_SinusDepth)+1.0;
  ZT_GUI_SinusFreqHz=1;
  ZT_SinusFreqHz=1;
  ZT_GUI_SinusDepth=0.01;
  ZT_SinusDepth=0.01;
*/

M=8;

process = zt.zita_distrib2(M):
  //zt.zita_rev_fdn(zt.f1,zt.f2,zt.t60dc,zt.t60m,zt.fsmax)
  zitaCore
  :ze.reflevel(M)
  :dir.eq82
  :ze.lexicon_trick(M)
  :bus(2)
;

zitaCore=(bus(2*M):>
  ze.fbdelaylines(M):
  ze.allpass_combs(M))
      ~(
      zt.feedbackmatrix(M):
      cl.wdn(M,zt.delayfilters(M,ze.freqs,ze.durs),ZE_GUI_FLTON)
      :cl.wdn(M,ze.reverbtime(M),(1-(ZE_GUI_FLTON)))
        );
      
ze = environment{
  
  freqs = (ztgui.f1,ztgui.f2); 
  durs = (ztgui.t60dc,ztgui.t60m);
  
///step 1: main loop
reverbtime(N) = par(i,N,*(ZE_GUI_MAINFB)) ;
///step 2.0: change delay to fdelay
fbdelaylines(zt.N)=par(i,zt.N,(fdelay(zt.maxfbdelay(i),(ze.fbdelay(i)))));
///step 2.1: change *g to UI
allpass_combs(N)=par(i,zt.N,(allpass_fcomb(zt.maxapdelay(i),ze.apdelay(i),ZE_GUI_APG(i)))) with {
  
  allpass_fcomb(maxdel,N,aN) = (+ <: fdelay(maxdel,N-1),*(aN)) ~ *(-aN) : mem,_ : + ;//filters.lib
  }; 
///step 3: change delay(i) lenths to reflect SIM
apdelay(i)=sim.ssq(i+1)*ZE_GUI_APPERCENT*SR/1000.0; //samples //rename ssq reflection
fbdelay(i)=sim.ssq(i+1)*SR/1000.0;

///step 4: change delay(i) lenths to reflect SIM
reflevel(N) = par(i,N,*(reflectionlevel(i)));
reflectionlevel(i) = sim.D0/(sim.ref(i+1)) *(ZE_GUI_ERCOMPRESSION) + makeup ;
 makeup = 1 - ZE_GUI_ERCOMPRESSION ;

///step 5: apply the lexicon trick
lexicon_trick(N)=bus(N)<:bus(2*N):(reva,refb):bus(4):>bus(2)
with {
  reva=bus(N):>bus(2):par(i,2,*(ZE_GUI_OUTLEVEL(1)));
  refb=bus(N):>bus(2):par(i,2,@(ZE_GUI_OUTDELAY)):par(i,2,*(ZE_GUI_OUTLEVEL(2)));
  };

};

Deleted SchlemmerReverb/zita_ref1c.dsp~.

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
//import("all.lib");
import("maxmsp.lib");

//import("common.lib");
import("classic6.lib");

//import("revgui.lib");
import("zita_ref1.lib");
import("zita_ref1.gui");
import("zita_ref1.defaults");

///Extending Zita Reverb with Virtual Room Acoustics 
//Life coding/sound processing and modification of the famous zita reverb by fons adriaensen.

//---------------------------------------------------------------------------------------
re=library("effect.lib"); // doesn't work because with {} is used for 'member' functions.
//---------------------------------------------------------------------------------------



/* klingt der _sim-lfo_ wirklich genau so gut?
sinusi=library("../rdk.lib").sinusi(freq,phase);
zitaLFO(i)=sinusi(ZT_GUI_SinusFreqHz,i*.125 )*(ZT_GUI_SinusDepth)+1.0;
  ZT_GUI_SinusFreqHz=1;
  ZT_SinusFreqHz=1;
  ZT_GUI_SinusDepth=0.01;
  ZT_SinusDepth=0.01;
*/

process = zt.zita_distrib2(8):
  //zt.zita_rev_fdn(zt.f1,zt.f2,zt.t60dc,zt.t60m,zt.fsmax)
  zitaCore
  :ze.reflevel(zt.N)
  :dir.eq82
  :ze.lexicon_trick(zt.N)
  :bus(2)
;

zitaCore=((bus(2*zt.N):>ze.fbdelaylines(zt.N):ze.allpass_combs(zt.N))
      ~(zt.feedbackmatrix(zt.N):cl.wdn(zt.N,zt.delayfilters(zt.N,zt.freqs,zt.durs),ZE_GUI_FLTON)
      :cl.wdn(zt.N,ze.reverbtime(zt.N),(1-(ZE_GUI_FLTON)))));

ze = environment{
  
///step 1: main loop
reverbtime(N) = par(i,N,*(ZE_GUI_MAINFB)) ;
///step 2.0: change delay to fdelay
fbdelaylines(zt.N)=par(i,zt.N,(fdelay(zt.maxfbdelay(i),(ze.fbdelay(i)))));
///step 2.1: change *g to UI
allpass_combs(N)=par(i,zt.N,(allpass_fcomb(zt.maxapdelay(i),ze.apdelay(i),ZE_GUI_APG(i)))) with {
  
  allpass_fcomb(maxdel,N,aN) = (+ <: fdelay(maxdel,N-1),*(aN)) ~ *(-aN) : mem,_ : + ;//filters.lib
  }; 
///step 3: change delay(i) lenths to reflect SIM
apdelay(i)=sim.ssq(i+1)*gui.ZE_GUI_APPERCENT*SR/1000.0; //samples //rename ssq reflection
fbdelay(i)=sim.ssq(i+1)*SR/1000.0;

///step 4: change delay(i) lenths to reflect SIM
reflevel(N) = par(i,N,*(reflectionlevel(i)));
reflectionlevel(i) = sim.D0/(sim.ref(i+1)) *(ZE_GUI_ERCOMPRESSION) + makeup ;
 makeup = 1 - ZE_GUI_ERCOMPRESSION ;

///step 5: apply the lexicon trick
lexicon_trick(N)=bus(N)<:bus(2*N):(reva,refb):bus(4):>bus(2)
with {
  reva=bus(N):>bus(2):par(i,2,*(ZE_GUI_OUTLEVEL(1)));
  refb=bus(N):>bus(2):par(i,2,@(ZE_GUI_OUTDELAY)):par(i,2,*(ZE_GUI_OUTLEVEL(2)));
  };

};
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<












































































































































Added directivity/directivity.lib.

































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
directiv = environment {
  
coeff(dir,ref,biq)=0.00;

coeff(0,0,0)=0.01;
coeff(1,0,0)=0.02;
coeff(0,1,0)=0.03;
coeff(0,0,1)=0.04;

coeff(1,1,1)=0.05;

};
*/

directiv=par(i,32,i);

Added directivity/switchdir0.dsp.

































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
import("all.lib");
import("directivity.lib");


ninsts=3;
fltbands=2;

totalcoeffs=ninsts*5*fltbands;

dir=nentry("dir",0,0,ninsts-1,1):int;
//ref1=nentry("ref",1,0,7,1):int;
//biq1=nentry("biq",1,0,4,1):int;


process=//par(i,totalcoeffs,coeff(i)) : 
filts(fltbands);

filts(fltbands)=par(i,fltbands,directivity(dir));//directiv:routing(dir);




//routing(dir)=par(i,num_inst,block(dir));

directivity(dir)=par(i,ninsts,bq(i)):>bus(5);

bq(i)=par(ninsts,5,coeff(ninsts,i)*(dir==i));

coeff(ninsts,i)=(ninsts+i)/1000;







//N=9;
//process = par(n,N, (par(i,N,i) : selectn(N,n)));

selectn(N,i) = S(N,0)
    with {
       S(1,offset) = _;
       S(n,offset) = S(left, offset), S(right, offset+left) : select2(i >= offset+left)
            with {
                right = int(n/2);
                left  = n-right;
            };
    };

Added directivity/switchdir1.dsp.

























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
import("all.lib");
import("directivity.lib");


ninsts=13;
nbands=6;

//totalcoeffs=ninsts*5*nbands;

dir=nentry("dir",0,0,ninsts-1,1):int;


process=alldirectivities(nbands);

alldirectivities(nbands)=par(band,nbands,directivity(dir,band));//directiv:routing(dir);

directivity(dir,band)=par(i,ninsts,bq(i,band)):>bus(5) with {
  bq(i,band)=par(c,5,coeff(i,band,c)*(dir==i)) with {
    coeff(i,band,c)=(i+band+c)/1000;
    };
  };











//N=9;
//process = par(n,N, (par(i,N,i) : selectn(N,n)));

selectn(N,i) = S(N,0)
    with {
       S(1,offset) = _;
       S(n,offset) = S(left, offset), S(right, offset+left) : select2(i >= offset+left)
            with {
                right = int(n/2);
                left  = n-right;
            };
    };

Added directivity/switchdir2.dsp.



















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
import("all.lib");
import("directivity.lib");

nrefs=8;
ninsts=13;
nbands=6;

//totalcoeffs=ninsts*5*nbands*nrefs;
//UI
dir=nentry("dir",6,0,ninsts-1,1):int;

process=allrefs;//reflection(6);

allrefs=par(ref,nrefs,reflection(ref));

reflection(ref)=par(band,nbands,directivity(ref,dir,band)) with {
  directivity(ref,dir,band)=par(i,ninsts,bq(ref,i,band)):>bus(5) with {
    bq(ref,i,band)=par(c,5,coeff(ref,i,band,c)*(dir==i));
    };
  };

//order in file matters!! first special case:
coeff(6,0,0,0 )=0.81365;
//
coeff(ref,i,band,c)=(10000*ref+1000*i+10*band+c)/1000;