1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
|
# Workshop
This workshop is designed to go over the **most commonly used patterns in composition** with [Orca](https://github.com/hundredrabbits/Orca). If you are using [Pilot](http://github.com/hundredrabbits/Pilot) as a sound source, remember to use the UDP operator `;` instead of the MIDI operator `:`.
We recommend to distribute a printed copy of the [list of operators](https://github.com/hundredrabbits/Orca#operators), so students can do their own experiments.
- **Part 1**: [Basics](#Basics) `D`, `R`, `T`, `C`
- **Part 2**: [Logic](#Logic) `I`, `A`, `F`, `B`
- **Part 3**: [Projectors](#Projectors) `E`, `H`, `X`, `O`,
- **Part 4**: [Variables](#Variables) `V`, `K`, `J`, `Y`
## Basics
This section will teach the basics of playing a note and a sequence of notes.
### Send a midi note
- `D8`, will send a bang, every **8th frame**.
- `:03C`, will send the `C` note, on the **3rd octave**, to send `C#`, use the lowercase `c3`.
```
D8...
.:03C
```
### Play a random note
- `aRG`, will output a random value between `A` & `G`, the rightside uppercase letter indicates an **uppercase output**.
```
D8.aRG.
.:03D..
```
### Make a melody
- `04TCAFE`, will create a track of **4 notes**, and output its first value.
```
D814TCAFE
.:03A....
```
### Play the melody
- `8C4`, will count from `0` to `3`, at **1/8th speed**.
```
.8C4.....
D804TCAFE
.:03C....
```
## Logic
This section will teach the basics of automating logic decisions and changing the values of operators dynamically.
### Play every second note
- `2I6`, will increment to `6` at a rate of `2`.
```
.2I6.......
D846TCAFEDG
.:03D......
```
### Play a note with an offset
- `1AC`, will add `1` to `C`, to output `D`. To get `D#`, use the lowercase `d`, like `1Ac`.
```
D8.1AC.
.:03D..
```
### Play a sequence back and forth
- `2B8`, will count from `0` to `7`, and back down to `0`, at **half speed**.
- `5AC`, will increment the value so the sequence starts at the note `C`.
```
..2B8..
D2.5AC.
.:03H..
```
### Play a note at a specific interval
- `.I4`, will increment to `4`, at a rate of `1`.
- `.F2`, will bang only if leftside input is equal to `2`.
```
I4.....
3F2.1AC
..:03D.
```
## Projectors
This section will teach the basics of creating new operators procedurally.
### Send a bang
- `E`, will travel further **eastward**, every frame.
### Halt a moving operator
- `H`, will stop a `E` from moving.
```
..H
E..
```
### Read an operator at position
- `22O`, will get the operator `E` at the offset `2,2`.
```
22O...
..E..H
.....E
```
### Write an operator at position
- `22X`, will output the operator `E` at the offset `2,2`.
```
22XE.
.....
.....
....E
```
### Animate a projector
- `B8`, will bounce between `0` and `8`.
```
B4..........
1XE.........
........:03C
........:03D
........:03E
........:03F
```
## Variables
This section will teach the basics of storing accessing and combining that stored data.
### Write a variable
- `aV5`, will store `5` in the variable `a`.
```
aV5
```
### Read a variable
- `Va`, will output the value of the variable `a`. Notice how variables always **have to be written above where they are read**.
```
.....Va
.......
aV5..Va
.....5.
.......
aV6..Va
.....6.
```
### Read 3 variables
- `3Kion`, will output the values of `i`, `o` & `n`, side-by-side.
```
iV0.oV3.nVC
...........
3Kion......
.:03C......
```
### Carry a value horizontally and vertically
- `Y`, will output the west input, eastward.
- `J`, will output the north input, southward.
```
3..
J..
3Y3
```
### Carry a bang
- This method will allow you to bring bangs into tight spots.
```
D43Ka...
.Y.:03C...
```
I hope this workshop has been enlightening, if you have questions or suggestions, please visit the [forum](https://llllllll.co/t/orca-live-coding-tool/17689), or the [chatroom](https://talk.lurk.org/channel/orca). Enjoy!
|