tableshuffle
Prev | Orchestra Opcodes and Operators | Next

## tableshuffle

tableshuffle — shuffles the content of a function table so that each element of the source table is put into a different random position.

## Description

This opcode can be used in order to shuffle the content of function tables into a random order but without loosing any of the elements. Imagine shuffling a deck of cards. Each element of the table is copied to a different random position. If that position was already chosen before then the next free position is chosen. The length of the table remains the same.

## Syntax

    tableshuffle ktablenum

    tableshufflei itablenum

## Performance

ktablenum or itablenum -- the number of the table to shuffle.

## Examples

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

Example 819. Example of the tableshuffle opcode.

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

    <CsoundSynthesizer>
    <CsOptions>
    -odac -+rtaudio=alsa --midioutfile=farey7.mid
    </CsOptions>
    <CsInstruments>
    sr=48000
    ksmps=10
    nchnls=1
    0dbfs = 1

    gidelta init 100
    gimult init 101

    ;-------- loop and trigger instrument 901 using a Farey Sequence polyrhythm
    	  instr 1
    kindx init 0
    kindx2 init 0
    ktrigger init 0
    ktime_unit init p6
    kstart init p4
    kloop init p5
    kinitndx init 0
    kfn_times init gidelta
    knote init 60
    kbasenote init p8
    ifundam init p7
    ktrigger seqtime ktime_unit, kstart, kloop, kinitndx, kfn_times
    if (ktrigger > 0 ) then
         kpitch = cpspch(ifundam)
         kmult tab kindx2, gimult
         kpitch = kpitch * kmult
         knote = kbasenote + kmult
         event "i", 901, 0, .4, .1, kpitch, kpitch * .9, .4,  5,   .75, .8,  1.0, .15, .0,  .125, .125, .25, .5,  1.0, .0, .0,  .0,  .0,  .125, .25, .25, .25, knote
         kindx = kindx + 1
         kindx = kindx % kloop
         kindx2 = kindx2 + 1
         kindx2 = kindx2 % kloop
         if (kindx2 == 0) then
         	tableshuffle gimult
         endif

    endif
    	endin ; 1

    ;------ basic 2 Operators FM algorithm ----------------
    	instr 901
    inotedur	=		p3
    imaxamp		=		p4 ;ampdb(p4)
    icarrfreq	=		p5
    imodfreq	=		p6
    ilowndx		=		p7
    indxdiff	=		p8-p7
    knote	        =		p27
    aampenv		linseg	p9, p14*p3, p10, p15*p3, p11, p16*p3, p12, p17*p3, p13
    adevenv		linseg	p18, p23*p3, p19, p24*p3, p20, p25*p3, p21, p26*p3, p22
    amodosc		oscili	(ilowndx+indxdiff*adevenv)*imodfreq, imodfreq, 10
    acarosc		oscili	imaxamp*aampenv, icarrfreq+amodosc, 10
    			out		acarosc
    ;------ we also write down a midi track here ----------
    midion 1, knote, 100
           	endin ; 901

    </CsInstruments>
    <CsScore>
    f10 0 4096 10 1
    f100 0 -18 "farey" 7 1
    f101 0 -18 "farey" 7 2

    ; p4 kstart  := index offset into the Farey Sequence
    ; p5 kloop   := end index into Farey Seq.
    ; p6 timefac := time in seconds for one loop to complete
    ; p7 fundam  := fundamental of the FM instrument
    ; p8 basenote:= root pitch of the midi voice output
    ; note that pitch structures of the midi file output are not equivalent to the
    ; ones used for the FM real-time synthesis.

    ;	start		dur		kstart	kloop   timefac	fundam. basenote
    i1	0.0		44		0 	18	1	6.05	60
    i1	4		40		0 	18	3	7.05	72
    i1	10		38		0 	18	1.5	8	84
    i1	15		50		0	18	1	5	48
    i1	22		75		5	17	1.7	4	36
    e
    </CsScore>
    </CsoundSynthesizer>

## See Also

GEN farey, tablefilter, tablecopy

## Credits

Author: Georg Boenn
University of Glamorgan, UK

New in Csound version 5.13

Prev | Up | Next
tableseg | Home | tablew