Skip to content

patchspread

Route audio from one instrument to multiple instruments in parallel.

Syntax

patchspread Ssource, SDestinations[] [, ilevels[]]
patchspread(Ssource, SDestinations[] [, ilevels[])

Usage

graph LR
  A[Source] --> B[Effect1];
  A -->| | C[Effect2];
  A -->| | D[Effect3];

patchspread Sends the audio from one instrument to multiple destination instruments in parallel.

All the destination instruments should be effects able to receive input (or the global "outs" output). Live re-patching by updating SDestinations[] is possible.


Arguments

Ssource -- String name of the instrument sending audio

SDestinations[] -- A string array of the names of instruments receiving audio. Patchspread sends audio from Ssource to each effect in parallel.

ilevels[] (optional) -- An array of amplitude multipliers applied to each of the Destination outputs in SDestinations[].

Example

patchspread.orc

patchspread
instr clap
  ;; Sound source, like a hand clap.
  iamp = p4
  iignored = p5
  ipan = p6
  ifrq = random(1070, 870)
  iatt = 0.0021
  idec = 0.045
  ibw = 1255
  asigt1 bexprnd iamp * 4.0   
  asigt2 bexprnd iamp * 4.0   
  asigt3 bexprnd iamp * 4.0   
  asigt4 bexprnd iamp * 4.0   
  asigt5 bexprnd iamp * 4.0
  asigc1 mode asigt1, 4813, 8
  asigc2 mode asigt2, 1677, 9
  asigc3 mode asigt3, 1327, 29
  asigc4 mode asigt4, 1051, 5
  asigc5 mode asigt5, 733, 6

  asig = asigc1+asigc2+asigc3+asigc4+asigc5

  asig1 butbp asig, ifrq, ibw
  asig1 butbp asig1, ifrq, ibw    
  asig2 butbp asig, ifrq*3.5, ibw * 0.9
  asig2 butbp asig2, ifrq*2.3, ibw * 0.8    
  ares ntrpol asig1, asig2, 0.55   
  aenv transeg 0.0,  iatt, -19, 1.0,  idec, -4.5, 0.0, 0.1, 1, 0.0
  ares = ares * aenv
  aresL = ares*ipan
  aresR = ares*(1-ipan)
  send aresL, aresR
endin

loopcode fillarray(12*0.125 * 4), "codeloop",{{

ipattern[] = fillarray_i(1,1,1,-1,1,1,-1,1,-1,1,1,-1)
irotate counterChan "count1"

loopevent fillarray_i(n("clap"),0,0.1,0.1,0,0), fillarray_i(0), ipattern*0.125,1
loopevent fillarray_i(n("clap")+0.1,0,0.1,0.1,0,1), fillarray_i(0), rotatearray(ipattern*0.125, irotate), 1

}},1
;; Clapping Music, Steve Reich, 1972

EffectConstruct "Rvb", {{
ainL = ains[0]
ainR = ains[1]

aout1, aout2 freeverb ainL, ainR, 0.5, 0.6

aouts[] fillarray aout1, aout2
}},2,2,1
;; stereo reverb

patchspread "clap",fillarray("Rvb","outs")
;; split the signal between reverb and direct out

patchsig "Rvb", "outs",0.7
;; and connect the reverb to the output, reducing the level a bit.