Shepard-Skala (2)

von | Okt 3, 2023 | Generated, Reaktor, ReaktorAdvanced

Aufmerksame Leser haben sicher bemerkt, dass der vorhergehende Teil eine (1) erhalten hat. Wir brauchen ein Update! Zuviele meiner Schüler sind zu schnell hinter den Trick gekommen, so dass ich hier nachbessern muss…

[01]

© deagreez / Adobe Stock

Um was wird es gehen?

Schüler (Beispielfoto) sind die besten Lehrer! Nachdem ich das erste Tutorial für die Simulation einer Shepard-Skala gepostet und im Unterricht den Mechanismus erklärt hatte – da hatte man auch schon recht schnell raus wie das funktioniert, weil man den „Trick“ wohl zu gut hören kann. Also: zurück ans Reißbrett und ein paar Tage nach Lösungen gesucht. Jetzt ist sie nahezu perfekt.

Ihr erinnert euch? Wir entwarfen ein Oszillator-Macro mit Obertönen, die ganz langsam, von tief bis hoch, durch die Frequenzen liefen. Acht dieser Macros starteten zeitversetzt und begannen nach einem Durchlauf immer wieder von vorne. Sobald alle acht Macros im Einsatz sind, klingt das wie eine ständig ansteigende, aber „oben“ nie ankommende Tonfolge. Leider kann man – wenn man genau hinhört und das Empfinden für Tonhöhen sensibel genug ist, immer wieder hören, wenn eines der Oszillatoren-Macros von „unten“ einsteigt, um sich unter den Rest zu mischen. Was also ist zu tun, um das besser zu kaschieren?

Hier ist meine ToDo-Liste – und die ist nun doch ein wenig anspruchsvoller geworden:

  • Essentiell:
    • Neu startende Oszillator-Macros müssen unauffälliger (also leiser) ins Geschehen eingreifen. Das ist relativ einfach zu bewerkstelligen.
    • Beim Start fahren die Macros einzeln hoch. Eines nach dem anderen, da ja zeitversetzt. Eine kritische Phase, da man hier (trotz der vorhergehenden Maßnahme noch leicht neu hinzukommende Oszillatoren heraushören kann. Das Hörerlebnis ist also am besten, wenn alle Macros in Betrieb sind, weil die Neuankömmlinge dann im Gesamtklang untergehen. Also wäre es gut, wenn das ganze System ab dem Start in einem Status anzutreffen wäre, als würde es schon eine Zeitlang laufen. Das ist ein ziemlich anspruchsvolles Unterfangen, da wir für die erste Runde ein Szenario „in der Zukunft“ schaffen müssen, in dem jeder Oszillator irgendwo innerhalb der Tonleiter steht, und danach in den geregelten Betrieb (also von unten an) übergeht. Und hier hat sich die bisherige Schaltung als Sackgasse erwiesen. Doch dazu später mehr…
  • Nice to have:
    • Mehr „Unschärfe“ im Sound – mit einem Reverb-Effekt machbar
    • Einen HP- und einen LP-Filter, um die gartigsten Frequenzen am obere und unteren Ende zu begrenzen.
    • Mehrere Gruppen von Oszillatoren, die jeweils verschiedene Wiederholraten und Obertonstrukturen haben (optional).

Dann an die Arbeit! Zum Vergleich nochmal die ursprüngliche Variante eines Oszillator-Macros …

Rückblick

Um zu verstehen, was in Teil 2 alles passieren wird, werfen wir noch eimal einen Blick auf den Oszillator des 1. Teils

Abb. 1: Oszillator aus Teil 1

So hörte sich die letzte Version der Shepard-Skala an:

… Und da wollen wir hin:

[02]

Langsames Einblenden des Oszillators

Das ist die einfachste Neuerung, die wir vornehmen werden.

Abb. 2: Macro langsam einblenden

Vorweg: Das Layout hat sich ein klein wenig geändert. Am auffälligsten sind die folgenden Änderungen:

  • Es ist ein Sinus-Oszillator mehr dazugekommen, so dass es jetzt insgesamt 8 Oszillatoren im Einsatz sind.
  • Die Werte für die Obertöne werden nun extern in das Macro geführt. So lassen sich die Macros leichter verwalten, da nicht in jedem Macro die Werte einzeln geändert werden müssen.
  • Das Selbe gilt für den Verzögerungswert am Delay-Eingang.
  • Den Grenzwert am Compare-Element habe ich ebenfalls erhöht, weil das zu einem klanglich besseren Ergebnis führt.

Ansonsten wurden nur die einzelnen Elemente etwas umgeräumg um Platz zu sparen

Die eigentliche Neuerung (das langsame Einblenden des Macros) findet mit dem Multiplikator (farblich hervorgehoben) zwischen Mixer und Ausgang statt. Wir multiplizieren das Ausgangssingal einfach mit dem Ergebnis aus dem Ramp-Oszillator und haben damit automatisch eine Steigerung der Lautstärke. Das war die einfachste Neuerung.

 

[03]

Systemstart in der Zukunft

Dieser Abschnitt ist etwas kniffliger, was man auch an dessen Länge erkennen kann. Bei dieser Gelegenheit werde ich euch auch die Sackgassen und Fehler erläutern, in die ich während dessen gestolpert bin. So könnt ihr sehen, dass diese Tutorials und Problemlösungen nicht immer so souverän entstehen, wie sie am Ende wirken. Das hilft euch auch beim vermeiden von Fehlern.

Abb. 3: Rundenzähler

Vorüberlegung: Um das System bei der ersten Runde „irgendwo mittendrin“ starten zu können, müssen wir feststellen, in welcher Runde wir uns befinden. Wir brauchen also einen Rundenzähler.

Dazu können wir das bereits vorhandene Compare-Element (links oben) verwenden, das jetzt als Grenzwert nicht mehr die Frequenz verwerndet, sondern schlicht die zurückgemeldete Amplitute des Ramp-Oscillators. Das ist einfacher und universeller.
Ist das System frisch gestartet, liegt am >-Ausgang des Compare-Elements eine „0“ an, was in Folge auch beim dahinterliegenden Zähler-Ausgang der Fall ist. Bei jeder neuen Runde, wird nun nicht nur der Ramp-Oszillator zurückgesetzt, sondern auch der Counter um den Wert „1“ erhöht. Wir haben also einen Rundenzähler. Das Abschließende Compare-Element (rechts unten) liefert demnach am <=-Ausgang in Runde 1 eine „1“ und danach eine „0“. Damit können wir in Folge Selectoren steuern, die in der ersten Runde anderer Bedinungen ins System einbringen.
Der StepFilter vor dem Counter blockiert unerwünschte Impulse. Aus welchen Gründen auch immer, hatte ich nach einem Runden-Reset am Zähler nicht einen, sonder 50+ Impulse anliegen. Der StepFilter lässt nur einen Impuls durch und blockiert die folgenden, wenn sie mit dem ersten identisch sind.

Sackgasse: Und jetzt werden wir uns die(!) Sackgasse anschauen. Dieses Problem hat mich länger beschäftigt. Hier stand mir die bisherige Steuerung des Zeitversatzes via Delay-Element im Weg. Aber der Reihe nach:

Abb. 4: Sackgasse

Die Idee war folgende: Wie bereits erwähnt, liefert der Rundenzähler einen Indikator dafür, ob wir uns in der besonderen ersten Runde befinden. Diesen Indikator können wir nutzen, um die Bedinungen für die erste Runde temporär zu verändern. Dafür wäre an zwei Punkten anzusetzen:

  • Der Wert des Ramp-Oszillators müsste in der ersten Runde > „0“ sein, und das bei jedem der Macros mit dem sonst üblichen Zeitversatz.
  • Die Zeitverzögerung darf in der ersten Runde keine Rolle spielen, weil wir sonst wieder das Problem mit den einzeln startenden Macros hätten.

Zu diesem Zweck habe ich zwei Selectoren verwendet, die für Runde 1 abweichende Bedinungen schaffen:

  • Der linke Selector ist für die Amplitute zuständig. Steht der Rundenzähler auf „0“, leitet der Selector einen Offset-Wert weiter, der sich aus einer Konstanten und der Nummer des Macros ergibt. Bei einem Rundenzähler > „1“, wir die Konstante „0“ zum Amplitutenwert hinzu addiert, so dass sich die Amplitute „normal“ verhält.
  • Der rechte Selector sorgt dafür, dass in Runde 1 das Delay-Modul umgangen und erst nach der ersten Runde wirksam wird. Und genau da steckt das Problem!

Betrachten wir hierzu beispielhaft Macro Nr. 2, da das Problem erst ab hier auftritt: Sobald die erste Runde abgeschlossen ist, wird der Ramp-Oszillator zurückgesetzt und der Rundenzähler um „1“ erhöht. Der linke Selector addiert jetzt keinen Offset mehr zur Amplitude und der rechte Selector bindet nun die übliche Verzögerung – also das Delay-Modul – mit ein. Letzteres bedeutet aber auch, dass der Neustart des Ramp-Oszillators um die vorgegebe Verzögerung hinten ankommt und bis dahin noch die alte Amplitute hinter dem Delay-Modul im System hängt. In der Praxis äußerte sich das so, dass das zweite Macro nach dem Reset wieder fast am Ende des Frequenzspektrums startete und erst beim folgenden Reset auf „0“ geht; dort dann im ersten Viertel erneut einen Reset ausführt und sich erst dann wie gewünscht verhält. Das Problem ist schlicht das Zeitmanagement mit einem Delay-Element. Hier muss also eine andere Lösung her, weil sich das Delay selbst im Weg steht. Was sich hier so einfach liest, hat sich in etwas länger hingezogen …

Ausweg: Und so sieht die Lösung aus, die auf das Delay-Modul verzichtet und trotzdem eine Zeitverzögerung für jedes Macro bereitstellt:

Abb. 5: Zeitmanagement ohne Delay-Modul

Die Lösung ist bestechend einfach: Anstatt die Zeitverzögerung mit einem Delay-Modul und angepassten Delayzeiten pro Macro zu regeln, geschieht das Selbe nun über den Offset-Wert, der zu Beginn jedem Macro individuell zugeteilt wird:

0.0625 * (15 – (Macro-Nr. – 1))

Dieser Versatz schleppt nun jedes Macro für die folgenden Runden mit und die umständliche Regelung via Delay-Modul entfällt. Anstatt der Delay-Zeit wird nun die Frequenz für den Ramp-Oszillator von aussen zugeführt (dazu später mehr). Dass dieser mit der Konstanten „1“ multipliziert wird, ist ein Überbleibsel aus der Entwicklungsphase und bietet euch evtl. Raum für eigene Experimente. Ihr könnt diesen Eingang aber auch direkt dem F-Anschluss des Ramp-Oszillators zuführen. 

Hinzugekommen sind auch noch …

  • … ein In-Port „0/1“, mit dem jedes einzelne Macro aus- und eingeschaltet werden kann.
  • … ein Out-Port mit der Nummer des jeweiligen Macros (hier „01“), über den eine Leve-Anzeige angesteuert wird.

Dass diese beiden über In-/Out-Ports laufen und nicht im Macro selbst angesiedelt sind, hat den Hintergrund, dass ich die Benutzeroberfläche ein- und ausblendbar machen möchte. Der Shepard-Effekt funktioniert ganz ohne visuelle Ablenkung besser.

[04]

Struktur

Und so sieht der Shepard-Generator nun aus:

Abb. 6: Struktur – Macro

Der komplette Generator verfüg nun über 16 Macros, deren Innenleben ihr in Abb. 5 kennen gelernt habt. Macro Nr. 1 ist hier farblich hervorgehoben, um die Anbindung zu zeigen.
Alle Macros verfügen über einen Audio-Ausgang, der in einem Amp-Mixer mündet und einem Datenausgang, der in das Stacked-Macro am linken Rand führt.
Die Eingänge der Macros erhalten ihre Daten aus dem Stacked-Macro, das ich im folgenden Foto erklären werde: 

Abb. 7: Struktur – Stacked-Macro

Wie bereits erwähnt, sollen alle Bedienelemente und Anzeigen ein- und ausblendbar sein. So etwas regelt man überlicherweise mit einem Stacked-Macro (mehr dazu hier…).
In dem Stacked-Macro findet ihr zwei weitere Macros: Eines mit der Bezeichnung „OFF“, das schlicht und ergreifend leer ist! Und eines mit der Bezeichnung „ON“, in dem sich alle relevanten Grafiken, Anzeigen und Bedienelemente befinden.
Dass sich über dem Generator noch eine Ebene befindet, könnt ihr daran erkennen, dass der Paramenter für den Panel-Index des Stacked-Macro ein In-Port ist, also von aussen zugeführt wird.

Abb. 8: Struktur – Übersicht

In der obersten Reihe seht ihr das komplette Konstrukt aus Macros und darunter jeweil die darin untergebrachten Schaltungen.

  • Im Macro „GENERATOR“ liegt der eigentliche Shepard-Generator. Dass dieser an einem Mixer hängt, eröffnet euch die Option, einfache einen (oder mehrere) dieser Generatoren zu nutzen. Dazu müsst ihr diese einfach nur duplizieren, den Ausgang mit dem Mixer und den Eingang mit dem In-Port verbinden.
  • Im Macro „REV“ befindet sich ein abgespeckter Reverb-Effekt zum weichzeichnen. Ein Tutorial zu einem Reverb-Effekt bin ich noch immer schuldig…
  • im letzten Macro „FILTER“ findet ihr einen HP- und einen LP-Filter, mit dem der Klang des Generators optimiert werden kann.

[05]

Serviervorschlag

Show & Hide – the Magic!

Abb. 9: Show & Hide – the Magic!

Hörbeispiel

Die neue Shepard-Generator hat die Prüfung durch meine Schüler bestanden.

[06]

Download

g

Shepard 2

.ens-Datei, (Zip-File, 481KB)

Kontakt

Bernd Scheurer
Mainstraße 2
64390 Erzhausen
Fon: 06150 865902
Mobil: 0151 50411034
unterricht@bernd-scheurer.de

Freie Plätze

  • Erzhausen
  • Langen
    • Zur Zeit keine Plätze eingeplant.

Infos

Auch interessant

Newsticker

amazona

tastenwelt

klassik heute

jazz thing

  • Be happy
    Source: jazz thing Published on 2011-07-19 By Lili Lameng
  • Der Jazzmusiker ein Feinschmecker?
    Source: jazz thing Published on 2011-06-06 By Anke Helfrich
  • Glamourfaktor
    Source: jazz thing Published on 2011-04-21 By André Nendza
  • Style
    Source: jazz thing Published on 2011-04-09 By Lorenz Hargassner
  • Topsannah
    Source: jazz thing Published on 2011-03-14 By Lili Lameng

musikexpress