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:
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.
Hier ist ein minimal funktionierendes Beispiel eines Python-Programms, das eine .wav
Datei 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"
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:
Wo ist die Frequenz Ihres Tons (z. B. A4 = 440 Hz) und 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.
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.
Kyle Kanos
Björn W
R2B2
Björn W