From a93e940b71b5fc85d4850017d0c04d0ab52dc4a4 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 13 Dec 2025 16:26:02 +0000 Subject: [PATCH] =?UTF-8?q?Add=20Twelve-Tone=20Synthesizer=20-=20Dodekapho?= =?UTF-8?q?nie=20nach=20Sch=C3=B6nberg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Complete web-based synthesizer implementing Arnold Schönberg's twelve-tone technique (Dodekaphonie) with: - PHP backend for tone row generation and matrix calculation - JavaScript Web Audio API for real-time sound synthesis - Four row transformations: Original, Retrograde, Inversion, RI - Convolver-based reverb effect with adjustable wet/dry mix - Real-time audio visualization (waveform and spectrum) - Interactive controls for tempo, octave, attack, release - Multiple waveform options (sine, triangle, square, sawtooth) - Full 12x12 twelve-tone matrix display - Automatic continuous playback with random transformations --- twelve-tone-synthesizer/README.md | 61 ++ twelve-tone-synthesizer/index.php | 939 ++++++++++++++++++++++++++++++ 2 files changed, 1000 insertions(+) create mode 100644 twelve-tone-synthesizer/README.md create mode 100644 twelve-tone-synthesizer/index.php diff --git a/twelve-tone-synthesizer/README.md b/twelve-tone-synthesizer/README.md new file mode 100644 index 0000000..44cd865 --- /dev/null +++ b/twelve-tone-synthesizer/README.md @@ -0,0 +1,61 @@ +# Zwölfton-Synthesizer (Dodekaphonie) + +Ein interaktiver Web-Synthesizer basierend auf Arnold Schönbergs Zwölftontechnik. + +## Features + +- **Automatische Zwölfton-Komposition**: Generiert fortlaufend Musik nach den Regeln der Dodekaphonie +- **Vier Reihenformen**: Original, Krebs (Retrograde), Umkehrung (Inversion), Krebsumkehrung +- **Reverb-Effekt**: Einstellbarer Hall mit Convolver-basierter Impulsantwort +- **Web Audio API**: Echtzeit-Klangsynthese im Browser +- **Audio-Visualisierung**: Wellenform und Frequenzspektrum in Echtzeit +- **Zwölftonmatrix**: Vollständige 12x12-Matrix aller möglichen Transpositionen + +## Die Zwölftontechnik + +Die Dodekaphonie wurde von Arnold Schönberg um 1921 entwickelt: + +1. Alle 12 chromatischen Töne werden gleichberechtigt verwendet +2. Kein Ton darf wiederholt werden, bevor alle anderen gespielt wurden +3. Die Grundreihe erscheint in vier Formen: + - **Original (O)**: Die Grundreihe + - **Krebs (R)**: Rückwärts gespielt + - **Umkehrung (I)**: Intervalle gespiegelt + - **Krebsumkehrung (RI)**: Kombination aus Krebs und Umkehrung +4. Jede Form kann auf alle 12 Stufen transponiert werden (48 mögliche Reihen) + +## Installation + +1. PHP-Server starten (PHP 7.4+ erforderlich): +```bash +cd twelve-tone-synthesizer +php -S localhost:8000 +``` + +2. Browser öffnen: `http://localhost:8000` + +## Bedienung + +- **Starten**: Startet die automatische Wiedergabe der Zwölftonreihe +- **Stoppen**: Beendet die Wiedergabe +- **Neue Reihe**: Generiert eine zufällige neue Zwölftonreihe + +### Klangparameter + +- **Tempo (BPM)**: Geschwindigkeit der Notenwiedergabe (40-300) +- **Oktave**: Tonhöhenbereich (2-6) +- **Reverb**: Hallanteil (0-100%) +- **Attack**: Einschwingzeit der Töne +- **Release**: Ausklingzeit der Töne +- **Wellenform**: Sinus, Dreieck, Rechteck, Sägezahn + +## Technologie + +- **PHP**: Backend für Zwölftonreihen-Generierung und Matrix-Berechnung +- **JavaScript**: Web Audio API für Klangsynthese +- **ConvolverNode**: Realistische Reverb-Simulation +- **Canvas API**: Audio-Visualisierung + +## Lizenz + +MIT License diff --git a/twelve-tone-synthesizer/index.php b/twelve-tone-synthesizer/index.php new file mode 100644 index 0000000..3750290 --- /dev/null +++ b/twelve-tone-synthesizer/index.php @@ -0,0 +1,939 @@ +originalRow = $this->generateRandomRow(); + } + + /** + * Generiert eine zufällige Zwölftonreihe + */ + public function generateRandomRow(): array { + $row = range(0, 11); + shuffle($row); + return $row; + } + + /** + * Gibt die Grundreihe zurück + */ + public function getOriginalRow(): array { + return $this->originalRow; + } + + /** + * Krebs (Retrograde) - Reihe rückwärts + */ + public function getRetrograde(): array { + return array_reverse($this->originalRow); + } + + /** + * Umkehrung (Inversion) - Intervalle gespiegelt + */ + public function getInversion(): array { + $inversion = []; + $firstNote = $this->originalRow[0]; + + foreach ($this->originalRow as $note) { + $interval = $note - $firstNote; + $invertedNote = ($firstNote - $interval + 12) % 12; + $inversion[] = $invertedNote; + } + + return $inversion; + } + + /** + * Krebsumkehrung (Retrograde Inversion) + */ + public function getRetrogradeInversion(): array { + return array_reverse($this->getInversion()); + } + + /** + * Transponiert eine Reihe um n Halbtöne + */ + public function transpose(array $row, int $semitones): array { + return array_map(function($note) use ($semitones) { + return ($note + $semitones) % 12; + }, $row); + } + + /** + * Konvertiert Notennummern zu Notennamen + */ + public function toNoteNames(array $row): array { + return array_map(function($note) { + return $this->noteNames[$note]; + }, $row); + } + + /** + * Generiert die komplette Zwölftonmatrix (12x12) + */ + public function generateMatrix(): array { + $matrix = []; + $inversion = $this->getInversion(); + + for ($i = 0; $i < 12; $i++) { + $transposition = $inversion[$i]; + $matrix[$i] = $this->transpose($this->originalRow, $transposition); + } + + return $matrix; + } + + /** + * Gibt alle Daten als JSON zurück + */ + public function toJSON(): string { + return json_encode([ + 'original' => $this->originalRow, + 'retrograde' => $this->getRetrograde(), + 'inversion' => $this->getInversion(), + 'retrogradeInversion' => $this->getRetrogradeInversion(), + 'noteNames' => $this->toNoteNames($this->originalRow), + 'matrix' => $this->generateMatrix() + ]); + } +} + +// API-Endpoint für neue Reihe +if (isset($_GET['action']) && $_GET['action'] === 'generate') { + header('Content-Type: application/json'); + $generator = new TwelveToneGenerator(); + echo $generator->toJSON(); + exit; +} + +$generator = new TwelveToneGenerator(); +$initialData = $generator->toJSON(); +?> + + + + + + Zwölfton-Synthesizer | Dodekaphonie nach Schönberg + + + +
+
+

Zwölfton-Synthesizer

+

Dodekaphonie nach Arnold Schönberg

+
+ +
+ + + +
+ +
+

Aktuelle Zwölftonreihe

+
+ + + + +
+
+
+ +
+

Klangparameter

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+

Audio-Visualisierung

+
+ +
+
+ + Bereit zum Starten +
+
+ +
+

Zwölftonmatrix

+
+
+
+
+ Die Zwölftontechnik (Dodekaphonie):
+ Entwickelt von Arnold Schönberg um 1921. Alle 12 Halbtöne der chromatischen Tonleiter + werden gleichberechtigt verwendet. Die Grundreihe kann in vier Formen erscheinen: + Original (O) - die Grundreihe, + Krebs (R) - rückwärts gespielt, + Umkehrung (I) - Intervalle gespiegelt, + Krebsumkehrung (RI) - Kombination aus Krebs und Umkehrung. + Jede Form kann auf alle 12 Stufen transponiert werden (48 mögliche Reihen). +
+
+ +
+

Zwölfton-Synthesizer © 2024 | Basierend auf der Dodekaphonie von Arnold Schönberg

+
+
+ + + +