Skip to content

loopge

Construction of looping operations.

📝 Note

Up to Csound 6, this opcode was called loop_ge.

Syntax

loopge(indx, idecr, imin, label)
loopge(kndx, kdecr, kmin, label)
loop_ge indx, idecr, imin, label
loop_ge kndx, kdecr, kmin, label

Initialization

indx -- i-rate variable to count loop.

idecr -- value to decrement the loop.

imin -- minimum value of loop index.

Performance

kndx -- k-rate variable to count loop.

kdecr -- value to decrement the loop.

kmin -- minimum value of loop index.

The actions of loopge are equivalent to the code

indx  =  indx - idecr
if (indx >= imin) igoto label

or

kndx  =  kndx - kdecr
if (kndx >= kmin) kgoto label

📝 Note

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

Examples

Here is a group example for all loop_xx opcodes, comparing the different loop_ opcodes. It uses the file loop_-group-modern.csd.

Group example of the loop_xx opcodes.
<CsoundSynthesizer>
<CsOptions>
-n
</CsOptions>
<CsInstruments>
;example by joachim heintz
sr     = 44100
ksmps  = 32
nchnls = 2
0dbfs  = 1

instr 1 ;looplt: counts from 1 upwards and checks if < 10
  cnt:i = 1
loop:
  print(cnt)
  looplt(cnt, 1, 10, loop)
  prints("Instr 1 terminated!%n")
endin

instr 2 ;loople: counts from 1 upwards and checks if <= 10
  cnt:i = 1
loop:
  print(cnt)
  loople(cnt, 1, 10, loop)
  prints("Instr 2 terminated!%n")
endin

instr 3 ;loopgt: counts from 10 downwards and checks if > 0
  cnt:i = 10
loop:
  print(cnt)
  loopgt(cnt, 1, 0, loop)
  prints("Instr 3 terminated!%n")
endin

instr 4 ;loopge: counts from 10 downwards and checks if >= 0
  cnt:i = 10
loop:
  print(cnt)
  loopge(cnt, 1, 0, loop)
  prints("Instr 4 terminated!%n")
endin

</CsInstruments>
<CsScore>
i 1 0 0
i 2 0 0
i 3 0 0
i 4 0 0
</CsScore>
</CsoundSynthesizer>

Here is a group example for all loop_xx opcodes, comparing the different loop_ opcodes. It uses the file loop_-group.csd.

Group example of the loop_xx opcodes.
<CsoundSynthesizer>
<CsOptions>
-n
</CsOptions>
<CsInstruments>
;example by joachim heintz
sr     = 44100
ksmps  = 32
nchnls = 2
0dbfs  = 1

  instr 1 ;loop_lt: counts from 1 upwards and checks if < 10
icount    =         1
loop:
          print     icount
          loop_lt   icount, 1, 10, loop
          prints    "Instr 1 terminated!%n"
  endin

  instr 2 ;loop_le: counts from 1 upwards and checks if <= 10
icount    =         1
loop:
          print     icount
          loop_le   icount, 1, 10, loop
          prints    "Instr 2 terminated!%n"
  endin

  instr 3 ;loop_gt: counts from 10 downwards and checks if > 0
icount    =         10
loop:
          print     icount
          loop_gt   icount, 1, 0, loop
          prints    "Instr 3 terminated!%n"
  endin

  instr 4 ;loop_ge: counts from 10 downwards and checks if >= 0
icount    =         10
loop:
          print     icount
          loop_ge   icount, 1, 0, loop
          prints    "Instr 4 terminated!%n"
  endin

</CsInstruments>
<CsScore>
i 1 0 0
i 2 0 0
i 3 0 0
i 4 0 0
</CsScore>
</CsoundSynthesizer>

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. 2006

New in Csound version 5.01