-
Notifications
You must be signed in to change notification settings - Fork 0
/
documentation.html
250 lines (207 loc) · 13.1 KB
/
documentation.html
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
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
---
layout: page
title: Documentation
---
<section>
<header>
<h3>Introduction to the Threnoscope</h3>
<p>General outline of the system and its design ideas</p>
</header>
<p>The Threnoscope has an aesthetic and ideological grounding in drone music and the interest in exploring alternative tuning systems and scales. We find different types of tunings and scales in various musical cultures and one of the aims with the software is to create a platform for studying and comparing these, and their effects on our musical perception. There are two views available in the threnoscope: the <b>harmonics view</b> and the <b>scale view</b>.</p>
<section id="two" class="wrapper alt style4">
<section class="spotlight">
<div class="image"><img src="images/harmonicsView.png" alt="" /></div><div class="content">
<h4>The harmonics view</h4>
<p>In the harmonics view, we see concentric circles in the middle of the score representation. These are the harmonics of the fundamental frequency, for example 55Hz (which would be the note A in Western convention). The second circle would then be 110Hz, the third 165Hz, fourth 200Hz, and so on. There are lines crossing the circles and these are the sound outputs of the system. In this case we have 8 channels that cross the circle around the performer/listener (who are in the centre).
</p>
</div>
</section>
<section class="spotlight">
<div class="image"><img src="images/scaleView.png" alt="" /></div><div class="content">
<h4>The scale view</h4>
<p>In the scale view we have the same "pitch space" as in the harmonics view, a drone in the same location would not change pitch by switching between the views. It is only the representation that has switched from showing the harmonics of the fundamental frequency to displaying the selected scale in its tuning. On this picture we see a <b><i>major scale</i></b> (two whole steps, one half step, three whole and a half) where the red circles represent the octaves. (55Hz, 110, 220, 440, etc.)</i>
</p>
</div>
</section>
<section class="spotlight">
<div class="image"><img src="images/harmonicsView.png" alt="" /></div><div class="content">
<h4>The drones</h4>
<p>
On this image we also see four "drones" with different waveforms. We can see one sine wave (only one harmonic) and the other waves with varying widths. The width of the drone is the number of harmonics it has until it is cut off with a lowpass filter. The purple drone, for instance, has 5 harmonics before it is attenuated. The cross-hairs on this picture are the sound channels (the speakers) and when a drone overlaps a line, it sounds from that channel.
</p>
</div>
</section>
</section>
<hr />
<header>
<h4>Getting started</h4>
<p>Placing drones in multichannel space</p>
</header>
<p>To start the system from a code editor, you will need to run one line of code:</p>
<pre><code>s.boot;
ThrenoScope.new(8);</code></pre>
<p>This will start the Threnoscope in an 8-channel view, as we see in the images above. Obviously, you would need a sound device with eight channels for this. For a stereo setup, simply replace 8 with 2. The "s.boot" is just to boot the SuperCollider sound server. Having started the system, there is now a global access to the system through the "~drones" variable that contains the key interaction Threnoscope class.</p>
<pre><code>
~drones.drawHarmonics = false
~drones.drawScale = true
~drones.scale = \chromatic
~drones.tuning = \just
~drones.scale =\minor
~drones.tuning = \et12 // 12-tome equal temperament
</code></pre>
<p>Here we have removed the harmonics view and are now drawing the chosen scale. We then choose the "chromatic" scale (every halfnote in the octave, 12 notes) and then set the tuning to "just" intonation. We change the scale to a minor scale and set the tuning back to equal tempered 12-tone tuning.</p>
<hr>
<header>
<h4>Making sounds</h4>
<p>Creating drones, chords and satellites</p>
</header>
<p> The most basic operation of the Threnoscope is to create a new drone:</p>
<pre><code>~drones.createDrone(\saw, 2, harmonics: 3);</code></pre>
This will create a saw wave drone on the 2nd harmonic, with 3 harmonics before the cutoff filter kicks in (so if the system is tuned to a fundamental of 55 Hz, then this drone's frequency will be 110Hz, and the cutoff frequency 330 Hz). </p>
<pre><code>~drones.createDrone(\saw, 2, harmonics: 3, degree: 3, length: 120, speed: 4);</code></pre>
Here we have added more arguments, so the drone will appear on the 3rd degree of the selected scale, so if it was a minor scale it would be a half-tone lower than if it was a major scale, in this case the note of Cb (the lowered third in the scale of A). The length of the drone is in degrees (360 is a full circle) and the speed is self-explanatory.
</p>
<p>The drone is a prolongued note that does not end until you kill it. You will see that when you created it, a name is given to the drone and that is the reference you use to control it (you can set the name of the drone when you create it, with a "name: \myName" argument). There are various parameters that can be done to control the drone:</p>
<pre><code>~oxo.harmonics = 9;
~oxo.length = 330;
~oxo.speed = 15;
~oxo.type = \gendy;
~oxo.resonance = 3;
~oxo.kill; // if you want to kill it now
</code></pre>
The same can also be done with a time lag, so the drone might, for example, move from one tonic harmonic to another slowly, and the harmonics might be changed over time too: <p>
<pre><code>~oxo.tonic_(1, 20); // moving from the 2nd harmonic to the 1st in 20 seconds
~oxo.harmonics_(1, 10); // moving the cutoff frequency of the lowpass filter to the first harmonic in 10 seconds</code></pre>
</p>
Here we use underscore ("_") to indicate two arguments and the 2nd argument is the time it takes (in seconds) for reaching the first argument.
<hr />
<header>
<h5>Stopping Sounds</h5>
<p>How to turn the sound off!</p>
</header>
<p>The most important, and too often neglected, part of sound software documentation is the information on how to turn the sound off. In the Threnoscope you kill the drone, the chord or the satellite with a .kill method, or you can stop everything with a .killAll command.
</p>
<pre><code>~oxo.kill
~oxo.kill(10) // here it takes 10 seconds to fade out
~drones.killAll // kill all the drones
~drones.killAll(3) // kill all the drones in three seconds.
</code></pre>
<hr />
<header>
<h5>Creating Chords</h5>
<p>Creating a cluster of drones</p>
</header>
<p>Sometimes you might want to create more than one drone at the same time. For this you can use "chords" (like piano or guitar chords) and the most typical well-known chords are available in the Threnoscope. Here is the list of chords: "| 5 | minorMajor7th | sus4 | 6 | minor13 | minor7add13 | minorAdd9 | 7s5 | major13 | dominant7th | m7b5 | minorMajor9 | 7s9 | minor6 | major7add13 | 9s11 | 7sus4 | major9sus4 | m7b9 | minor7add11 | minorMajor7thAdd13 | minor9 | add9 | minor11 | 9 | minorMajor7add11 | minorMajor13 | dominant7add11 | minor6add9 | 7b9 | 9b13 | 13 | 7b5 | major7sus4 | 7s5b9 | minor7th | sus2 | 11 | major | minor | m7s5 | dominant7add13 | major7add11 | minorMajor11 | 6sus4 | major9 | major11 | major7th | 9sus4 | 6add9 |"
</p>
<pre><code>~drones.createChord(\saw, \minor, 2)
~drones.createChord(\saw, \dominant7add11, 4, name:\dom7)
~dom7.tonic_(1, 4)
~dom7.harmonics_(10, 4)
~drones.chords // see all the available chords
</code></pre>
<p>The chords have all the methods of the drone, so "harmonics", "tonic", "type" etc. are all available methods. You can also <b>create your own chord</b> by passing in an array with the notes of the scale (the array starts with the index of 1). You can also create a chord out of existing drones.
</p>
<pre><code>~drones.scale = \chromatic
~drones.createChord(\tri, [1, 3, 5, 11], tonic: 4, name: \ixi)
~ixi.kill
~drones.createDrone(\sine, 2, degree: 1, name:\tonic)
~drones.createDrone(\sine, 2, degree: 3, name:\third)
~drones.createDrone(\sine, 2, degree: 5, name:\fifth)
~drones.defineChord(\dog, \tonic, \third, \fifth)
~dog.tonic = 4 // move the new chord up to the 4rth octave
</code></pre>
<hr />
<header>
<h5>Creating Satellites</h5>
<p>A larger cluster of drones moving in space</p>
</header>
<p>Like the chords, the satellites share all the methods of the drone</p>
<pre><code>~drones.createSatellites(\saw, \minor, 8, name: \ooo)
~ooo.num = 40
~ooo.tonic=2
~ooo.speed=10
~ooo.speed={rrand(-20, 30)} // pass a function so each satellite gets a different speed
</code></pre>
<hr />
<header>
<h4>Tunings and Scales</h4>
<p>The inbuilt tunings and scales and the Scala tuning library support</p>
</header>
<p>The Threnoscope supports over 3800 musical scales and tunings through inbuilt scales and tunings and through supporting the <a href="http://www.huygens-fokker.org/scala/">Scala</a> library. Users can also create their own scales and tunings with the Threnoscope's TuningTheory software.
<pre><code>// let's look at the scale view for tunings
~drones.drawHarmonics = false
~drones.drawScale = true
// we move to the chromactic scale (all 12 notes) to see the different tunings
~drones.scale = \chromatic
~drones.tuning = \just
~drones.tuning = \mean6
~drones.tuning = \et12 // the standard western equal tempered tuning
~drones.tuning = \wcSJ // Wendy Carlos' Super Just Tuning
~drones.scale = \minor
~drones.tuning = \et12
// let's try some Scala scales/tunings
~drones.scale = \mean19
~drones.scale = \safi_arabic
~drones.scale = \safi_rahevi
~drones.scale = \solar
~drones.scale = 'bohlen-p' // because of the hyphen we need quotation marks
~drones.scale = 'bohlen-p_9'
</code></pre>
</p>
<hr />
<header>
<h4>Threnoscope Scores</h4>
<p>The score system for automatic play or augmented performance</p>
</header>
<p>The Thenoscope has a very simple scores system that allows users to compose full pieces (deterministic or generative), or simple "licks" that can be called during a performance. These scores can play on their own or during a performance where the live coder is working on their own composition. The score is a simple two-dimensional array, where the first index is the time (in seconds) the code will be executed at, and the second is the SuperCollider code itself. Example:
<pre><code>[ 123.rand, [
[ 0, {~drones.env_([24,5])} ],
[ 1, {~drones.createDrone(\eliane, 2, amp:0.2, name:\eli2, harmonics: 4, speed:0, length:220, angle: 20)} ],
[ 20, {~drones.createDrone(\eliane, 1, amp:0.1, name:\eli1, speed: 0, length:320, angle: 100)} ],
[ 30, {~eli1.harmonics_(10, 20)} ],
[ 40, {~eli1.resonance = true} ],
[ 50, {~eli2.harmonics_(2, 20)} ],
[ 70, {~eli1.resonance_(20, 30)} ],
[ 70, {~eli1.resonance_(20, 30)} ],
[ 110, {~drones.createDrone(\eliane, 3, amp:0.2, name:\eli3a, speed: 5, length:120, angle: 230)} ],
[ 140, {~drones.createDrone(\eliane, 3, amp:0.2, name:\eli3b, speed: -5, length:120, angle: 230)} ],
[ 220, {~eli1.resonance_(2, 30)} ],
[ 330, {~eli2.kill} ],
[ 340, {~eli1.resonance_(1, 15)} ],
[ 350, {~eli3a.kill} ],
[ 360, {~eli3b.kill} ],
[ 400, {~eli1.kill} ]
]]
</code></pre>
</p>
<hr />
<header>
<h4>GUI and Automation</h4>
<p>Controlling the Interface via mouse and keyboard</p>
</header>
<p>The drones in the Threnoscope can be controlled in various ways:
<br>* the drone can be rotated around the circle by clicking on it and moving it
<br>* the drone can be "played" where the keys 1..9 represent the degrees of the chosen scale
<br>* by clicking on the drone, its information appears in the post window (and can be changed there)
<br>* using the arrow buttons, one can scroll through the drones and select them
<br>* any parameter of the drone can be <b>set</b> or <b>recorded</b> by moving the mouse on a slider
<pre><code>~drones.createDrone(\eliane, 2, degree: 5, name: \oxo)
~oxo.setParam(\tonic, 1, 10) // the argument and its low and high values
~oxo.recParam(\harmonics, 1, 10) // move the mouse around to record. On release it will play
</code></pre>
</p>
<hr />
<header>
<h4>MIDI support</h4>
<p>The Threnscope has various MIDI functionality</p>
</header>
<p>Drones can be controlled by MIDI controllers and the system can play MIDI files. However, this is in early stages, and users will need to explore the source code themselves to make the code specific to their own MIDI controller. This code is in the DroneController.sc source code file.
</p>
<hr />
<header>
<h4>Machines</h4>
<p>Automation of drone states through machines</p>
</header>
<p>Machines can be created to change the state of the existing drones (or selected part of them). These can control parameters that can be set through the other interface channels (e.g., tonic, degree, ratio, harmonics, amp, resonance, etc.). Like the MIDI support, this is in early stages.
</p>
<hr />