An diesem Wochenende habe ich mir mal einen einfachen Sequenzer vorgenommen.
Das ist ein Thema, um das ich mich schon Jahre drücke. Ich habe mich zwar irgendwann mal mit dem Songposition-Modul beschäftigt, aber wenn es daran ging, einfach mal einen normalen (analog-mäßigen) Sequezer aufzubauen, habe ich das ganze Drumherum geschäut:
Wie viele Steps, welche Ausrichtungen (vorwärts, rückswärts etc.), welche Ausgänge (pitch, trigger, gate). Im Prinzip alles nicht so schwer zu bewältigende Probleme, aber am Detail sitzt man doch lange dran.
Nun habe ich mich aufgemacht, endlich mal einen wirklich kleinen und sehr einfachen Sequenzer aufzubauen. Ein modulares System ohne einen Sequenzer ist einfach undenkbar.
Am Anfang gab es viel langweilige Handarbeit: Das Panel musste grob gestaltet werden, die Bedienelemente in den Eventbus eingebaut werden, ein großes demux-Modul musste her etc.:
SEQ1.jpg
Gut vierzig Bedienelemente müssen untergebracht werden und in der Applikation verarbeitet werden.
Das ist fertig. Die eigentliche Applikation ist im Prinzip auch einfach, da ja an die Ausgänge nur die eingestellten Werte ausgegeben werden.
Das eigentliche Problem ist der Taktgeber und hier auch nur der Gate-Ausgang.
Der Gateausgang soll, im Gegensatz zu jedem Pitch und Trigger-Event, zwei Werte ausgeben : NoteOn und NoteOff. Später kann ich dort einen ADSR-Generator anschließen.
Zwischenzeitlich dachte ich schon daran, den Gate-Ausgang zunächst wegzulassen, damit überhaupt schon mal ein Sequenzer im Modular arbeiten kann.
Der Gate-Ausgang muss innerhalb eines Steps auf 0 umschalten, es muss also so etwas wie eine prozentuale Berechnung des Steps geben. Zunächst dachte ich tatsächlich an ein delay-Modul oder an die höchste Taktung meines Songpositionmoduls (1/3072 tel) am Audioausgang. Das erschien mir aber rechnerisch äußerst lästig.
Alle Step-Events werden aus dem Audioausgang des Songpositionmodul abgeleitet. Ich muss nur erreichen, dass im Gegensatz zum GateOn-Event das GateOff-Event auf einen richtigen Nachfolgeevent zugreift, bis der nächste Stepevent folgt.
Es gab jedoch eine überraschend einfache Lösung:
Im Gegensatz zum Original erzeuge ich den zweiten nachfolgenden GateOff-Event einfach durch eine Verschiebung beim Rundungsprozess:
GateOn-GateOff.jpg
Durch die Addition eines Wertes zwischen 0 und 1 kann ich einen zeitlichen Versatz beim Runden der Audioevents erzielen.
Nun folgen innerhalb eines Steps tatsächlich zwei events. Mit Latchmodulen zwinge ich diese auf 1 und 0 und vermenge sie wieder.
ciao herw