Vor ein paar Tagen schreibe ich noch etwas Minimalismus in Bezug auf die Auswahl der Tools und heute komme ich mit einem neuen Sequenzer daher. Aber ORCA hat mich dermaßen von den Socken gehauen, dass dieses Tool in meinen Werkzeugkasten muss.

Wenn man ORCA startet sieht man erstmal … nix!

Ich weiß garnicht wo ich anfangen soll. Ich starte mal ganz von vorne. ORCA wurde im Sommer letzten Jahres von dem Kreativduo Hundred Rabbits veröffentlicht. Dieses Duo sind Rekka und Devine, einer Illustratorin / Autorin und einem Programmierer / Musiker, die Hundred Rabbits auf See betreiben … sie sind nämlich mit dem Segelboot unterwegs und wohnen auch auf diesem. Ja, so schön kann ein Developer Leben sein…

Und während sie ständig über alle sieben Weltmeere schippern, schreiben sie Geschichten, zeichnen fleissig und programmieren Spiele und abgefahrene Tools. Logischerweise dokumentieren die beiden auch ihre Erlebnisse auf hoher See und in fremden Ländern in Videos und in einem Blog.

Und wenn das nicht schon alles abgefahren genug wäre veröffentlichen sie ihre Kreationen auch noch Open Source. Sie hoffen natürlich, das genügend Leute ihre Arbeit unterstützen und eventuell auch etwa Geld dafür geben. Für die, die dies aber nicht können, sind ihre Arbeiten auch kostenlos nutzbar.

ORCA

Heute geht es aber nur um eines ihrer Tools und das ist ORCA. Ich habe den Entwickler vor ein paar Tagen gefragt, ob der Name eine bestimmte Bedeutung habe und er meinte, dass es sich hierbei ebenfalls um ein schwarz-weißes Monster handle, ganz wie sein Namensvetter aus den nördlichen Meeren.

ORCA ist ein Sequenzer mit dem man andere Applikationen steuern kann. Besser gesagt, ORCA ist eine Entwicklungsumgebung für eigene Sequenzer … noch besser: eine Modularsystem zum Bauen eigener prozedualer Sequenzer. Mit diesen Sequenzern kann man dann andere Applikationen ansteuern. Entweder verschiedene Instrumente in einer DAW oder VCV Rack, SuperCollider … eigentlich alles, was man mit Midi, UDP oder auch OSC triggern kann. ORCA wurde mit der Idee des Live-Codings entwickelt. D.h. im Grunde war ORCA für den Einsatz auf der Bühne geplant. Allerdings macht er auch im heimischen Schlafzimmer-Studio viel Sinn.

Und da diese Entwicklungsumgebung nicht wirklich selbsterklärend ist und absolut anders tickt als andere Artgenossen, ist dies der Versuch einer Anleitung. Denn es gibt nicht wirklich eine Dokumentation. Nur eine Übersicht der „Befehle“ und Möglichkeiten. Vor einem Monat hat schon jemand angefangen einige Video Tutorials zu erstellen, die aber leider noch nicht ganz vollständig sind. Eigentlich wollte ich ORCA nur in der kleinen Reihe über Ungewöhnliche Wege Rhythmen zu programmieren vorstellen, aber ich musste einfach etwas weiter ausholen und mich deutlicher verneigen. Aus diesem Grund wird dieser Beitrag etwas länger.

Ich hatte am Anfang zumindest recht viel Mühe einige grundlegende Konzepte zu verinnerlichen und wenn man sich mal ganz kurz ORCA bei seiner Arbeit ansieht, kann man auch verstehen warum … wer also bei einem Tracker schon die Augen verdreht und auf Durchzug schaltet, der kann jetzt mal schnell wieder diesen Beitrag verlassen 😉

ORCA mit VCV Rack in Action …

Wenn man ORCA startet, sieht man zunächst ein schwarzes Editor-Fenster mit einem Grid aus Punkten und eine weitere Unterteilung dieses Grids mithilfe von Pluszeichen.Außerdem sieht man einen Cursor (in orange), den man mithilfe der Pfeiltasten über das Grid bewegen kann.

Am unteren Rand sieht man ganz links zunächst die Anzahl der sichtbaren Felder (z.B. 80×40 -> Breite x Höhe). Diese Matrix kann man ändern, wenn man des Fenster beispielsweise an den Rändern größer zieht. Darunter sieht man in welchen dieser Felder sich der Cursor gerade befindet. Das erste Feld oben links wäre dann dementsprechend 0,0 (Spalte, Zeile).

Am unteren Rand des Fenster gibt es einige Infos.

Daneben sieht man die Größe des Grids (begrenzt durch die Pluszeichen). Der Standardwert ist 8/8. Mit ALT+5 bzw. ALT+6 kann man das Grid horizontal verkleinern bzw. vergrößern. Mit ALT+8 bzw. ALT+9 dementsprechend vertikal verkleinern bzw. vergrößern. Darunter sieht man die Größe des Cursors. Standardmäßig ist dieser ein Feld groß (1:1). Mithilfe der SHIFT+Pfeiltasten kann man diesen horizontal und vertikal vergrößern.

Man kann übrigens auch das Grid zoomen. Falls einem diese Ansicht etwas zu klein ist, wird das Grid mit CMD+= heran gezoomt und mit CMD+- wieder heraus gezoomt. Mithilfe von CMD+0 (null) erreicht man wieder die Standard-Zoomstufe.

Der Cursor erstreckt sich nun über 5 x 4 Felder.

Etwas weiter rechts sieht man dann das Wort „blank“. Zum Zeitpunkt dieses Artikel bin ich tatsächlich noch überfragt, was dieses Feld anzeigt… Dort steht der Dateiname des aktuellen Projekts. Wenn noch nichts abgespeichert wurde, dann steht hier halt noch „blank“ nach dem ersten Sichern wird dann der vergebene Dateiname angezeigt.

Darunter wird der Inhalt des Feldes, auf dem sich der Cursor gerade befindet, angezeigt. Wenn man auf einem leeren Feld steht, dann steht dort einfach „empty“. Ansonsten wird dort der Name des Operators angezeigt oder eben der Name eines Ein- oder Ausgangs oder aber auch die Bezeichnung eines Parameters. Da die Operatoren und Parameter relativ kryptisch daherkommen, ist diese Anzeige äußerst sinnvoll – besonders wenn man relativ frisch in ORCA herumwurschtelt.

Wieder ein Feld weiter rechts wird nun die aktuelle Geschwindigkeit der Sequenzer in BPM (Beats per Minute angezeigt). Standardmäßig sind hier 120 BPM voreingestellt. Mithilfe von < und > kann man diesen Wert aber niedriger bzw. höher einstellen. Mithilfe von CTRL+SPACE kann man auch externe Midi-Clocks durchschalten. Falls man die Geschwindigkeit von einer externen Applikation empfangen will.

Darunter wiederum sieht man die aktuelle Frame-Nummer. Beim Start von ORCA „läuft“ der Sequenzer quasi schon gleich mit den eingestellten BPM. Die Frames werden fortlaufend um 1 erhöht. Ich hatte am Anfang etwas Schwierigkeiten herauszufinden, wie die Frames und die BPM zusammenhängen. Der Entwickler sagte, dass für jeden Beat ein Frame gerendert wird und dass 4 Frames einem Takt entsprechen.

Ich denke er hat sich da wohl etwas versprochen. Denn 1 Frame entspricht einem 1/16 Takt, 4 Frames sind dann eine 1/4 Takt (1 Beat) und 16 Frames entsprechen einem Takt (4 Beats). Eigentlich ganz einfach.

Wenn man sich jetzt noch ein wenig das Menü in der Menüleiste oben ansieht, dann fallen sicherlich die Menüpunkte Program und Midi ins Auge. Im Program-Menü findet man nochmal alle Sachen, die gerade eben besprochen habe, Ändern der Grid-Größe, Play und Stop, Ändern der Geschwindigkeit und Resetten der Frames.

Im Midi-Menü kann man sich den Midi-Treiber aussuchen, über den ORCA mit anderen Applikationen kommuniziert. Unter OsX beispielsweise gibt es den Standardtreiber IAC, mit dem man intern per Midi mit verschiedenen Applikationen sprechen kann. Wenn ich hier z.B. IAC Treiber Bus 1 auswähle und den gleichen Treiber im Midi-1 Modul von VCV-Rack, dann empfängt das Midi-1 Modul in VCV-Rack die entsprechenden Midi-Noten, die ich mit ORCA sende.

ORCA und VCV Rack spielen ganz hervorragend miteinander…

Operatoren

ORCA verfügt über 31 Operatoren, einen für jeden Buchstaben des Alphabets plus fünf Sonderzeichen. Jeder dieser Operatoren verfügt über Eingänge, Ausgänge und sonstige Parameter. Mithilfe der Anzeige am unteren Fensterrand kann man lesen, was der jeweilige Operator bzw. dessen Parameter machen.

A wie Addieren

Der Operator A (Add) addiert seine beiden Eingänge und zwar bei jedem neuen Frame, d.h. wenn der Sequenzer läuft, wird in jedem Frame die Summe von Eingang a und Eingang b neu addiert. Die beiden Summanden stehen gleich rechts neben dem Operator und die Summe wird direkt darunter ausgegeben.

4 + 5 = 9

An dieser Stelle noch eine wichtige Sache. Jeder Parameter in ORCA hat immer Platz auf einem Feld! Daher kann man bei A auch nicht 10 und 12 daneben schreiben. Aus diesem Grund benutzt ORCA ein Zahlensystem zur Basis 36. Das Base36 System ist sinnvoll, da man hier die Ziffern 0-9 und die Character a-z nutzen kann. a steht dann also für 10, g für 16 und z für 35. Ich kann also maximal 35 (z) als Summe erhalten, denn auch hier habe ich natürlich nur eine Stelle zur Verfügung. Wenn ich nun 1 + z rechne (1 + 35), bekomme ich wieder 0. Muss man sich einfach dran gewöhnen.

B wie Bool

Bool steht in einigen Programmiersprache als Abkürzung für eine Boolesche Variable (boolean). Eine Boolesche Variable kann nur zwei Zustände annehmen: 1 oder 0 (wahr oder falsch). D.h. in diesem Fall, dass B nur einen Bang sendet oder eben ein Signal triggert, wenn der Eingang einen Wert ungleich 0 hat. Wenn am Eingang 0 anliegt, dann passiert nichts. Allerdings gilt auch hier, wie bei allen Parametern dass das Ergebnis immer nur zu jedem neuen Frame „berechnet“ wird. Wenn der Sequenzer also nicht läuft, wird auch nichts (neues) berechnet.

Eine 1 bedeutet wahr.

C wie Clock

Die Clock C gibt einen Konstante aus, basierend auf der Framerate. D.h. bei jedem neuen Frame (1/16 Takt) wird eine Zahl ausgegeben. C kann zwei Parameter enthalten. Standardmäßig gibt C bei jedem 1/16 Takt eine Zahl zwischen 0 und 9 aus. Der rechte Parameter (C-mod) bestimmt wie weit C jeweils zählt. Wenn ich für C-mod beispielsweise eine 3 angebe, dann zählt C maximal bis 2 (0, 1, 2), wenn ich ein z angebe, dann zählt C maximal bis y (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) … ich denke das Prinzip ist klar.

Der linke Parameter C-rate ist ein Multiplikant für die Geschwindigkeit. Wenn dort nichts steht wird pro Frame hochgezählt (1/16 Takt), wenn man eine 4 angibt, dann wird alle 4 Frames hochgezählt (1/4 Takt) und wenn man ein g (16) angibt, dann wird alle 16 Frames (1 Takt) hochgezählt.

Es wird jede 1/4 Note um ein inkrementiert und nach 9 wieder bei 0 begonnen…

D wie Delay

Delay ist ähnlich wie Clock, gibt aber anstatt von Zahlen Signale in der Framerate aus, dass man dann beispielsweise direkt per Midi an eine andere Applikation leiten könnte. Wenn man D ohne Parameter benutzt wird alle 2 bpm (1/2 Takt) ein Trigger / Bang / Signal ausgegeben.

Der rechte Parameter dividiert den Takts quasi. Wenn eine 1 dort steht, dann wird im 1/16 Takt ein Bang ausgegeben, wenn dort eine 2 steht, dann im 1/8 Takt und wenn dort eine 4 steht, im 1/4 Takt. Eine 8 hat einen Bang pro 1/2 Takt zur Folge, also genauso schnell als würde gar kein Parameter angegeben.

Der linke Parameter multipliziert den rechten Parameter einfach nur. Wenn rechts eine 4 steht und links eine 4, dann wäre es quasi dasselbe, als würde rechts eine 16 stehen (1 Takt) -> 4 x 4.

E wie East (Osten)

Gibt ein Signal aus, dass einfach immer nach Osten läuft bis es auf einen anderen Operator trifft 😀 Das klingt erstmal seltsam, aber wir werden später noch sehen wie nützlich dieser Operator ist.

F wie If (wenn…)

Ein IfOperator, wie man ihn auch von anderen Programmiersprachen kennt. Wenn dies und das erfüllt ist, dann passiert jenes. In ORCA bedeutet das, dass F ein Signal sendet, sobald Parameter 1 und Parameter 2 gleich sind.

Im unteren Screenshot sieht man, dass der erste F Operator ein Signal ausgibt, denn wenn beide Parameter leer sind, dann sind sie halt auch gleich 😉 Der F Operator in der Mitte gibt kein Signal aus, weil 1 von 2 verschieden ist und der letzte F Operator gibt wieder ein Signal aus, denn 5 = 5.

G wie Generator

G generiert in der Ferne einen Operator. D.h. G besitzt zunächst 3 Parameter auf der linken Seite. Der erste gibt den horizontalen Offset des entfernt zu generierenden Operators an und der zweite den vertikalen Offset. Wenn also Parameter 1 auf 2 gesetzt wird und Parameter 2 auf 3, dann erscheint der neue Operator 2 Felder tiefer und 3 Felder weiter rechts.

Damit aber überhaupt etwas erscheint, muss der dritte Parameter angegeben werden, dieser bestimmt die Anzahl der zu generierenden Operatoren. Hier geben wir der Einfachheit halber erstmal eine 1 an. Jetzt erscheint rechts von G ein weiterer Parameter und hier kann man nun explizit angeben, welcher Operator generiert werden soll. In dem Beispiel unten generiere ich einen Add Operator… wie bereits erwähnt: 2 Felder tiefer und 3 Felder weiter rechts.

Auch hier werden wir später noch sehen, wie nützlich das ist…

H wie Halt

Der H Operator stoppt jegliche Tätigkeit des genau unter ihm liegenden Operators. Wenn ich jetzt beispielsweise irgendwo einen Add Operator stehen habe, der 1 und 2 addiert und ich direkt darüber ein H setze, dann macht A gar nichts mehr … ebenso würde jeder andere Operator schlichtweg seinen Dienst verweigern.

Halt!

I wie Increment (Zähler)

I ist ein Zähler, der in der Geschwindigkeit der Frames zählt. Der erste Parameter gibt den Minimalwert an und der zweite Parameter den Maximalwert, der aber nicht eingeschlossen ist. Im unteren Beispiel hat der erste I Operator als Minimalwert eine 0 und als Maximalwert eine 5. D.h. nun, dass I von 0 bis 4 hochzählt, in einer Schleife – also immer wieder von vorne anfängt.

Der zweite I Operator hat als Minimalwert eine 5 und als Maximalwert eine 0 … klingt sinnlos, aber nun zählt I runter, von 4 bis 0

ein einfacher, aber flexibler Zähler.

J wie Jumper (Weiterleitung nach Süden)

Der J Operator ist wie eine kurze Verbindung, die den Output eines Operators einfach nach unten weiterleitet. Nicht mehr und nicht weniger, aber verdammt nützlich, wenn man viele Operatoren bei einander hat, die irgendeine Seqrunz erzeugen. Da kann es schonmal eng werden und diese Jumper schaffen dann Platz nach unten 😉

Weiterleitung nach Süden…

K wie Konkat (Verbinden)

Die offizielle Seite sagt, dass dieser Operator mehrere Variablen ausgibt. K hat einen Parameter auf der linken Seite, wo ich eine Zahl eingeben kann, die dann die Anzahl der Variablen rechts bestimmt.

L wie Loop (Schleife)

L durchläuft eine Schleife, die einen Operator (z.B. einen Bang) auf der rechten Seite immer wieder abspielt (Schleife). Mit dem Parameter auf der linken Seite kann man die Größe (Anzahl der Felder) der Schleife angeben.

M wie Modulo (Rest)

Modulo ist ein mathematischer Operator, der den Rest einer Division ausgibt. Auf der rechten Seite gebe ich die beiden Parameter an. Wenn ich z.B. eine 9 und eine 2 eingebe, dann wird 9/2 gerechnet, das ergibt 4 + 1 als Rest. Das Ergebnis wäre in diesem Fall also 1. Wenn ich 8/2 rechne, dann ist das Ergebnis 0, weil die Division genau aufgeht.

N wie North (Norden)

N ist ähnlich wie E (East). Dieser Operator gibt also ein Signal aus, dass einfach immer nach Norden läuft bis es auf einen anderen Operator trifft 😀 Das klingt ebenfalls erstmal seltsam, aber wir werden später ebenfalls noch sehen wie nützlich dieser Operator ist.

O wie Offset

Offset ist ganz praktisch. Mit diesem Operator kann man einen Operator – oder besser gesagt, dessen Ausgabe – übernehmen, der weiter entfernt ist. Mit den beiden Parameter auf der rechten Seite gibt man den Offset an (vertikal und horizontal) wo sich entsprechender Operator befindet. Ähnlich wie G, nur anders.

P wie Push

Ähnlich wie G, auf der linken Seite kann ein Offset angegeben werden (horizontal) und die Anzahl der Stellen. Auf der rechten Seite ein Operator, der dann an der besagten Stelle ausgegeben wird.

Q wie Query

Q ist ähnlich wie Offset, aber man kann links zusätzlich noch die Anzahl der Operatoren, die gelesen werden sollen angeben. Der erste Operator muss genau beim Offset liegen und falls weitere gelesen werden sollen, müssen diese direkt rechts folgen.

R wie Random (zufällig)

R gibt einfach zufällige Werte aus. Dieser Operator ist äußerst nützlich. Rechts können zwei Parameter angegeben werden. Der erste beschreibt die untere (eingeschlossene) Grenze der Zufallszahlen und der zweite Parameter gibt die obere (ausgeschlossene) Grenze an. Die Zufallszahlen werden dann für jedes Frame innerhalb dieser Grenzen permanent generiert.

S wie South (Süden)

S ist genauso wie N (North) oder wie E (East). Dieser Operator gibt also ein Signal aus, dass einfach immer nach Süden läuft bis es auf einen anderen Operator trifft.

T wie Track

Liest östlich liegende Operatoren. Auf der rechten Seite gibt man zunächst den Offset auf der rechten Seite an. Und als zweiten Parameter die Anzahl der Operatoren. Man könnte nun also rechts quasi eine kleine Sequenz von Noten schreiben und dann das Offset mit einem Zähler oder der Clock durchlaufen lassen. Die Noten übergebe ich dann beispielsweise an einen Midi-Operator. Einfacher kann man einen Step-Sequenzer kaum bauen.

U wie Uturn

Uturn ist relativ simpel. Er kann in alle vie Himmelsrichtungen Parameter aufnehmen, oder besser gesagt abprallen lassen. Denn wenn einer der N, S, W oder E Operatoren auf U treffen, werden sie einfach in die entgegengesetzte Richtung „zurückgeschlagen“

V wie Variable

Liest und schreibt global zur Verfügung stehende Variablen.

W wie Westen

Genauso wie N, E oder S.

X wie Teleport

Schreibt einen entfernt liegenden Operator mit Offset.

Y wie JYmper

Y funktioniert eigentlich genauso wie J, nur das nicht nach unten weitergeleitet wird, sondern nach rechts.

Z wie Zoom

Ähnlich wie E, allerdings taucht Z im Westen wieder auf, wenn er auf einen Operator trifft. Damit könnte man dann auch eine einfach Schleife bauen.


* wie Bang

Einen Bang kann man natürlich auch manuell setzen. Ein Bang triggert einfach ein benachbartes Objekt, egal ob per Hand gesetzt oder erzeugt.

# wie Comment (Kommentar)

In jeder Programmiersprache gibt es Kommentare. Diese sind nützlich und auch erforderlich. Auch ORCA ist schwer zu verstehen, wenn man sich einen Patch eines anderen anschaut oder einen Patch wieder nutzt, den man vor Wochen erstellt hat.

: wie Midi

: sendet eine Midi Note. Dieser Operator besitzt 5 Parameter:

  • Midi-Channel
  • Oktave
  • Note
  • Velocity
  • Notenlänge

Sobald ein Bang auf den Midi Operator trifft, wird diese Note ausgelöst und eine andere Applikation könnte diese in ein hörbares Audio-Signal umwandeln.

Im folgenden kurzen Video sieht man gleich wie einfach man eine simple Sequenz baut. Zunächst nehme ich einen Track-Operator und mache einen Step-Sequenzer mit 16 Steps (0 bis g). Dann nutze ich einen Clock-Operator um durch diese Sequenz zu laufen. Außerdem ändert ein Random-Operator ständig die Velocity, die in VCV Rack dann zwei Parameter des Kickdrums verändert:

Das wäre es eigentlich zu ORCA. Wenn ich etwas mehr Zeit habe mache ich sicherlich mehr Videos zum Thema. Auf jeden Fall lohnt es sich mit ORCA mal etwas herumzubasteln, besonders mit VCV Rack ist die IDE recht nützlich (…nicht dass VCV Rack nicht schon genügend Sequenzer an Bord hätte … 😉 ).

Ansonsten empfehle ich definitiv den YouTube Kanal von Allieway Audio und besonders da Einführungsvideo zu ORCA.

Es gibt momentan nicht allzu viele Resourcen zum Erlernen von ORCA. Die Website bietet leider nicht sehr viel Informationen. Aus diesem Grund habe ich diesen kleinen Rundgang geschrieben…