Droste, hörst Du mich?

Am Anfang war das Licht

Die Idee hatte ich vor Jahren schonmal, aber aus Gründen ist mir das irgendwie aus dem Sinn einfleucht. Welche Idee? fragst du vollkommen zu Recht.

Ich dachte, es wäre doch schön, wenn man Licht hören könnte. Immerhin haben Elekromagnetische Wellen eine Wellenlänge und eine Ausbreitungsgeschwindigkeit. Heißt, sie haben eine Frequenz.

Hallo, Hallo, hört mich jemand?

384 THz bis 468 THz | rot
526 THz bis 612 THz | grün
612 THz bis 697 THz | blau

Hier kommem wir zu Kniff 1: Oktaven

Will man beim Musizieren eine Oktave verringern, halbiert man die Frequenzen der entsprechenden Töne. Spielt man dann die selbe Melodie nochmal, klingt sie komplett gleich, nur “tiefer”. Und weil ich eine alte Person bin und mir Frequenzen über 2KHz schon fast Kopfschmerzen machen, habe ich die “Farben” um 41 Oktaven nach unten transponiert.

const Colors_Oct_minus_41 = {
            red: {
                min: 349,
                max: 426
            },
            green: {
                min: 478,
                max: 556
            },
            blue: {
                min: 557,
                max: 634
            }
        };

Probleme, Probeleme …

Ich dachte ja, ich bin pfiffig und kann dann den Bereich zwischen “min” und “max” jeder Farbe auf ein entsprechendes RGB-Byte mappen. Blöd dabei ist, dass ich durch mein Tonempfinden und das Transponieren zwar die “Schrilligkeit™” umgehen kann, aber zum Preis, dass der “Adressraum” zwischen min und max immer kleiner wurde.

Inzwischen sind das ca 77 Werte.

Damit ich das trotzdem gegen ein RGB-Byte werfen kann, musste ich tricksen.

const buildSpreadArray = ( min, max ) => {
            oriItems = max - min;
            spreadsteps = oriItems / 255.0;
            result = [];
            result.push(0);

            for (let index = 0; index < 255; index++) {
                result.push(Math.round(min + (index*spreadsteps)))                
            }

            return result;
        }

        redHz = buildSpreadArray(Colors_Oct_minus_41.red.min,Colors_Oct_minus_41.red.max);
        greenHz = buildSpreadArray(Colors_Oct_minus_41.green.min,Colors_Oct_minus_41.green.max);
        blueHz = buildSpreadArray(Colors_Oct_minus_41.blue.min,Colors_Oct_minus_41.blue.max);

Weil ich davon ausgehe, dass elektromagnetische Wellen quantisiert sind, habe ich beim “breit schmieren” der Frequenzen auf ganze Zahlen gerundet.

Naja, und auf vielfachen Wunsch einer einzelnen Person ist der erste Wert jedes Arrays 0Hz. Damit kann man dann eine Farbe wieder ausschalten.

kannch das mal live sehen?

klar

Ich habe den Audiokontext benutzt. Dieser startet erst nach Benutzer-Interaktion auf der Webseite. Also einfach mal die Regler verschieben.