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(); ?>
Dodekaphonie nach Arnold Schönberg