aboutsummaryrefslogtreecommitdiffstats
path: root/README.rst
blob: 992941af37e1bfd380467aea59a767d974c4e022 (plain)
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
ZZZ
###

| |SuperCollider| classes to interface with |expert_sleepers| devices.

Supported devices
-----------------

* |es-3|
* |es-8|

Features
--------

* **SynthDefs** for specific types of signals (clock and gate).
* Class methods to convert between MIDI notes, frequency, amplitude and
  corresponding output voltage.
* Instance methods to add, set and remove clock and gate signals on specific
  hardware outputs.
* Documentation (in *.schelp* format) for the **ZZZ**, **ZZZDevice** and
  **ZZZError** classes.

Installation
------------

The classes are an extension of the |supercollider| language, therefore their
installation corresponds to |quark_installation|.

Usage
-----

To create an object interfacing your hardware device, instantiate the
**ZZZDevice** class with an Array of Integers representing your eight ADAT
channels connected to the module and the server instance in use:

  .. code:: supercollider

    // RME Babyface example, when creating output bus channels for all hardware
    // outputs of the audio interface
    ~device = ZZZDevice.new(server: s, channels: Array.series(8, 4, 1));

  .. note::

    | The instantiation of *ZZZDevice* conveniently makes the outputs of the
      device available in a numbering range from 1-8 (as displayed on the
      hardware).
    | Generally, in |supercollider| channel numbering starts with 0, though!

To interface with your module on one of the eight outputs, you can make use of
the *SynthDefs* added by the *ZZZ* class:

  .. code:: supercollider

    // create a tempo (240bpm), which can be used by e.g. multiple clocks on outputs
    ~device.addTempo(slot: 1, tempo: (240/60));
    
    // the tempo can be changed manually
    ~device.setTempo(slot: 1, tempo: (180/60));
    
    // start clock on output 8 using the tempo at slot 1
    ~device.addClock(output: 8, slot: 1);
    
    // remove the clock
    ~device.removeClock(output: 8);

  .. code:: supercollider

    // start a gate  on output 7
    ~device.addGate(output: 7);

Both tempos and gates can be altered using control *Busses* exposed in
*.tempoBusses* and *.gateBusses* (respectively).

Background
----------

| Modular synthesizers are controllable through several ranges of voltage.
| However, |cv_gate| as defined by |doepfer| in the |a100_manual| might not be coherently
  used throughout all Eurorack modules.
|
| The *ZZZ* classes nonetheless try to adhere to the standard, while at the
  same time providing convenience functions to low-level conversion.
| By default the helper functions are able to convert frequencies in the
  |c_musical_note| (between *C-2* and *C10*) to an output between -5V and 7V
  (adhering to the 1V/octave scheme) - the MIDI note range being a subset of it.
| As the range is not fixed, but can be moved up and down (e.g. when using
  filters or oscillators), you might have to make some adjustments to your
  module, to get "in tune".

License
-------

This code is licensed under the terms of the GPL-3.0-or-later.

.. |supercollider| raw:: html

  <a href="https://supercollider.github.io/" target="_blank">SuperCollider</a>

.. |expert_sleepers| raw:: html

  <a href="http://www.expert-sleepers.co.uk/" target="_blank">Expert Sleepers</a>

.. |es-3| raw:: html

  <a href="http://www.expert-sleepers.co.uk/es3.html" target="_blank">ES-3</a>

.. |es-8| raw:: html

  <a href="http://www.expert-sleepers.co.uk/es8.html" target="_blank">ES-8</a>

.. |quark_installation| raw:: html

  <a href="https://github.com/supercollider-quarks/quarks#installing-a-quark" target="_blank">the way quarks are installed</a>

.. |cv_gate| raw:: html

  <a href="https://en.wikipedia.org/wiki/CV/gate" target="_blank">CV/Gate</a>

.. |doepfer| raw:: html

  <a href="http://www.doepfer.de" target="_blank">Doepfer</a>

.. |a100_manual| raw:: html

  <a href="http://www.doepfer.de/a100_man/a100t_e.htm" target="_blank">A100 manual</a>

.. |c_musical_note| raw:: html

  <a href="https://en.wikipedia.org/wiki/C_(musical_note)" target="_blank">range of 12 octaves</a>