1<CsoundSynthesizer>
2<CsOptions>
3--env:SSDIR+=../SourceMaterials -dnm0
4</CsOptions>
5<CsInstruments>
6ksmps = 32
7
8giArrLen  =        5
9gSArr[]   init     giArrLen
10
11  opcode StrAgrm, S, Sj
12  ;changes the elements in Sin randomly, like in an anagram
13Sin, iLen  xin
14 if iLen == -1 then
15iLen       strlen     Sin
16 endif
17Sout       =          ""
18;for all elements in Sin
19iCnt       =          0
20iRange     =          iLen
21loop:
22;get one randomly
23iRnd       rnd31      iRange-.0001, 0
24iRnd       =          int(abs(iRnd))
25Sel        strsub     Sin, iRnd, iRnd+1
26Sout       strcat     Sout, Sel
27;take it out from Sin
28Ssub1      strsub     Sin, 0, iRnd
29Ssub2      strsub     Sin, iRnd+1
30Sin        strcat     Ssub1, Ssub2
31;adapt range (new length)
32iRange     =          iRange-1
33           loop_lt    iCnt, 1, iLen, loop
34           xout       Sout
35  endop
36
37
38instr 1
39           prints     "Filling gSArr[] in instr %d at init-time!\n", p1
40iCounter   =          0
41  until      (iCounter == giArrLen) do
42S_new      StrAgrm    "csound"
43gSArr[iCounter] =     S_new
44iCounter   +=         1
45  od
46endin
47
48instr 2
49           prints     "Printing gSArr[] in instr %d at init-time:\n  [", p1
50iCounter   =          0
51  until      (iCounter == giArrLen) do
52           printf_i   "%s ", iCounter+1, gSArr[iCounter]
53iCounter   +=         1
54  od
55           prints     "]\n"
56endin
57
58instr 3
59          printks   "Printing gSArr[] in instr %d at perf-time:\n  [", 0, p1
60kcounter  =        0
61  until (kcounter == giArrLen) do
62          printf   "%s ", kcounter+1, gSArr[kcounter]
63kcounter  +=       1
64  od
65          printks  "]\n", 0
66          turnoff
67endin
68
69instr 4
70           prints     "Modifying gSArr[] in instr %d at init-time!\n", p1
71iCounter   =          0
72  until      (iCounter == giArrLen) do
73S_new      StrAgrm    "csound"
74gSArr[iCounter] =     S_new
75iCounter   +=         1
76  od
77endin
78
79instr 5
80           prints     "Printing gSArr[] in instr %d at init-time:\n  [", p1
81iCounter   =          0
82  until (iCounter == giArrLen) do
83           printf_i   "%s ", iCounter+1, gSArr[iCounter]
84iCounter   +=         1
85  od
86           prints     "]\n"
87endin
88
89instr 6
90kCycle     timeinstk
91           printks    "Modifying gSArr[] in instr %d at k-cycle %d!\n", 0,
92                      p1, kCycle
93kCounter   =          0
94  until (kCounter == giArrLen) do
95kChar      random     33, 127
96S_new      sprintfk   "%c ", int(kChar)
97gSArr[kCounter] strcpyk S_new ;'=' should work but does not
98kCounter   +=         1
99  od
100  if kCycle == 3 then
101           turnoff
102  endif
103endin
104
105instr 7
106kCycle     timeinstk
107           printks    "Printing gSArr[] in instr %d at k-cycle %d:\n  [",
108                      0, p1, kCycle
109kCounter   =          0
110  until (kCounter == giArrLen) do
111           printf     "%s ", kCounter+1, gSArr[kCounter]
112kCounter   +=         1
113  od
114           printks    "]\n", 0
115  if kCycle == 3 then
116           turnoff
117  endif
118endin
119
120</CsInstruments>
121<CsScore>
122i 1 0 1
123i 2 0 1
124i 3 0 1
125i 4 1 1
126i 5 1 1
127i 6 1 1
128i 7 1 1
129</CsScore>
130</CsoundSynthesizer>
131;example by joachim heintz
132