Rampensau hat geschrieben:[...]
also was ich jetzt genau will, ist ein Oszillator, den ich sowohl mit einem Gate syncen kann, als auch per Oszillator, wobei die Startphase einzustellen sein soll. Muss es zur Oszillatorsynchronisation ein Saw-Up Signal sein?
Wenn kein Signal gespeist wird, soll er natürlich freilaufend sein.
Ich möchte also einen Oszillator, der genau so gesynct werden kann, wie sein Primary- Pendant. Also sobald der Snc-Wert größer als 0 wird(egal ob von Audio oder Event), soll lediglich einmal der Reset-Event stattfinden.
Die aktuelle Situation
>Mein Oszillator kann schon ohne mal Beanstandung frei laufend sein.
>Sofern man Gate anschließt wird auf jedem Event zurückgesetzt, also "Gate an" und "Gate aus" senden beide einen Reset
>Sofern man den "Snc"-Eingang auf Audio umstellt, wird die Phase zu jeder Taktung zurückgesetzt. Ganz gleich ob ein Gate ankommt oder Audiosignal und ganz gleich, welchen Wert der Event hat.
Grüße
Zunächst zum Knacksen: (ich hab's jetzt auch gehört). Dies wird eindeutig durch das GateOff-Signal erzeugt.
Knacksen.gif
Wenn Du die Verbindung zwischen Latch-Modul und write-Modul entfernst, hört es sofort auf.
Das Knacksen erfolgt dadurch, dass Du beim GateOff-Signal einen 0-Event sendest. In dem Fall wird der momentane Loop-Speicher des Oszillators abrupt auf 0 gesetzt. Das hört man besonders dann, wenn die ADSR-Kurve nicht schon auf geringe Lautstärke abgefallen ist. Noch unangenehmer wäre es, wenn dahinter dann noch ein Effektmodul (Hall, Echo) käme.
Um den Rücksetzbefehl durch das GateOff-Signal auszuschalten, kannst Du es mit einem Separator ausfiltern:
GateOn-Filter.gif
Nun zur generellen Synchronisation: Gute
Hintergrund-Information zur Synchronisation erhältst Du auf der Doepfer-Seite zum A100: (das Online Handbuch ist gut zu lesen, wenn man sich die Mühe macht, einzelne Abschnitte herunterzuladen). Du kannst natürlich auch mein Handbuch zum Modular lesen. Da gibt es ein Extra-Kapitel zur Synchronisation.
Die stetige Synchronisation durch einen anderen Oszillator ist eigentlich das Spannende (Synchronisation durch das GatOn-Signal sind vor allem zur FM-Symhtese wichtig oder auch bei LFOs.)
Zur Synchronisation nimmt man eine Schwingungsform, die pro Periode eine eindeutige Situation erzeugt zum Beispiel den Übergang von negativen zu positiven Werten oder Null.
Eine komplexe Schwingungform die zum Beispiel durch Addition mehrerer Sinusschwingungen mehrfache Nulldurchgänge pro Periode enthält, ist dann nicht eindeutig, also ungeeignet.
Rechteck-signale sind auch problematisch, wenn man in den Bereich sehr hoher Frequenzen kommt, da der Nulldurchgang sich für verschiedene Tonhöhen sehr verschieben kann.
Ein Sägezahn muss es nicht sein, auch ein Sinus oder Dreieck sind gut geeignet.
Gemeinsam ist immer die Abfrage nach dem Übergang zu positiven Werten (man kann natürlich auch den Nulldurchgang von + nach - nehmen).
Dies geschieht durch einen (ständigen) Vergleich des synchronisierenden Signals:
Snychonisation.gif
Da es sich um ein Audiosignal handelt, wird es durch die SampleRateClock getaktet. Man speichert nun den jeweiligen Wert in einem Z^-1-Modul und vergleicht diesen mit dem nächsten Wert. Ist der vergangene alte Wert kleiner oder gleich Null und der neue positiv, dann wird der Loop-Speicher des synchronisierten Oszillator zurückgesetzt (oder durch eine Phase versetzt, wie Du es machst), sonst wird nur der neue Wert in den Z^-1-Speicher gebracht und auf den nächsten SampleTick gewartet. Alles ist nur eine Sache der richtigen Reihenfolge von Lese und Schreibbefehlen.
In der obigen Abbildung siehst Du die zwei Eingänge:
sync ist das synchronisierende Signal das von einem Oszillator kommt. Der Eingang Synchart entspricht Deinem Eingang
Phase, wobei ich die Phase im Synchronisationsfall direkt in den LoopSpeicher schreibe.
Die Struktur ist fast selbst erklärend: das Signal vom
sync wird in das Z^-1-Modul geschrieben. Das ist als erste Maßnahme zunächst mal erstaunlich, daher werfen wir zunächst einen Blick dort hinein:
Z-1-Modul.gif
Der untere Eingang ist der Clock-Eingang. Er ist hier intern mit der SampleRateClock verbunden, liefert also ständig ein Clocksignal auch ohne Verbindung von außen.
Nun ist die Reihenfolge der Schreib-Lese-Module entscheidend. In der OBC-Verbindung liegt das Lese-Modul vorrangig vor dem Schreibbefehl. Beide Eingänge werden gleichzeitig verarbeitet (das obere Audiosignal ist schon durch die SR.C. getaktet, also gleichzeitig zur SR.C. unten.
Damit entscheidet Core, dass zunächst der Lesebefehl ausgeführt wird und dann der Schreibbefehl, was nichts anderes bedeutet, dass der vorangegangene Wert an den Ausgang geschickt wird.
Nun wieder zurück zur Abbildung darüber.
Wir wissen nun, dass das Z^-1-Modul den vorangegangenen Wert liefert. Dieser wird mit dem aktuellen Wert
sync verglichen. In diesem Beispiel wird überprüft, ob der vergangene Wert negativ war und der aktuelle Wert positiv oder Null ist. Die beiden Logikmodule liefern nur beim Nulldurcgang von negativ zu positiv oder Null gemeinsam den Wahrheitswert 1 und damit auch das Produkt der beiden (man hätte hier auch ein AND-Modul nehmen können. Was danach folgt, ist lediglich wieder eine Filterung des sync Signals genau für diesen Fall und das anschließende Setzen der Start-Phase. Hier sind Werte zwischen -1 und 0 geeignet. Ich wähle meistens nur die Extreme.
Nun wie wird das ganze eingebaut?
Audiosynchronisation.gif
no comment - siehe Abbildung.
Wichtig ist nur noch, dass der
Synchronisationseingang selbstverständlich ein Audio-Eingang sein muss, sonst gäbe es ja nicht die Abfrage mit jedem SampleRate-Tick.
ciao herw
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.