Weiß jemand, wie das funktioniert und was man da so an Software braucht?
Am Kangbeispiel 12 des Beitrags 2233 möchte ich kurz die Vorgehensweise zur Veränderung eines Obertons mit Hilfe der Software SpectraLayers zeigen: Bild1_Krummhorn8'_036_C_SpectraLayers_2025-09-11.pdf. Das Bild 1 zeigt, wie beispielsweise mit Hilfe der Software SpectraLayers Vers. 9 die dritte Oberschwingung um 15 dB angehoben wird.
In der Hauptansicht von SpectraLayers zeigen sich die Teiltöne als farblich hervorgehobene horizontale Linien. Die unterste Linie steht für den Grundton (hier im Beispiel bei 66 Hz), darüber aufsteigend sind die Obertöne bildlich dargestellt. Zur Pegeländerung wird zunächst der gewünschte Bereich mit der Bildschirmmaus markiert. Über die Menüfolge „Verarbeiten“ -> „Amplitude“ -> „Verstärkung“ öffnet sich ein kleines Fenster, in das entweder durch Eintippen des Zahlenwertes oder alternativ durch Ziehen des Balkenschiebereglers mit der Bildschirmmaus der gewünschte Änderungsfaktor eingegeben wird. Durch Drücken der Leertaste lässt sich das Ergebnis unmittelbar anhören (ggf. vorher die Bereichsauswahl aufheben, sonst hört man hier im Beispiel nur den verstärkten dritten Oberton solo bzw. isoliert und die anderen Teiltöne nicht).
Wenn man mit der Software SpectraLayers schon etwas vertraut ist, schafft man eine Obertonbearbeitung in ein bis zwei Minuten (inkl. Laden und Speichern der jeweiligen Wave-Datei). Um ein komplettes Orgelregister zu bearbeiten, summiert sich die gesamte Bearbeitungszeit auf den Stundenbereich. Will man dann noch verschiedene Pegelveränderungen ausprobieren, ist dies manuell kaum mehr zu stemmen. Deshalb ist der Wunsch nur allzu verständlich, dies mit Hilfe einer Software zu automatisieren. Unter vielen möglichen Lösungswegen nachfolgend skizzenhaft ein (von mir jedoch nicht vollumfänglich in der Praxis erprobter) Lösungsansatz:
- In Ermangelung einer hierfür geeigneten und anwenderfreundlichen Spezialsoftware könnte man die Aufgabe ggf. selbst in die Hand nehmen und in die Musikprogrammierung eintauchen. Zuerst stellt sich da die Frage nach der Programmiersprache. Aus meiner Sicht ist hierfür Python eine gute Wahl, insbesondere wegen der umfangreichen Programmbibliotheken für die Signalverarbeitung. In vielen Linux-Distributionen ist Python enthalten. (Unter MS-Windows 10 verwende ich Python 3.11 in der kostenlosen Programmierumgebung Spyder IDE 5.4 von Anaconda.)
- Um eine Wave-Datei in Python zu lesen (bzw. zu schreiben) bedient man sich am besten der ebenfalls kostenlosen Zusatzmodule NumPy (Numerisches Python) und SciPy (Scientific Python). In letzterem befindet sich ein Untermodul namens „io“, mit dem sich auf sehr einfache Weise ein Sampling vollständig dekodieren und in einem Array speichern lässt. Vereinfacht ausgedrückt ist das Array ein Zahlenfeld, vergleichbar mit einer Excel-Tabelle: in der ersten Spalte stehen die Pegelwerte für den linken Stereokanal und in der zweiten jene für den rechten. Hierbei ist einzig nachteilig, dass man sich um den Erhalt der Loop-Punkte und ggf. des Release-Markers gesondert kümmern muss, um diese nicht zu verlieren.
- Mit Hilfe der Diskreten Fast Fourier Transformation („fft“-Untermodul bzw. -Funktion der SciPy-Bibliothek) führt man die Samples in eine andere Betrachtungsebene hinüber, in das Fourier-Frequenzspektrum. Im Prinzip ist es die (fertig ausprogrammierte) reversible Annäherung des ursprünglichen Sampling-Verlaufs durch viele harmonische Einzelschwingungen verschiedenster Frequenzen und Phasenlagen. Als Ergebnis liegen dann die aufsummierten Amplituden über den Frequenzen vor (das "Spektrum"). Jedoch sollten vor der gezielten Amplitudenveränderung über die Berechnung des Schallleistungsdichtespektrums die Frequenzbereiche der Teiltöne eindeutig identifiziert und abgegrenzt werden. Auch hierfür bietet SciPy eine vorgefertigte Lösung in Form des Untermoduls „signal.periodogram“ an. Im Prinzip ist dies eine erweiterte „fft“-Transformation.
- Somit lässt sich auf diese Weise recht komfortabel die Grundfrequenz eines Pfeifentons bestimmen. (Anmerkung: mit dieser Vorgehensweise bestimme ich den Korrekturwert für das Stimmen eines Pfeifentons. Den Korrekturwert trage ich dann in der ODF einer GO-VPO unter „Pipe0xxPitchTuning=“ ein). Hierbei ist das Ergebnis erheblich genauer, wenn das Sampling mit einer höheren Auflösung aufgezeichnet wurde (z.B. Bittiefe 24 anstatt 16 Bit).
- In der Betrachtung des Fourier-Frequenzspektrums zeigen sich die Oberschwingungen bis hin zur halben Samplingfrequenz. Bei der üblichen Abtastrate in CD-Qualität (44,1 kHz) liefert die „fft“-Transformation alle Oberschwingungen im Hörbereich eines (eher jüngeren) Durchschnittsmenschen. Mit Hilfe des Python-Plotmoduls „plot“ lässt sich das Ergebnis der Fast Fourier Transformation (sowie des Schallleistungsäquivalents) recht einfach am Bildschirm als Grafik ausgeben (s. Bild 2 für das oben verwendete Pfeifentonsampling des beispielhaft gewählten Krummhorntons 8´, c2).
Bild2_Krummhorn8_036_C_Python-Plots_2025-09-11.pdf Bild 2: Mit Python ermitteltes Periodogramm des beispielhaften Krummhorntons 8‘ c2. Den zugrunde liegenden Programmcode habe ich in der Datei „Listing1_Krummhorn_Spektrum_Python“ angehängt. Listing1_Krummhorn_Spektrum_Python_2025-11-10.pdf
- Auswahl des zu verändernden Teiltons: Nun ist mit Hilfe des Periodogramms der Frequenzbereich festzulegen, in dem die gewünschten Amplituden (Obertonbereich) angehoben oder abgesenkt werden sollen. Bei Labialpfeifen schwingt ein Oberton mit der ganzzahlig vielfachen Frequenz des Grundtons. Dagegen muss man bei Zungenpfeifen auch zwischen den Grundtonfrequenzvielfachen die Fourier- (bzw. Leistungsdichte-) Ausschläge beachten und somit rechnerisch ermitteln. Interessanterweise zeigen sich im Spektrogramm weder die Grundtonschwingung noch die Obertonschwingungen als exakt dünne, trennscharfe Linien. Deshalb empfehle ich - ähnlich wie beim manuellen Arbeiten mit der Software SpectraLayers - einen Bereich von ca. +- 20 Hz um die jeweils betrachtete Oberschwingung herum programmiertechnisch für die Amplitudenveränderung vorzusehen. Für das Anheben oder Absenken eines Obertons reicht eine einfache Multiplikation (bzw. Division) der Fourier-Amplituden im betrachteten Frequenzbereich mit einem Änderungsfaktor aus. NumPy ist da derart komfortabel, dass man für das betrachtete Frequenzintervall nicht mal eine explizite Schleife programmieren muss. Ähnlich zu markierten Excel-Zellen wird die Rechnung über den benannten Array-Bereich hinweg in einem Rutsch ausgeführt.
- In gleicher Weise, wie die Samples mit Hilfe der „fft“-Funktion vom Zeitbereich in den Frequenzbereich transformiert wurden, funktioniert auch die nahezu verlustfreie Rücktransformation des modifizierten Fourier-Spektrums mit Hilfe der inversen SciPy-Transformation namens „ifft“.
- Die Loop-Punkte und der ggf. vorhandene Release-Marker sind noch in die modifizierte Wave-Datei einzutragen. Dazu kann man den „Vorspann“ (den vor den Nutzdaten liegenden Header) im modifizierten Wave-File mit dem der Ausgangsdatei überschreiben. (Näheres zum Aufbau eines Wave-Files s. Wave-Files für GO)
- So komfortabel, wie mit SciPy das Lesen und Dekodieren eines Wave-Files ist, ist auch das Kodieren und Anlegen bzw. Abspeichern eines Wave-Files. SciPy kümmert sich um alle Details, wie z.B. die Byte-Reihenfolge im „Little Endian“ und Vorzeichenkodierung im sog. „Zweierkomplement“. Es braucht nur der Dateiname vorgegeben werden.
- Nun müssen sowohl die Fourier-Transformation als auch die Rücktransformation noch in eine Schleife gepackt werden, damit die gewünschte Modifikation für alle Wave-Files eines Orgelregisters gleichermaßen vollautomatisch abläuft. Hierzu kann Python selbst das Dateiverzeichnis eines benannten Datei-Pfades erstellen, wo alle zu modifizierenden Wave-Dateien abgelegt sind. Die modifizierten Dateien lässt man am besten in ein neues Verzeichnis schreiben. Nach dem Ende des Schleifendurchlaufs sollten für jeden Pfeifenton des betrachteten Orgelregisters die veränderten Samplings spielfertig vorliegen.
Informationen zu NumPy und SciPy sowie praxisnahe Anleitungen sind u.a. in folgender Literatur zu finden:
Knoll C., Heedt R.: Python für Ingenieure für Dummies; 2022 Verlag Wiley-VCH Weinheim; ISBN 978-3-527-71765-5. [Anmerkung: Dummies steht hier für einen gesetzlich geschützten Werbegag, der absolut nichts mit „Blödmännern“ (= Zitat aus dem DUDEN) zu tun hat!]
Steinkamp V.: Der Python-Kurs für Ingenieure und Naturwissenschaftler; 2023 Rheinwerk Verlag Bonn; 2. Auflage; ISBN 978-3-8362-9286-3.
NumPy Developers: https://numpy.org/doc/stable/ NumPy documentation, Version: 2.3 (Onlinedokumentation aufgerufen am 11.09.2025).
The SciPy Community: https://docs.scipy.org/doc//scipy/tutorial/index.html#user-guide Vers. 1.16.1 (Onlinedokumentation aufgerufen am 11.09.2025).
In gleicher Weise wie das gezielte Anheben bzw. Absenken von Teilschwingungspegeln in Python mit Hilfe der Fast Fourier Transformation möglich sein sollte, dürfte auch das selbstprogrammierte Entfernen des Hintergrundrauschens für Rohsamplings funktionieren. Anstatt die Pegel von Teiltönen zu verändern wären hier die Pegel in den Frequenzbereichen zu reduzieren, die zwischen den Teiltönen liegen.
Nun noch eine persönliche Anmerkung zum rechtlichen Aspekt, der ganz oben im ersten Eintrag dieses Treads angesprochen wurde: Kaum zu glauben, was der Datenklau von ca. zwei Sekunden Audiomaterial (im konkreten Fall exakt zwei Takte Musik) auslösen kann, nämlich einen über viele Jahre andauernden Rechtsstreit bis hin zur Verurteilung vor dem Europäischen Gerichtshof: https://openjur.de/u/2230139.html. Deshalb meine Empfehlung: mit einem Resampling lieber KEIN Risiko eingehen!