“Dub Plex” Tape Delay and Spring Reverb Effect
Total Page:16
File Type:pdf, Size:1020Kb
“Dub Plex” Tape Delay and Spring Reverb effect Digital Audio Systems, DESC9115, 2021 Grad Certificate in Architectural Science (Audio and Acoustics) Sydney School of Architecture, Design and Planning, The University of Sydney ABSTRACT My objective for this assignment was to create a tape echo (delay) and spring reverb effect similar sounding to a Roland Space Echo RE-201 using MATLAB. I wanted to address some of the shortcomings of the original unit such using filters in the feedback circuit and synchronising the delay time to the tempo (BPM). This delay is based on the Roland Space Echo setting 1 for a single delay, rather than a multi-tap delay. The delay effects can be used without affecting the low-end frequencies making them suitable for use on kick drums or bass heavy music. When using the original Roland Space Echo on dub or electronic music, some of the best sounding effects are created by using the repeat rate (feedback) of the delay and getting it to repeat in time on drums hits and sound stabs, or creating wobbly tape modulation delay effects mixed with the spring reverb tank. I wanted to create these effects with audio files containing percussion and heavy bass lines. 1. INTRODUCTION 1.1 The “Dub Plex” concept Dub Plex Delay Filters Tempo Reverb 120 BPM Gain Time Feedback HP LP wet/dry The Dub Plex effect unit as a hardware device 1.2 The Tape Delay To create the tape delay sound of the “Dub Plex” effect I researched the “Tape-based Echo Simulation” analysis of the Echo Plex and Roland Space Echo in the DAFX book [1]. This gave an understanding of the tape delay audio signal flow architecture. x[n] y[n] y[n] = x[n] x[n- d] Figure 1: Block diagram of the “Tape-based Echo Simulation” (Source: DAFX) As seen Figure 1 above, the output signal is delayed and fed back (for repeats) with the input signal according to the feedback controls. For my tape delay I did not want output equalisation tone controls, as high pass and low pass filters in the feedback circuit would give enough tonal variation. Wow and Flutter are also characteristics that exist within motor-driven loop tape machines. These characteristics provide older tape echo machines with some of their distinctive sound. Wow is defined as a speed fluctuation of between 0.1- 10 Hz, and flutter as between 10-100 Hz, which results in slow modulations in pitch [2]. I found using a small amount of the vibrato effect (1 Hz) worked quite well to emulate tape wow. Gaussian noise was added to emulate tape hiss, which is also modulated. Examining the DSP, the delay processing block receives a sample of the input signal at sample number n and stores this sample in memory (using a buffer) for a given number of samples, d. At sample number n + d, the output of a delay processing block is the input sample x[n]. When the input sample x[n] is received and processed by the tape delay, the output of the block is the sample x[n-d], for the d number of samples stored in memory [3]. y[n] = x[n-d] The gain (k) of the feedback then feeds the input into a backward, delayed path. y[n] = x[n]+(-k) * y[n-d] The x[n] signal is also processed by the MATLAB inbuilt finite impulse response (FIR) lowpass/highpass filters h[n] using convolution. The symbol * here is to denote convolution not multiplication. y[n] = x[n] * h[n] This filter idea was sourced from former student Guy Hopkins on his feedback tape delay, modified not to have all pass filters [5]. After testing many different types of delay code using feedback, I based the delay code on a Roland “Digidelay” guitar effect written by Ethan Lusterman [4]. 1.3 The Spring Reverb I borrowed an original Roland Space Echo RE-201 to take Spring Reverb impulse responses using the “Impulse Response Measurer” in MATLAB. The Spring Reverb function is based on modified code from by Gautham J. Mysore [6]. The Spring Reverb function uses an impulse response taken from a Roland Space Echo to emulate how the sound propagates through the spring reverb, synthesised with a fixed algorithmic Schroeder reverberator. Using the Roland Space Echo impulse response, the inbuilt MATLAB LPC function is used to create the coefficients for the infinite impulse response filters (IIR). A fixed algorithmic Schroeder reverb is then constructed using five parallel IIR feedback comb filters (FBCF) and four series all-pass filters (APF). This is shown in Figure 2 with the delay in samples (Fs = 44.1 kHz) and gain for each filter [3]. FBCF 2106 Gain = 0.7 FBCF 3804 Gain = 0.7 FBCF 5440 APF 220 APF 441 APF 713 APF 1124 Gain=0.7 Gain=0.5 Gain=0.3 Gain=0.1 PLPC Gain = 0.7 0.Ga FBCF 7880 Gain = 0.7 FBCF 8040 Gain = 0.7 Figure 2: Block diagram of the Schroeder reverb with sample delay and gain The IIR comb filter functions in a similar way to the feedback delay. The output y[n] is fed back into an endless series of delay repetitions to simulate reverb and combined with the system input x[n]. Each time the signal goes through the delay line (samples) it is attenuated by the gain (g). For positive values of g, the filter amplifies all frequencies that are multiples of 1/t and attenuates all frequencies that are in-between. For negative values of g, the filter attenuates frequencies that are multiples of 1/t and amplifies those that are in-between [1]. The input signal is often scaled by c to compensate for high amplification. y[n] = c * x [n] + g * y [n-M] M = t / Fs where t is time and Fs is sample frequency Figure 3 – the magnitude response of a comb filter (source: MATLAB) As shown in figure 3, the filter magnitude response resembles a comb, hence the name comb filter. Feed forward all pass filters are used in series to simulate decaying reflections for the reverb, with descending gain. LAB WORK 1.4 Audio Signal Flow Gain Modulated HP/LP LPC/Spring signal Filters Reverb BPM to Summed Delay with Input audio Output samples signal Feedback Loop Wet/dry mix Delayed signal Gain Figure 2: Block diagram signal flow of the “Dub Plex” 1.5 Explanation of the MATLAB proposed DSP The signal flow block diagram in Figure 2 outlines the proposed DSP application. Each step of the function outputs calculated from the inputs will be explained according to the diagram. The practical component of this assignment has comments next to each command line. 1.6 Tape modulation (wow) and tape hiss A digital delay should be synchronised to the music tempo (beats per minute), as this will create delay repetitions which line up with the rhythm of the performance [3]. After the note division and BPM variables have been input, the BPM is then this is converted to seconds per beat and then samples and rounded to the nearest decimal: • Beats per second = beats per minute (BPM) / 60 • Seconds per peat = 1 / Beats per second • Delay time (samples) = Note divisions * Seconds per peat Next the vibrato was created from the DAFX vibrato script, to emulate tape wow. The time delay is varied periodically to produce pitch variation and create a slow vibrato effect. A delay line is created and a low-frequency oscillator to drive the delay time parameter to create a vibrato effect, as seen in figure 3 [1]. LFO Input x[n] Delay (d) Output y[n-d] Figure 3: Block diagram of modulated delay. The modulation frequency is calculated by dividing the modulation frequency input variable (1 Hz) by the sample rate: Modulation Frequency = 1 Hz / 44100 A delay line with buffer is created (n), and the modulation is created by using a sine wave to create the modulation: Modulation = Sine (Modulation Frequency * 2 * π * n) A “for loop” function is used to add the sine wave used for modulation and noise, at the start of the input signal to the end of the signal sample, and gaussian noise added for tape hiss. After the modulation and noise are created, the matrix lengths of the delayed original signal and modulated delay have zeros added to match, before they are normalised and summed to the output before the delay with feedback. To hear what this modulated tape noise stage does to the audio, I have processed an audio loop “dub_loop_mono.wav” and saved it as “mod_delay.wav”. 1.7 Digital delay with feedback The next sage is the digital delay with feedback including high and low pass filters. This was the most difficult code to get right, mainly because of the longer delay times not having enough zeros added to match the vector length with the modulated input signal. The zeros function creates a vector of values to put between the modulated signal and the delayed signal. As you can see in the MATLAB code, many zeros were added in order to allow long feedback delay times. The MATLAB FFT based FIR filtering is used for the high and lowpass filters using the inbuilt “fdesign.highpass” and “fdesign.lowpass” object specification. The summed signal is convoluted with the filtered signal using “fftfilt” to implement the overlap-add method. The feedback exponentially decays (feedback=feedback^2). Zero padding is then added to the summed input signal to ensure the matrix matches the delayed signal. The output is then normalised.