Resultierende Frequenz, wenn 3 harmonische Töne (ein Akkord) gespielt werden

Wenn ich die Frequenz einzelner gespielter Noten kenne (angenommen D, F # und A), wie bestimme ich die endgültige Frequenz, wenn sie (fast) gleichzeitig als Akkord gespielt werden?

Um das Problem in einen Zusammenhang zu bringen, schreibe ich ein Programm, in dem Benutzereingaben klassifiziert und Akkorde als Ausgabe gespielt werden. Meine Programmierkenntnisse sind begrenzt (meine Abschlüsse sind Biochemie und Neurowissenschaften), und die Hilfedatei gab mir die folgenden Optionen:

  1. Spielen Sie eine Frequenz
  2. Verwenden Sie eine Aufnahme für die Wiedergabe

Da ich die zweite Option nicht verwenden möchte, habe ich mich gefragt, wie ich die resultierende Frequenz berechnen oder den resultierenden Klang mathematisch darstellen kann. Wenn jemand die Theorie dahinter erklären oder einen Link dafür posten könnte, wäre ich besonders dankbar.

Mir scheint, dass hier Überlagerung gelten würde.
Wenn Sie ein Programm schreiben können, das ein Sample mit einer Frequenz / Note generiert, beginnen Sie damit und erzeugen Sie dann, um einen Akkord zu erstellen, einfach drei Samples und addieren Sie sie.
Danke KyleKanos und @BjornW. Ich nehme an, Sie beide schlagen etwas Ähnliches vor: Addieren Sie die Frequenzen. Klingt einfach genug! Wenn es nicht wirklich in Ordnung klingt (wie Wikipedia betont: "Weil physikalische Systeme im Allgemeinen nur ungefähr linear sind, ist das Überlagerungsprinzip nur eine Annäherung an das wahre physikalische Verhalten"), muss ich möglicherweise versuchen, etwas Komplexeres hinzuzufügen, wie z vorgeschlagen von ja72.
Wenn man sich den Bereich der elektronischen Musik, Synthesizer usw. ansieht, die heutzutage den Großteil der populären Musik ausmachen, summieren sich wahrscheinlich 99 % davon nur die Noten. Einige dedizierte Simulationen von beispielsweise Bass oder Klavier können Interaktionen hinzufügen. Ansonsten werden die meisten Nichtlinearitäten musikalisch nach der Überlagerung platziert, wie beispielsweise bei der Verzerrung eines E-Gitarrenverstärkers.

Antworten (4)

Hier ist ein minimal funktionierendes Beispiel eines Python-Programms, das eine .wavDatei mit einem Hauptdreiklang von 440:550:660 Hz unter Verwendung von Sinuswellen generiert. Ihre Benutzereingabe könnte verwendet werden, um beliebige Frequenzen für den Akkord zu erzeugen.

import math, wave, array
duration = 1 # seconds
freq1 = 440 # tonic (Hz) (frequency of the sine waves)
freq2 = 550 # 2nd note
freq3 = 660 # 3nd note
amp1 = 0.2 # amplitude of freq1; sum of amplitudes should be <= 1
amp2 = 0.2 # amplitude of freq2
amp3 = 0.2 # amplitude of freq 3
volume = 100 # percent
data = array.array('h') # signed short integer (-32768 to 32767) data
sampleRate = 44100 # of samples per second (standard)
numChan = 1 # of channels (1: mono, 2: stereo)
dataSize = 2 # 2 bytes because of using signed short integers => bit depth = 16
numSamplesPerCyc = int(sampleRate / freq1)
numSamples = sampleRate * duration
factor=2*math.pi/sampleRate
for i in range(numSamples):
    sample = 32767 * float(volume) / 100
    sample *= amp1*math.sin(factor*freq1* i)+ amp2*math.sin(factor*freq2*i)+amp3*math.sin(factor*freq3*i)
    data.append(int(sample))
f = wave.open('SineWave_' + str(freq1) + 'Hz.wav', 'w')
f.setparams((numChan, dataSize, sampleRate, numSamples, "NONE", "Uncompressed"))
f.writeframes(data.tostring())
f.close()
print "Done"
Ich nehme an, Sie sind sich bewusst, dass bei gleich temperierter Stimmung die Frequenzen des großen Dreiklangs nicht genau die rationalen Verhältnisse zwischen den Mitgliedern sind ( 4 , 5 , 6 ) sondern sind die Verhältnisse zwischen ( 1 , 2 1 3 , 2 7 12 ) , und so eher ( 4 , 5.04 , 5.993 ) .
Absolut. Ich bin mir auch der Dehnungsstimmung bei Klavieren bewusst, da die Oktavobertöne nicht perfekt sind. Übrigens, haben Sie jemals elektronische 10-Tett-Instrumente gehört? Total seltsam.

Nun, Sie fragen nach einem "resultierenden Klang", aber tatsächlich, wenn Sie eine Note spielen, zum Beispiel A4, wird nicht nur ein Klang gespielt.

Theoretisch kann eine Welle als Sinus, eine einfache Schwingung, dargestellt werden. Beispielsweise kann eine Welle, die sich auf einer Saite ausbreitet, die folgende Form haben:

j ( X , T ) = A Sünde ( 2 π F T k X )

Wo F ist die Frequenz Ihres Tons (z. B. A4 = 440 Hz) und k hängt mit Saiteneigenschaften als Dichte zusammen.

In einer idealen Saite kann sich eine einzelne Welle dieses Typs ausbreiten. Diese Welle entspricht einem Vibrationsmodus (der Anzahl von Zyklen der Welle). Auf einer echten Saite, wenn Sie beispielsweise eine Geige spielen, vibrieren jedoch viele Vibrationsmodi gleichzeitig. Welche? Das entspricht der harmonischen Reihe .

Das bedeutet, dass der 440 A beim Spielen von beispielsweise einem A-Ton sehr stark vibriert. Aber auch A5 und E5 und C#5 mit geringerer Intensität (und viel mehr Frequenzen mit geringerer Intensität). Wenn Sie also eine Note spielen, hören Sie mehr als einen Ton. Das ist zum Beispiel der Unterschied zwischen Klavier und Geige. Wenn Sie sehen, welche Frequenzen klingen und welche Intensität sie haben, wenn Sie A spielen, werden Sie feststellen, dass es Unterschiede gibt. Deshalb hat jedes Instrument seine eigene Schallwelle. Um einen realistischen Klang zu haben, müssen Sie versuchen, das Spektrum eines Instruments zu imitieren, was wirklich schwierig ist (und deshalb werden häufig Aufnahmen von echten Instrumenten verwendet).

In einem Akkord bekommt man nicht nur die Summe aller Obertöne jedes Sounds, sondern eine Überlagerung davon, was die Sache noch komplexer macht. Beispielsweise können in einem Orchester "unerwünschte Obertöne" entstehen, wenn Metalle einen großen Akkord spielen. Die Überlagerung von Klängen kann einer Frequenz, die nicht auf dem Akkord liegt, Intensität verleihen und sie schrecklich klingen lassen. Gute Komponisten wissen dies durch eine korrekte Stimmführung zu vermeiden.

Das Beispiel, das jemand zu Python gegeben hat, wird funktionieren, und Sie werden einen guten Klang erhalten, da die Grundfrequenz am wichtigsten ist. Beachten Sie, dass das Beispiel jeden Ton als einfache Sinuswelle schreibt. Aber die echten Wellen sind etwas komplexer. Sie können versuchen, die realen Töne als Summe der Frequenzen der harmonischen Reihe mit Sinuswerten anzunähern. Und dann kombinieren Sie dies, um einen Akkord zu erstellen. Um dies zu tun (es ist nicht einfach!), können Sie über Fourier-Reihen lesen .

Nur zu Ihrer Neugier, diese komplexen Wellen werden Wellenpakete genannt und die Harmonischen können mit der Fourier-Analyse analysiert werden. In den Neurowissenschaften kann es nützlich sein, elektrische Signale aus dem Gehirn zu analysieren ;D

Ein Akkord hat keine einzelne Frequenz, da er aus drei Noten mit unterschiedlichen Frequenzen besteht, die gleichzeitig gespielt werden. Es mag für Sie wie eine einzelne Note klingen, da die drei Frequenzen, aus denen die Akkorde bestehen, harmonieren müssen.

Wenn Sie eine bestimmte Melodie oder ein bestimmtes Lied nur mit einzelnen Frequenzen spielen möchten, würde ich vorschlagen, dass Sie nur den Grundton jedes Akkords und nicht den vollen Akkord spielen. Dadurch erhalten Sie die typischen monotonen Klingeltöne der 90er.

Leider glaube ich nicht, dass die Verwendung nur der Grundnote meinem Zweck dient, also werde ich den Vorschlag von @ JgL nicht ausprobieren. Aber Sie haben meinen Dank.
Können Sie erklären, was Sie versuchen? Es hört sich so an, als würden Sie versuchen, eine Melodie mit einem Programm zu spielen, das nur eine Frequenz als Ausgabe liefern kann?
Ich nehme eine Reihe von relativ zufälligen elektrischen Eingaben in Echtzeit und klassifiziere sie, sobald sie eintreffen. Abhängig von der Klassifizierung wird ein Akkord gespielt. Wie Sie erraten haben, erwarte ich daher, eine Melodie zu spielen, die aus einer Reihe von Akkorden besteht. Der Grund, warum ich keine Einzel-/Grundtonnoten verwenden möchte, ist, dass sie dazu neigen, schrecklich zu klingen, wenn sie zufällig eingesteckt werden, eine Reihe von Akkorden jedoch selten faul klingt und ich nicht viel Musiktheorie in das Programm einbauen möchte, um es zu machen der Computer "komponiert" aktiv eine Melodie. Ich stelle es mir so vor, als würde man zufällig eine Gitarre klimpern oder zufällig eine Geige spielen.

Sie wissen, dass eine einzelne Note in einem Instrument mehrere Frequenzen und Obertöne enthält. Die Wellenform ist niemals eine ideale Sinuswelle, die eine Frequenz trägt. Das Kombinieren zweier Noten kann also mit einem Faltungsintegral erfolgen .

Sie wandeln jede Note über eine Fourier-Transformation in den Frequenzbereich um und kombinieren die Signale mithilfe des Faltungsintegrals. Am Ende haben Sie das Frequenzspektrum des resultierenden Klangs.

Danke für Ihren Vorschlag. Ich werde es ausprobieren, wenn der Vorschlag von @KyleKanos zur Verwendung von Überlagerungen nicht funktioniert. Faltungsintegrale klingen ziemlich kompliziert!