[go: up one dir, main page]

File: HACKING

package info (click to toggle)
caps 0.3.0-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 888 kB
  • ctags: 1,273
  • sloc: cpp: 9,837; ansic: 584; makefile: 62
file content (71 lines) | stat: -rw-r--r-- 2,839 bytes parent folder | download | duplicates (2)
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
Hacking caps
============

All source code is formatted for a tab size of two spaces.


Likely Tweaks
=============

Oversampling Tradeoffs: Clip, Preamp*, VCO*
-------------------------------------------

Parameters that may be of immediate interest to tweak are the oversample 
ratios of the Clip, Preamp* and VCO* plugins. It suffices to visit the
respective header file and change the value of the OVERSAMPLE enum. 

While you're at it, you may want to tweak the FIR_SIZE value, too. It 
determines the length of the filter kernel used in up/downsampling, and 
thus the steepness of the filter's rolloff. It should (but need not) be a 
multiple of the oversample ratio, best a power of two.

Also of interest to the discerning tweaker: the sinc() FIR kernel parameter
in the respective classes' init(). For an infinitely steep downsampling
filter, this is pi / (oversample ratio). In practice, the cutoff frequency
is scaled down by a generous factor for better aliasing attenuation, but
with it this brings attenuation of wanted spectral components.

Since caps 0.1.8, the window function is a Kaiser, not a Blackman-Harris
anymore. The 'beta' parameter (sometimes also 'tau' or 'alpha') which 
determines how quickly the window rolls off to 0 may meet your interest,
too.


Plate, JVRev Character
----------------------

For JVRev tweaking, the delay line lengths present the most fruitful 
tweaking opportunity. The all-pass coefficient (apc) seems perfectly 
weighted.

The character of the Plate reverb can be changed by tuning the indiff*
and dediff* values, set in Plate::Plate() in Reverb.cc. Other parameters
to tweak if you bring some time, good ears and/or measurement utilities
are the summation weights (0.6) in Plate::one_cycle() and of course the
individual delay length lines and tap indices in the constructor.

The use of the all-pass interpolator in the modulated lattice is disabled
because it produces nasty noise at extreme parameter settings (this includes
the diffusion coefficients). If you don't intend to use extreme settings, 
you can re-enable it in the ModLattice class in Reverb.h.


Chorus, StereoChorus
--------------------

Like with Plate's ModLattice, the all-pass interpolator is disabled in these
plugins because of aliasing at extreme settings. If you only need a Chorus,
not a Flanger, you can re-enable it in both plugins' one_cycle() method. 
You'll probably also want to limit the amount of modulation these plugins
offer in the respective port_info[] member. 


White
-----

The white noisz generator makes use of bit-shifting. As i understand it, this
is a costly operation on some processors. You can reduce the number of bit-
shift instructions needed by replacing the get() call in White's one_cycle()
with get_31(). This implies increasing the periodicity of the signal by a
factor 2.