-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathindex.html
432 lines (405 loc) · 33.5 KB
/
index.html
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
<!DOCTYPE html>
<html>
<head>
<title>Geraint's JSFX effects</title>
<style>
body {
font-family: Geneva, Tahoma, Verdana, Segoe, sans-serif;
font-size: 14px;
background-color: #784;
color: #FFF;
}
@media only screen and (min-width: 800px) {
body {
background-image: url('style/background-4592-3488.jpg');
background-size: cover;
background-attachment: fixed;
}
}
@media only screen and (min-width: 800px) and (max-width: 2500px) and (max-height: 1800px) {
body {
background-image: url('style/background-2000-1502.jpg');
background-size: cover;
background-attachment: fixed;
}
}
a[href] {
color: #258;
text-decoration: none;
}
a[href]:hover {
color: #024;
text-decoration: underline;
}
p {
margin: 1em 0em;
}
img {
display: block;
max-width: 100%;
max-height: 50vh;
margin: 0 auto;
text-align: center;
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 10px;
}
.reapack-package-with-links img {
max-width: 450px;
}
#readme, #nav, .reapack-package {
position: relative;
border-radius: 10px;
background-color: #F2F2F2;
background-color: rgb(255, 255, 255, 0.92);
color: #222;
max-width: 700px;
margin: 1.2em auto;
padding: 1em;
padding-top: 2em;
box-shadow: 0px 0px 100px #FFF inset, 0px 0px 100px #FFF inset, 0px 2px 20px rgba(0, 0, 0, 0.3), 0px 3px 3px rgba(0, 0, 0, 0.1);
padding-bottom: 0.1em;
}
#readme {
border-radius: 33px 33px 10px 10px;
padding-top: 5em;
}
#nav {
padding-top: 3em;
}
#nav h1 {
background-color: transparent;
box-shadow: none;
font-size: 1.3em;
font-style: italic;
font-weight: normal;
line-height: 2em;
}
#readme h1 {
font-size: 2em;
background-color: #000;
border-radius: 30px 30px 0 0;
padding: 0.5em 0;
color: #FFF;
text-shadow: 0px 1px 1px rgba(0, 0, 0, 1), 0px 0px 1px rgba(0, 0, 0, 1), 0px 2px 3px rgba(192, 255, 128, 0.7);
border: 1px solid rgba(255, 255, 255, 0.1);
border-bottom: 2px solid #FFF;
}
h1, h2, h3 {
font-family: "Century Gothic", CenturyGothic, AppleGothic, sans-serif;
text-align: center;
margin-bottom: 0;
line-height: 40px;
}
h1 {
position: absolute;
top: 0;
left: 0;
width: 100%;
font-size: 1.7em;
line-height: 1.5em;
border-radius: 10px;
background-color: #FFF;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
margin: 0;
}
h2 {
font-size: 1.5em;
}
h3 {
text-align: left;
font-size: 1.2em;
margin: 0;
padding: 0;
}
.reapack-nav ul, ul.reapack-nav {
margin: 0;
padding: 1em auto;
}
.reapack-nav li {
padding: 0.3em;
}
.reapack-links {
position: relative;
display: block;
margin-top: 5em;
float: right;
z-index: 1;
width: 200px;
margin: 1em;
text-align: center;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}
@media (max-width: 700px) {
.reapack-links {
float: none;
width: auto;
}
}
.reapack-links audio, .reapack-links a {
display: block;
width: 100%;
border: 1px solid rgba(0, 0, 0, 0.1);
border-bottom: none;
padding: 0;
line-height: 2em;
background-color: #FFF;
}
.reapack-links a:hover {
background-color: #F4F8F0;
text-decoration: none;
}
</style>
</head>
<body>
<div id="readme">
<!--reapack:readme-->
<h1 id="geraint-s-jsfx-repository">Geraint's JSFX repository</h1>
<p>This is a collection of audio effects I have written in REAPER's JSFX language.</p>
<p>Download them from <a href="https://github.com/geraintluff/jsfx">GitHub</a>, or <a href="https://signalsmith-audio.co.uk/tmp/Geraint's%20JSFX.zip">as a ZIP file</a>, or on <a href="https://reapack.com/">ReaPack</a> by adding the repository: <a href="https://geraintluff.github.io/jsfx/index.xml">https://geraintluff.github.io/jsfx/index.xml</a></p>
<p>There's also a growing set of <a href="https://www.youtube.com/playlist?list=PLflIiXZOocKqgKexrkTxxtl6igGUWnpXK">video demos/tutorials</a>, although not all effects are covered (yet).</p>
<!--/reapack:readme-->
</div>
<div id="nav">
<h1>Effects</h1>
<!--reapack:nav-->
<!-- forum code:
[b]Synth[/b]
[list][*][url=https://geraintluff.github.io/jsfx#PadSynth]PadSynth[/url] - a synth that produces thick sounds, including per-note effects and modulators
[*][url=https://geraintluff.github.io/jsfx#Humonica]Humonica[/url] - harmoniser and synth
[*][url=https://geraintluff.github.io/jsfx#Hammer%20And%20Chord]Hammer And Chord[/url] - a polyphonic string resonator/synth
[*][url=https://geraintluff.github.io/jsfx#Soft-Bell]Soft-Bell[/url] - a synth that produces gentle bells and chimes
[*][url=https://geraintluff.github.io/jsfx#Learning%20Sampler]Learning Sampler[/url] - a basic sampler that records incoming audio and plays it back[/list]
[b]Delay[/b]
[list][*][url=https://geraintluff.github.io/jsfx#Atlantis%20Reverb]Atlantis Reverb[/url] - produces mellow spaces, and shimmering highlights
[*][url=https://geraintluff.github.io/jsfx#Echo-Cycles]Echo-Cycles[/url] - a delay effect where the feedback system moves echoes through the stereo field
[*][url=https://geraintluff.github.io/jsfx#Cross-Polyphonic-FM]Cross-Polyphonic-FM[/url] - MIDI-controlled frequency-modulation effect
[*][url=https://geraintluff.github.io/jsfx#Ripple]Ripple[/url] - Phaser-like sounds, endlessly ascending/descending
[*][url=https://geraintluff.github.io/jsfx#Spring-Box]Spring-Box[/url] - an echo/chorus effect
[*][url=https://geraintluff.github.io/jsfx#Stereo%20Alignment%20Delay]Stereo Alignment Delay[/url] - delay and phase/delay analysis (stereo channels, or between instances)
[*][url=https://geraintluff.github.io/jsfx#Vibrato]Vibrato[/url] - MIDI-note triggered vibrato[/list]
[b]Distortion[/b]
[list][*][url=https://geraintluff.github.io/jsfx#Bad%20Connection]Bad Connection[/url] - simulate poor connections by random volume variation, distortion, and a feedback delay line
[*][url=https://geraintluff.github.io/jsfx#Sandwich%20Amp]Sandwich Amp[/url] - distortion module with a before/after filter pair, width control and secondary input[/list]
[b]Utility[/b]
[list][*][url=https://geraintluff.github.io/jsfx#Spectrum%20Matcher]Spectrum Matcher[/url] - analyse the difference between an input and a model, and optionally correct with EQ
[*][url=https://geraintluff.github.io/jsfx#Smooth%20Limiter]Smooth Limiter[/url] - a limiter that aims to have the correction curve as smooth as possible
[*][url=https://geraintluff.github.io/jsfx#Panalysis]Panalysis[/url] - visualise and manipulate the stereo field of the audio
[*][url=https://geraintluff.github.io/jsfx#Piano%20Display]Piano Display[/url] - Displays MIDI notes as a scrolling piano roll
[*][url=https://geraintluff.github.io/jsfx#Vocoder]Vocoder[/url] - FFT-based vocoder[/list]
[b]MIDI[/b]
[list][*][url=https://geraintluff.github.io/jsfx#Droplets]Droplets[/url] - randomly play the notes of a chord
[*][url=https://geraintluff.github.io/jsfx#MIDI%20Gate]MIDI Gate[/url] - a velocity-sensitive MIDI-controlled gate. Audio passes through only when MIDI note is down (or up, in "mute" mode).
[*][url=https://geraintluff.github.io/jsfx#MIDI%20Harmony]MIDI Harmony[/url] - arpeggiator and auto-accompaniment plugin[/list]
[b]Pitch Correction[/b]
[list][*][url=https://geraintluff.github.io/jsfx#Warble]Warble[/url] - a basic pitch-editing effect[/list]
--><div class="reapack-nav"><h3>Synth</h3><ul><li><a href="#PadSynth">PadSynth</a> - a synth that produces thick sounds, including per-note effects and modulators
</li>
<li><a href="#Humonica">Humonica</a> - harmoniser and synth
</li>
<li><a href="#Hammer And Chord">Hammer And Chord</a> - a polyphonic string resonator/synth
</li>
<li><a href="#Soft-Bell">Soft-Bell</a> - a synth that produces gentle bells and chimes
</li>
<li><a href="#Learning Sampler">Learning Sampler</a> - a basic sampler that records incoming audio and plays it back
</li></ul>
<h3>Delay</h3><ul><li><a href="#Atlantis Reverb">Atlantis Reverb</a> - produces mellow spaces, and shimmering highlights
</li>
<li><a href="#Echo-Cycles">Echo-Cycles</a> - a delay effect where the feedback system moves echoes through the stereo field
</li>
<li><a href="#Cross-Polyphonic-FM">Cross-Polyphonic-FM</a> - MIDI-controlled frequency-modulation effect
</li>
<li><a href="#Ripple">Ripple</a> - Phaser-like sounds, endlessly ascending/descending
</li>
<li><a href="#Spring-Box">Spring-Box</a> - an echo/chorus effect
</li>
<li><a href="#Stereo Alignment Delay">Stereo Alignment Delay</a> - delay and phase/delay analysis (stereo channels, or between instances)
</li>
<li><a href="#Vibrato">Vibrato</a> - MIDI-note triggered vibrato
</li></ul>
<h3>Distortion</h3><ul><li><a href="#Bad Connection">Bad Connection</a> - simulate poor connections by random volume variation, distortion, and a feedback delay line
</li>
<li><a href="#Sandwich Amp">Sandwich Amp</a> - distortion module with a before/after filter pair, width control and secondary input
</li></ul>
<h3>Utility</h3><ul><li><a href="#Spectrum Matcher">Spectrum Matcher</a> - analyse the difference between an input and a model, and optionally correct with EQ
</li>
<li><a href="#Smooth Limiter">Smooth Limiter</a> - a limiter that aims to have the correction curve as smooth as possible
</li>
<li><a href="#Panalysis">Panalysis</a> - visualise and manipulate the stereo field of the audio
</li>
<li><a href="#Piano Display">Piano Display</a> - Displays MIDI notes as a scrolling piano roll
</li>
<li><a href="#Vocoder">Vocoder</a> - FFT-based vocoder
</li></ul>
<h3>MIDI</h3><ul><li><a href="#Droplets">Droplets</a> - randomly play the notes of a chord
</li>
<li><a href="#MIDI Gate">MIDI Gate</a> - a velocity-sensitive MIDI-controlled gate. Audio passes through only when MIDI note is down (or up, in "mute" mode).
</li>
<li><a href="#MIDI Harmony">MIDI Harmony</a> - arpeggiator and auto-accompaniment plugin
</li></ul>
<h3>Pitch Correction</h3><ul><li><a href="#Warble">Warble</a> - a basic pitch-editing effect
</li></ul></div>
<!--/reapack:nav-->
</div>
<div id="packages">
<!--reapack:packages-->
<div class="reapack-package reapack-package-with-links" id="PadSynth"><div class="reapack-links"><audio controls preload="none" src="audio-demos/padsynth-takeoff.mp3"></audio><audio controls preload="none" src="audio-demos/padsynth.mp3"></audio><a href="https://www.youtube.com/watch?v=hgSqq-SgSjs&list=PLflIiXZOocKqgKexrkTxxtl6igGUWnpXK" target="_blank">YouTube</a></div><h1 id="padsynth">PadSynth</h1>
<p>This is a synth that specialises in smooth and thick sounds, with a bank of effects and assignable modulators that are calculated per-note. (<a href="audio-demos/padsynth.mp3">audio demo</a>, <a href="https://soundcloud.com/geraintluff/sets/padsynth-demo-tracks-2/s-xUWj6">additional audio demos</a>)</p>
<p>You can find more information and demos for this synth on its <a href="https://github.com/geraintluff/jsfx-pad-synth">main project page</a>.</p>
<p><img src="doc/images/PadSynth.png" alt="screenshot"></p>
<p>The per-note effects can re-ordered and renamed, and the modulators can modulate any later effect in the chain, including other modulators.</p>
<p><img src="doc/images/PadSynth2.png" alt="screenshot"></p>
</div>
<div class="reapack-package reapack-package-with-links" id="Humonica"><div class="reapack-links"><audio controls preload="none" src="audio-demos/humonica-choir.mp3"></audio><audio controls preload="none" src="audio-demos/humonica-funk.mp3"></audio><audio controls preload="none" src="audio-demos/humonica-legato.mp3"></audio><audio controls preload="none" src="audio-demos/humonica-sweeps.mp3"></audio><a href="https://www.youtube.com/watch?v=eTiwH886nAc&list=PLflIiXZOocKqgKexrkTxxtl6igGUWnpXK" target="_blank">YouTube</a></div><h1 id="humonica">Humonica</h1>
<p>This effect is anywhere between a vocoder and a synth with sharp filter-sweeps.</p>
<p>It can use input audio for its timbre to act as a vocoder ("audio" mode) or use a spectrum which you can draw precisely with the mouse, allowing extremely sharp cutoffs. You can shift this timbre up or down based on pitch, velocity, or a per-note envelope ("sweep").</p>
<p><img src="doc/images/Humonica.png" alt="screenshot"></p>
<p>In "audio" mode, you can control how much audio is used to calculate the timbre (window) and how often (overlap). There is a zero-latency mode for live performance, and a latency-compensated one. The "Volume" section acts like a basic compressor - turn both dials to 0 to disable.</p>
<p>The "fixed" mode lets you draw the spectrum for a single pulse of the oscillator using the mouse. Shift-click lets you draw straight lines.</p>
</div>
<div class="reapack-package reapack-package-with-links" id="Hammer And Chord"><div class="reapack-links"><audio controls preload="none" src="audio-demos/Hammer And Chord detune demo.mp3"></audio><audio controls preload="none" src="audio-demos/Hammer And Chord resonator demo.mp3"></audio><audio controls preload="none" src="audio-demos/Hammer And Chord ringmod demo.mp3"></audio><audio controls preload="none" src="audio-demos/hammer-and-chord-expressive.mp3"></audio><audio controls preload="none" src="audio-demos/hammer-and-chord-legato.mp3"></audio><audio controls preload="none" src="audio-demos/hammer-and-chord.mp3"></audio><a href="https://www.youtube.com/watch?v=0MmKuW2nEkk&list=PLflIiXZOocKqgKexrkTxxtl6igGUWnpXK" target="_blank">YouTube</a><a href="https://www.youtube.com/watch?v=E_3ILfZsrs4&list=PLflIiXZOocKqgKexrkTxxtl6igGUWnpXK" target="_blank">YouTube</a></div><h1 id="hammer-and-chord">Hammer And Chord</h1>
<p>This effect is a polyphonic string resonator. It can provide its own impulse (to act as a synth) as well as resonating the incoming audio (e.g. a drum loop). (<a href="audio-demos/hammer-and-chord.mp3">audio demo</a>)</p>
<p><img src="doc/images/Hammer and Chord.png" alt="screenshot"></p>
<p>It has two resonators for each note (left and right) and they can be detuned (<a href="audio-demos/Hammer And Chord detune demo.mp3">audio demo</a>).</p>
<p>If your input audio is tonal (e.g. speech) and those frequencies are coming through, the "de-tonal" setting puts a ring-modulator before each resonator to make it atonal. (<a href="audio-demos/Hammer And Chord ringmod demo.mp3">audio demo</a>)</p>
</div>
<div class="reapack-package reapack-package-with-links" id="Atlantis Reverb"><div class="reapack-links"><audio controls preload="none" src="audio-demos/atlantis-reverb-1-piano-sparkle.mp3"></audio><audio controls preload="none" src="audio-demos/atlantis-reverb-2-epic-swell.mp3"></audio><audio controls preload="none" src="audio-demos/atlantis-reverb-3-gentle-bells.mp3"></audio><a href="https://www.youtube.com/watch?v=Os7b_yzYZlw&list=PLflIiXZOocKqgKexrkTxxtl6igGUWnpXK" target="_blank">YouTube</a></div><h1 id="atlantis-reverb">Atlantis Reverb</h1>
<p>This is a reverb that specialises in long ambient sounds and shimmering textures.</p>
<p><img src="doc/images/Atlantis-Reverb.png" alt="screenshot"></p>
<p>The "grain" size controls the frequency/time resolution. Longer grains will give smooth and pure tones, which shorter ones will result in a thicker and more wavering result.</p>
<p>The "shimmer" control slowly morphs the reverb up by octaves over time, adding a bright and ethereal sound to the reverb. The "fifths" dial lets you add some octave-and-a-fifth shifts in there as well, which may help the shimmer sound smoother, but may not sound as clean.</p>
<p>The "release" controls in the decay section allow you to move the current echoes over to a second, faster-decaying reverb line. This can stop things getting as muddy when changing chord. It can be triggered by mouse, automation, or MIDI controller #64 (if enabled).</p>
<p>If the quieter bits sound great, but the louder sections sound harsh, the "input comp" section can help you tame the peaks.</p>
</div>
<div class="reapack-package reapack-package-with-links" id="Echo-Cycles"><div class="reapack-links"><audio controls preload="none" src="audio-demos/Echo-Cycles.mp3"></audio><a href="https://www.youtube.com/watch?v=BZ-1z7IKYTs&list=PLflIiXZOocKqgKexrkTxxtl6igGUWnpXK" target="_blank">YouTube</a></div><h1 id="echo-cycles">Echo Cycles</h1>
<p>This is a feedback delay effect where the echoes move through the stereo space. (<a href="https://geraintluff.github.io/jsfx/audio-demos/Echo-Cycles.mp3">audio demo</a>)</p>
<p>This is not done using an LFO, it uses a feedback structure with three delay lines for two channels - this means that the stereo position of the echoes is independent, which is good for building up textures.</p>
<p><img src="doc/images/Echo-Cycles.png" alt="screenshot"></p>
</div>
<div class="reapack-package reapack-package-with-links" id="Bad Connection"><div class="reapack-links"><audio controls preload="none" src="audio-demos/bad-connection-chaos.mp3"></audio><audio controls preload="none" src="audio-demos/bad-connection-spring-box-glitch.mp3"></audio><a href="https://www.youtube.com/watch?v=pmjLZKVoBLo&list=PLflIiXZOocKqgKexrkTxxtl6igGUWnpXK" target="_blank">YouTube</a></div><h1 id="bad-connection">Bad Connection</h1>
<p>Bad Connection has three features:</p>
<ul>
<li>randomly change the audio between two volume levels. It can be used to imitate <a href="audio-demos/Bad Connection/radio-dropout.mp3">dodgy radios</a> or <a href="audio-demos/Bad Connection/cpu-overload.mp3">glitchy CPU overloads</a>.</li>
<li>apply volume-independent distortion (response curve has logarithmic ripples)</li>
<li>tempo-dependent feedback delay line, and the feedback line includes the <a href="audio-demos/bad-connection-3-16-degrade.mp3">distortion</a> and <a href="audio-demos/bad-connection-4-16-clean-dissolve.mp3">volume variation</a>. It can create clean sounds, <a href="audio-demos/bad-connection-chaos.mp3">destruction</a>, or <a href="audio-demos/bad-connection-spring-box-glitch.mp3">glitchy textures</a>) (demo includes Spring Box for reverb).</li>
</ul>
<p><img src="doc/images/Bad Connection.png" alt="screenshot"></p>
</div>
<div class="reapack-package reapack-package-with-links" id="Spectrum Matcher"><div class="reapack-links"><a href="https://www.youtube.com/watch?v=QLh6b88OvFs&list=PLflIiXZOocKqgKexrkTxxtl6igGUWnpXK" target="_blank">YouTube</a></div><h1 id="spectrum-matcher">Spectrum Matcher</h1>
<p>Spectrum Matcher is a tool for comparing the spectrum/timbre of an input against a model, and optionally applying a correction filter.</p>
<p>The bottom half of the screen shows the short-term spectrum (green), the long-term spectrum (yellow), and the long-term reference spectrum (blue).</p>
<p>The top half of the screen shows the current difference between the long-term spectrums (red). If correction is enabled, it shows the correction curve (white) and phase (dotted brown). If the correction is frozen, it shows the frozen correction values in blue.</p>
<p>To disable correction and re-start/clear the long-term spectrum measurements, hit "Reset". To start correction, hit "Correct". Once correction is enabled, hit "Freeze" to set or update the fixed correction values.</p>
<p><img src="Spectrum Matcher 1.png" alt="screenshot"></p>
<p>It can learn new models from the incoming audio, and save this as a preset for later use:</p>
<p><img src="Spectrum Matcher 2.png" alt="screenshot"></p>
<p>This effect is quite CPU-intensive, so if you're not using it it could be good to bypass it.</p>
</div>
<div class="reapack-package reapack-package-with-links" id="Soft-Bell"><div class="reapack-links"><audio controls preload="none" src="audio-demos/Soft-Bell-1.mp3"></audio><audio controls preload="none" src="audio-demos/Soft-Bell-2.mp3"></audio><audio controls preload="none" src="audio-demos/Soft-Bell-3.mp3"></audio><audio controls preload="none" src="audio-demos/Soft Bell music.mp3"></audio></div><h1 id="soft-bell">Soft Bell</h1>
<p>Soft Bell is a synth that produces chime-like tones, with individually specified harmonics.</p>
<p>It can also be used with audio - it can produce interesting inharmonic sounds from musical input, particularly if you turn the "tonality" dial down.</p>
<p><img src="doc/images/Soft-Bell.png" alt="screenshot"></p>
</div>
<div class="reapack-package reapack-package-with-links" id="Cross-Polyphonic-FM"><div class="reapack-links"><audio controls preload="none" src="audio-demos/Cross-Polyphonic-FM.mp3"></audio></div><h1 id="cross-polyphonic-fm">Cross-Polyphonic FM</h1>
<p>This effect is a MIDI-controlled frequency-modulator effect. It can be used to add character to an existing sound (such as a different synth).</p>
<p>Multiple MIDI notes produces multiple modulation frequencies. The notes aren't processed separately - they are added together to form the modulation waveform. This means that different notes interact (slightly similar to distortion).</p>
<p><img src="doc/images/Cross-Polyphonic-FM.png" alt="screenshot"></p>
</div>
<div class="reapack-package" id="Smooth Limiter"><h1 id="smooth-limiter">Smooth Limiter</h1>
<p>This is a brick-wall limiter that aims to keep the correction curve smooth while remaining responsive.</p>
<p>It will recover completely from any peak in a fixed amount of time. Both the attack and release follow a curve that is similar to a sinusoidal segment (<code>1 + cos(x)</code>), with the goal of reducing cross-modulation.</p>
<p><img src="Smooth Limiter.png" alt="screenshot"></p>
<p>The "distortion" parameter changes the correction mode - at 0%, the correction is applied by scaling the output signal. At 100%, the correction is applied using a non-linear distortion (smooth, not a hard-clip), which can sound good for some applications such as drums. The display in the bottom-left shows the current correction response.</p>
</div>
<div class="reapack-package reapack-package-with-links" id="Ripple"><div class="reapack-links"><audio controls preload="none" src="audio-demos/ripple-smooth.mp3"></audio><audio controls preload="none" src="audio-demos/ripple.mp3"></audio></div><h1 id="ripple">Ripple</h1>
<p>Ripple is a phaser-like effect which continually rises or falls.</p>
<p>The filters fade out (go to 0dB) at some definable limit, so you can modulate some areas of the spectrum while leaving others in tact.</p>
<p>It has a variable number of filters (up to 20), stereo phase-offset and a tempo-synced LFO.</p>
<p><img src="doc/images/Ripple.png" alt="screenshot"></p>
</div>
<div class="reapack-package reapack-package-with-links" id="Droplets"><div class="reapack-links"><audio controls preload="none" src="audio-demos/Droplets-01.mp3"></audio><audio controls preload="none" src="audio-demos/Droplets-2.mp3"></audio></div><h1 id="droplets">Droplets</h1>
<p>This effect re-plays the notes of a chord in a random fashion. Each MIDI note in the input is triggered randomly over time.</p>
<p>You can control the retriggering rate, and how much this is affected by velocity or the number of current notes ("Independence"). You can also allow it to transpose the input up/down octaves, to move it to a target note range. This (like everything else) is automatable, so your music can float up and down in pitch.</p>
<p><img src="doc/images/Droplets.png" alt="screenshot"></p>
<p>"Regularity" prevents notes from playing too soon after their previous instance - high settings produce patterns which evolve slowly over time. "Kickstart" will play incoming notes immediately, with the specified probability. "Quantise" lets you specify that notes can only occur near beat boundaries.</p>
<p>You can let the final notes ring on after the input ("Release"), and change the velocity randomisation curve, add lookahead to shift the input forward, and set how it reacts to the sustain pedal (ignore it, use it, or use it but don't send it on).</p>
</div>
<div class="reapack-package" id="Learning Sampler"><h1 id="learning-sampler">Learning Sampler</h1>
<p>This sampler records samples from the incoming audio when in learning mode (selected by a controller switch), and plays them back when in playback mode.</p>
<p>To record the samples, set the appropriate controller to a value of 64 or above. While this controller is down, when you play a MIDI note the sampler will remember the start/end positions in the buffer. When you have recorded all the samples, reset the controller to 0, and it will enter playback mode.</p>
<p><img src="Learning Sampler.png" alt="screenshot"></p>
<p>Samples are scaled according to velocity - if you record at velocity 100 and then play back at velocity 110, the output will be louder than the original input.</p>
<p>It currently does handle sample-rate changes.</p>
</div>
<div class="reapack-package reapack-package-with-links" id="MIDI Gate"><div class="reapack-links"><audio controls preload="none" src="audio-demos/midi-gate-fast.mp3"></audio><audio controls preload="none" src="audio-demos/midi-gate.mp3"></audio></div><h1 id="midi-gate">MIDI Gate</h1>
<p>This effect is a simple MIDI-controlled gate. (<a href="audio-demos/midi-gate.mp3">audio demo</a>)</p>
<p>In "gate" mode, when a MIDI note is down (any MIDI note), the audio is passed through. In "mute" mode, audio passes through when no notes are held down.</p>
<p>The "Max Velocity" control sets the velocity that counts as "down fully". Values between 0 and this value result in a partially opened/closed state. Multiple notes add their velocities together - so two notes with velocity 50 are equivalent to one note with velocity 100.</p>
<p><img src="MIDI Gate.png" alt="screenshot"></p>
<p>You can also use it with a fast-paced pattern to produce an effect similar to Bad Connection's random gain variation. (<a href="https://geraintluff.github.io/jsfx/audio-demos/midi-gate-fast.mp3">audio demo</a>)</p>
</div>
<div class="reapack-package" id="MIDI Harmony"><h1 id="midi-harmony">MIDI Harmony</h1>
<p>This effect shifts MIDI notes up or down by octaves, to fit within a target range. This can be used to fold whatever chord is being played by some other instrument into a particular region (e.g. one octave around Middle C).</p>
<p>It has a single-note and a chord mode. It also has a built-in sequencer, which can be used as an arpeggiator (so it will play a pattern, but only using octave-shifted notes that you are already holding down).</p>
<p><img src="MIDI Harmony.png" alt="screenshot"></p>
<p>It also has a MIDI-input mode - this way, instead of the target region or note being fixed (e.g. "one octave around Middle C") it is defined by a second input on a different MIDI channel (channel 16 by default).</p>
<p>This lets you very quickly take one MIDI input, and re-cast it into a different scale or a different chord.</p>
</div>
<div class="reapack-package" id="Panalysis"><h1 id="panalysis">Panalysis</h1>
<p>This effect draws the incoming audio on a 2D plot, so you can visualise the stereo field. You can also alter the width/pan using the controls.</p>
<ul>
<li>Centre-panned (mono) sounds will draw vertically</li>
<li>Left-panned sounds will draw angled to the left, right-panned will draw to the right</li>
<li>If the L+R channels are independent, the graph will have no defined clear direction (may appear round)</li>
</ul>
<p><img src="doc/images/Panalysis.png" alt="screenshot"></p>
<p>It's possible to rotate the field such that hard-left or hard-right inputs will output "inside out" (opposite phase in both output channels). In this case, the Width dial will turn red - double-click the dial to reset it to the maximum "safe" width:</p>
<p><img src="doc/images/Panalysis-too-wide.png" alt="screenshot"></p>
</div>
<div class="reapack-package" id="Piano Display"><h1 id="piano-display">Piano Display</h1>
<p>This displays MIDI notes as a scrolling piano roll.</p>
<p>It was created as a nice way to display keyboard input when making demo videos.</p>
<p><img src="doc/images/Piano Display.png" alt="screenshot"></p>
</div>
<div class="reapack-package reapack-package-with-links" id="Sandwich Amp"><div class="reapack-links"><audio controls preload="none" src="audio-demos/sandwich-amp.mp3"></audio></div><h1 id="sandwich-amp">Sandwich Amp</h1>
<p>Sandwich Amp is a distortion effect with a set of paired filters on either side, to provide a range of timbres. (<a href="audio-demos/sandwich-amp.mp3">audio demo</a>)</p>
<p>The underlying distortion function is <code>tanh()</code> (which is a fairly "soft" distortion, as opposed to a hard clip), but it can be driven quite hard, and an offset can be added to get asymmetrical response.</p>
<p>The "width" parameter widens the sound before distortion and narrows it afterwards, so that the distortion sounds stable and central while preserving the stereo feel of the sound. Similarly, the "filter" section applies a filter before the distortion, and then applies the inverse filter afterwards, which can provide distinctive distortion timbres.</p>
<p>It is also possible to supply a secondary input to the effect (channels 3 and 4) - this audio is added in before the distortion, but then subtracted again afterwards.</p>
<p><img src="Sandwich Amp.png" alt="screenshot"></p>
</div>
<div class="reapack-package reapack-package-with-links" id="Spring-Box"><div class="reapack-links"><audio controls preload="none" src="audio-demos/spring-box.mp3"></audio><a href="https://www.youtube.com/watch?v=UqryhWXHbhA&list=PLflIiXZOocKqgKexrkTxxtl6igGUWnpXK" target="_blank">YouTube</a></div><h1 id="spring-box">Spring-Box</h1>
<p>Spring-Box is a chorus/echo effect based on a matrix of 4 delay lines feeding back into each other. The delay lines vary in length according to the chorus parameters, so you can create a range of sounds from choruses and ambiences to space-like reverb effects. (<a href="audio-demos/spring-box.mp3">audio demo</a>)</p>
<p>Early echoes can be suppressed to get a smoother sound (the "late bias" control), by using two parallel delay structures with different feedback ratios, and subtracting the results.</p>
<p><img src="Spring-Box.png" alt="screenshot"></p>
</div>
<div class="reapack-package" id="Stereo Alignment Delay"><h1 id="stereo-alignment-delay">Stereo Alignment Delay</h1>
<p>A tool to make small delays to individual channels, including a delay analyser.</p>
<p>Delay amount can be displayed in ms or samples. (It is stored in ms, so if you change sample rate then it will preserve delay length regardless of the display format).</p>
<p><img src="Stereo Alignment Delay.png" alt="screenshot"></p>
<p>The delay analyser detects when one channel is ahead/behind or out of phase with the other - this can be useful when trying to get phases to agree in a multi-mic setup.</p>
<p><img src="Stereo Alignment Delay analysis.png" alt="screenshot"></p>
</div>
<div class="reapack-package reapack-package-with-links" id="Vibrato"><div class="reapack-links"><audio controls preload="none" src="audio-demos/Vibrato-ReaSynth.mp3"></audio><audio controls preload="none" src="audio-demos/Vibrato.mp3"></audio></div><h1 id="vibrato">Vibrato</h1>
<p>This effect it adds vibrato, using MIDI notes to produce a more natural envelope (compared to a constant LFO). Each note resets the vibrato to zero, and it is slowly introduced.</p>
<p>This is most useful for adding vibrato to synths that don't have already have it - for example, <a href="audio-demos/Vibrato-ReaSynth.mp3">ReaSynth</a>.</p>
<p><img src="doc/images/Vibrato.png" alt="screenshot"></p>
<p>The "Lookahead" dial controls how much latency is added. With this at 0, sometimes the start of a note can sometimes be momentarily detuned because of ongoing vibrato. To prevent this completely, turn the dial to its maximum value (which scales according to the LFO Rate value).</p>
<p><em>(background by Tom Barrett on <a href="https://unsplash.com/photos/-bSucp2nUdQ">Unsplash</a>)</em></p>
</div>
<div class="reapack-package reapack-package-with-links" id="Vocoder"><div class="reapack-links"><audio controls preload="none" src="audio-demos/Vocoder-drums-voice-texture.mp3"></audio></div><h1 id="vocoder">Vocoder</h1>
<p>This is an FFT-based vocoder. It takes 4 channels (stereo main and aux), and alters the spectrum of the main input to match the aux input.</p>
<p><img src="doc/images/Vocoder.png" alt="screenshot"></p>
<p>Longer windows will better for low sounds in the main input, but will be less reactive. The "smoothing" dial averages the energy (from both inputs) over a short period, which can reduce growly artefacts.</p>
<p><em>(background by Umberto on <a href="https://unsplash.com/photos/jXd2FSvcRr8">Unsplash</a>)</em></p>
</div>
<div class="reapack-package reapack-package-with-links" id="Warble"><div class="reapack-links"><audio controls preload="none" src="audio-demos/warble-formant-mod.mp3"></audio><audio controls preload="none" src="audio-demos/warble-original.mp3"></audio><audio controls preload="none" src="audio-demos/warble-shifted.mp3"></audio><audio controls preload="none" src="audio-demos/warble-subtle.mp3"></audio></div><h1 id="warble">Warble</h1>
<p>Warble is a relatively basic pitch-editing plugin. It analyses incoming audio, stores and displays it on a zoomable graph (middle mouse and scroll wheel). (demo: <a href="audio-demos/warble-original.mp3">original</a>, <a href="audio-demos/warble-subtle.mp3">minor correction</a>, <a href="audio-demos/warble-shifted.mp3">major alterations</a>, <a href="audio-demos/warble-formant-mod.mp3">formant LFO</a>)</p>
<p>There are three tools: nudge, erase and smooth. You use these tools with the mouse (left/right buttons do different things) to define how much it should be shifted. The current change amount is displayed in red.</p>
<p><img src="Warble.png" alt="screenshot"></p>
<p>The formant-correction on the shifting algorithm isn't perfect, so major corrections (e.g. 5 semitones or more) won't sound completely natural.</p>
<p>It doesn't (currently) separate notes from each other, or support automatic correction. I haven't figured out how to make "undo" work properly, so that's something to look at in the future.</p>
</div>
<!--/reapack:packages-->
</div>
</body>
</html>