[go: up one dir, main page]

File: caps.html

package info (click to toggle)
caps 0.2.0-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 748 kB
  • ctags: 1,069
  • sloc: cpp: 8,456; ansic: 172; makefile: 54
file content (1246 lines) | stat: -rw-r--r-- 38,110 bytes parent folder | download
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
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
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
<html>
	<head>
		<title>The CAPS Audio Plugin Suite - quitte</title>
		<style type=text/css>
			body, table {
				font-family: Helvetica, Tahoma, Geneva, sans-serif;
			}
			
			pre, tt, code {
				font-family: LucidaTypewriter, Courier, monospace;
			}

			h1, h2 {
				padding-top: 2pt;
				padding-bottom: 2pt;
				border-bottom: solid 1px black;
				border-top: solid 1px black;
				background-color: #eeeeee;
				text-align: center;
			}

			h3 {
				border-bottom: solid 1px #cccccc;
				margin-top: 24pt;
			}

			h4 {
				border-bottom: solid 1px #dddddd;
			}

			a	{
				font-weight: normal;
				text-decoration: none;
			}
			
			a:hover {
				text-decoration: underline;
			}

			a:visited {
				color: #7f7f00;
			}
			
			a:link {
				color: #1d30e7;
			}

			a.quitte,a.quitte:visited {
				text-decoration: none;
			}

			a.foot {
				color: #7588ff;
			}

			td.sm {
				font-size: 90%;
			}

			td.q {
				padding-left: 20px;
				padding-right: 20px;
				padding-top: 16px;
				padding-bottom: 16px;
			}

			td.q a, td.q a:visited {
				text-decoration: none;
				color: #ffffff;
			}

			td.q a.quitte {
				font-size: 16pt;
			}

			#gray {background-color: #dddddd;}
			#c0 {background-color: #5da0d7;}
			#c1 {background-color: #efaa59;}
			#c2 {background-color: #efcb30;}
			#c3 {background-color: #84a68c;}
			#c4 {background-color: #a80d1b;}
			#c5 {background-color: #7a6fa0;} // originally night magenta

			sup {
				font-size: 30%;
			}

			div.foot {
				padding-top: 2pt;
				padding-bottom: 2pt;
				border-top: solid 1px black;
				border-bottom: solid 1px black;
				background-color: #eeeeee;
			}

			p.attrib {
				font-size: 90%;
				text-align: right;
			}

			#foot {
				font-size: 90%;
			}

			#bg {
				//padding-top: 1pt;
				//padding-bottom: 1pt;
				font-size: 120%;
			}
			
			#warn {
				color: #ff0000;
			}

			
		h3 {margin-top: 18em;} 
		h4 {max-width: 37em; font-size: 11pt;} 
		h5 {font-size: medium; margin-bottom: .5em;} 
		p, ul, h5, h6 {max-width: 42em;} 
		body {margin: 18px;} 
		p#foot {border-top: solid 1px black;}
		h3 {font-size: 14pt; border-bottom: solid 1px black;}
		h4 {color: #aa0000; border-bottom: solid 1px black;}
		h4 {margin-top: 21px;margin-bottom: 0px;}
		ul {max-width: 36em; margin-bottom: 3em;} 
		ul#plugs {margin-top: 1em;} 
		li.bg {font-size: large;}
		li {margin-bottom: .4em;}
		table {padding-bottom:1em; border-bottom: solid 1px black;margin-bottom: 12px;}		</style>
	</head>

	<body>
		<center>
		<div align=left>

			<h2>The CAPS Audio Plugin Suite</h2>	<table border=0 width=100% cellpadding=0 cellspacing=0>
		<tr>
			<td align=left width=20%>
				<b>Release 0.2.0</b>
			</td>
			<td rowspan=2 align=center>
				<a href=http://quitte.de/dsp/caps.html title="Yes, this page, only guaranteed fresh!">http://quitte.de/dsp/caps.html</a>
			</td>
			<td align=right width=20%>
				<b>Tim Goetze</b>
			</td>
		</tr>
		<tr>
			<td align=left>
				November 30, 2004			</td>
			<td align=right>
				<a href=mailto:tim@quitte.de?subject=caps>tim@quitte.de</a>
			</td>
		</tr>
		<tr>
		</tr>
	</table>
	
	<ul>
		<li class=bg><a href=#FrontMatter>Front Matter</a></li>
		<li class=bg><a href=#Download>Download</a></li>
		<li class=bg><a href=#Installation>Installation</a></li>
		<li class=bg><a href=#WhatYouShouldKnow>What You Should Know</a></li>
		<li class=bg><a href=#ThePlugins>The Plugins</a></li>
		<li class=bg><a href=#Appendix>Appendix</a></li>
		<ul type=square>
			<li><a href=#DataSheet>Plugin Data Sheets</a></li>
			<li><a href=#Changelog>Changelog</a></li>
		</ul>
	</ul>
	
	&nbsp;<br>

	<a name=FrontMatter><h3>Front Matter</h3></a>
	<p>
		<b>caps</b>, the C* Audio Plugin Suite, is a collection of
		refined
		<a href=http://www.ladspa.org>LADSPA</a> units including 
		instrument amplifier emulation, stomp-box classics, 
		versatile 'virtual analog' oscillators,
		fractal oscillation, reverb, equalization and others.
	</p>
	<p>
		My favourite user quote: <i>&ldquo;... if your amps beat your plugins, they
		are *very good* amps.. ;-)&rdquo;</i> &ndash; Thanks, Pete!
	</p>
	<p>
		Most of the suite is of my own invention, 
		while some plugins are rewrites of 
		existing designs, included because of  
		their excellence or interest. Inspiring code was authored by
		(in no particular order): 
		Andrew Simper, Perry Cook, Gary Scavone, Steve
		Harris, Richard Dobson, Bram de Jong and others.
	</p>
	<p>
		All of caps is <a href=COPYING>free software</a> and distributed
		in source code. 
	</p>
	&nbsp;<br>

	<h5>* What's with the C?</h5>
	<p>
		So what does the <i>C</i> in the name stand for? Honestly, I don't know.
	</p>
	<p>
		<i>Complete?</i> Not yet. <br>
		<i>C</i> as in the programming language? The source is C++.<br>
		<i>Crap?</i> Heaven forbid!<br>
		<i>Cute?</i> Why not ...<br>
		<i>Common?</i> Not bad either. <br>
		<i>C,</i> the latin numeral for one-hundred? Some more to go, but I
		like the idea.
	</p>
	<p>
		I've got it! <i>C</i> as in <i>The <u>C</u>aps Audio Plugin Suite!</i> 
		A classic.
	</p>
	<p>
		I'll be glad to hear your suggestions.
	</p>

	&nbsp;<br>

	<a name=Download><h3>Download</h3></a>
	<p>
		caps is distributed under the 
		<a href=COPYING>GNU General Public License</a>. Other licensing terms
		can be arranged if you wish, please feel free to contact me.
	</p>

	<h5>No Guarantee</h5>
	<p>
		While I have bred all the plugins in the suite with the greatest care, 
		there is no guarantee
		that they will all retain perfect manners under all possible 
		circumstances. Take, for example, the <a href=#Lorenz>Lorenz</a>
		plugin, which models
		a fractal system. How am I to guarantee its 
		output will never go out of range, if people far more knowledgeable
		about this fractal than me assert its unpredictable behaviour?
	</p>

	<p style="margin-top:12pt;margin-bottom:12pt;margin-left:24pt;margin-right:24pt;border:solid 1px #dddddd;padding:3pt;max-width:32em;">
		This collection is distributed in the hope that it will be useful,
		but WITHOUT ANY WARRANTY; without even the implied warranty of
		MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
		<a href=COPYING>GNU General Public License</a> for more details.
	</p>

	<p>
		Download the latest release 
		from <a href=http://quitte.de/dsp/caps.html>the caps homepage</a>.
	</p>

	&nbsp;<br>

	<a name=Installation><h3>Installation</h3></a>

	<p>
		Provided you run GNU/Linux (or have GNU <tt>make</tt> and <tt>gcc</tt>), 
		installation is simply:
	</p>

	<pre align=left>
$ tar xvfz caps_0.2.0.tar.gz&nbsp;
$ cd caps-0.2.0&nbsp;
$ make
# make install</pre>
	
	<p>
		You should now be able use the plugins from the collection
		in any LADSPA-aware host program, 
		like Miller Puckette's <a href=http://pure-data.org>pd</a> with
		the <code>plugin~</code>
		<a href=http://pure-data.sourceforge.net/>external</a>,
		Paul Davis' impressive <a href=http://ardour.org>Ardour</a>,
		Kai Vehmanen's versatile <a href=http://eca.cx>ecasound</a>,
		Bill Schottstaedt's classic <a href=http://www-ccrma.stanford.edu/software/snd/>snd</a>,
		and numerous other applications large and small.
	</p>
	
	<p>
		You don't run Linux? Why not
		<a href=http://www.debian.org>downgrade now</a>?
	</p>
	
	<h5>Troubleshooting</h5>
	<p>
		With no external dependencies, compiling caps should rarely fail. If it
		does on your machine, please send the output of the <tt>make</tt> 
		command so we can try and fix the problem.
	</p>
	
	<p>
		Thanks to all members of the Linux audio development mailing list
		who helped sort out some compilation problems on more recent systems.
	</p>

	<h5>Bugs</h5>
	<p>
		If any of the plugins in the suite do not work with your host program
		of choice, or don't work as advertised, please 
		<a href=mailto:tim@quitte.de?subject=caps-bug>send a bug report</a>.
	</p>

	&nbsp;<br>

	<!-- ------------------------------------------------------------------ ->

	<a name=WhatYouShouldKnow><h3>What You Should Know</h3></a>

	<h5>Sample Rate Dependencies</h5>
	<p>
		In the plugin listing, for every unit you'll see a note like 
		<em>All sample rates</em>. This means that the plugin should sound the
		same no matter what sample rate it is run at. If it doesn't, please
		send a bug report. A note like <em>44.1 kHz only</em> means you
		can still run the plugin at other sample rates, but the sonic 
		experience will be different.
	</p>

	<h5>Parameter Smoothing</h5>
	<p>
		To prevent 'zipper' noise, control parameters are subject to internal 
		smoothing where the effort seems justified. This includes all 'gain'
		and 'volume' knobs and the <a href=#Eq>Eq</a> band adjustments, as
		well as all (I think) LFO rate adjustments. The time interval for
		the resulting parameter sweep is equal to the block size (length
		of the signal that is processed per cycle).
	</p>
	
	<h5>Realtime Use</h5>
	<p>
		All of the plugins in the suite are hard-realtime capable. In some
		cases, parameter smoothing will take a marginal number of
		extra CPU cycles when a control value is changed.
	</p>

	<h5>In-Place and Mixing/Replacing Operation</h5>
	<p>
		All of the plugins in the suite support any combination of in-place, 
		mixing and replacing operation.
	</p>

	<h5>Denormal Protection</h5>
	<p>
		As you may know, most of the common general-purpose processors, 
		most notably the Intel and AMD makes, have a weakness 
		computing exponential decay (of which many of the plugins in this and
		other collections
		make use). When working with numbers very close to zero ('denormals'), 
		these processors spend
		ridiculous amounts of time trying to maintain a specific idea of precision
		("I won't admit this number is zero").
		Unfortunately, there is no way to tell these processors to simply 
		accept zero as the answer. You see, these little chips are very proud
		and won't admit their computing precision is finite.
	</p>
	<p>
		In order to prevent this 'denormal detour', some of 
		the plugins in the suite
		add a very small fixed value to the signals processed. 
		The number is flipped around
		zero, sometimes for every sample, sometimes for every block processed; 
		thus, an inaudible (-266 dB) square wave results.
	</p>
	<p>
		In realtime operation, you'll simply not notice. When running 
		over a really huge continuous block of audio 
		in one go, 
		your processing network might suffer from marginal DC build-up
		through those plugins that flip per block.
		Chances are you won't notice either; it just seems worth noting.
	</p>

	<h5>Default Parameters</h5>
	<p>
		In some cases,
		the LADSPA specification 
		does not provide 
		the means for expressing an intended default parameter value without 
		seriously narrowing the range of possible values for that parameter. 
		In such cases, I have tried to find a compromise, keeping in mind
		that it is easier for the user to override the default than to change
		the source and recompile.
	</p>
	
	<h5>Plugin Activation &amp; Parameters</h5>
	<p>
		Prior to processing, LADSPA plugins are 'activated' by the host program.
		The caps plugins use this opportunity to initialize their internal state
		to the current control settings. The purpose is to prevent an unwanted
		parameter	smoothing sweep in the first processing call after activation
		(which, in an 'offline' host like an audio editor, may span a few seconds
		or even minutes of audio).
	</p>
	<p>
		I have heard second-hand that host programs exist which activate a plugin
		without initializing parameters first. To prevent problems with such
		hosts, the caps plugins default to using a control's lower bound if the
		control hasn't been set up yet. As a result, the first block processed 
		<em>will</em> be done with sweeping parameters. The alternative of
		checking every block to process whether it is the first since activation
		and act accordingly is highly unattractive from a number of perspectives,
		performance being one of them.
	</p>
	<p>
		I consider host programs acting as described above
		<em>broken</em>. If you use a host that does 'work' like this and are
		irritated by the behaviour, please direct complaints to the host program's
		author.
	</p>
	
	<h5>You Can Help!</h5>
	<p>
		If you like to, you can both help in the development and help the 
		developer of caps. Your feedback is wanted, patches are welcome
		and donation offers will not be turned down.
	</p>
	
	<h5>Known Bugs and Limitations</h5>
	<ul>
		<li>
			Processing blocks larger than 2<sup>31</sup> - 1 aren't supported.
		</li>
		<li>
			Oversampling consumes a lot of cycles. 
		</li>
	</ul>

	&nbsp;<br>

	<!-- ------------------------------------------------------------------ ->

	<a name=ThePlugins><h3>The Plugins</h3></a>
	<p>
		These are the plugins in the suite:
	</p>
	
		<ul type=square style=margin-top:2pt;>
			<li><a href=#Generic>Generic</a></li><ul type=circle>
				<li><a href=#Eq>Eq</a> - classic ten-band equalizer</li>
				<li><a href=#Compress>Compress</a> - a compressor suited for single instruments</li>
				<li><a href=#Pan>Pan</a> - pan and optional width</li>
			</ul>
			<li><a href=#Emulation>Emulation</a></li><ul type=circle>
				<li><a href=#PreampIII>PreampIII</a> - emulation of a tube preamplifier circuit</li>
				<li><a href=#PreampIV>PreampIV</a> - tube preamplifier with tone controls</li>
				<li><a href=#AmpIII>AmpIII</a> - emulation of a tube amplifier</li>
				<li><a href=#AmpIV>AmpIV</a> - tube amplifier with tone controls</li>
				<li><a href=#Cabinet>Cabinet</a> - emulation of guitar combos</li>
				<li><a href=#Clip>Clip</a> - hard clipper</li>
			</ul>
			<li><a href=#Effects>Effects</a></li><ul type=circle>
				<li><a href=#Chorus>Chorus</a> - a versatile classic</li>
				<li><a href=#StereoChorus>StereoChorus</a> - when one channel is not enough</li>
				<li><a href=#Phaser>Phaser</a> - another classic</li>
				<li><a href=#SweepVF>SweepVF</a> - ladder filter modulated by a fractal</li>
			</ul>
			<li><a href=#Generators>Generators</a></li><ul type=circle>
				<li><a href=#VCOs>VCOs</a> - sawtooth / triangle / square wave generator</li>
				<li><a href=#VCOd>VCOd</a> - double VCO with detune and hard sync</li>
				<li><a href=#CEO>CEO</a> - chief executive oscillator</li>
				<li><a href=#Sin>Sin</a> - testing and tuning helper</li>
				<li><a href=#White>White</a> - white noisz</li>
				<li><a href=#Lorenz>Lorenz</a> - a fractal singing in a broken voice</li>
				<li><a href=#Roessler>Roessler</a> - a roaring fractal</li>
			</ul>
			<li><a href=#Reverb>Reverb</a></li><ul type=circle>
				<li><a href=#JVRev>JVRev</a> - a digital reverb technology classic</li>
				<li><a href=#Plate>Plate</a> - versatile refined digital reverb</li>
				<li><a href=#Plate2x2>Plate2x2</a> - 2-in, 2-out version of Plate</li>
			</ul>
			<li><a href=#Others>Others</a></li><ul type=circle>
				<li><a href=#Click>Click</a> - practice, practice, practice!</li>
				<li><a href=#HRTF>HRTF</a> - head-related transfer function</li>
			</ul>
		</ul>
	<a name=Generic><h3>Generic</h3></a>

	<a name=Eq><h4>Eq</h4></a>

	<p>
		A ten-band, octave-spread equalizer. High individual band gains can
		cause phase cancellation (comb filtering).
	</p>
	<p>
		<em>All sample rates (bands beyond Nyquist are disabled).</em>
	</p>
	<ul>
		<li><b>31 Hz, 63 Hz, 125 Hz, 250 Hz, 500 Hz, 1 kHz, 2 kHz, 4 kHz, 8 kHz, 16 kHz</b></li>
			control the gain in dB for the respective band.</p></li>
	</ul>

	<a name=Compress><h4>Compress</h4></a>

	<p>
		A mono compressor, based on the SC1 design by 
		<a href=http://plugin.org.uk>Steve Harris</a> (in other words, a ripoff)
		with minor tweaks. Be
		careful with the gain and ratio controls, the output signal can easily
		exceed 0 dB.
	</p>
	<p>
		<em>All sample rates.</em>
	</p>
	<ul>
		<li><b>gain (dB)</b><p>
			controls the maximum gain applied by the unit.</p></li>
		<li><b>ratio (1:n)</b><p>
			controls the overall gain.</p></li>
		<li><b>attack (s)</b><p>
			controls the speed at which the circuit acts on a rising input signal
			envelope.</p></li>
		<li><b>release (s)</b><p>
			controls the speed at which the circuit acts on a decaying input signal
			envelope.</p></li>
		<li><b>threshold (dB)</b><p>
			sets the envelope level that the compressor starts acting at.</p></li>
		<li><b>knee radius (dB)</b><p>
			controls the softness of the transition between unaltered and 
			compressed signal.</p></li>
	</ul>

	<a name=Pan><h4>Pan</h4></a>

	<p>
		Places a monaural source in the stereo field. For some extra spicing,
		the unit can also add a low-pass filtered echo at the far
		ends of the stereo field to make the signal sound 'wider' (recreating 
		the old doubling effect with a twist). You can 
		(and should!) control the loudness and timing of the echo; what's best
		depends largely on the source signal.
	</p>
	<p>
		<em>No parameter smoothing.</em>
	</p>
	<p>
		<em>All sample rates.</em>
	</p>
	<ul>
		<li><b>pan</b><p>
			position</p></li>
		<li><b>width</b><p>
			echo volume</p></li>
		<li><b>t</b><p>
			delay in milliseconds<p></li>
		<li><b>mono</b><p>
			if non-zero, causes the unit to mix the stereo output back down to mono
			and output that (on both outbound ports). 
			The purpose is to check for mono
			compatibility of the output.<p></li>
	</ul>

	<a name=Emulation><h3>Emulation</h3></a>

	<a name=PreampIII><h4>PreampIII</h4></a>

	<p>
		One further step in the evolution of my 
		<a href=http://quitte.de/dsp/preamp.html>tube preamplifier emulation</a>. This one
		uses conventional polyphase FIR filters for 8x oversampling,
		which helps make the unit sound a good deal cleaner than the 
		IIR-based predecessor. 
	</p>
	<p>
		The first steps towards this unit were based on a <tt>spice</tt> model
		of the preamplifier circuit in a Fender 5F4 design ('Super' tube amp,
		a close relative of the famed 'Bassman', which is the ancestor of the
		Marshall lineage). Further evolution was 
		based on measurements of my 'Super 60' (mid-1980s) amp and, of course, 
		personal preference. 
		The plugin offers a softer kind of preamp clipping
		than the actual circuit, though it can be made to clip as harsh as the 
		original thing if given enough gain.
	</p>
	<p>
		A word of caution: depending on the 'temperature' setting, an input
		signal peaking at above 0 dB can drive
		the first 'tube' stage into soft 'fold back' clipping. This is <em>not</em>
		how the real counterpart behaves under the same circumstances. In order to
		save lots of CPU cycles, the first 
		stage is run at the nominal sample rate with no clipping precautions taken.
		As a result, overdriving the input in said fashion will cause sound
		quality degradation. Use the gain knob for harsh distortion, it offers
		more than enough of it.
	</p>
	<p>
		<em>All sample rates.</em>
	</p>
	<ul>
		<li><b>gain</b><p>
				controls the level of saturation. For a balanced (0 dB max.) 
				input signal,
				hard clipping will not occur below a gain value of 1.
			</p></li>
		<li><b>temperature</b><p>
				controls the level at which the first 'tube' stage is operating,
				and thus tone coloring as well as compression. 
				The effect is subtle.</p></li>
	</ul>

	<a name=PreampIV><h4>PreampIV</h4></a>

	<p>
		A variation on <a href=#PreampIII>PreampIII</a> with added tone controls
		before the clipping stage. The tone controls have the same
		flaws as their analog counterparts (phase cancellation at high band
		gains). But exactly because they are not linear-phase, they are quite
		useful in altering the distortion characteristics of the circuit.
	</p>
	<p>
		Same parameters as PreampIII, plus the following 
		(all in dB units):
	</p>
	<ul>
		<li><b>bass</b><p>
				80 Hz band</p></li>
		<li><b>mid</b><p>
				300 Hz band</p></li>
		<li><b>treble</b><p>
				1200 Hz band</p></li>
		<li><b>hi</b><p>
				4800 Hz band</p></li>
	</ul>

	<a name=AmpIII><h4>AmpIII</h4></a>

	<p>
		A <a href=#PreampIII>PreampIII</a> circuit plus a tube power amplifier 
		emulation giving that smooth drive. Use this plugin followed by a
		<a href=#Cabinet>Cabinet</a> unit for a complete guitar combo
		emulation.
	</p>
	<p>
		Same controls as PreampIII, plus:
	</p>
	<ul>
		<li><b>drive</b><p>
				controls the 'master volume' of the circuit, i.e. how much
				coloring and compression the emulated power amplifier produces.</p></li>
	</ul>

	<a name=AmpIV><h4>AmpIV</h4></a>

	<p>
		A variation on <a href=#AmpIII>AmpIII</a> with added tone controls
		before the clipping stage. The tone controls have the same
		flaws as their analog counterparts (phase cancellation at high band
		gains). But exactly because they are not linear-phase, they are quite
		useful in altering the distortion characteristics of the circuit.
	</p>
	<p>
		Same parameters as AmpIII, plus the following 
		(all in dB units):
	</p>
	<ul>
		<li><b>bass</b><p>
				80 Hz band</p></li>
		<li><b>mid</b><p>
				300 Hz band</p></li>
		<li><b>treble</b><p>
				1200 Hz band</p></li>
		<li><b>hi</b><p>
				4800 Hz band</p></li>
	</ul>

	<a name=Cabinet><h4>Cabinet</h4></a>

	<p>
		A collection of filters emulating the frequency response
		of various guitar amplifier 
		combos, in the vein of my 
		<a href=http://quitte.de/dsp/unmatched.html>previous efforts</a>.
	</p>
	<p>
		(You'll find a more exact, but also a lot more cycle-hungry and
		latency-inflicting rendering of 
		these responses in 
		<a href=http://plugin.org.uk>Steve Harris' collection</a>, from which
		they were borrowed).
	</p>
	<p>
		When used together with one of the Preamp/Amp units, emulation of all 
		major sonic features of a guitar/bass amplifier is complete.
	</p>
	<p>
		<em>44.1 kHz (48 kHz gives a slightly different, but still usable frequency response.)</em>
	</p>
	<ul>
		<li><b>model</b><p>
			0 - identity filter (what goes in, goes out).<br>
			1 - 'unmatched', as I still like to call it. A Matchless Chieftain.<br>
			2 - the same, but the recording was taken with the microphone on-axis.<br>
			3 - Superchamp (a Fender, isn't it?)<br>
			4 - Fender Vibrolux 68<br>
			5 - Marshall.
		</li>
		<li><b>gain (dB)</b><p>
			volume control.</p></li>
	</ul>

	<a name=Clip><h4>Clip</h4></a>

	<p>
		A spin-off of the <a href=#PreampIII>PreampIII</a> effort.
		8x oversampled hard clipping (sometimes called 'diode' or 
		'transistor' clipping). 
		The clip threshold is fixed at -1 dB (overshoot 
		from the up- and downsampling filters could exceed 0 dB were the threshold
		higher). 
	</p>
	<p>
		<em>All sample rates.</em>
	</p>
	<ul>
		<li><b>gain (dB)</b><p>
			controls pre-clipping amplification.</p></li>
	</ul>

	<a name=Effects><h3>Effects</h3></a>

	<a name=Chorus><h4>Chorus</h4></a>

	<p>
		Mono version, with a feedback circuit. The parameter range suits more
		subtle effects as well as all-out flanging. Modifying the 't' parameter
		when 'feedback' is non-zero will cause zipper noise.
	</p>
	<p>
		<em>All sample rates.</em>
	</p>
	<ul>
		<li><b>t (ms)</b><p>
			delay time.</p></li>
		<li><b>width (ms)</b><p>
			controls the amount of pitch change.</p></li>
		<li><b>rate (Hz)</b><p>
			the speed of the pitch modulation.</p></li>
		<li><b>blend</b><p>
			the amount of dry and fed-back signal in the output.</p></li>
		<li><b>feedforward</b><p>
			amount of modulated signal in the output.</p></li>
		<li><b>feedback</b><p>
			amount of signal with fixed delay in the modulation input.</p></li>
	</ul>
	
	<a name=StereoChorus><h4>StereoChorus</h4></a>

	<p>
		Two <a href=#Chorus>Chorus</a> circuits in parallel, 
		sharing the same input (and delay 
		line). Same parameters as the Mono version, and one extra:
	</p>
	<ul>
		<li><b>phase</b></li><p>
			controls the relation of the two LFOs. 0 means in-phase, 0.5 is
			quadrature, and 1 is anti-phase.</p>
		</li>
	</ul>

	<a name=Phaser><h4>Phaser</h4></a>

	<p>
		Nothing out of the ordinary, just a phaser like I like to have them.
		A Phaser works by sweeping notches in the frequency response; this one
		has six comb filters, for six notches. 
	</p>
	<p>
		<em>All sample rates.</em>
	</p>
	<ul>
		<li><b>rate (Hz)</b><p>
			controls speed of the modulation.</p></li>
		<li><b>depth</b><p>
			the strength of the effect.</p></li>
		<li><b>spread</b><p>
			the distance of the notched frequency bands.</p></li>
		<li><b>feedback</b><p>
			controls the amount of resonance.</p></li>
	</ul>
			
	<a name=SweepVF><h4>SweepVF</h4></a>

	<p>
		A ladder filter whose cutoff frequency is swept by a 
		<a href=#Lorenz>Lorenz</a> fractal. With the default parameters 
		(moderate Q, cutoff around 800 Hz and band pass mode)
		it makes a nice Wah effect.
	</p>
	<p>
		Another idea is to set it to very high Q and frequency in low pass mode
		and filter white noise, for some synthetic bird chirping (high h value)
		or theremin-like sounds (low h, lower frequency).
	</p>
	<p>
		Be careful, high Q resonation can peak at up to +18 dB.
	</p>
	<p>
		<em>All sample rates (modulation rate and character are sample rate dependent).</em>
	</p>
	<ul>
		<li><b>f</b><p>
			cutoff frequency (band center for band pass filtering).</p></li>
		<li><b>Q</b><p>
			filter resonance.</p></li>
		<li><b>mode</b><p>
			0 - low pass<br>
			1 - band pass</p></li>
		<li><b>depth:x</b></li>
		<li><b>depth:y</b></li>
		<li><b>depth:z</b><p>
			control how the modulation is mixed from the state of the attractor.</p></li>
		<li><b>h</b><p>
			step size of the fractal.</p></li>
	</ul>
		
	<a name=Generators><h3>Generators</h3></a>

	<a name=VCOs><h4>VCOs</h4></a>

	<p>
		An oscillator capable of producing the standard 
		triangle, sawtooth and square waveforms of analog fame, 
		and almost any conceivable blend
		thereof. 8x oversampled, thus needs a lot of cycles. Sorry about that,
		but you don't get the flexibility for free.
	</p>
	<p>
		About the morphing controls:
	</p>
	<ul type=circle>
		<li>For a <b>triangle wave,</b> set both <i>tri .. saw</i> and
			<i>~ .. square</i> to 0 (this is the default setting).</li>
		<li>To morph into a <b>sawtooth,</b> pull up <i>tri .. saw</i>.</li>
		<li>For a <b>square wave</b> instead, pull up <i>~ .. square</i>. When
			the value reaches 1, <i>tri .. saw</i> fully controls the pulse
			width.</li>
	</ul>
	<p>
		For a more intuitive approach, thinking of both controls
		in terms of 'dull .. sharp' for a start
		can't hurt.
	</p>
	<p>
		<em>All sample rates.</em>
	</p>
	<ul>
		<li><b>f</b><p>
			the frequency.</p></li>
		<li><b>tri .. saw</b><p>
			controls the morph between triangle and sawtooth, and the pulse
			width of square oscillation.</p></li>
		<li><b>~ .. square</b><p>
			controls the morph between triangle/sawtooth and square wave.</p></li>
		<li><b>volume</b></li>
	</ul>

	<a name=VCOd><h4>VCOd</h4></a>

	<p>
		A combination of two <a href=#VCOs>VCOs</a> units. 
		The second oscillator
		offers a separate tuning knob. It can also be made 
		to 'hard sync'
		to the first unit, which means that when the first has completed
		a wave cycle, the second is forced to restart its wave cycle 
		together with the first. 
	</p>
	<p>
		<em>All sample rates.</em>
	</p>
	<ul>
		<li><b>f</b><p>
			the frequency.</p></li>
		<li><b>1: tri .. saw</b></li>
		<li><b>1: ~ .. square</b><p>
			waveform morph controls for the first oscillator.</p></li>
		<li><b>2: tri .. saw</b></li>
		<li><b>2: ~ .. square</b><p>
			waveform morph controls for the second oscillator.</p></li>
		<li><b>2: tune</b><p>
			controls the interval between the two oscillator frequencies, in
			units of (fractional) semitones.</p></li>
		<li><b>sync</b><p>
			if non-zero, puts the second oscillator into 'hard sync' mode, and
			determines the forced-restart offset into its wave cycle.</p></li>
		<li><b>blend</b><p>
			controls how the waveforms from the two oscillators are mixed.
			A value of 0 means only oscillator one is heard, a value of either
			1 or -1 tilts the balance fully towards oscillator two. The sign
			of the <b>blend</b> value determines if the signals are added or
			subtracted.</p></li>
		<li><b>volume</b></li>
	</ul>

	<a name=CEO><h4>CEO</h4></a>

	<p>
		The Chief Executive Oscillator forever repeats the word 'money'.
	</p>
	<p>
		<em>44.1 kHz.</em>
	</p>
	<ul>
		<li><b>mpm</b><p>
			moneys per minute.</p></li>
		<li><b>volume</b></li>
		<li><b>damping</b><p>
			moderates the CEO.</p></li>
	</ul>

	<a name=Sin><h4>Sin</h4></a>

	<p>
		The old friend, indispensable for testing and tuning.
	</p>
	<p>
		<em>All sample rates.</em>
	</p>
	<ul>
		<li><b>f</b><p>
			the frequency.</p></li>
		<li><b>volume</b></li>
	</ul>

	<a name=White><h4>White</h4></a>

	<p>
		White noise.
	</p>
	<p>
		<em>All sample rates.</em>
	</p>
	<ul>
		<li><b>volume</b></li>
	</ul>

	<a name=Lorenz><h4>Lorenz</h4></a>

	<p>
		A Lorenz attractor is a fractal system. It produces a very
		own character of noisz that will hardly repeat in the course of your
		lifetime.
	</p>
	<p>
		<em>Sound varies with sample rate.</em>
	</p>
	<ul>
		<li><b>h</b></p>
			controls the step size of the state progression, and, indirectly, the
			perceived frequency of the sound.</p></li>
		<li><b>x</b></li>
		<li><b>y</b></li>
		<li><b>z</b><p>
			control how the signal is mixed from the state of the attractor.</p></li>
		<li><b>volume</b></li>
	</ul>
	<p>
		For more information on the
		Lorenz and Roessler attractors, visit
		<a href=http://astronomy.swin.edu.au/~pbourke/fractals/lorenz/>Paul Bourke's resourceful site</a>.
	</p>

	<a name=Roessler><h4>Roessler</h4></a>

	<p>
		Another fractal system. This one lends itself
		particularly well to sweeping the 'h' parameter.
	</p>
	<p>
		<em>Sound varies with sample rate.</em>
	</p>
	<ul>
		<li><b>h</b></p>
			controls the step size of the state progression.</p></li>
		<li><b>x</b></li>
		<li><b>y</b></li>
		<li><b>z</b><p>
			control how the signal is mixed from the state of the attractor.</p></li>
		<li><b>volume</b></li>
	</ul>

	<a name=Reverb><h3>Reverb</h3></a>

	<a name=JVRev><h4>JVRev</h4></a>

	<p>
		A traditional Chowning/Moorer/Schroeder reverb, it sounds quite good
		for a reverberation unit with such a comparatively small footprint
		(only a few years ago, your average personal computer wasn't even capable
		of computing this in realtime (!)). A quite
		straight-forward rewrite of a unit found in 
		<a href=http://www-ccrma.stanford.edu/>CCRMA</a>'s 
		<a href=http://www-ccrma.stanford.edu/software/stk/>STK (Synthesis Toolkit)</a>,
		with minor tweaks.
	</p>
	<p>
		<em>All sample rates.</em>
	</p>
	<ul>
		<li><b>t60 (s)</b></p>
			controls the time until the reverb tail fades to -60 dB.</p></li>
		<li><b>blend</b></p>
			controls dry/wet mixing ratio.</p></li>
	</ul>

	<a name=Plate><h4>Plate</h4></a>

	<p>
		A reverberation unit based on the design discussed
		in [<a name=dat97-1-1 href=#dat97-1>1</a>]. 
		Unlike the reference, the unit employs cubic instead of
		allpass interpolation to modulate the reverb 'tank' delay lines.
	</p>
	<p>
		<em>All sample rates.</em>
	</p>
	<ul>
		<li><b>bandwidth</b><p>
			controls damping of the input signal before it enters the
			delay circuits.</p></li>
		<li><b>tail</b><p>
			controls the length of the reverb tail.</p></li>
		<li><b>damping</b><p>
			controls attenuation of high frequency components within the reverb 'tank'
			(decay stage).</p></li>
		<li><b>blend</b><p>
			dry/wet mixing ratio (default should be 1/8, not 1/4).</p></li>
	</ul>

	<a name=Plate2x2><h4>Plate2x2</h4></a>

	<p>
		By popular demand, a stereo-in, stereo-out version of the 
		<a href=#Plate>Plate</a> reverb unit. Same controls, same sound.
	</p>
	<p>
		<em>All sample rates.</em>
	</p>

	<a name=Others><h3>Others</h3></a>

	<a name=Click><h4>Click</h4></a>

	<p>
		A sample-accurate metronome. Timing is exact at any sample rate, but
		the pitch of the click (being a recorded sample) will vary. (The click
		also lends well for testing reverb plugins.)
	</p>
	<p>
		<em>44.1 kHz.</em>
	</p>
	<ul>
		<li><b>bpm</b><p>
			beats per minute.</p></li>
		<li><b>volume</b></li>
		<li><b>damping</b><p>
			controls the softness of the click sound.</p></li>
	</ul>

	<a name=HRTF><h4>HRTF</h4></a>

	<p>
		Applying the head-related transfer function to a signal makes it appear
		to come from a specific direction in space. This plugin applies the
		HRTF with custom-shaped IIR filters. 
		Tell me how it works for you (you should
		have pretty good headphones to get the full effect). 
	</p>
	<p>
		The HRTF impulse response data has been collected and prepared 
		by MIT's Media Lab.
	</p>
	<p>
		This unit only utilizes the 0-elevation set (sound source is level
		with the listener).
	</p>
	<p>
		<em>44.1 kHz.</em>
	</p>
	<ul>
		<li><b>pan</b><p>
			The position, in integer steps. Some noteworthy settings:
			<ul>
				<li>
					0 = in front</li>
				<li>+18 = left,</li>
				<li>-18 = right, and</li>
				<li>-36 = +36 = behind the listener.</li>
			</ul>
		</li>
	</ul>

	&nbsp;<br>

	<a name=Appendix><h3>Appendix</h3></a>

	<a name=DataSheet><h4>Plugin Data Sheets</h4></a>

	<p>
		An accompanying data sheet collection has been compiled. For each
		plugin, it shows:
	</p>
	<ul type=circle>
		<li>the plugin ID</li>
		<li>normalized sample output from the plugin 
			with default parameter settings 
			(in the filter case, this is an impulse response)</li>
		<li>a frequency magnitude plot for the sample output</li>
		<li>estimated CPU usage on my box</li>
		<li>latency information if applicable</li>
		<li>audio routing information</li>
		<li>the control inputs on the plugin</li>
	</ul>
	<p>
		You can fetch the data sheet compilation
		<a href=http://quitte.de/dsp/caps-0.2.0.pdf>from the caps homepage</a>.
	</p>
	
	<a name=Changelog><h4>Changelog</h4></a>

	<pre>
0.2.0
  * denormal protection for Preamp*, Amp*
  * Capitalized plugin Names
  * PDF now lists audio in- and outputs as well as control inputs, only
    gives average CPU rating
  * AmpIV: PreampIV + power amp stage
  * Plate2x2: Plate with 2-in, 2-out audio routing
  * Plate damping and bandwidth controls changed to map to filter fc, fixes
    behaviour in hosts that handle the log hint incorrectly

0.1.13
  * AmpIII activate() resets the boost filter

0.1.12
  * PreampIV band controls fixed to operate as expected

0.1.11
  * amps changed back to old tube model :) but new temp & gain behaviour stays
  * SweepVF, AmpIII default value adjustments

0.1.10
  * HRTF recursion runs in doubles
  * Cabinet recursion runs in doubles for much clearer sound
  * all amps fitted with a common tube voltage mapping, dsp/TwelveAX7.h
  * all amps: temperature and gain controls changed slightly
  * all amps declared in one common Amp.h
  * Pan echo fixed to be filtered independent of sample rate
  * Cabinet cosmetics and activate() from port values fix
  * SweepVF fixed to activate() from the current control settings
  * rid all *amp* plugins of the initial hi-pass, not needed anymore
  * PreampIII and AmpIII more authentic with an rbj lo-shelve, +6 dB > 1.2 kHz
    as hinted by circuit analysis
  * something_random() removed, stdlib for random generation

0.1.9
  * Pan plugin
  * 'make depend' instead of 'make dep', uses $(CC) -MM instead of 'makedepend'
  * *Chorus, AmpIII, Plate defaults changed
  * *Chorus optimizations, reintroduces funny zipper noise when 'feedback' is
    non-zero and 't' is changed
  * experimental HRTF plugin
  * Plate 'blend' goes all the way to wet output only
  * dsp/White offers a get_31() method for reduced number of bitshifts needed
  * *Chorus delay line tapping changed to employ cubic interpolation, sounds
    better
  * SweepVF modulation mix algorithm changed to clamp if over-fed, makes
    for wider sweeps
  
0.1.8
  * all oversampling plugins use Kaiser windows instead of Blackman-Harris,
    for much better performance
  * SweepVF modulation range slightly increased
  * Cabinet filter loop cosmetics (slight speedup)
  * new AmpIII Plugin: Preamp plus power amp emulation
  * lowered NOISE_FLOOR (equals 'renormal' number)
  
0.1.7
  * connect ports to lower bound on instantiate()
  * Plate delay line lengths raised, sound changed
  * Eq activate() fixed to initialize from the current settings
  * Preamp* cutoff reverted to 0.1.3 setting, thanks to Ben Saylor for
    testing
  * old IIR-based Preamp cleaned from the sources
  * zipper-noise in *Chorus units for t changes with feedback > 0 eliminated
  * all plugin constructor code moved to init() calls

0.1.6
  * SweepVF modulation mix algorithm changed to maintain proportion, not
    absolute value if x + y + z > 1, for better control
  * create $(DEST) directory on make install, pointed out by Daniel James

0.1.5
  * fixed delay line length miscalculation in ModLattice

0.1.4
  * SweepVF modulation source can be mixed now
  * latency port for VCO*
  * Lorenz and Roessler get x, y, z mixing knobs
  * PreampIV eq bands slightly tuned and coefficients moved into common struct
  * Preamp*, VCO* downsampler filter cutoff lowered
  * Clip downsampler filter cutoff lowered 
  * nonsensical audio output bounds removed
  * simplified VCO* implementation
  * JVRev rewritten for code clarity (funny enough, it also got quicker)
  * fixed JVRev to reset its history on activate()
  * added purpose, copyright and licensing information to all (i think) files.
  * HACKING file
  * CHANGES file
  
0.1.3
  * fixed all compilation problems with gcc 3.3, with the patient help
    of the lad mailing list community
  * dsp/Eq.h SSE assembler code had to go (gcc > 3 doesn't like multi-line 
    asm, and efficiency and even reliability go down if we allow gcc to 
    intersperse its 'optimization' code with our asm)
  
0.1.2
  * fixed more compilation problems with gcc >= 3.0
  
0.1.1
  * tried to (but didn't really) fix compilation problem with ladspa.h
  
0.1.0
  * initial release
	</pre>

	<p id=foot>
		<a name=dat97-1 href=#dat97-1-1>[1]</a>
			J. Dattorro, "Effect Design Part 1: Reverberator and Other Filters", 
			<i>J. Audio Eng. Society</i>, vol. 45, No. 9 (1997 September).<br>
	</p>

		</div>
			&nbsp;<br>

			<div class=foot>
				tim@<a href=http://quitte.de/>quitte.de</a>, November 30 2004.
			</div>		</center>
	</body>
</html>