Schlagwort-Archiv Common Lisp

VonLukas Körfer

Wellenfeldsynthese mit OM-SoX

Abstract: Dieses Abschlussprojekt entstand zum Ende des Wintersemesters 2023/24 im Rahmen der Lehrveranstaltung „Symbolische Klangverarbeitung und Analyse/Synthese“ des MA Musikinformatik. Hierbei wurde in dem Programm OpenMusic mithilfe der Library OM-SoX und des Verfahrens der Wellenfeldsynthese eine Anwendung zur Klangverräumlichung erarbeitet. 

Verantwortliche: Lukas Körfer

Wellenfeldsynthese

Bei der Wellenfeldsynthese (kurz: WFS) handelt es sich um das Verräumlichen von virtuellen Klangquellen mithilfe eines Loudspeaker-Arrays. Bei dieser fortschrittlichen Audiotechnologie wird also versucht, Klänge so zu reproduzieren, dass sie den Eindruck erwecken, dass sie von einer bestimmten Position im Raum kommen. Das gelingt durch die Erzeugung eines Wellenfeldes, welches aus einer Vielzahl von einzelnen Schallquellen besteht, die in einer Art synchronisiert werden, so dass eine kohärente Schallwelle entsteht, mit welcher es möglich sein soll, eine virtuelle Klangquelle im Raum lokalisieren zu können. 

 

Zum besseren Verständnis der Funktionsweise von WFS kann man sich dem Thema über das physikalische Phänomen von Interferenzmusterbildung hinter einem Hindernis mit Öffnungen nähern. Wenn eine Welle auf einen oder mehrere Schlitze trifft, wird sie durch die Öffnungen hindurchgebeugt und breitet sich hinter dem Hindernis aus. Dies führt zur Bildung eines Musters von Welleninterferenz auf der anderen Seite des Hindernisses. In ähnlicher Weise nutzt die Wellenfeldsynthese ein Array von Lautsprechern, um eine kohärente Schallwelle zu erzeugen. Dafür muss eine präzise Berechnung und Steuerung der Phasen- und Amplitudenverhältnisse der Schallwellen, die von jedem einzelnen Lautsprecher ausgehen, vorgenommen werden. Diese Berechnungen sind abhängig von den Abständen jedes einzelnen Lautsprechers im Array relativ zur Position im Raum der jeweiligen virtuellen Klangquelle. 

Projektbeschreibung

Für dieses Projekt sollte nun ein Programm entstehen, mit dem allgemeinen Ziel, durch gewissen Einfluss und Anpassungen eines Anwenders letztendlich eine Mehrkanal-Audiodatei zu erhalten, die zur Wellenfeldsynthese mit einem Loudspeaker-Array verwendet werden kann. Dafür musste zunächst konzipiert werden, welche Parameter vom Anwender des Programms gesetzt und beeinflusst werden sollen.

User-Input

 

Neben der Audiofile, welche zur Verräumlichung verwendet werden sollte, muss durch den Anwender einerseits gewisse Angaben zum Loudspeaker-Array und andererseits die Position oder Positionen einer oder mehrerer virtueller Klangquellen relativ zum Loudspeaker-Array angegeben werden. Um eine möglichst einfache und intuitive Konfiguration des Programms zu ermöglichen, habe ich mich dazu entschieden, dafür hauptsächlich ein Picture-Objekt zu verwenden, in welchem der Aufbau aufgezeichnet werden kann. Durch das Zeichnen eines Rechtecks können die Positionen der Loudspeaker und mit Kreisen die der virtuellen Klangquellen angegeben werden. Es kann dabei ein oder mehrere Kreise gezeichnet werden, wobei jeder Kreis eine Klangquelle repräsentiert. Die Angabe der Loudspeaker ist durch zwei unterschiedliche Weisen möglich. Wenn nur ein einziges Rechteck im Picture-Objekt gezeichnet ist, so stellt dieses den Bereich eines Loudspeaker-Arrays dar. Um im nächsten Schritt des Programms die konkreten Positionen der einzelnen Loudspeaker ermitteln zu können, sind ihr zusätzlich noch zwei weitere Angaben nötig. Das ist zum einen die Länge des Loudspeaker-Arrays in Metern; damit wird gleichzeitig der Maßstab für den kompletten gezeichneten Aufbau beeinflusst. Und zum anderen muss die Anzahl der Loudspeaker im gezeichneten Bereich angegeben werden. Sobald mehr als ein Rechteck vom Anwender angegeben sind, steht jedes einzelne Rechteck für einen individuellen Loudspeaker. Um bei dieser Variante einen Maßstab für den gezeichneten Aufbau festlegen zu können – was vorher mit der Angabe der Länge des Loudspeaker-Arrays möglich war – kann nun die Breite / Höhe vom Bereich des kompletten Picture-Objekts angegeben werden. Mit der ersten Variante, dass das Loudspeaker-Array lediglich mit einem Rechteck gezeichnet werden kann, wird zwar die Anwendung deutlich unkomplizierter, setzt allerdings auch voraus, dass die Loudspeaker linear und mit einem gleichmäßigen Abstand zueinander aufgebaut sind.

Distanzen berechnen

 

Nach dem Auslesen aller Grafiken des Picture-Objekts müssen diese für die Weiterverarbeitung in Rechteck und Kreise aufgeteilt werden. Falls nur ein Rechteck gefunden wird, kann mit der Position und Dimension des Rechtecks und der beiden Angaben zu Länge und Anzahl des Loudspeaker-Arrays, zunächst die Position jedes einzelnen Loudspeakers innerhalb des Arrays in Metern ermittelt werden. Wenn es mehrere Rechtecke sind, ist dieser Schritt nicht nötig und es werden einfach die Mittelpunkte aller angegebenen Rechtecke ermittelt. Daraufhin ist es möglich im selben Maßstab mit einer weiteren Lisp-Funktion den euklidischen Abstand von allen Quellen zu jedem einzelnen Loudspeaker zu berechnen. Hierbei ist zu beachten, dass alle Grafiken, die in dem Picture-Objekt vom Anwender gezeichnet wurden und nicht einem Rechteck oder einem Kreis entsprechen ignoriert und für die weiteren Berechnungen nicht berücksichtigt werden. Da für die Applikation beliebig viele virtuelle Klangquellen angegeben werden können, werden in diesem Schritt auch alle Kreise erfasst, die im Picture-Objekt existieren, wobei die Reihenfolge irrelevant ist.

Klangverarbeitung

 

Im nächsten Abschnitt des Programms wird die Klangverarbeitung umgesetzt. Dabei wird grundlegend mit der vom Anwender angegebenen Sound-Datei zusammen mit den zuvor berechneten Distanzen eine Mehrkanaldatei erzeugt, welche für das vorgesehene Loudspeaker-Array verwendet werden kann. Dieser Prozess passiert in einem verschachtelten OM-Loop mit zwei Ebenen.

 

In der ersten Ebene wird zunächst über jedes Element innerhalb der Distanz-Liste iteriert. Dabei entspricht jedes dieser Elemente einer Liste, die zu einer virtuellen Klangquelle gehört, welche deren Distanzen zu jedem Loudspeaker beinhaltet. Bevor der Prozess in die zweite Ebene des Loops geht, werden in einer Lisp-Funktion weitere Berechnungen anhand der aktuellen Distanz-Liste angestellt.

In dieser Funktion wird über jede Distanz iteriert und jeweils die Zeitverzögerung, Lautstärkeabnahme und eine Cutoff-Frequenz für einen Lowpass Filter zur Berechnung der Luftabsorption hoher Frequenzen ermittelt und in einer Liste gesammelt. Mit dem Ergebnis dieser Lisp-Funktion geht es im nächsten Schritt in die zweite Ebene der Schleife.

 

Hier wird für den jeweiligen berechneten Wert den jeweiligen SoX-Effect angewendet; SoX-Level für Lautstärkeabnahme, SoX-Lowpass für die Luftabsorption und SoX-Pad für die Zeitverzögerung. Dabei wird für jede Iteration die entstandene Audiodatei abgespeichert. Jede der drei Listen besitzt so viele Werte, wie zuvor berechnete Distanzen der aktuellen Klangquelle zu den Speakern. Also steht jede in diesem Loop gespeicherte Audiodatei für einen Kanal der späteren Mehrkanaldatei für die aktuellen Klangquelle.

Die Mehrkanaldatei kann nun im nächsten Schritt in der ersten Ebene mit SoX-Merge erstellt und am Ende des Loops zwischengespeichert werden. Dieser Prozess wiederholt sich für alle restlichen virtuellen Klangquellen (sofern vorhanden) und werden als Ausgabe dieses oberen Loops gesammelt. Alle Mehrkanaldateien der jeweiligen Klangquellen werden daraufhin mit einem SoX-Mix zusammengeführt.

Wenn vom Anwender nur eine virtuelle Klangquelle angegeben wird, besteht die Ausgabe des äußersten Loops nur aus einer einzelnen Mehrkanaldatei für diese eine Quelle. In diesem Fall wird das SoX-Mix nicht benötigt und es würde sogar bei der Evaluation des Programms zu einem Fehler führen, wenn der Input des SoX-Mix nur aus einer Audiodatei bestünde. Mit dem OM-If wird daher die Verwendung des SoX-Mix umgangen, sobald die Ausgabe des Patchers, in welchem die Distanzen ermittelt werden, nur aus einer Liste besteht, was bedeutet, dass im Picture-Objekt nur ein Kreis für eine virtuelle Klangquelle gezeichnet wurde.

Abschließend kann mit dem SoX-Pad je nach Präferenz zusätzlich der Mehrkanaldatei Stille hinzugefügt werden, falls die gewählte Audiodatei beispielsweise besonders kurz ist. Gleichzeitig wird die finale Mehrkanaldatei in Outfile als „wfsOutFile.wav“ gespeichert.

VonMoritz Reiser

Markov-Prozesse zur Steuerung von Harmonik in Open Music und Common Lisp

Abstract: Ein Projekt über den Einsatz von Zufallsprozessen in einem musikalischen Kontext. Grundsätzlich kommen zwei verschiedene Modelle zum Einsatz. Diese erzeugen Akkordfolgen, welche anschließend mit einem Rhythmus und einer darüber liegenden Melodie ausgestattet werden.

Verantwortliche: Moritz Reiser

 

Überblick

Der Gesamtaufbau des Programms, welcher dem Inhalt des Hauptpatches entspricht, ist in Abbildung 1 zu sehen. Ganz oben befindet sich die Auswahl des zu verwendenden Algorithmus zur Akkordfolgenerzeugung. Über das Auswahlfeld links oben kann dieser ausgewählt werden. Durch die beiden Inputfelder der Subpatches lassen sich jeweils die gewünschte Länge sowie der Startakkord bzw. die Tonart der Komposition festlegen.

Anschließend folgt eine zufällige Bestimmung der jeweiligen Tonlängen. Hier lassen sich das Tempo in BPM sowie die Häufigkeiten der vorkommenden Tonlängen in Vielfachen von Viertelnoten einstellen. Über eine „dx→x“-Funktion werden aus den berechneten Dauern die jeweiligen Startzeitpunkte der Akkorde berechnet. Hier muss beim Verwenden des Programms darauf geachtet werden, dass Open Music aufgrund des zweimal verwendeten Outputs in den beiden Strängen jeweils neue Zufallszahlen berechnet, wodurch der Bezug zwischen Startzeitpunkt und Tondauer verloren geht. Abhilfe kann hier dadurch geschaffen werden, dass nach einmaliger Ausführung die Subpatches der Akkordfolgen- und der Tonlängengenerierung mit „Lock Eval“ gesperrt werden und das Programm anschließend noch einmal ausgeführt wird, um die Startzeitpunkte an die nun gespeicherten Tondauern anzupassen (siehe Hinweistafel im Hauptpatch). Der dritte große Schritt des Gesamtablaufs besteht schließlich in der Generierung einer Melodie, die über der Akkordfolge liegt. Hier wird jeweils ein Ton aus dem zugrunde liegenden Akkord ausgewählt und eine Oktave nach oben verschoben. Dabei kann eingestellt werden, ob dies immer ein zufälliger Akkordton sein soll, oder ob der Ton gewählt wird, welcher dem vorangehenden Melodieton am nächsten bzw. am weitesten entfernt ist.

Das Resultat wird schließlich ganz unten in einem Multi-Seq-Objekt visualisiert.

Abbildung 1: Gesamtaufbau des Kompositionsprozesses

 

Akkordfolgengenerierung

Zur Generierung der Akkordfolge stehen zwei Algorithmen zur Verfügung. Ihnen wird jeweils die gewünschte Länge der Sequenz, welcher der Anzahl der Akkorde entspricht, und der Startakkord bzw. die Tonart übergeben.

Harmonische Akkordfolge mittels Markovkette

Der Ablauf des ersten Algorithmus ist in Abbildung 2 zu sehen. Durch den Subpatch „Create Harmonic Chords“ wird der Grundvorrat von Akkorden erzeugt, der im Folgenden verwendet wird. Dieser entspricht den üblichen Stufen der Kontrapunktlehre und enthält neben Tonika, Subdominante, Dominante und deren Parallelen einen verminderten Akkord auf der siebten Stufe, einen Sixte ajoutée der Subdominante und einen Dominantseptakkord. Der „Key“-Input addiert zu diesen Akkorden einen der gewünschten Tonart entsprechenden Wert hinzu.

Abbildung 2: Subpatch zur Generierung einer harmonischen Akkordsequenz mithilfe einer Markovkette

Durch den Subpatch „Create Transition Matrix“ wird eine Matrix mit Übergangswahrscheinlichkeiten der einzelnen Akkorde erzeugt. Für jede Akkordstufe wird festgelegt, mit welcher Wahrscheinlichkeit sie zu einem bestimmten anderen Akkord übergeht. Die Wahrscheinlichkeitswerte wurden hierbei willkürlich gemäß den in der Kontrapunktlehre üblichen Abläufen gewählt und experimentell angepasst. Dabei wurde für jeden Akkord untersucht, wie wahrscheinlich aus diesem jeweils in einen anderen Akkord übergegangen wird, sodass das Resultat den Konventionen der Kontrapunklehre entspricht und eine häufige Rückkehr zur Tonikastufe ermöglicht, um diese zu fokussieren. Die exakten Übergangswahrscheinlichkeiten sind in der folgenden Tabelle aufgelistet, wobei die Ausgangsklänge in der linken Spalte aufgelistet sind und die Übergänge jeweils zeilenweise repräsentiert werden.

Tabelle 1. Übergangswahrscheinlichkeiten der Harmonien entsprechender Akkordstufen

Die Erzeugung der Akkordfolge findet schließlich in dem Patch „Generate Markov Series“ statt, welcher in Abbildung 3 dargestellt ist. Dieser arbeitet zunächst nur mit Nummerierungen der Akkordstufen, weshalb es genügt, ihm die Länge des Akkordvorrats zu übergeben. Die Lisp-Funktion „Markov Synthesis“ erzeugt nun mithilfe der Übergangsmatrix eine Akkordfolge der gewünschten Länge. Da bei der so erzeugten Sequenz nicht sichergestellt ist, dass der letzte Akkord der Tonika entspricht, kommt eine weitere Lisp-Funktion zum Einsatz, welche so lange weitere Akkorde generiert, bis die Tonika erreicht ist. Da bisher nur mit Nummerierungen der Stufen gearbeitet wurde, werden abschließend die für die jeweiligen Stufen gültigen Akkorde ausgewählt, um die fertige Akkordfolge zu erhalten.

Abbildung 3: Subpatch zur Erzeugung einer Akkordfolge mittels Markovsynthese

 
Chromatische Akkordfolge mittels Tonnetz

Im Gegensatz zur harmonischen Akkordfolge kommen hier alle 24 Dur- und Mollakkorde der chromatischen Skala zum Einsatz (siehe Abbildung 4). Die Besonderheit dieses Algorithmus liegt in der Wahl der Übergangswahrscheinlichkeiten. Diese basieren auf einem sogenannten Tonnetz, welches in Abbildung 5 dargestellt ist.

Abbildung 4: Subpatch zur Generierung einer Akkordfolge auf Basis der Tonnetz-Darstellung

Abbildung 5: Tonnetz (Bildquelle: <https://jazz-library.com/articles/tonnetz/>)

Innerhalb des Tonnetzes sind einzelne Töne aufgetragen und miteinander verbunden. Auf den horizontalen Linien haben die Töne jeweils den Abstand einer Quinte, auf den diagonalen Linien sind kleine (von links oben nach rechts unten) sowie große Terzen (von links unten nach rechts oben) zu sehen. Die sich so ergebenden Dreiecke repräsentieren jeweils einen Dreiklang, beispielsweise ergibt das Dreieck der Töne C, E und G den Akkord C-Dur. Insgesamt sind so alle Dur- und Moll-Akkorde der chromatischen Skala zu finden. Zum Einsatz kommt die Tonnetz-Darstellung meist zu Analyse-Zwecken, da sich aus einem Tonnetz direkt ablesen lässt, wie viele Töne sich zwei verschiedene Dreiklänge teilen. Ein Beispiel ist die Analyse von klassischer Musik der Romantik und Moderne sowie von Filmmusik, da hier die oben verwendeten harmonischen Kontrapunktregeln häufig zu Gunsten von chromatischen und anderen zuvor unüblichen Übergängen vernachlässigt werden. Der Abstand zweier Akkorde im Tonnetz kann hierbei ein Maß dafür sein, ob der Übergang des einen Akkords in den anderen wohlklingend oder eher ungewöhnlich ist. Er berechnet sich aus der Anzahl von Kanten, die überquert werden müssen, um von einem Akkord-Dreieck zu einem anderen zu gelangen. Anders ausgedrückt entspricht er dem Grad der Nachbarschaft zweier Dreiecke, wobei sich eine direkte Nachbarschaft durch das Teilen einer Kante ergibt. Abbildung 6 zeigt hierzu ein Beispiel: Um ausgehend vom Akkord C-Dur zum Akkord f-Moll zu gelangen, müssen drei Kanten überquert werden, wodurch sich ein Abstand von 3 ergibt.

Abbildung 6: Beispiel der Abstandsbestimmung im Tonnetz anhand des Übergangs von C-Dur nach f-Moll

Im Rahmen des Projekts werden nun die Übergangswahrscheinlichkeiten auf Basis der Abstände von Akkorden im Tonnetz berechnet. Hierbei muss lediglich unterschieden werden, ob es sich bei dem jeweils aktiven Dreiklang um einen Dur- oder Mollakkord handelt, da sich innerhalb dieser beiden Klassen für alle Tonarten dieselben Abstände zu anderen Akkorden ergeben. Dadurch kann jeder Übergang von C-Dur bzw. c-Moll aus berechnet und anschließend durch Addition eines Wertes in die gewünschte Tonart verschoben werden. Von beiden Varianten (C-Dur und c-Moll) ausgehend wurden zunächst die Abstände zu allen anderen Dreiklängen im Tonnetz festgehalten:

Abstände von C-Dur:

Abstände von c-Moll:

Um aus den Abständen Wahrscheinlichkeiten zu erhalten wurden zunächst alle Werte von 6 abgezogen, um größere Abstände unwahrscheinlicher zu machen. Anschließend wurden die Resultate als Exponent der Zahl 2 verwendet, um nähere Akkorde stärker zu gewichten. Insgesamt ergibt sich somit die Formel

P=2^(6-x) ; P=Wahrscheinlichkeit,  x=Abstand im Tonnetz

zur Berechnung der Übergangsgewichtungen. Diese ergeben sich für alle möglichen Akkordkombinationen zu folgender Matrix, aus welcher bei Division durch die Zeilensumme 342 Wahrscheinlichkeiten resultieren.

Innerhalb des Patches stellt die Lisp-Funktion „Generate Tonnetz Series“ zunächst jeweils fest, ob es sich bei dem aktiven Akkord um einen Dur- oder Molldreiklang handelt. Da wie bei der harmonischen Vorgehensweise zunächst nur mit den Zahlen 0-23 gearbeitet wird, kann dies über eine einfache Modulo-2-Rechnung bestimmt werden. Je nach Resultat wird der jeweilige Wahrscheinlichkeiten-Vektor herangezogen, ein neuer Akkord bestimmt und schließlich die vorherige Stufe hinzuaddiert. Ergibt sich eine Zahl, die größer als 23 ist, wird 24 abgezogen, um immer innerhalb der selben Oktave zu bleiben.

Nach der zuvor festgelegten Länge der Sequenz ist dieser Abschnitt beendet. Auf eine Rückführung zur Tonika wie im vorherigen Abschnitt wird hier verzichtet, da aufgrund der Chromatik keine so stark ausgeprägte Tonika vorherrscht wie bei der harmonischen Akkordfolge.

Bestimmung der Tonlängen

Nach der Generierung einer Akkordfolge werden für die einzelnen Dreiklänge zufällige Längen berechnet. Dies geschieht im Subpatch „Calculate Durations“, der in Abbildung 6 dargestellt ist. Neben der gewünschten BPM-Zahl wird ein Vorrat an Tonlängen als Vielfache von Viertelnoten übergeben. Wahrscheinlichere Werte kommen in diesem Vorrat häufiger vor, sodass über „nth-random“ eine entsprechende Wahl getroffen werden kann.

Abbildung 7: Subpatch zur zufälligen Bestimmung der Tondauern

Melodiegenerierung

Der grundsätzliche Ablauf der Melodiegenerierung wurde oben bereits dargestellt: Aus dem jeweiligen Akkord wird ein Ton ausgewählt und um eine Oktave nach oben transponiert. Dieser Ton kann zufällig oder entsprechend dem kleinsten oder größten Abstand zum Vorgängerton gewählt werden.

 

Klangbeispiele

Beispiel für eine harmonische Akkordfolge:

 
 

Beispiel für eine Tonnetz-Akkordfolge:

 
 
VonLorenz Lehmann

Library „OM-LEAD“

Abstract:

Die Library „OM-LEAD“ ist eine Library für regelbasierte, computergenerierte Echtzeit-Komposition. Die Überlegungen und Ansätze in Joseph Brancifortes Text „FROM THE MACHINE: REALTIME ALGORITHMIC APPROACHES TO HARMONY AND ORCHESTRATION“ sind Ausgangspunkt für die Entwicklung.

Momentan umfasst die Library zwei Funktionen, die sowohl mit CommonLisp, als auch mit schon bestehenden Funktionen aus dem OM-Package geschrieben sind.

Zudem ist die Komposition im Umfang der zu kontollierenden Parametern, momentan auf die Harmonik und die Stimmführung begrenzt. 

Für die Zukunft möchte ich ebenfalls eine Funktion schreiben, welche mit den Parametern Metrik und Einsatzabstände, die Komposition auch auf zeitlicher Ebene erlaubt.

Entwicklung: Lorenz Lehmann

Betreuung und Beratung: Prof. Dr. Marlon Schumacher

Mein herzlicher Dank für die freundliche Unterstützung gilt Joseph Branciforte und 

Prof. Dr. Marlon Schumacher.

weiterlesen

Seiten: 1 2 3 4

VonKaspars Jaudzems

BAD GUY: Eine akusmatische Studie

Abstract:

Inspiriert vom „Infinite Bad Guy“ Projekt und all den sehr unterschiedlichen Versionen, wie manche Leute ihre Fantasie zu diesem Song beflügelt haben, dachte ich, vielleicht könnte ich auch damit experimentieren, eine sehr lockere, instrumentale Coverversion von Billie Eilish’s „Bad Guy“ zu erstellen.

Betreuer: Prof. Dr. Marlon Schumacher

Eine Studie von: Kaspars Jaudzems

Wintersemester 2021/22
Hochschule für Musik, Karlsruhe

Zur Studie:

Ursprünglich wollte ich mit 2 Audiodateien arbeiten, eine FFT-Analyse am Original durchführen und dessen Klanginhalt durch Inhalt aus der zweiten Datei „ersetzen“, lediglich basierend auf der Grundfrequenz. Nachdem ich jedoch einige Tests mit einigen Dateien durchgeführt hatte, kam ich zu dem Schluss, dass diese Art von Technik nicht so präzise ist, wie ich es gerne hätte. Daher habe ich mich entschieden, stattdessen eine MIDI-Datei als Ausgangspunkt zu verwenden.

Sowohl die erste als auch die zweite Version meines Stücks verwendeten nur 4 Samples. Die MIDI-Datei hat 2 Kanäle, daher wurden 2 Dateien zufällig für jede Note jedes Kanals ausgewählt. Das Sample wurde dann nach oben oder unten beschleunigt, um dem richtigen Tonhöhenintervall zu entsprechen, und zeitlich gestreckt, um es an die Notenlänge anzupassen.

Die zweite Version meines Stücks fügte zusätzlich einige Stereoeffekte hinzu, indem 20 zufällige Pannings für jede Datei vor-generiert wurden. Mit zufällig angewendeten Kammfiltern und Amplitudenvariationen wurde etwas mehr Nachhall und menschliches Gefühl erzeugt.

Akusmatische Studie Version 1

Akusmatische Studie Version 2

Die dritte Version war eine viel größere Änderung. Hier werden die Noten beider Kanäle zunächst nach Tonhöhe in 4 Gruppen eingeteilt. Jede Gruppe umfasst ungefähr eine Oktave in der MIDI-Datei.

Dann wird die erste Gruppe (tiefste Töne) auf 5 verschiedene Kick-Samples abgebildet, die zweite auf 6 Snares, die dritte auf perkussive Sounds wie Agogo, Conga, Clap und Cowbell und die vierte Gruppe auf Becken und Hats, wobei insgesamt etwa 20 Samples verwendet werden. Hier wird eine ähnliche Filter-und-Effektkette zur Stereoverbesserung verwendet, mit dem Unterschied, dass jeder Kanal fein abgestimmt ist. Die 4 resultierenden Audiodateien werden dann den 4 linken Audiokanälen zugeordnet, wobei die niedrigeren Frequenzen kanale zur Mitte und die höheren kanale zu den Seiten sortiert werden. Für die anderen 4 Kanäle werden dieselben Audiodateien verwendet, aber zusätzliche Verzögerungen werden angewendet, um Bewegung in das Mehrkanalerlebnis zu bringen.

Akusmatische Studie Version 3

Die 8-Kanal-Datei wurde auf 2 Kanäle in 2 Versionen heruntergemischt, einer mit der OM-SoX-Downmix-Funktion und der andere mit einem Binauralix-Setup mit 8 Lautsprechern.

Akusmatische Studie Version 3 – Binauralix render

Erweiterung der akousmatischen Studie – 3D 5th-order Ambisonics

Die Idee mit dieser Erweiterung war, ein kreatives 36-Kanal-Erlebnis desselben Stücks zu schaffen, also wurde als Ausgangspunkt Version 3 genommen, die nur 8 Kanäle hat.

Ausgangspunkt Version 3

Ich wollte etwas Einfaches machen, aber auch die 3D-Lautsprecherkonfiguration auf einer kreativen weise benutzen, um die Energie und Bewegung, die das Stück selbst bereits gewonnen hatte, noch mehr hervorzuheben. Natürlich kam mir die Idee in den Sinn, ein Signal als Quelle für die Modulation von 3D-Bewegung oder Energie zu verwenden. Aber ich hatte keine Ahnung wie…

Plugin „ambix_encoder_i8_o5 (8 -> 36 chan)“

Bei der Recherche zur Ambix Ambisonic Plugin (VST) Suite bin ich auf das Plugin „ambix_encoder_i8_o5 (8 -> 36 chan)“ gestoßen. Dies schien aufgrund der übereinstimmenden Anzahl von Eingangs- und Ausgangskanälen perfekt zu passen. In Ambisonics wird Raum/Bewegung aus 2 Parametern übersetzt: Azimuth und Elevation. Energie hingegen kann in viele Parameter übersetzt werden, aber ich habe festgestellt, dass sie am besten mit dem Parameter Source Width ausgedrückt wird, weil er die 3D-Lautsprecherkonfiguration nutzt, um tatsächlich „nur“ die Energie zu erhöhen oder zu verringern.

Da ich wusste, welche Parameter ich modulieren muss, begann ich damit zu experimentieren, verschiedene Spuren als Quelle zu verwenden. Ehrlich gesagt war ich sehr froh, dass das Plugin nicht nur sehr interessante Klangergebnisse lieferte, sondern auch visuelles Feedback in Echtzeit. Bei der Verwendung beider habe ich mich darauf konzentriert, ein gutes visuelles Feedback zu dem zu haben, was im Audiostück insgesamt vor sich geht.

Visuelles Feedback – video

Kanal 2 als modulations quelle für Azimuth

Dies half mir, Kanal 2 für Azimuth, Kanal 3 für Source Width und Kanal 4 für Elevation auszuwählen. Wenn wir diese Kanäle auf die ursprüngliche Eingabe-Midi-Datei zurückverfolgen, können wir sehen, dass Kanal 2 Noten im Bereich von 110 bis 220 Hz, Kanal 3 Noten im Bereich von 220 bis 440 Hz und Kanal 4 Noten im Bereich von 440 bis 20000 Hz zugeordnet ist. Meiner Meinung nach hat diese Art der Trennung sehr gut funktioniert, auch weil die Sub-bass frequenzen (z. B. Kick) nicht moduliert wurden und auch nicht dafur gebraucht waren. Das bedeutete, dass der Hauptrhythmus des Stücks als separates Element bleiben konnte, ohne den Raum oder die Energiemodulationen zu beeinflussen, und ich denke, das hat das Stück irgendwie zusammengehalten.

Akusmatische Studie Version 4 – 36 channels, 3D 5th-order Ambisonics – Datei war zu groß zum Hochladen

Akusmatische Studie Version 4 – Binaural render

VonAnselm Weber

Spectral Select: Eine akusmatische 3D-Audio Studie

Abstract:
Spectral Select erkundet den spektralen Inhalt des einen, sowie den Amplitudenverlauf eines zweiten Samples und vereinigt diese in einem neuen musikalischen Kontext. Der durch Iteration entstehende meditative Charakter des Outputs wird durch lautere Amplituden-Peaks sowohl kontrastiert, als auch strukturiert.
In einer überarbeiteten Version wurde Spectral Select im Ambisonics HOA-5 Format spatialisiert.

Betreuer: Prof. Dr. Marlon Schumacher

Eine Studie von: Anselm Weber
Wintersemester 2021/22
Hochschule für Musik, Karlsruhe


Zur Studie:
In welchen Ausdrucksformen äußert sich die Verbindung zwischen Frequenz und Amplitude ? Sind beide Bereiche intrinsisch miteinander Verbunden und wenn ja, was könnten Ansätze sein, diese Ordnung neu zu gestalten ?
Derartige Fragen beschäftigen mich bereits seid einiger Zeit. Daher ist der Versuch ebendieser Neugestaltung Kernthema bei Spectral Select.
Inspiriert wurde ich dazu von AudioSculpt von IRCAM, welches wir in unserem Kurs: „Symbolische Klangverarbeitung und Analyse/Synthese“ gemeinsam mit Prof. Dr. Marlon Schumacher und Brandon L. Snyder kennenlernten und zum Teil nachbauten.
Spectral Edit funktioniert nach einem ähnlichen Prinzip, doch anstatt interessante Bereiche innerhalb eines Spektrums eines Samples von einem Benutzer herausarbeiten zu lassen, wurde entschieden, ein zweites Audiosample heranzuziehen. Dieses weitere Sample (im Verlauf dieses Artikels ab sofort als „Amplitudenklang“) bestimmt durch seinen Verlauf, wie das erste Sample (ab sofort als „Spektralklang“) durch OM-Sox verarbeitet werden soll.
Um dies zu erreichen wird mit zwei Loops gearbeitet:
Zunächst werden im ersteren „peakloop“ einzelne Amplitudenpeaks aus dem Amplitudenklang herausanalysiert. Daraufhin dient diese Analyse im Herzstück des Patches, dem „choosefreq“ Loop zur Auswahl interessanter Teilbereiche aus dem Spektralsample. Lautstarke Peaks filtern hierbei schmalere Bänder aus höheren Frequenzbereichen und bilden einen Kontrast zu schwächeren Peaks, welche etwas breiter Bänder aus tieferen Frequenzbereichen filtern.

peakloop – Analyse
choosefreq Loop – Audio Processing


Wie klein die jeweiligen Iterationsschritte sind, wirkt sich dabei sowohl auf die Länge, als auch auf die Auflösung des gesamten Outputs aus. So können je nach Sample-Material sehr viele kurze Grains oder weniger, aber dafür längere Teilabschnitte erstellt werden. Beide dieser Parameter sind jedoch frei und unabhängig voneinander wählbar.
Im beigefügten Stück wurde sich beispielsweise für eine relativ hohe Auflösung (also eine erhöhte Anzahl an Iterationsschritten) in Kombination mit längerer Dauer des ausgeschnittenem Samples entschieden. Dadurch entsteht ein eher meditativer Charakter, wobei kein Teilabschnitt zu 100% dem anderen gleichen wird, da es ständig minimale Veränderungen unter den Peak-Amplituden des Amplitudenklangs gibt.
Das noch relativ rohe Ergebnis dieses Algorithmus ist die erste Version meiner akusmatischen Studie.

Akusmatische Studie Version 1


Der darauffolgende Überarbeitungsschritt galt vor allem einer präziseren Herausarbeitung der Unterschiede zwischen den einzelnen Iterationsschritten. Dazu wurde eine Reihe an Effekten eingesetzt, welche sich wiederum je nach Peak-Amplitude des Amplitudenklangs unterschiedlich verhalten. Um dies zu ermöglichen, wurde die Effektreihe direkt in den Peakloop integriert.

Akusmatische Studie Version 2


Im dritten und letztem Überarbeitungsschritt erfolgte die Spatialisierung des Audios auf 8 Kanäle.
Hierbei klingen die einzelnen Kanäle ineinander und ändern ihre Position im Uhrzeigersinn. Somit bleibt der Grundcharakter des Stückes bestehen, jedoch ist es nun zusätzlich möglich, das „Durcharbeiten“ des choosefreq Loops räumlich zu verfolgen. Damit diese Räumlichkeit erhalten bleibt, wurde der Output anschließend mithilfe von Binauralix für den Upload in binaural Stereo umgewandelt.

Akusmatische Studie Version 3 – Binaural

Spectral Select – Ambisonics

Im Zuge einer weiteren Überarbeitung wurde Spectral Select über die spatialisation class „Hoa-Trajectory“ von OM-Prisma neu spatialisiert und in das Ambisonics Format gebracht.
Damit sich dieser Schritt konzeptionell und klanglich gut in die bisherigen Bearbeitungen eingliedert, soll der Amplitudenklang auch bei der Raumposition eine wichtige Rolle spielen.
Die Möglichkeiten mithilfe von Open-Music und OM-Prisma Klänge zu spatialisieren sind zahlreich. Letzten Endes wurde entschieden, mit Hoa-Trajectory zu arbeiten. Hierbei ist die Klangquelle nicht an eine feste Position im Raum gebunden und kann mit einer Trajektorie beschrieben werden, welche auf die Gesamtdauer des Audio-Inputs skaliert wird.

Spatialisierung mit HOA.TRAEJECTORY

Die Trajektorie wird in Abhängigkeit der Amplituden-Analyse im vorhergehenden Schritt erstellt.
Dabei wird eine simple, dreidimensionale Kreis Bewegung, welche sich in Spiralbewegung nach unten dreht, mit einer komplexeren, zweidimensionalen Kurve perturbiert. Die Y-Werte der komplexeren Kurve entsprechen dabei den herausanalysierten Amplitudenwerten des Amplitudenklanges.
Somit ergeben sich je nach skalierung der Amplitudenkurve mehr oder weniger starke Abweichungen der Kreisbewegung. Höhere Amplitudenwerte sorgen also für ausuferndere Bewegungen im Raum.


Interessant hierbei ist, dass OM-Prisma auch Doppler-Effekte mitberücksichtigt. Dadurch ist zusätzlich hörbar, dass bei höheren Amplitudenwerten extremere Abstände zur Hörposition in der selben Zeit zurückgelegt werden. Dadurch nimmt dieser Arbeitsschritt unmittelbar Einfluss auf die Klangfarbe des gesamten Stückes.
Je nach Skalierung der Trajektorie können schnelle Bewegungen dadurch stark überbetont werden, allerdings können (ab einer zu großen Entfernung) auch Artfakten entstehen.
Damit ein besserer Eindruck Ensteht folgen 2 verschiedene durchläufe des Algorithmus mit unterschiedlichen Abständen zum Hörer.

Version mit extremen Doppler Effekten wodurch Artfakte enstehen können – Binaural Stereo

Version mit näherem Abstand und moderateren Doppler Effekten – Binaural Stereo

Spektralklang sowie Amplitudenklang wurden in diesem Beispiel im Gegensatz zu den vorherigen Klangbeispielen ausgetauscht. Es handelt sich hierbei um ein längeres Soundfile zur Analyse der Amplituden und einen weniger verzerrten Drone als Spektralklang.
Die Idee hinter diesem Projekt ist ohnehin, mit verschiedenen Klangdateien zu experimentieren.
Daher wurde auch der alter Algorithmus noch einmal überarbeitet um mehr Flexibilität bei unterschiedlichen Klangdateien zu bieten:

Überarbeitete skalierbare Version des alten Algorthimus zur Auswahl aus dem Spektralklang

Außerdem wird nun aus dem Spektralklang auf der Zeitachse randomisiert ausgewählt. Dadurch soll jeglicher formgebender Zusammenhang aus der Magnitude des Amplitudenklangs stammen und jegliche Klangfarbe aus dem Spektralklang extrahiert werden.

VonVeronika Reutz

Komponieren in 8 Kanälen mit Open Music

In diesem Artikel stelle ich meine Ideen, kreativen Prozesse und technischen Daten zum für die Klasse „Symbolische Klangverarbeitung und Analyse/Synthese“ bei Prof. Marlon Schumacher programmierter Patch vor. Die Idee dieses Textes ist es, die technischen Lösungen für meine kreativen Ideen aufzuzeigen und das gewonnene Wissen zu teilen und so dem Leser bei seinen Ideen zu helfen. Der Zweck dieses Patches ist, Klänge aus dem Alltag zu nehmen und sie mit Hilfe mehrerer Prozesse innerhalb von Open Music in eine eigene Komposition umzuwandeln.

Verantwortliche: Veronika Reutz Drobnić, Wintersemester 21/22

Einführung, Iteration 1

Die Ausgangsidee des Stücks war es, Alltagsgeräusche, zum Beispiel ein Geräusch eines Wasserkochers, in einen anderen, bearbeiteten Klang zu verwandeln, indem technische Lösungen in Open Music implementiert wurden. Dieser Patch verarbeitet und führt mehrere Dateien zu einer Komposition zusammen. Es gibt drei Iterationen des Patches, an dem ich während des Semesters gearbeitet habe. Ich werde sie chronologisch nacheinander beschreiben.

Die ursprüngliche Idee für den Patch stammt von musique concréte. Ich wollte aus konkreten Klängen (nicht in Open Music synthetisiert, sondern aufgenommen) ein 2-Minuten-Stück machen. Dieser Patch besteht aus drei Subpatches, die mit der Maquette im Hauptpatch verbunden sind.

Der Hauptpatch

weiterlesen

Seiten: 1 2 3

VonZeno Lösch

Akusmatische Studie von Zeno Lösch

Dieser Beitrag handelt über die drei Iterationen einer akusmatischen Studie von Zeno Lösch, welche im Rahmen des Seminars „Symbolische Klangverarbeitung und Analyse/Synthese“ bei Prof. Dr. Marlon Schumacher an der HFM Karlsruhe durchgeführt wurden. Es wird über die grundlegende Konzeption, Ideen, aufbauende Iterationen sowie die technische Umsetzung mit OpenMusic behandelt.

Verantwortliche: Zeno Lösch, Master Student Musikinformatik der HFM Karlsruhe, 1. Semester

 

Idee und Konzept

 

Meine Inspiration für diese Study habe ich von dem Freeze Effekt der GRM Tools.

Dieser Effekt ermöglicht es ein Sample zu layern und ihn gleichzeitig in verschiedenen Geschwindigkeiten abzuspielen. 

Mit diesem Prozess kann man eigenständige Kompositionen, Sound-Objekte, Klanggebilde u.s.w. erstellen.

Meine Idee ist es dasselbe mit Open Music zu programmieren. 

Dazu habe ich die Maquette verwendet und om-loops. 

In der OpenMusicPatch findet man die verschiedenen Prozesse des layern des Ausgangsmaterials.

Das Ausgangsmaterial ist eine „gefilterte“ Violine. Diese wurde mit dem Prozess der Cross-Synthesis erstellt. Dieser Prozess des Ausgangsmaterials wurde nicht in Open Music erstellt. 

Ausgangsmaterial

 

Musik kann nicht ohne Zeit existieren. Unsere Wahrnehmung verbindet die verschiedenen Klänge und sucht einen Zusammenhang. In diesem Prozess, auch vergleichbar mit Rhythmus, wird das einzelne Objekt mit anderem Objekten in Verbindung gesetzt. Digitale Klangmanipulation ermöglicht es mit Prozessen aus einem Klang andere zu erstellen, welche im Zusammenhang zu dem gleichen stehen. 

Zum Beispiel ich Präsentiere den Klang in einer Form und verändere ihn an einem anderen Zeitpunkt in der Komposition. Es entsteht meistens ein Zusammenhang, insofern der Hörer diesen nachvollziehen kann. 

Man kann ähnlich wie bei Noten eine Transposition bzw. die Tonhöhe verändern. 

Bei einer Note wird dadurch die Frequenz verändert. Bei einem digitalen Material kann es zu sehr spannenden Ergebnissen führen. Bei einem Klavier sind die Obertöne bei jeder Note in einem Zusammenhang zum Grundton. Diese sind festgelegt und sind mit traditionellen Noten nicht veränderbar. 

Bei digitalen Material spielt der Effekt, der transponiert, eine sehr wichtige Rolle. Je nach Art des Effekts habe ich verschiedene Möglichkeiten das Material zu manipulieren nach meinen eigenen Regeln.

Der Nachteil bei Instrumenten ist es, dass zum Beispiel bei einer Violine, der Spieler nur einmal die Note spielen kann. Zehnmal die gleiche Note bedeutet zehn Violinen. 

In OpenMusic ist es möglich das „Instrument“ beliebig oft zu spielen (insofern es die Rechenleistung des Computers schafft). 

 

Prozess

Um das Grm-Freeze nachzubauen, wurde zuerst eine moquette mit leeren Patches gefüllt.

Füllen einer Moquette mit leeren Patches

 

Anschließend wurde aus der Moquette mit einem om-loop das soundfile an die Positionen der leeren Patches gerendert.

Loop für soundfile Positionen

 

Um clipping zu vermeiden wurde folgender Code verwendet.

Sox-Mix und Anti Clip

 

Layer Study erste Iteration

 

Das Ausgangsmaterial wird am Anfang präsentiert. Im Laufe der Studie wird es immer wieder verändert und verschiedenartig gestapelt. 

In der Studie selbst wird auch mit der Dynamik gespielt. Je nach Algorithmus der Klangstapelung wird die Dynamik in jedem Soundobjekt verändert. Da es sich um mehr als einen Klang in der Zeit handelt werden diese Klänge normalisiert, je nach wie viele Klänge in dem Algorithmus präsent sind um Clipping zu vermeiden. 

Die Studie beginnt mit dem Ausgangsmaterial. Dieses wird anschließend in einer verschiedenen zeitlichen Abfolge präsentiert. 

Dieser Layer wird dann gefiltert und er ist auch leiser. Der nächste Entwickelt sich zu einem „halligerm“ Klang. Ein Kontinuum. Das Kontinuum bleibt es ist wird wieder anders Präsentiert.

Im vorletzten Klang sind eine Form von glissandi zu hören, welche wieder in einem Klang enden, der ähnlich ist wieder zweite, aber lauter ist. 

Der Prozess um den Klang zu stapeln und zu verändern ist bei jeder Sektion sehr ähnlich.

Die Position wird von der leeren Patch in der Moquette gegeben.

Anschließend wird die y-Position und x-Position Parameter für eine Modulation

Implementierung der x- und y-Positionen als Modulationsparameter
Layer Study erste Iteration

 

Layer Study zweite Iteration

Ich habe für jede Sektion versucht ein anderes Stereobild zu erzeugen. 

Es wurden verschiedene Räume simuliert.

Eine Technik, die dabei verwendet wurde ist das Mid/Side.

Bei dieser Technik wird aus einem Stereosignal das Mid und Side mit folgendem Prozess extrahiert:

Mid = (L + R) * 0.5

Side = (L – R) * 0.5

Zudem wurde ein Aural Exciter werdet.

Bei diesem Prozess wird das Signal mit einem Hochpassfilter gefiltert, verzerrt und dem Eingangssignal wieder hinzugefügt. Man kann dadurch eine bessere Definition erreichen.

Durch das Mid/Side wird der Aural Exciter nur auf einem der beiden angewendet und es wird als „definierter“ Wahrgenommen.

Um den Prozess wieder zu einem Stereo signal zu kommen wird folgender Prozess angewendet:

L = Mid + Side

R = Mid – Side

Mid Side Prozess

 

Um den Klang weiter zu verräumlichen wurde mit Hilfe eines Allpassfilters und einem Kammfilter die Phase von Mid oder Side Anteil verändert.

Dekorrelation der Phase

 

Layer Study Stereo

 

Layer Study dritte Iteration

Bei dieser iteration wurde das Stereofile auf acht Lautsprecher aufgeteilt.

Es wurden die verschiedenen Sektionen der Stereokomposition extrahiert und verschiedene Techniken der Aufteilung verwendet.

Bei einen dieser wurde ein unterschiedliches fade in und fade out für jeden Kanal verwendet.

In einer akousmatischen Ausführung einer Komposition kann man dieses fade in und fade out mit den Reglern eines Mixers erziehlen.

Dazu wurde ein mapcar und repeat-n verwendet.

Random Fades für Multichannel

Bei den anderen Prozessen wurde die Position der jeweiligen Kanäle verändert. Es wurde ein Delay verwendet.

Multichannel Delay

Die finale Version auf 2-Kanälen verfügbar.

Downmix Layer Study 8 Kanäle auf 2 Kanäle

 

VonLorenz Lehmann

Library „OM-LEAD“

Abstract:

Die Library „OM-LEAD“ ist eine Library für regelbasierte, computergenerierte Echtzeit-Komposition. Die Überlegungen und Ansätze in Joseph Brancifortes Text „FROM THE MACHINE: REALTIME ALGORITHMIC APPROACHES TO HARMONY AND ORCHESTRATION“ sind Ausgangspunkt für die Entwicklung.

Momentan umfasst die Library zwei Funktionen, die sowohl mit CommonLisp, als auch mit schon bestehenden Funktionen aus dem OM-Package geschrieben sind.

Zudem ist die Komposition im Umfang der zu kontollierenden Parametern, momentan auf die Harmonik und die Stimmführung begrenzt. 

Für die Zukunft möchte ich ebenfalls eine Funktion schreiben, welche mit den Parametern Metrik und Einsatzabstände, die Komposition auch auf zeitlicher Ebene erlaubt.

Entwicklung: Lorenz Lehmann

Betreuung und Beratung: Prof. Dr. Marlon Schumacher

Mein herzlicher Dank für die freundliche Unterstützung gilt Joseph Branciforte und 

Prof. Dr. Marlon Schumacher.

weiterlesen

Seiten: 1 2 3 4

VonLorenz Lehmann

SPCL – 1) Formen, S-Expressions, Funktionen

Einführung in die Sprache Common LISP

In dieser Unterrichtseinheit wird die Sprache Common LISP eingeführt. Hierzu betrachten wir Besonderheiten dieser Sprache, insbesondere die Syntax: sog. „S-Expressions“ (symbolic expressions) und Prefix (oder „Polish“) Notation. Des Weiteren befassen wir uns mit dem Konzept der  Evaluierung von Formen unter Berücksichtigung der Äquivalenz von Daten und Funktionen: „A lisp form is a lisp datum that is also a program, that is, it can be evaluated without an error.

Wir haben uns mit der Evaluierungsreihenfolge studiert. Lisp evaluiert Formen rekursiv. Hierzu ein kleines Beispiel aus diesem online LISP Tutorial. Folgende form soll evaluiert werden:

(+ 33 (* 2.3 4)) 9)

  1. The + function is looked up.
  2. 33 is evaluated (its value is 33).
  3. (* 2.3 4) is evaluated:
    1. The * function is looked up.
    2. 2.3 is evaluated (its value is 2.3)
    3. 4 is evaluated (its value is 4)
    4. 2.3 and 4 are passed to the * function.
    5. The * function returns 9.2. This is the value of (* 2.3 4).
  4. 9 is evaluated (its value is 9).
  5. 33, 9.2, and 9 are passed to the + function.
  6. The + function returns 51.2. This is the value of (+ 33 (* 2.3 4) 9).
  7. The Lisp system returns 51.2.

Wir haben sodann verschiedene Datentypen kennengelernt: symbols, floats, integers und ratios.

Wir haben unsere ersten Programmierversuche gestartet und unsere ersten kleinen LISP forms geschrieben. Dabei haben wir sog. „primitive functions“ (Funktionen, die bereits in der Sprache implementiert sind) verwendet, um Operationen mit Daten auszuführen. Diese waren: (*für die u.s. Tabellen nehmen wir an, die  Variable A hätte den Wert 10 und Variable B den Wert 20) :

Arithmetische Operatoren

+, -, *, /, mod, rem, incf, decf

Operator Description Example
+ Adds two operands (+AB) will give 30
Subtracts second operand from the first (- A B) will give -10
* Multiplies both operands (* A B) will give 200
/ Divides numerator by de-numerator (/ B A) will give 2
mod, rem Modulus Operator and remainder of after an integer division (mod B A) will give 0
incf Increments operator increases integer value by the second argument specified (incf A 3) will give 13
decf Decrements operator decreases integer value by the second argument specified (decf A 4) will

Prädikatsfunktionen

equalp, symbolp, numberp, oddp, evenp

Operator Description Example
equalp Checks if the values of the two arguments are equal (= A B) is not true.
symbolp Checks if the value of the argument is a symbol (symbolp A) is not true
numberp Checks if the value of the argument is a number (numberp A) is true.
oddp Checks if the value of the argument (integer) is odd (oddp A) is not true
evenp Checks if the value of the argument (integer) is even (evenp A) is true

Vergleichsoperatoren

=, /=, >, <, >=, <=, max, min

Operator Description Example
= Checks if the values of the operands are all equal or not, if yes then condition becomes true. (= A B) is not true.
/= Checks if the values of the operands are all different or not, if values are not equal then condition becomes true. (/= A B) is true.
> Checks if the values of the operands are monotonically decreasing. (> A B) is not true.
< Checks if the values of the operands are monotonically increasing. (< A B) is true.
>= Checks if the value of any left operand is greater than or equal to the value of next right operand, if yes then condition becomes true. (>= A B) is not true.
<= Checks if the value of any left operand is less than or equal to the value of its right operand, if yes then condition becomes true. (<= A B) is true.
max It compares two or more arguments and returns the maximum value. (max A B) returns 20
min It compares two or more arguments and returns the minimum value. (min A B) returns 20

 

Logische Operatoren

Hierfür nehmen wir an, A hat den Wert NIL (false) und B hat den Wert 5 (true).

Operator Description Example
and It takes any number of arguments. The arguments are evaluated left to right. If all arguments evaluate to non-nil, then the value of the last argument is returned. Otherwise nil is returned. (and A B) will return NIL.
or It takes any number of arguments. The arguments are evaluated left to right until one evaluates to non-nil, in such case the argument value is returned, otherwise it returns nil. (or A B) will return 5.
not It takes one argument and returns t if the argument evaluates to nil. (not A) will return T.

Danach haben wir die Macro Funktion „defun“ kennen gelernt, um unsere eigenen Funktionen zu definieren. Dies haben wir dann mit der Programmierung eines kleinen Würfelspiels zur Anwendung gebracht.

Seiten: 1 2

VonLorenz Lehmann

SPCL – Rekursion

Tafelaufschrieb zu Rekursion (vgl. LISP code auf Ilias):

; Beispiel mit cond

(defun myfun ()
    (cond ([termination-condition] [termination-action])
          ([recursion-condition] (myfun ()))
     )
)

; Beispiel mit if

(defun myfun ()
 (if  [termination-condition] 
    [termination-action]
  (myfun ())
  )
 ) 
      
IMG_5400

Hier eine Visualisierung der Rekursiven Funktion zur Generierung von Fibonacci Zahlen. Code-Beispiel:

(defun fib1 (n)
 (if  (or (= n 1) (= n 0)) 
    1
  (+ (fib1 (- n 1)) (fib1 (- n 2)))
  )
 ) 
      
IMG_5402