knp.de

– Archiv: Modellierung von Tonhöhen

Archiv: Modellierung von Tonhöhen

04/06/2014

What are you armed with?
(Douglas N. Adams)

Archiv-Einträge haben sich aus älteren Posts ergeben. Sie erscheinen hier in einem neuen Layout.

Physikalische Töne

Aus physikalischer Sicht, kann ein Ton als eine Welle mit einer Wellenlänge beschrieben werden. Unterschiedliche Wellenlängen entsprechen unterschiedliche Töne.

Als abstrakte Approximation verwenden wir statt dessen eine Sinus-Funktion. Für die Wellenlänge l ergibt sich

Math.sin(x * l / (2.0 * Math.PI))

Die folgende Abbildung zeigt eine Tonschwingung.

Tonschwingung

Anstatt der Wellenlänge lkann auch die Frequenz f verwendet werden, denn es gilt:

l == 1.0 / f

Damit ergibt sich als Sinus-Funktion

Math.sin(x / (f * 2.0 * Math.PI))

Damit ergibt sich eine erste Klasse für die Modellierung von physikalischen Tönen:

public final class PhysikalischerTon {
    private final double _frequenz;

    public PhysikalischerTon(double f) {
        _frequenz = f;
    }
    public double frequenz() {
        return _frequenz;
    }
    public double wellenLaenge() {
        return 1.0 / _frequenz;
    }
}

Logische Töne

Für die Harmonielehre beschränken wir uns auf abzählbar viele Töne. Damit ergibt sich die folgende Klasse für einen Ton:

public final class Ton {
    private final int _position;

    public Ton(int p) {
        position = p;
    }
    public int position() {
        return _position;
    }
}

Zu jedem Ton kann ein physikalischer Ton gefunden werden. Die ersten dreizehn Töne sind:

frequenz[0] = 440.00;
frequenz[1] = 466.16;
frequenz[2] = 493.88;
frequenz[3] = 523.25;
frequenz[4] = 554.37;
frequenz[5] = 587.33;
frequenz[6] = 622.25;
frequenz[7] = 659.26;
frequenz[8] = 698.46;
frequenz[9] = 739.99;
frequenz[10] = 783.99;
frequenz[11] = 830.61;
frequenz[12] = 880.00;
Quelle: Wikipedia

Der dreizehnte Ton hat genau die doppelte Frequenz von den ersten Ton. Analog sind alle weiteren Töne Vielfache von den hier abgebildeten Tönen. Jeweils zwölf aufeinander folgende Töne bilden eine Oktave. Die Töne der nächsten Oktave haben genau die doppelte Frequenz.

Dies ergibt eine genauere Verteilung der Frequenzen. Sie müssen gleichmäßig so angeordnet werden, dass mit zwölf Tönen eine Verdopplung stattfindet.

Es ergibt sich die folgende Klasse:

public final class TonUmwandler {
    public static PhysikalischerTon umwandeln(Ton t) {
        return new PhysikalischerTon (
            Math.pow(2, t.position() / 12.0) * 440.00
        );
    }
}

Die folgende Abbildung zeigt den Zusammenhang zwischen den Tönen und ihrer Frequenz:

Tonhöhen


Comments

Would you like to correct, expand or correct an entry? Please send an e-mail to timm@knp.de. I will gladly publish interesting contributions on this site.