Skip to content

Granular Synthesis Delay

Overview

Synchronous Granular Synthesis Module Delay

Discussion

This module implements (synchronous) granular synthesis functionality. It uses a delay line to store samples from a real-time input stream. Each grain reads sound from the delay line with a potentially different delay time and playback rate. At instantiation time, you must specify the maximum delay time in milliseconds, max grain size in milliseconds. These values determine the sizes of each internal state buffers to hold audio samples and intermediate results.

The input pin fRatio is a floating-point number and specifies the step size between samples as they are played back. Internally, fRatio is smoothed on a block by block basis using the .smoothingTime variable.

If "playDir" parameter has been selected to "backward" or, if fRatio has a negative value [range 0..-1] and "playDir" parameter has been selected to "auto", the delayline buffer is played back in backward direction,

The module has input pin named delayPos that specifies the starting position of the grains at audio rate. Values in the input pin ranges between 0 and 1, and the actual offset in the file is determined be multiplying it with the delayline length. The starting offset of each grain is determined internally and the value at that offset is read from delayPos.

The module has input pin named panMod that specifies the panning coefficients of the grains at audio rate. Values in the input pin ranges between 0 and 1, the specified value is considered as panning coefficient for left channel. 1-coeff is considered as the panning for right channel.

Module Pack

awe-mod-dspc-snd

ClassID

classID = 41816

Type Definition

typedef struct _ModuleGranularSynthesisDelay
{
ModuleInstanceDescriptor instance;            // Common Audio Weaver module instance structure
INT32 grainSize;                              // Sets the length of each grain, denoted in milliseconds
INT32 grainDensity;                           // Sets the number of grain samples per second
INT32 playDir;                                // Playback direction, 0=Forward, 1=Backward, 2=Auto (derived from fRatio input pin)
FLOAT32 gain;                                 // The peak level of the window
INT32 smoothingTime;                          // Time constant of the pitch smoothing process
INT32 maxDelayTime;                           // Maximum delay, in milliseconds.
INT32 windowLength;                           // Number of coefficients for current window
INT32 maxDelaySamples;                        // Maximum delay in samples.
INT32 writeIndex;                             // Write offset in the delay buffer
INT32 maxGrainSize;                           // Maximum grain size in ms
INT32 maxDensity;                             // Max density in grains per sec
FLOAT32 maxRate;                              // Highest allowed rate of playback that can be specified
UINT32 pinID;                                 // Specifies which control pins are available
INT32 stateHeap;                              // Heap in which to allocate state buffer memory.
INT32 maxOverlapGrains;                       // Number of max. overlapping grains per maxGrainSize
INT32 grainSizeSamples;                       // Length of each grain in samples
INT32 interonsetTime;                         // Time between temporally adjacent grain onsets
FLOAT32 windowRatio;                          // Sample ratio of the window coefficients
FLOAT32 smoothingCoeff;                       // Smoothing (pitch) coefficient
INT32 grainIndex;                             // Current used vector index
INT32 interonsetCnt;                          // Current interonset counter
FLOAT32 smoothedFRatio;                       // Current (smoothed) rate at which audio is read from the input buffer
FLOAT32* window;                              // Window coefficients
FLOAT32* window_coeffs;                       // Window coefficients
FLOAT32* delayBuffer;                         // State variable array.
INT32* GrainDelayIndex;                       // Curr delayline index of the intermediate vector element
FLOAT32* GrainDelayIndexF;                    // Curr delayline index fract of the intermediate vector element
FLOAT32* GrainDelayFStep;                     // Curr delayline step size of the intermediate vector element
INT32* GrainEnvIndex;                         // Curr envelope index of the intermediate vector element
FLOAT32* GrainEnvIndexF;                      // Curr envelope index fract of the intermediate vector element
FLOAT32* GrainEnvFStep;                       // Curr envelope step size of the intermediate vector element
INT32* GrainOffset;                           // Curr grain offset of the intermediate vector element
FLOAT32* GrainPanCoeff;                       // Curr panning coefficient of the intermediate vector element
INT32* GrainStatus;                           // Curr status ("active"/"inactive") of the intermediate vector element
} ModuleGranularSynthesisDelayClass;

Variables

Properties

Name Type Usage isHidden Default Value Range Units
grainSize int parameter 0 100 1:100 msec
grainDensity int parameter 0 10 1:100
playDir int parameter 0 0 0:2
gain float parameter 0 1 0:1
smoothingTime int parameter 0 100 0:1000 msec
maxDelayTime int const 0 500 0:500 msec
windowLength int const 0 32 Unrestricted
maxDelaySamples int derived 0 24000 Unrestricted samples
writeIndex int state 0 0 Unrestricted
maxGrainSize int const 1 100 0:100 msec
maxDensity int const 1 100 0:100 grains per sec
maxRate float const 1 5 Unrestricted
pinID uint const 1 1 Unrestricted
stateHeap int const 1 561 Unrestricted
maxOverlapGrains int const 1 10 Unrestricted
grainSizeSamples int derived 1 4800 Unrestricted
interonsetTime int derived 1 4800 Unrestricted
windowRatio float derived 1 1 Unrestricted
smoothingCoeff float derived 1 0.006644 Unrestricted
grainIndex int state 1 0 Unrestricted
interonsetCnt int state 1 0 Unrestricted
smoothedFRatio float state 1 1 Unrestricted
window float* parameter 1 [35 x 1] Unrestricted
window_coeffs float* parameter 0 [32 x 1] Unrestricted
delayBuffer float* state 1 [1 x 24003] Unrestricted
GrainDelayIndex int* state 1 [1 x 10] Unrestricted
GrainDelayIndexF float* state 1 [1 x 10] Unrestricted
GrainDelayFStep float* state 1 [1 x 10] Unrestricted
GrainEnvIndex int* state 1 [1 x 10] Unrestricted
GrainEnvIndexF float* state 1 [1 x 10] Unrestricted
GrainEnvFStep float* state 1 [1 x 10] Unrestricted
GrainOffset int* state 1 [1 x 10] Unrestricted
GrainPanCoeff float* state 1 [1 x 10] Unrestricted
GrainStatus int* state 1 [1 x 10] Unrestricted

Pins

Input Pins

Name in
Description Input audio
Data type float
Channel range 1
Block size range Unrestricted
Sample rate range Unrestricted
Complex support Real
Name fRatio
Description Specifies playback ratio
Data type float
Channel range 1
Block size range 1
Sample rate range Unrestricted
Complex support Real
Name delayPos
Description Start point of the grain, located relative within the delayline between 0..1(maxDelay)
Data type float
Channel range 1
Block size range Unrestricted
Sample rate range Unrestricted
Complex support Real
Name panMod
Description Controls panning for each grain; relative distribution between 0(max left)..1(max right)
Data type float
Channel range 1
Block size range Unrestricted
Sample rate range Unrestricted
Complex support Real

Output Pins

Name audio
Description Output data
Data Type float

Scratch Pins

Channel Count 1
Block size 32
Sample rate 48000
Channel Count 1
Block size 32
Sample rate 48000
Channel Count 1
Block size 32
Sample rate 48000

Matlab Usage

File Name: granular_synthesis_delay_module.m 

Copyright (c) 2026 DSP Concepts, Inc.