grain — Generates granular synthesis textures.
igfn -- The ftable number of the grain waveform. This can be just a sine wave or a sampled sound.
iwfn -- Ftable number of the amplitude envelope used for the grains (see also GEN20).
imgdur -- Maximum grain duration in seconds. This is the biggest value to be assigned to kgdur.
igrnd (optional) -- if non-zero, turns off grain offset randomness. This means that all grains will begin reading from the beginning of the igfn table. If zero (the default), grains will start reading from random igfn table positions.
xamp -- Amplitude of each grain.
xpitch -- Grain pitch. To use the original frequency of the input sound, use the formula:
sndsr / ftlen(igfn)
where sndsr is the original sample rate of the igfn sound.
xdens -- Density of grains measured in grains per second. If this is constant then the output is synchronous granular synthesis, very similar to fof If xdens has a random element (like added noise), then the result is more like asynchronous granular synthesis.
kampoff -- Maximum amplitude deviation from xamp. This means that the maximum amplitude a grain can have is xamp + kampoff and the minimum is xamp. If kampoff is set to zero then there is no random amplitude for each grain.
kpitchoff -- Maximum pitch deviation from xpitch in Hz. Similar to kampoff.
kgdur -- Grain duration in seconds. The maximum value for this should be declared in imgdur. If kgdur at any point becomes greater than imgdur, it will be truncated to imgdur.
The grain generator is based primarily on work and writings of Barry Truax and Curtis Roads.
This example generates a texture with gradually shorter grains and wider amp and pitch spread. Play grain.csd, and beats.wav
Example 427. Example of the grain opcode.
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;realtime audio out ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o grain.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 insnd = 10 ibasfrq = 44100 / ftlen(insnd) ; Use original sample rate of insnd file kamp expseg .001, p3/2, .1, p3/2, .01 ;a swell in amplitude kpitch line ibasfrq, p3, ibasfrq * .8 kdens line 600, p3, 100 kaoff line 0, p3, .1 kpoff line 0, p3, ibasfrq * .5 kgdur line .4, p3, .01 imaxgdur = .5 asigL grain kamp, kpitch, kdens, kaoff, kpoff, kgdur, insnd, 5, imaxgdur, 0.0 asigR grain kamp, kpitch, kdens, kaoff, kpoff, kgdur, insnd, 5, imaxgdur, 0.0 outs asigL, asigR endin </CsInstruments> <CsScore> f5 0 512 20 2 ; Hanning window f10 0 16384 1 "beats.wav" 0 0 0 i1 0 15 e </CsScore> </CsoundSynthesizer>