ich muss von anfang an sagen, das ich mir die ganze materie, die ich im folgenden wiederkäue, selber angeeignet habe und daher evtl. manchen sachverhalt nicht völlig korrekt oder vollständig darstelle. für den ein oder anderen wird dieses tutorium aber bestimmt eine kleine hilfestellung darstellen um den einstig in eine der powervollsten features, die reaktor zu bieten hat, zu finden.
dieses tutorium ist kein reines anfängertutorium, der grunsätzliche umgang mit reaktor sollte sitzen und es ist von vorteil eine grobe ahnung zu haben, was granularsynthese ist - allein schon wegen der tatsache, das meine erklärungen teilweise recht holprig sind.......

zu anfang sollten wir erstmal erörtern was granularsynthese denn überhaupt ist:
üblicherweise sind beim sampling die parameter tonhöhe und abspielgeschwindigkeit aneinander gekoppelt - das kennt jeder z.b. vom plattenspieler: ihr spielt eine schallplatte ab und bremst vorsichtig den plattenteller mit den fingerspitzen. ihr werdet feststellen, das mit abnehmender abspielgeschwindigkeit auch die tonhöhe niederiger wird. grob kann man sagen reduziert man die abspielgeschwindigkeit auf die hälfte, halbiert sich auch die frequenz, also eine tonhöhenverminderung um 1 oktave.
nun wäre es hier und da schon wünschenswert, man könnte diese beiden parameter voneinander entkoppeln - stellt euch vor,ihr habt ein lied mit einer geschwindigkeit von 120 bpm und habt einen rhythmisch super passenden percussion loop, allerdings auf einer geschwindigkeit von 90 bpm. ein anpassen an die geschwindigkeit würde bedeuten, das die tonhöhe um ein drittel angehoben würde - da klingt der loop gleich künstlich und unschön und passt gar nicht mehr so fein, oder?
an dieser stelle kommt die granularsynthese ins spiel. mit ihr ist es möglich, tonhöhe und geschwindigkeit unabhängig voneinander zu bearbeiten. jetzt werdet ihr euch fragen "wie funktioniert sowas?"
ein kleines experiment: angenommen ihr spreht das wort "test" ganz langsam aus und versucht es so zu schreiben - würde das in etwa so aussehen: ttteeesssttt
durch das loopen von kleinen abschnitten (grains) in normalgeschwindigkeit, die sich mit verminderter geschwindigkeit auf der zeitlinie bewegen, verändert sich zwar die abspielgeschwindigkeit, nicht aber die tonhöhe. wenn man das grain nun mit doppelter geschwindigkeit abspielt und es mit normaler geschwindigkeit auf der zeitline verschiebt, scheint das sample doppelt so hoch zu erklingen, allerdings in normaler abspielgeschwindigkeit.
diesen sachverhalt zu erklären war mir immer ein graus, aber ihr werdet beim bau des ensembles sehen:
es ist völlig einleuchtend - ich bin nur zu blöde, das anständig zu erklären!

versuchen wir mal so etwas in reaktor zu erzeugen:
zuerst erzeugen wir ein neues leeres ensemble und erstellen in dem leeren instrument einen audiotable, dessen audio ausgang wir mit den den beiden voice combiner modulen verbinden.
wir laden einen soundfile in den table, indem wir einen rechts-mouse-click auf den table in der panelansicht ausführen und im erscheinenden kontextmenü unter dem punkt "file" - "load data into table" auswählen und dann im open-dialog eine wav-datei auswählen, praktischerweise einen loop. ich habe einen drumloop ausgewählt. das ganze sollte in etwa so aussehen:
um den inhalt des tables auszulesen, erstellen wir einen ramp-osc (built-in module -> oscillator -> ramp). dieser oscillator wiederholt im prinzip in einer vorgegeben frequenz ("F" eingang) einen zählvorgang von 0 - A, wobei A dem am "A" eingang anliegenden wert entspricht. wenn wir also die länge des sampleloops wissen und ihn in den "A" eingang einspeisen und den ramp osc ausgang mit dem "RX" (leseposition) eingang des tables verbinden, dann "liest" der oscillator sample für sample den loop bis zum ende aus und fängt danach wieder von vorne an (schleife). die länge des loops wird am "DX" ausgang des tables ausgegeben, also verbinden wir diesen einfach mit dem "A" eingang des ramp osc's und schon haben wir was wir wollen. nun brauchen wir nur noch die entsprechende abspiel geschwindigkeit, also die wiederholungsfrequenz der ramp, damit der loop (vorerst) in normaler geschwindigkeit abgespielt wird. da am "DX" ausgang des tables die looplänge in ms anliegt, müssen wir nur noch 1000 durch diesen wert teilen und haben die nötige abspielfreqenz für den loop. dazu ein besipiel:
1000 / 2000 (looplänge in ms) = 0,5 hz
d.h. bei einer looplänge von 2 sekunden soll der ramp osc das sample 0,5 mal pro sekunde, also 1 mal pro 2 sekunden durchlaufen - das klingt einleuchtend, oder?
das gebilde sollte nun in etwa so ausshen:
so, nun kommt das "grain" ins spiel.... wir wollen nun einen variablen loop-bereich im sample in der abspielgeschwindigkeit durch den sample-loop bewegen. dazu brauchen wir im prinzip nochmal einen ramp osc, der den loop berechnet und addieren den dann zur leseposition. also erstellen wir einen 2ten ramp osc, und addieren den ausgang zum ausgangssignal des anderen ramp osc's und leiten die summe zum "RX" eingang des tables.
nun kommt ein etwas kompliziereter teil: wir wollen die grösse des grains bestimmen können, als auch die tonhöhe, welche der abspielgeschwindigkeit des grains entspricht. sagen wir, wir möchten die tonhöhe um +/- 12 halbtöne verändern können, am besten in einer feineren abstufung von sagen wir 10tel halbtönen. da eine tonhöhen-verminderung um eine oktave einer halbierung der normalen abspielgeschwindigkeit entspricht und eine erhöhung um eine oktave einer verdopplung der geschwindigkeit, erhalten wir folgende formel zu errechnung der grain-abspielfrequenz:
2^(T/120) - (Sp/100) / (G/1000)
wobei T der transposition in 10tel halbtönen entspricht, Sp der sampleabspielgeschwindigkeit in % und G der grainlänge in ms.
wie komme ich denn dazu? schauen wir uns die formel mal genauer an und füllen sie mit leben:
angenommen wir hätten eine grain-länge von 100 samples länge, eine normale abspielgeschwindigkeit und würden keine tonhöhenanpassung vornehmen, dann würde nun gelten:
2^(0/120)-1/(100/1000) ist gleich 2^0-1/0.1 ist gleich 1-1/0.1 ist gleich 0/0.1 ist gleich.... 0
also wird in diesem fall das grain überhaupt nicht abgespielt und nur die eigentlich leseposition des ersten ramp osc's wird abgegriffen.
ein 2. beispiel:
wir nehmen eine tonhöhenänderung von +1 halbton (also 10/10tel halbtönen) und eine geschwindigkeitsverminderung um die hälfte vor. nun gilt:
2^(10/120)-0.5/(100/1000) ist gleich 2^0.0833-0.5/0.1 ist gleich 0.5595/0.1
ergibt etwa 5.058 hz abspielgeschwindigkeit.
diese formel verinnerlicht man am besten, wenn man sie in verschiedenen szenarien durchrechnet, dann werden einem die zusammenhänge klar.
wenn man das ganze in einem macro unterbringt mit eingängen für T (10tel halbtöne), G (grainlänge in ms) und Sp (basisgeschwindigkeit des lesepositions ramp-osc's in 100stel %) dann sieht das in etwa so aus:
F gibt die frequenz des grain ramp-osc's, A die grainlänge als amplitude des grain ramp osc.