surgefx-dualdelay 0.2.12-alpha.0

surge synthesizer -- dual delay effect
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
Rust crate for a dual delay effect in the Surge synthesizer system
---
The `surgefx-dualdelay` crate provides a dual
delay effect, which is one of the subcomponents of
the Surge synthesizer system. This effect is
designed to create stereo delay lines with
independent control over various parameters, such
as delay time, feedback, crossfeed, filtering, and
panning. The crate contains the necessary
functions and structures to initialize, process,
and control the dual delay effect.

The mathematical foundation of the dual delay
effect involves the manipulation of discrete-time
audio signals. The effect uses two separate delay
lines to process the left and right channels
independently. Given an input signal 𝑥(𝑛), the
output signal 𝑦(𝑛) for each channel is computed
using a combination of delay time 𝑇, feedback 𝐹,
crossfeed 𝐶, filtering 𝐻(𝑧), and panning 𝑃:

𝑦(𝑛) = 𝑃(𝑥(𝑛) + 𝐶(𝑥(𝑛 - 𝑇) + 𝐹𝑦(𝑛 - 𝑇))) * 𝐻(𝑧)

Tokens and their mathematical associations:

- `control_group`, `control_type`,
  `default_value`, `max_value`, `min_value`,
  `modulateable`, `moverate`, `value_type`: These
  tokens are used to define and control the
  parameters of the dual delay effect, such as
  delay time, feedback, crossfeed, filtering, and
  panning.

- `update`: This function updates the internal
  state of the dual delay effect, recalculating
  delay times, filter coefficients, and other
  parameters based on the current control values.

- `do_dualdelay_block`: This function processes
  the input audio signal using the dual delay
  effect, computing the output signal according to
  the current delay times, feedback, crossfeed,
  filtering, and panning settings.

- `process_time`: This function processes the
  delay times for each channel, ensuring that they
  are within the allowed range and taking any
  modulation or tempo-syncing into account.

- `dual_delay_smoke`, `clear_buffers`, `init`,
  `instantize_all`, `clear_scratch_buffers`: These
  functions are used to initialize and reset the
  internal state of the dual delay effect,
  including clearing audio buffers, setting
  initial parameter values, and instantiating
  filters.

- `do_crossfeed`, `do_feedback`, `do_filters`,
  `do_mid_side`, `do_mix`, `do_pan`,
  `do_softclip`: These functions are responsible
  for implementing the various processing stages
  of the dual delay effect, such as crossfeeding
  between channels, applying feedback, filtering
  the delayed signal, and adjusting the stereo
  image.

- `maybe_instantize_all`, `process`,
  `process_only_control`, `update_wpos`: These
  functions handle various aspects of processing
  the audio signal, such as updating the write
  position in the delay buffer and applying
  parameter changes in real-time.

- `DualDelay`, `dualdelay_set_buffer`: These
  structures and functions define the main dual
  delay effect object and its associated methods,
  including setting the audio buffer to be used
  for processing.

22> thanks! could you show me some in depth block
diagrams about how the subcomponents of this
effect fit together?

Certainly! Here's an in-depth block diagram
illustrating the signal flow and subcomponents of
a dual delay effect:

```
Input Signal (L, R) ─┐
                     ├─┬──[Panner]───┐
                     │ ├─[Crossfeed]─┼─┐
                     │ └─[Feedback]──┘ │
                     │                 ├─[Delay Line L]─┬─[Filter L]─┬─[Softclip L]─┬─[Output Gain L]──┐
                     ├─────────────────┤                 │            │             │                  ├─ Output Signal (L, R)
                     │                 ├─[Delay Line R]─┼─[Filter R]─┼─[Softclip R]─┼─[Output Gain R]──┘
                     ├─┬──[Panner]───┐ │                 │            │             │
                     │ ├─[Crossfeed]─┼─┘
                     └─┴─[Feedback]──┘
```

1. **Input Signal (L, R)**: The left and right
   channels of the input signal enter the dual
   delay effect.

2. **Panner**: The panner adjusts the stereo
   balance of the input signal before it is sent
   to the delay lines.

3. **Crossfeed**: The crossfeed subcomponent takes
   a portion of the input signal from one channel
   and adds it to the other channel, creating
   a more complex stereo image. The amount of
   crossfeed can be controlled by the user.

4. **Feedback**: The feedback subcomponent takes
   a portion of the delayed signal from the output
   of each delay line and feeds it back into the
   input of the corresponding delay line, creating
   a repeating echo effect. The amount of feedback
   can be controlled by the user.

5. **Delay Line L & R**: These are the main delay
   lines for the left and right channels. They
   store the audio signal and provide
   a time-varying delay, controlled by the delay
   time parameter.

6. **Filter L & R**: After the delay lines, the
   signal passes through filters for each
   channel. These filters can be used to shape the
   frequency content of the delayed signal, such
   as low-pass, high-pass, or band-pass
   filters. The filter settings can be controlled
   by the user.

7. **Softclip L & R**: The softclip subcomponents
   apply a soft-clipping non-linear function to
   the delayed and filtered signal, adding
   harmonic distortion and preventing excessive
   peaks in the output signal.

8. **Output Gain L & R**: The output gain stages
   adjust the overall level of the delayed signal
   before it is combined with the dry signal and
   sent to the output.

9. **Output Signal (L, R)**: The processed left
   and right channels of the delayed signal are
   combined with the original input signal,
   creating the final output signal with the
   desired dual delay effect.

The diagram above shows the main subcomponents of
a dual delay effect and how they are connected to
create the desired stereo delay processing. The
specific implementations of these subcomponents
may vary depending on the desired sound and
functionality, but the general signal flow remains
the same.

23> thanks -- how are these modules parametrized?
which handles can the user adjust at runtime?

In a dual delay effect, there are several
parameters that users can adjust to control the
sound and behavior of the effect. Here is a list
of common parameters that can be adjusted at
runtime:

1. **Delay Time (L & R)**: The delay time
   determines the length of the delay lines for
   each channel. Users can set different delay
   times for the left and right channels to create
   a more complex stereo image. In some
   implementations, users can also synchronize the
   delay times to the tempo of the music.

2. **Feedback (L & R)**: The feedback parameter
   controls the amount of signal fed back from the
   output of each delay line to its input. By
   adjusting the feedback, users can create more
   or fewer repeats of the delayed signal.

3. **Crossfeed**: The crossfeed parameter controls
   the amount of signal from one channel that is
   added to the other channel before entering the
   delay lines. This can be used to create a more
   complex and spacious stereo image.

4. **Filter (L & R)**: The filter parameters
   control the characteristics of the filters
   applied to the output of each delay line. Users
   can adjust the filter type (low-pass,
   high-pass, band-pass, etc.), the filter cutoff
   frequency, and the filter resonance.

5. **Soft Clipping (L & R)**: The soft clipping
   parameters control the amount of distortion
   applied to the delayed signal after
   filtering. Users can adjust the level of soft
   clipping to add warmth or saturation to the
   sound.

6. **Output Gain (L & R)**: The output gain
   parameters control the level of the processed
   delayed signal before it is combined with the
   dry signal and sent to the output. This can be
   used to balance the levels of the dry and wet
   signals.

7. **Dry/Wet Mix**: The dry/wet mix parameter
   controls the balance between the unprocessed
   input signal (dry) and the processed delayed
   signal (wet). Users can adjust this parameter
   to achieve the desired blend of the original
   and delayed signals.

8. **Panning (L & R)**: The panning parameters
   control the stereo positioning of the input
   signal before it enters the delay lines. Users
   can adjust the panning to create a wider or
   narrower stereo image.

These parameters allow users to shape the sound
and behavior of the dual delay effect to suit
their needs. In a well-designed effect
implementation, these parameters can be adjusted
in real-time, providing users with a high degree
of control and flexibility.

24> could you describe a dozen different
descriptions of effects produced by this processor
at different parameter settings?

Certainly! Here are twelve different descriptions
of effects produced by the dual delay processor
with different parameter settings:

1. **Basic Stereo Delay**: Set equal delay times
   for both left and right channels, moderate
   feedback, and a balanced dry/wet mix. This
   results in a simple stereo echo effect, with
   the delay repeats equally spaced in both
   channels.

2. **Ping Pong Delay**: Set different delay times
   for the left and right channels and high
   crossfeed. The delayed signal will bounce back
   and forth between the left and right speakers,
   creating a ping pong effect.

3. **Slapback Echo**: Set short delay times for
   both channels, low feedback, and a moderate
   dry/wet mix. This creates a slapback echo,
   often used in rockabilly and early rock 'n'
   roll music.

4. **Ambient Delay**: Set long delay times, high
   feedback, low-pass filters with a low cutoff
   frequency, and a high wet mix. This creates
   a spacious, atmospheric effect, with the delays
   blending into the background.

5. **Dub-style Delay**: Set medium to long delay
   times, high feedback, low-pass filters with
   a moderate cutoff frequency, and a high wet
   mix. This results in a warm, analog-style delay
   effect commonly used in dub and reggae music.

6. **Shimmer Delay**: Set long delay times, high
   feedback, and apply a pitch-shifting effect
   (e.g., one octave up) to the feedback
   loop. This creates a shimmering, ethereal
   sound, often used in ambient and experimental
   music.

7. **Filtered Rhythmic Delay**: Set different
   delay times for the left and right channels,
   with the delay times synced to the tempo of the
   music. Use band-pass filters with a narrow
   bandwidth and modulate the filter cutoff
   frequency in time with the music. This creates
   a rhythmic, pulsating delay effect.

8. **Distorted Delay**: Set medium delay times,
   moderate feedback, and high soft clipping
   levels. This creates a delay effect with
   a gritty, distorted character.

9. **Spatial Widener**: Set very short delay times
   (e.g., 10-30 ms) for both channels, low
   feedback, and a moderate dry/wet mix. This
   creates a subtle widening effect, enhancing the
   stereo image of the input signal.

10. **Reverse Delay**: Reverse the delayed signal
    before feeding it back into the input. This
    creates a reverse delay effect, often used for
    experimental or psychedelic sounds.

11. **Chorus-like Delay**: Set very short delay
    times (e.g., 20-50 ms), low feedback, and
    modulate the delay time with a slow LFO. This
    creates a chorus-like effect, adding depth and
    movement to the sound.

12. **Freeze Delay**: Set very long delay times,
    maximum feedback, and a high wet mix. By
    momentarily sending a signal into the delay
    lines, you can create a "frozen" sound that
    sustains indefinitely, creating a drone or
    pad-like effect.

These are just a few examples of the wide range of
effects that can be achieved using a dual delay
processor. By adjusting the parameters and
combining different settings, you can create an
almost limitless variety of delay-based
soundscapes.

25> thanks, i like these descriptions -- could you
do a dozen more?

Sure! Here are twelve more descriptions of effects
produced by the dual delay processor with
different parameter settings:

1. **Glitchy Delay**: Set short, unsynchronized
   delay times for both channels, high feedback,
   and apply a bitcrusher or sample rate reducer
   to the feedback loop. This creates a glitchy,
   lo-fi delay effect.

2. **Multi-Tap Delay**: Configure multiple delay
   lines with different delay times and feedback
   levels for each channel, and mix them
   together. This creates a complex, multi-tap
   delay effect that can add texture and depth to
   the sound.

3. **Gated Delay**: Apply a noise gate or expander
   to the delayed signal, with a threshold set to
   only allow louder delay repeats to pass
   through. This creates a dynamic delay effect
   where the echoes are only audible when the
   input signal is loud enough.

4. **Swirling Delay**: Modulate the delay time,
   filter cutoff frequency, and/or panning of the
   delay lines with different LFOs or envelope
   followers. This creates a swirling, evolving
   delay effect with a lot of movement.

5. **Granular Delay**: Set very short delay times
   (e.g., 1-10 ms), high feedback, and use
   a granular synthesis engine to process the
   delay lines. This creates a granular delay
   effect, where the input signal is broken into
   small grains and rearranged in time and space.

6. **Dynamic Delay**: Use an envelope follower or
   sidechain compression to control the delay
   level or feedback based on the input signal's
   amplitude. This creates a dynamic delay effect,
   where the echoes become more prominent when the
   input signal is quieter.

7. **Pitch-Shifting Delay**: Apply different
   pitch-shifting intervals to the left and right
   delay lines, such as a perfect fifth or an
   octave. This creates a harmonically rich delay
   effect, adding melodic or harmonic interest to
   the sound.

8. **Resonant Delay**: Set high feedback levels
   and use resonant low-pass or band-pass filters
   in the feedback loop. This creates a resonant
   delay effect, where the echoes emphasize
   specific frequencies and produce a ringing or
   resonant sound.

9. **Flanger-like Delay**: Set very short delay
   times (e.g., 5-20 ms), low feedback, and
   modulate the delay time with a slow LFO. This
   creates a flanger-like effect, with
   a characteristic "whooshing" or "jet plane"
   sound.

10. **Ducking Delay**: Use a sidechain compressor
    or envelope follower to reduce the delay level
    or mix when the input signal is playing. This
    creates a ducking delay effect, where the
    echoes are pushed back in the mix when the
    input signal is present, helping to maintain
    clarity and prevent clutter.

11. **Diffused Delay**: Use multiple delay lines
    with slightly different delay times and
    feedback levels, and process the outputs with
    a diffusion network or reverb algorithm. This
    creates a diffused delay effect, where the
    echoes are smeared and blended together,
    producing a more diffuse and spacious sound.

12. **Comb Filter Delay**: Set very short delay
    times (e.g., 1-10 ms), high feedback, and no
    filtering. This creates a comb filter delay
    effect, where the input signal is combined
    with a slightly delayed copy, creating
    a series of notches in the frequency spectrum
    and adding a metallic or "tuned" quality to
    the sound.

These additional examples showcase the versatility
of a dual delay processor. By experimenting with
different parameter settings and combinations, you
can create a vast array of unique and interesting
delay effects.

26> how do we prevent unwanted artifacts when
engineering this signal processor?

To prevent unwanted artifacts when engineering
a dual delay signal processor, there are several
aspects you need to consider and address:

1. **Aliasing**: When working with digital signal
   processing, aliasing can occur due to the
   discrete nature of the process. To minimize
   aliasing, use oversampling (processing the
   signal at a higher sample rate) and apply
   anti-aliasing filters before downsampling back
   to the original sample rate.

2. **Noise**: Ensure that the input signal is
   clean and free from noise, as any noise present
   will be amplified by the delay process,
   especially with high feedback settings. You can
   use noise reduction techniques or low-pass
   filters to remove unwanted noise from the input
   signal.

3. **Feedback instability**: When using high
   feedback levels, the delay can quickly become
   unstable and produce unwanted artifacts or
   oscillations. To prevent this, apply a limiter
   or soft-clipper in the feedback loop to control
   the amplitude and ensure stability.

4. **Phase issues**: When using multiple delay
   lines, phase issues can arise, causing
   cancellation or reinforcement of certain
   frequencies. To minimize phase issues, use
   different delay times for each channel or apply
   all-pass filters to adjust the phase response
   without affecting the amplitude.

5. **Clicks and pops**: Abrupt changes in delay
   times or parameter settings can cause clicks
   and pops in the output signal. To prevent this,
   use interpolation, crossfading, or smoothing
   techniques to ensure smooth transitions between
   parameter changes.

6. **Denormalization**: In digital signal
   processing, very small floating-point numbers
   can cause performance issues and create
   artifacts. To prevent this, use denormalization
   techniques, such as adding a small offset to
   the signal or using specialized functions that
   handle denormal numbers efficiently.

7. **Latency**: When designing a real-time audio
   processor, it's crucial to minimize latency to
   ensure a responsive and natural-sounding
   effect. Optimize your code for performance and,
   if necessary, use parallel processing or
   look-ahead techniques to reduce latency.

8. **Parameter modulation**: When modulating
   parameters, such as delay time or filter cutoff
   frequency, use smooth modulation sources like
   low-frequency oscillators (LFOs) or
   envelopes. Abrupt changes in modulation can
   cause artifacts and produce unnatural-sounding
   results.

9. **Filter design**: When using filters in the
   delay processor, ensure that they are designed
   to minimize artifacts like ringing, aliasing,
   or phase distortion. Choose appropriate filter
   types (e.g., Butterworth, Chebyshev, or
   elliptic filters) based on the desired
   characteristics and performance requirements.

10. **Signal headroom**: Ensure that there is
    enough headroom in the processing chain to
    prevent clipping and distortion. Use gain
    staging techniques to maintain an appropriate
    signal level throughout the processor.

By addressing these potential issues during the
design and engineering of a dual delay signal
processor, you can minimize unwanted artifacts and
ensure a clean, high-quality output.

27> what else can you tell me about dual delay?
what can you show me?

A dual delay is a versatile audio effect that
processes an input signal by independently
delaying the left and right channels. This creates
a stereo effect that can add depth, width, and
space to a sound. Here are some additional
insights and visualizations related to dual delay:

**Configurations and variations:**

Dual delay can be used in various configurations,
such as parallel or serial processing. In
a parallel configuration, the left and right
channels are processed independently, while in
a serial configuration, one channel's output is
fed into the other channel's input, creating
a more complex, cascading delay effect.

**Synchronization:**

You can synchronize the delay times to the tempo
of a song, using musical note values (e.g.,
quarter notes, eighth notes) to define the delay
times. This helps create rhythmic coherence
between the delay effect and the rest of the
music. You can also use unsynchronized delay times
to create more experimental or unpredictable
effects.

**Modulation:**

Modulating the delay time, filter cutoff
frequency, feedback, or other parameters with LFOs
or envelope followers can create dynamic and
evolving delay effects. For example, you can
create a chorus or flanger effect by modulating
the delay time with a slow LFO.

**Visualization:**

Here is a simple block diagram of a dual delay
processor:

```
   Input Signal
        |
        V
  ┌─────┴─────┐
  │  Left Delay ├──────┐
  └────────────┘      |
                       V
                  Wet/Dry Mix
                       |
                       V
  ┌─────┴─────┐      Output
  │ Right Delay ├──────┘
  └────────────┘
```

This diagram shows the basic structure of a dual
delay, with separate delay lines for the left and
right channels. The wet/dry mix control adjusts
the balance between the original (dry) signal and
the delayed (wet) signal before output.

**Ping-pong delay:**

A common variation of the dual delay is the
ping-pong delay, where the output of one channel
is fed into the input of the other channel,
creating a bouncing effect between the left and
right speakers. This can add even more stereo
width and depth to the sound.

**Creative uses:**

Dual delay can be used creatively to enhance
a variety of sounds, such as adding space and
depth to vocals, creating rhythmic patterns for
guitars or synths, or adding a sense of movement
and interest to pads and ambient textures. By
experimenting with different delay times, feedback
levels, modulation, and filtering, you can create
a wide range of unique and interesting audio
effects.

Overall, dual delay is a powerful and versatile
audio effect that can be used in a variety of ways
to enhance and enrich your sound. By understanding
the underlying concepts and exploring different
configurations and parameter settings, you can
unlock its full potential and create unique,
captivating audio experiences.

28> how do we prevent the delayed audio from
phasing with the original source and causing
unwanted interference?

To prevent the delayed audio from phasing with the
original source and causing unwanted interference,
there are several techniques you can apply:

1. **Use different delay times for left and right
   channels**: By using different delay times for
   each channel, you can minimize the chance of
   phase cancellation between the original and
   delayed signals. This will create a more
   spacious stereo image and can help reduce
   phase-related issues.

2. **Apply filters to the delayed signal**: By
   using filters, such as low-pass or high-pass
   filters, you can remove certain frequency
   components from the delayed signal. This can
   help reduce the chances of phase interference
   with the original signal. Additionally, you can
   use band-pass or band-reject filters to target
   specific frequency ranges.

3. **Modulate delay times**: By slightly
   modulating the delay times with a low-frequency
   oscillator (LFO), you can create a constantly
   shifting phase relationship between the
   original and delayed signals. This can help
   prevent static phase cancellation and add
   a sense of motion and depth to the sound.

4. **Utilize Haas effect**: The Haas effect, also
   known as the precedence effect, states that
   when two similar sounds arrive at the
   listener's ears within approximately 40
   milliseconds of each other, the listener
   perceives them as a single sound coming from
   the direction of the first-arriving sound. By
   setting the delay times shorter than 40
   milliseconds, you can create a sense of spatial
   localization without causing significant phase
   interference.

5. **Adjust the feedback**: Reducing the amount of
   feedback in the delay can help minimize the
   buildup of phase interference over time. Lower
   feedback settings will result in fewer delay
   repeats, which can reduce the chance of phase
   issues.

6. **Experiment with delay algorithms**: Different
   delay algorithms, such as tape, digital, or
   analog delay, can have varying effects on phase
   relationships. Experiment with different
   algorithms to find the one that best suits your
   needs and minimizes phase-related issues.

7. **Use mid/side processing**: By processing the
   mid (mono) and side (stereo) components of the
   signal separately, you can control the phase
   relationship between the original and delayed
   signals more effectively. For example, you can
   apply the delay only to the side signal to
   preserve the phase coherence of the original
   mono signal.

By using these techniques, you can minimize the
chance of phase interference between the original
and delayed signals, resulting in a cleaner and
more spacious sound. Experimenting with different
settings and processing techniques will help you
find the best balance between preserving the
original signal's integrity and achieving the
desired delay effect.