3.7 Granularsynthese

3.7.1 Theorie

3.7.1.1 Theorie der Granularsynthese

Bei der Anwendung des Samplings (3.3) konnten wir die Geschwindigkeit eines bestehenden Klanges in einem Array ändern, gleichzeitig änderte sich damit aber auch die Tonhöhe. Eine Möglichkeit, diese beiden Parameter zu entkoppeln, ist mit der Granularsynthese gegeben. Ihre Idee ist, dass ein Klang original abgetastet, aber von jedem Lesepunkt aus in anderer Geschwindigkeit abgespielt wird. Es findet also eine Trennung statt zwischen Lesepunkt und Abspielung.

Wir haben einen „Zeiger“, der über den Array in Normalgeschwindigkeit geht:

patches/3-7-1-1-granular-theorie1.pd

Von diesem Zeiger holen wir uns aber nur in gewissen Abständen die Information darüber, wo er gerade steht und spielen von da aus jeweils den Array ab – dann allerdings in einer anderen Geschwindigkeit.

Stellen wir uns zum bessern Verständnis vor, dies wäre die normale Abspielgeschwindigkeit:

... und dies eine zu schnelle Geschwindigkeit:

Dann macht die Granularsynthese Folgendes:

Sie spielt zu schnell (oder zu langsam) ab, aber beginnt immer wieder an einem Punkt, der der normalen Geschwindikeit entspricht. Diese einzelnen Teile nennt man „Grains“, ihre Größe bezeichnet man als „Grain Size“ oder „Fenstergröße“. „Grain“ ist englisch für „Korn“; tatsächlich handelt es sich um sehr viele kleine „Körner“, so klein, dass sie nicht einzeln wahrgenommen werden können. Das ist der Trick der Granularsynthese.

Jedes einzelne „Grain“ spielen wir so ab:

Nun folgt nach jedem Abspielen die Versetzung zur nächsten Position, die wir dem „Hauptzeiger“ entnehmen. Hierfür gibt es eigens ein Objekt, das dies reibungslos erledigt, das „samphold~“. Es funktioniert ähnlich wie „spigot“, nur eben auf der Signal-Ebene. In den linken Inlet und in den rechten Inlet kommt ein Signal. Wenn sich nun im Signal des rechten Inlets ein fallender Schritt ereignet, wird in dem Moment das aktuelle Sample des linken Inputs ausgegeben und so lange wiederholt, bis sich erneut der Wert im rechten Eingang niedriger als der vorangegangene ist. Diese etwas eigenartige Einstellung hat ihren Sinn, wenn der rechte Input ein „phasor~“ ist. Der enthält nämlich nur einmal, ganz am Ende seiner Periode, einen fallenden Schritt. So können wir also ein Grain auslesen, und an dessen Ende den nächsten Offset addieren:

patches/3-7-1-1-granular-theorie2.pd

So erklingt das Ganze höher, aber dennoch insgesamt in der Originaldauer. Wenn man genau 'hinsieht', offenbart sich einem natürlich, dass es hier zu Komplikationen kommt. Wird von einem Lesepunkt aus schneller abgespielt als der Lesezeiger (der in Originalgeschwindigkeit läuft), überschreiten wir den Lesepunkt, ehe wir beim nächsten „samphold~“ wieder zu ihm zurückkehren. Umgekehrt, wenn wir die Fragmente („Grains“, dt. „Körner“) langsamer als das Original abspielen, gehen einige Teile verloren. So lange aber Originalgeschwindigkeit und Abspielgeschwindigkeit nicht allzu weit auseinanderklaffen, fällt dies nicht (sehr) auf. Um dies zu erreichen, bringen wir noch einige Verbesserungen an. Zunächst müssen wir mit einem Hanning-Window die Klicks unterbinden, die beim Sprung zu jedem neuen Wert entstehen:

patches/3-7-1-1-granular-theorie3.pd

Die entstehenden Lücken schließen wir, indem wir einfach, um die halbe Periode versetzt, einen zweiten Grain-Leser anbringen:

patches/3-7-1-1-granular-theorie4.pd

Das Schöne ist nun, dass wir nicht nur die Tonhöhe unabhängig von der Geschwindigkeit ändern können, sondern auch umgekehrt:

patches/3-7-1-1-granular-theorie5.pd

3.7.2 Anwendungen

3.7.2.1 Granularsynthese live

Zur Live-Anwendung bedienen wir uns wiederum variablen Delays:

patches/3-7-2-1-granular-live.pd

3.7.2.3 Weitere Aufgabenstellungen

Erstellen Sie vier Leser, wobei die Fenstergröße variabel sein soll. Qualitäten ausprobieren!

3.7.3 Appendix

3.7.3.1 Granulartechnik als Synthesizer

Die Granularsynthese ist auch als Synthesizer für Tonschwärme verwendbar, am einfachsten per Zufallsgenerator:

patches/3-7-3-1-granularsynthesizer.pd