Für eine gestufte Zufallsmodulation wird in regelmäßigen Abständen ein neuer Wert gewählt und bis zur nächsten Aktualisierung beibehalten. Dieser REAPER-Workflow verwendet einen synthetischen Ton und einen kleinen benutzerdefinierten JSFX-Verstärkungseffekt, um zufällige Lautstärkestufen mit festgelegter Dauer und festgelegtem Wertebereich zu erzeugen.

Die Aufgabe ist bewusst eng gefasst: Ein anhaltender Ton soll unvorhersehbar den Pegel ändern, ohne kontinuierlich zwischen Pegeln überzublenden. Für die automatische Methode muss das vollständige Effektprogramm einmal kopiert werden. In einem späteren Abschnitt wird erklärt, wie Sie mit den nativen Automationshüllkurven von REAPER eine editierbare, wiederholbare Treppe erstellen.

Was macht eine Zufallsmodulation gestuft?

Drei Entscheidungen bestimmen das Ergebnis: wann sich ein Wert ändert, welcher neue Wert gewählt wird und wie der Effekt zu diesem Wert übergeht. Bei diesem Workflow ist das Timing regelmäßig, der Pegel pseudorandom und der Übergang unmittelbar. Zwischen den Aktualisierungen bleibt die Verstärkung konstant.

Eine beispielhafte Folge könnte −15 dB für 250 Millisekunden halten, für die nächsten 250 Millisekunden auf −9 dB springen und dann auf −18 dB. Diese Zahlen veranschaulichen das Verhalten; sie sind weder Messwerte noch eine garantierte Ausgabefolge.

REAPERs Parameter-Modulationssystem bietet einen LFO mit den Steuerelementen Speed, Strength, Phase und Richtung. Das Automationssystem bietet separat Square-Punkte für Hüllkurven. Das sind unterschiedliche Werkzeuge: Die LFO-Geschwindigkeit steuert die Modulationsrate, während quadratische Hüllkurvensegmente festgehaltene Werte zwischen Punkten definieren. Siehe Kapitel 18 und 19 von Up and Running: A REAPER User Guide.

Der folgende benutzerdefinierte Effekt macht das Halteverhalten im Code explizit. Er verarbeitet die Stereoverstärkung direkt; er richtet keine universelle Quelle für gestufte Zufallswerte für jeden anderen Plug-in-Parameter ein.

Einen anhaltenden synthetischen Ton vorbereiten

Beginnen Sie mit einem leeren REAPER-Projekt und einer Spur. Fügen Sie ReaSynth zur FX-Kette dieser Spur hinzu. REAPER beschreibt ReaSynth als Synthesizer, der über MIDI-Items gespielt werden kann; Sie benötigen also weder eine Aufnahme noch eine externe Audiodatei. Zu den Steuerelementen gehören Ausgangslautstärke, Sustain und Wellenformmischungen. The REAPER Cockos Effects Summary Guide, ReaSynth.

Verwenden Sie diese einfache Quelleneinrichtung:

  1. Stellen Sie das Projekttempo auf 120 BPM ein und verwenden Sie einen Abschnitt mit vier Takten im 4/4-Takt.
  2. Wählen Sie die Spur aus und erstellen Sie eine Zeitauswahl über diese vier Takte.
  3. Wählen Sie Insert → New MIDI Item.
  4. Doppelklicken Sie auf das MIDI-Item, um den MIDI-Editor zu öffnen. Zeichnen Sie eine Note und ziehen Sie deren rechten Rand über das ganze Item.
  5. Stellen Sie in ReaSynth zunächst Volume auf etwa −12 dB und Sustain auf 0 dB. Lassen Sie Square mix, Sawtooth mix und Triangle mix auf null, um einen einfachen Ton zu erhalten.

Der Ablauf zum Erstellen und Bearbeiten von MIDI-Items ist in Kapitel 13 des REAPER User Guide dokumentiert. Das hier angegebene Tempo sowie die Dauer- und Pegelwerte sind Beispiele und keine Anforderungen der Anwendung.

Spielen Sie den Abschnitt ab, bevor Sie die Modulation hinzufügen. Vergewissern Sie sich, dass die Spur einen anhaltenden Ton erzeugt. Falls der Ton vorzeitig endet, prüfen Sie die Notenlänge und die Sustain-Einstellung. Die sich ändernde Verstärkung lässt sich leichter beurteilen, wenn die Quelle selbst einen konstanten Pegel hält.

Einen Effekt hinzufügen, der jeden Zufallspegel hält

JSFX ist REAPERs integriertes System für Effekte, die als Textprogramme geschrieben werden. REAPER kompiliert sie beim Laden; für dieses Beispiel ist keine externe Programmierbibliothek erforderlich. Die Struktur folgt der offiziellen JSFX Programming reference.

Öffnen Sie View → FX Browser. Wählen Sie im Menü FX des Browsers Create new JS FX und geben Sie dem Effekt einen eindeutigen Namen, etwa Stepped Random Gain. Öffnen Sie den Quelltext mit Edit JS FX, ersetzen Sie den Inhalt der Vorlage durch das vollständige Programm unten und speichern Sie es. Diese Befehle zum Erstellen und Bearbeiten sind in Abschnitt 16.16 des REAPER User Guide dokumentiert.

desc:Stepped Random Gain
slider1:250<20,2000,1>Step duration (ms)
slider2:-18<-60,0,0.1>Level endpoint A (dB)
slider3:-6<-60,0,0.1>Level endpoint B (dB)
in_pin:Left
in_pin:Right
out_pin:Left
out_pin:Right

@init
remaining = 0;
gain = 1;

@slider
interval_samples = max(1, floor(srate * slider1 / 1000 + 0.5));
low_db = min(slider2, slider3);
high_db = max(slider2, slider3);
remaining = 0;

@sample
remaining <= 0 ? (
  level_db = low_db + rand(1) * (high_db - low_db);
  gain = 10 ^ (level_db / 20);
  remaining = interval_samples;
);

spl0 *= gain;
spl1 *= gain;
remaining -= 1;

Dies ist ein vollständiger Stereo-Audioeffekt, kein Codefragment. Fügen Sie ihn nach ReaSynth in die FX-Kette der Spur ein. Falls sein Name nicht angezeigt wird, löschen Sie den Suchfilter im FX-Browser.

Das Programm verwendet rand(1), um einen Pseudozufallswert zu erhalten, und bildet diesen Wert auf den Bereich zwischen den beiden dB-Endpunkten ab. Die bedingte Syntax, der Exponentenoperator und die Zufallsfunktion der Sprache sind unter JSFX Programming Reference — Language Essentials dokumentiert.

Der Zähler verwendet srate, REAPERs aktuelle Abtastrate. Jedes Sample wird mit derselben gespeicherten Verstärkung verarbeitet, bis der Zähler abläuft. Beide Kanäle erhalten diese Verstärkung, der Effekt randomisiert ihre Pegel also nicht unabhängig voneinander. REAPER dokumentiert srate, spl0 und spl1 unter JSFX Programming Reference — Special Variables.

Das Programm wurde anhand dieser Referenzen geprüft. Außerdem wurde seine Zählerarithmetik separat bei 44,1 und 48 kHz überprüft; der JSFX selbst wurde für diesen Artikel nicht in REAPER ausgeführt.

Schrittdauer und Pegelbereich festlegen

Beginnen Sie mit Step duration (ms) auf 250, Level endpoint A (dB) auf −18 und Level endpoint B (dB) auf −6. Mit diesen Einstellungen wird viermal pro Sekunde ein neuer Dämpfungswert gewählt. Jeder gewählte Wert bleibt während des gesamten Intervalls bestehen, sofern Sie keine Einstellung ändern.

Die Endpunkte geben die Verstärkung an, die nach dem Synthesizer angewendet wird. Es handelt sich nicht um Zielwerte für die Ausgangsanzeige. −6 dB entsprechen beispielsweise einem Sample-Multiplikator von etwa 0,501, während −18 dB etwa 0,126 entsprechen. Das Quellsignal und die nachfolgende Spurbearbeitung bestimmen weiterhin den endgültigen Ausgangspegel.

Gewünschtes Verhalten Beispielwert Änderung
Langsame, deutliche Plateaus 1.000 ms Ein neuer Pegel pro Sekunde
Mittlere Stufung 250 ms Vier neue Pegel pro Sekunde
Schnellere Stufung 125 ms Acht neue Pegel pro Sekunde
Geringere Pegelunterschiede Endpunkte −9 und −6 dB Ein engerer Auswahlbereich
Konstante Dämpfung zum Vergleich Beide Endpunkte auf −6 dB Jede Auswahl ergibt dieselbe Verstärkung

Bei 120 BPM dauert eine Achtelnote 250 Millisekunden: 60 Sekunden geteilt durch 120 Schläge, anschließend geteilt durch zwei. Dies ist eine beispielhafte Timing-Berechnung. Der bereitgestellte Effekt verwendet Millisekunden, folgt keinen Tempoänderungen und richtet seine Schritte nicht am musikalischen Raster des Projekts aus.

Die Endpunkte können in beliebiger Reihenfolge eingegeben werden, da das Programm sie sortiert. Wenn Sie einen Schieberegler ändern, beginnt beim nächsten verarbeiteten Sample ein neues Intervall. Der Zufallspegel wird ohne Interpolation gehalten, auch wenn zwei aufeinanderfolgende Werte zufällig nahe beieinanderliegen können.

Stattdessen eine editierbare, wiederholbare Treppe erstellen

Verwenden Sie eine Automationshüllkurve, wenn Sie genaue Werte an genau festgelegten Positionen auf der Zeitleiste möchten. Dies ist auch der unterstützte native Weg, festgehaltene Änderungen auf einen sichtbaren Effektparameter anzuwenden. REAPER dokumentiert Parameterhüllkurven und die Punktform Square in Kapitel 18 seines User Guide.

Für ein festes Lautstärkemuster deaktivieren Sie zunächst den benutzerdefinierten JSFX-Effekt. Öffnen Sie die Hüllkurvensteuerung der Spur und blenden Sie deren Volume-Hüllkurve ein. Lassen Sie die Spur während der manuellen Bearbeitung auf Trim/Read.

Erstellen Sie mit Shift-Klick im Abstand von 250 Millisekunden Punkte und verschieben Sie diese auf unregelmäßige Pegel. Klicken Sie mit der rechten Maustaste auf einen Punkt und wählen Sie Set Point Shape → Square. Wenden Sie diese Form auf jeden Punkt an, dessen nachfolgendes Segment seinen Wert halten soll. Die Hüllkurve sollte horizontale Plateaus mit anschließenden vertikalen Änderungen zeigen.

Bei einem Parameter eines anderen Effekts berühren Sie das gewünschte Steuerelement und wählen Param → Show track envelope. Fügen Sie Punkte auf dieser Hüllkurve hinzu und ändern Sie dort ihre Form. Der Ablauf über das Parametermenü wird in The REAPER Cockos Effects Summary Guide beschrieben.

Das manuelle Einfügen unregelmäßiger Werte erzeugt ein festes Muster; es generiert bei jeder Wiedergabe keine neuen Zufallswerte. Um es wiederzuverwenden, wählen Sie seinen Zeitbereich aus, klicken Sie mit der rechten Maustaste auf die Hüllkurve und wählen Sie Automation items → Insert new automation item. REAPER unterstützt wiederholbare Automations-Items und gruppierte Kopien, deren Änderungen auf andere Kopien übertragen werden. REAPER User Guide, Automation Items.

Gleichmäßige Übergänge, ausbleibende Änderungen und Wiederholbarkeit beheben

Wenn die Hüllkurve weiterhin ansteigt oder abfällt, prüfen Sie die Punktform für den ausgehenden Abschnitt. Linear erzeugt eine Rampe; Square erzeugt das hier benötigte gehaltene Segment. Ein quadratischer LFO und eine manuell gezeichnete Treppe mit mehreren Pegeln dienen ebenfalls unterschiedlichen Zwecken: Der einfache Wechsel zwischen zwei Pegeln erzeugt keine beliebige Folge verschiedener Pegel.

Wenn der benutzerdefinierte Effekt keine deutlichen Änderungen erzeugt, prüfen Sie, ob er auf ReaSynth folgt, aktiviert ist und die Endpunkte unterschiedlich sind. Versuchen Sie 1.000-Millisekunden-Schritte mit den Endpunkten −24 und −6 dB, um das Muster leichter beurteilen zu können. Kehren Sie anschließend zum für Ihr Projekt benötigten Bereich zurück.

Abrupte Verstärkungsänderungen können Klicks verursachen, weil sich der Sample-Multiplikator unmittelbar ändert. Dieses Programm enthält absichtlich keine Glättung. Geringere Pegelunterschiede können die Stärke dieser Unstetigkeiten verringern, garantieren aber keine klickfreie Ausgabe. Eine Übergangsrampe würde das exakte Verhalten unmittelbarer Schritte verändern.

Der Effekt ist für eine Stereospur ausgelegt und verändert nur deren erste beiden Audiokanäle. Er schreibt keine Automationspunkte, speichert keine ausgewählte Zufallsfolge, quantisiert Werte nicht auf eine kleine Auswahl von Pegeln und bietet keine Synchronisierung mit dem Tempo. REAPER führt beim Start der Wiedergabe normalerweise einen JSFX-Abschnitt @init aus; dieses Programm setzt dort seinen Zähler zurück. Verlassen Sie sich nach einem Neustart nicht darauf, dass dieselbe Zufallsfolge wiedergegeben wird. JSFX code-section reference.

Verwenden Sie den benutzerdefinierten Verstärkungseffekt, wenn Sie automatisch erzeugte, gehaltene Pegel möchten. Verwenden Sie quadratische Automation, wenn Sie bestimmte Änderungen bearbeiten, wiederholen und beibehalten möchten. Mit beiden Methoden kann der synthetische Ton durch klar getrennte Plateaus wechseln; entscheidend ist, ob Ihnen neue Werte oder ein festes Zeitlinienmuster wichtiger sind.

Quellen