Skip to content
Permalink
dev
Go to file
 
 
Cannot retrieve contributors at this time
184 lines (173 sloc) 6.67 KB

DSP Module for Aleph Sound Computer

With this program loaded onto the blackfin dsp, the aleph readily transforms between any of the following digital music devices:

  • live performance sampler
  • pitchshifter
  • chorus/flanger
  • rudimentary Karplus-Strong resonator
  • echo
  • pitch & amplitude tracking synthesizer for monophonic signals
  • pitch/volume tremolo
  • ring modulator
  • FM-synth-like processing of monophonic signals

Many variations, permutations and combinations of these basic functions may be realised through static combinations of grains’ 84 parameters. The specification of these parameters is given below:

CV Params {1, 2, 3, 4}

Source-cv-[n]

Choose source for CV out n from patch matrix

ADC mix params {1, 2, 3, 4}

ADCs 1 & 2 are hard-wired to mixer channels 1 & 2, whereas mixer channels 3 & 4 select their source from the patch matrix.

fader-i[n]

Stereo fader from mixer chan n to DACS 1&2

pan-i[n]

Stereo pan from mixer chan n between DACS 1&2

effect-i[n]

Send from mixer chan n to effect bus

aux0-i[n]

Fader from mixer chan n to DAC3

aux1-i[n]

Fader from mixer chan n to DAC4

source-i[n]

Choose mixer channel input from patch matrix

Grain Mix params {1, 2}

source-g[m]

Choose grain input from patch matrix

fader-g[m]

Stereo fader from grain m to DACS 1&2

pan-g[m]

Stereo pan from grain m between DACS 1&2

effect-g[m]

Send from grain m to effect bus

aux0-g[m]

Fader from grain m to DAC3

aux1-g[m]

Fader from grain m to DAC4

phase-g[m]

phase of grain m (+ve or -ve)

lpf-g[m]

Cutoff frequency (in Hz) for grain output (low-pass filter)

Grain Modulation Params {1, 2}

FM-source-g[m]

Choose a signal from patch matrix to modulate scrubPitch of grain. If scrubbing disabled, FM becomes PM (modulating read position relative to echotap).

FM-level-g[m]

Set depth of modulation induced by FM-source

AM-source

Choose a signal from patch matrix to modulate amplitude of grain output.

AM-level-g[m]

Pan between modulated and unmodulated grain output.

Grain Scrub params {1, 2}

scrubEnabfle-g[m]

enable scrubbing behaviour for this grain (pitch control independent of echo speed).

scrubPitch-g[m]

speed of scrubber read tap in subsamples (1/256 sample) - bees displays 1.000 at speed = 1 sample/sample

scrubLength-g[m]

length of scrubber read distance from echo readhead before cross-fading. This is expressed as a ratio to the scrubberFadeLength

scrubPitchDetection-g[m]

When this is enabled, scrublength ‘snaps’ to an even multiple of grain input signal. Zero crossing pitch detection with adaptive filter.

Grain Echo params {1, 2}

echoFadeLength-g[m]

length for scrubber crossfades. Again expressed as a ratio to echomax-echomin

echoTime-g[m]

allows bees to force read head to a point, e.g:

  • set echo time for simple echo fx
  • trigger one-shot (stalled) sample for pre-recorded audio

echoSpeed-g[m]

For canonical realtime FX like this guy should be 1, so the echo-tap stays in sync with write head. When a sample is loaded into the fifo this guy replays the sample. See echoEdgeBehaviour for playback modes. If you’re feeling crazy unglue the echo tap from writing head while write head runs by setting this value != 1

echoEdgeBehaviour-g[m]

set this to 0 or 1 to control does echo-tap head stall, or wrap at echo boundary respectively? Also possible to retrigger one-shot samples by resending 0.

echoMin-g[m]

echo boundary nearest to write-head

echoMax-g[m]

echo boundary furthest from write-head

writeEnable-g[m]

Choose between constantly writing new data into echotap or simply re-playing already-recorded audio in the underlying buffer.

Grain Pitch & Amplitude Analysis / Tracking {1, 2}

envAttack-g[m]

Attack of the envelope detector - this control is a little rough round the edges but it kinda works. Broadly speaking smaller number -> slower attack.

trackingEnv-g[m]

Multiply PitchTracking Oscillator by grain envelope befre sending it to patch matrix.

trackingPitch-g[m]

Frequency Offset factor for pitchTracking oscillator/synth

Grains Utilities

LFO-speed

Speed of LFO (smaller number = slower oscillation down to very slow oscillations. LFO signal is output to patch matrix.

LFO-shape

Blend between a triangular LFO shape (0) and sinusoid shape (max)

noiseBurst

Trigger a noise burst impulse into patch matrix

noiseBurstDecay

How quickly does noise burst impulse decay (small number = long burst)

static-CV1

Set a DC value from BEES on static-CV1 slot in patch matrix

static-CV2

Set a DC value from BEES on static-CV2 slot in patch matrix

Patch Matrix

The astute reader will notice a number of cryptic references to a so-called ‘patch matrix’. This allows the program to be internally re-wired, much like patching a modular synthesizer. Patch index denotes an output & each patch-matrix-enabled input may choose one source from the patch matrix.

Patch matrix Cheatsheet:

  1. Effect Bus
  2. ADC 1
  3. ADC 2
  4. ADC 3
  5. ADC 4
  6. grain1 output
  7. grain2 output
  8. grain1 echoTap pitchtrack oscillator
  9. grain2 echoTap pitchtrack oscillator
  10. grain1 echoTap envelope
  11. grain2 echoTap envelope
  12. LFO
  13. noise burst
  14. static-CV1
  15. static-CV2

Grain Anatomy

A grain consists a buffer, a write head running at 1x, an ‘echoTap’ & a ‘scrubTap’.

The echoTap is like a lines read head but it can run at non-integer speeds, it’s time coord is relative to the write head (wrapping round the underlying buffer is hidden). However playback speed remains relative to the underlying buffer. The echoTap also functions like a live performance sampler - writeEnable=0 allows to ‘freeze’ the current contents of the echotap buffer, enabling sampler playback, which can be looping or one-shot.

The scrubTap is a classic rotating-head pitch shifter temporally indexed relative to the scrub tap and with a fine-grained time coordinate. When ‘scrubbing’ is disabled, the scrubTap becomes simply a fine-grained delay. ‘FM’ becomes ‘PM’ in this case, modulating by some proportion of the scrubLength.

Also bolted on to each ‘grain’ for good measure is a built in pitch-tracker, envelope detector & a monophonic tracking synthesiser harnessing these two signals.

Bugs!?

Please send bug reports and/or patches to sasquatch@rickvenn.com or github.com/rick-monster/aleph.