Skip to content

looplt

Construction of looping operations.

📝 Note

Up to Csound 6, this opcode was called loop_lt.

Syntax

looplt(indx, incr, imax, label)
looplt(kndx, kncr, kmax, label)
loop_lt indx, incr, imax, label
loop_lt kndx, kncr, kmax, label

Initialization

indx -- i-rate variable to count loop.

incr -- value to increment the loop.

imax -- maximum value of loop index.

Performance

kndx -- k-rate variable to count loop.

kncr -- value to increment the loop.

kmax -- maximum value of loop index.

The actions of looplt are equivalent to the code

indx  =  indx + incr
if (indx < imax) igoto label

or

kndx  =  kndx + kncr
if (kndx < kmax) kgoto label

📝 Note

Adviced is to use the 'modern' while or until opcodes for looping constructions.

Examples

Here is an example of the looplt opcode. It uses the file looplt.csd.

Example of the looplt opcode.
<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac     ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if RT audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o loop_lt.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

seed 0
gisine = ftgen(0, 0, 2^10, 10, 1)

instr 1 ;master instrument
  ninstr:i = 5 ;number of called instances
  ndx:i = 0
loop:
  prints("play instance %d\\n", ndx)
  Pan:i = random(0, 1)
  freq:i = random(100, 1000)
  amp:i = 1/ninstr
  eventi("i", 10, 0, p3, amp, freq, Pan)
  looplt(ndx, 1, ninstr, loop)
endin

instr 10
  Peak:i = random(0, 1) ;where is the envelope peak
  sig:a = poscil3(p4, p5, gisine)
  env:a = transeg(0, p3*Peak, 6, 1, p3-p3*Peak, -6, 0)
  aL, aR = pan2(sig*env, p6)
  out(aL, aR)
endin

</CsInstruments>
<CsScore>
i1 0 10
e
</CsScore>
</CsoundSynthesizer>

Here is an example of the loop_lt opcode. It uses the file loop_lt.csd.

Example of the loop_lt opcode.
<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac     ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if RT audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o loop_lt.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

seed 0
gisine ftgen 0, 0, 2^10, 10, 1

instr 1 ;master instrument

ininstr = 5 ;number of called instances
indx = 0
loop:
      prints "play instance %d\\n", indx
ipan  random 0, 1
ifreq random 100, 1000
iamp  = 1/ininstr
event_i "i", 10, 0, p3, iamp, ifreq, ipan
loop_lt indx, 1, ininstr, loop

endin

instr 10

ipeak random 0, 1 ;where is the envelope peak
asig  poscil3 p4, p5, gisine
aenv  transeg 0, p3*ipeak, 6, 1, p3-p3*ipeak, -6, 0
aL,aR pan2 asig*aenv, p6
      outs aL, aR

endin

</CsInstruments>
<CsScore>
i1 0 10
e
</CsScore>
</CsoundSynthesizer>

Its output should include a line like this:

play instance 0
play instance 1
play instance 2
play instance 3
play instance 4

See also

Program Flow Control: Looping Constructions

More information on this opcode: http://www.csoundjournal.com/2006summer/controlFlow_part2.html written by Steven Yi, and in the Floss Manuals: https://flossmanual.csound.com/csound-language/control-structures

Credits

Istvan Varga.

New in Csound version 5.01