Wave: digitar
What is a digitar?
The Karplus-Strong digitar was an early 1980s algorithm that can synthesize the sound of a plucked guitar string with remarkable fidelity. It was not widely adopted by commercial instruments of its era, however, mainly due to the digitar's limited expressive control and requirement of delay line memory for each voice. Nonetheless, the underlying physical modeling ideas were highly influential, eventually inspiring the more sophisticated digital waveguide techniques of the 1990s. Jamdac incorporates the digitar because it's easy to understand and enlightening to study. Also, it nicely fits Hybrix's focus on conceptual simplicity rather than manufacturing cost.
Jamdac has only 64 kilobytes of buffer memory, so delay buffers are used sparingly. Wave C has no digitar at all, and Wave B's digitar shares memory with the channel effect, preventing them from being used simultaneously. Enabling Wave B's digitar will disable the channel effect.
The digitar algorithm has four basic components:
-
Input gate: If it is enabled, the input gate cuts off the sound from the oscillator shortly after the instrument is triggered. Typically the oscillator will be a noise waveform, so the input gate will produce a small burst of white noise followed by permanent silence. This simulates the initial pluck of the string. The cutoff time is equal to the length of the delay buffer.
-
Feedback loop: Looking at the diagram, the delay buffer loops backwards, allowing the sound to repeat endlessly even after the input gate has silenced the oscillator. This produces the sustaining sound of the guitar string after it was plucked.
-
Digitar lowpass filter: This box simply averages each sample with the previous sample, which will slightly smooth out any jumps in the curve (high frequencies). Therefore it is a lowpass filter, but a much more primitive algorithm than the regular Jamdac filters. Because this operation happens inside a feedback loop, each time around the sound gets filtered more and more. That's the magic ingredient that causes a noisy guitar pluck to quickly settle into a pleasant vibrating string tone.
-
Blend operator: This box is an optional enhancement that can be disabled by setting
DIGITAR_BLENDto 1.0. In a nutshell, it is a cheap bit of extra logic that enables you to get some other interesting sounds from your digitar system. The mechanics are described below.
DIGITAR_MODE
The DIGITAR_MODE flags enable you to individually disable the input gate and lowpass filter, as well as disable the entire digitar component. Disabling the input gate is useful if you want to repurpose the feedback loop for other techniques similar to the channel effect.
DIGITAR_BLEND
For each sample, the blend operator generates a random number between 0.0 and 1.0; if the random number is larger than DIGITAR_BLEND, then the sample is negated, which causes a tiny popping sound. A value of 1.0 means no samples get negated. A value of 0.5 means 50% of samples get randomly negated. A value of zero means every sample gets randomly negated. Even if you're not using the feedback loop, the digitar's blend operator is an interesting way to add noise to other waveforms such as sawtooth.
DIGITAR_HZ
The DIGITAR_HZ parameter actually controls the length of the delay buffer. For all other delay buffers, the length is measured as a count of samples, not in Hertz units. DIGITAR_HZ uses Hz because its usage is to play a guitar note at a specific pitch. The buffer length is calculated as 22,050 Hz / DIGITAR_HZ - 0.5. (The 0.5 adjusts for the group delay introduced by the lowpass filter.)
Note that because DIGITAR_HZ is a dynamic parameter, you can adjust it while the note is playing. This can create "pitch bend" articulations for your guitar, as well as spring sounds, and even more bizarre noises when it changes quickly.
DIGITAR_FEEDBACK
The DIGITAR_FEEDBACK amplifier affects the signal as it circles through the feedback loop. Feedback loops normally need some attenuation (making the signal smaller) to prevent the samples from exploding, however the digitar lowpass filter already accomplishes that. Thus, DIGITAR_FEEDBACK is generally not needed unless you've disabled the lowpass filter.
I/O definitions
CLASS IO_WAVE_WITH_DIGITAR EXTENDS IO_WAVE # SIZE 43
# +1 = ENABLE DIGITAR
# +2 = ENABLE DIGITAR LOWPASS SMOOTHING
# +4 = ENABLE INPUT GATE
# NOTE: WAVE_B'S DIGITAR USES THE SAME BUFFER AS THE CHANNEL EFFECT, SO
# ENABLING WAVE_B'S DIGITAR WILL DISABLE THE CHANNEL EFFECT.
VAR DIGITAR_MODE: BYTE # [JAMDAC PLUS]
# 1.0 = SIMPLE STRING
# 0.5 = DRUMS
# 0.0 = PLUCKED BOTTLE
# UNITS: S6.10 FIXED POINT
VAR DIGITAR_BLEND: PAIR # [JAMDAC PLUS]
# DELAY LOOP LENGTH = 22,050 HZ / DIGITAR_HZ - 0.5
# UNITS: HERTZ
INSET DIGITAR_HZ: IO_DYNAMIC # [JAMDAC PLUS]
# NORMALLY THIS IS ALWAYS 1.0, BUT THE DIGITAR CAN BE USED
# FOR CONVENTIONAL DELAY LOOP EFFECTS
# UNITS: S6.10 FIXED POINT
INSET DIGITAR_FEEDBACK: IO_DYNAMIC # [JAMDAC PLUS]
END CLASS