Digitaler Gitarren-Multieffekt

Hallo
Ich wollte schon lange meinen eigenen digitalen Multieffekt für E-Gitarre bauen. Ich konnte aus verschiedenen Gründen lange nicht dazu kommen, aber nun ist er endlich da. Mein Projekt betrifft ausschließlich Software für das fertige Entwicklungsboard STM32F746G-DISCO. Es handelt sich eher um ein Konzept/Prototyp eines Geräts als um ein fertiges Gerät, das man auf die Bühne mitnehmen und spielen kann
Was ist das?
Für diejenigen, die es nicht wissen: Ein Gitarreneffekt ist ein Gerät (oder eine Software), mit dem das Signal einer Gitarre verändert wird, um einen charakteristischen Klang zu erhalten. Solche Effekte können ausschließlich auf analoger Elektronik basieren, werden aber auch durch digitale Signalverarbeitung in einem Mikrocontroller oder in einer Computersoftware erreicht.
Wie funktioniert es?
Unten ist ein kurzes Video, das zeigt, wie das Gerät in Kürze funktioniert. Ich füge dort drei Effekte hinzu: Overdrive, Cab Sim und Reverb und spiele dann eine kurze Melodie. Eine E-Gitarre wird direkt an den Eingang des Multieffekts angeschlossen, und der Ausgang wird an einen normalen tragbaren Lautsprecher angeschlossen. Separate Audiobeispiele für jeden Effekt werden später in der Beschreibung erscheinen.
Ausrüstung
Ich hatte nicht vor, dafür eine eigene Hardware-Plattform zu bauen, da ich bereits ein Entwicklungsboard mit allem Nötigen hatte, und außerdem war ich mehr an den Signalverarbeitungsalgorithmen interessiert. Daher läuft das Projekt, wie ich bereits erwähnt habe, auf dem STM32F746G-DISCO-Board. Aus der Sicht des Benutzers sind hier der Audioeingang und -ausgang und das grafische Touchscreen-Display wichtig.
Software
Es wird schwierig sein (und ich möchte es auch nicht), den Code hier im Detail zu beschreiben, also werde ich mich auf die wichtigsten Dinge beschränken. Das Projekt ist in C++17 geschrieben, und der Anwendungscode ist durch Abstraktionsschichten von der Hardware und dem RTOS getrennt. Es wird sich zeigen, ob ich es richtig gemacht habe, wenn ich den Code an etwas anderes verschieben muss

Der Quellcode befindet sich auf meinem github, ein in Eclipse erstelltes Projekt.
Effekte
Derzeit funktionieren sechs beliebte Gitarreneffekte: Tremolo, Echo/Delay, Chorus, Reverb, Overdrive und Cab Sim (speaker cabinet simulator). Die Effekte können über das Menü in beliebiger Reihenfolge zur Verarbeitungskette hinzugefügt werden. Die Verarbeitung des Audiosignals ist doppelt gepuffert und erfolgt in Blöcken, wobei die Größe eines Blocks 128 Samples beträgt. Die Blockgröße entspricht direkt einer Verzögerung zwischen Eingang und Ausgang von etwa 6 ms. Die digitalen Audioparameter sind 24bit/48kHz.
In der folgenden Beschreibung der Effekte werde ich die Grundlagen ihrer Funktionsweise Schritt für Schritt zusammenfassen (für Details verweise ich auf die am Ende angegebene Literatur). Die beigefügten Audio-Samples enthalten zu Beginn ein reines Gitarrensignal, erst in der zweiten Hälfte ist der Effekt aktiv.
Tremolo
Dies ist wahrscheinlich der einfachste Effekt, bei dem die Amplitude des Gitarrensignals mithilfe eines Niederfrequenzoszillators moduliert wird.
Steuerelemente zur Klangbearbeitung:
- rate: Oszillatorfrequenz, Bereich 1 - 20Hz
- depth: Modulationsintensität, Bereich 0 - 0,5
- mode: Modulationsform, Sinus/Rechteckig
Echo
Die Hauptkomponente dieses Effekts ist die Verzögerungsleitung. Wie der Name schon sagt, wird sie verwendet, um das Eingangssignal um eine bestimmte Zeit zu verzögern, die eingestellt werden kann. Um einen mehrfachen Wiederholungseffekt (Echo) zu erzielen, wird das Signal von ihrem Ausgang zuvor mit einem Faktor kleiner als 1 multipliziert, um die Wiederholungen auszublenden. Zusätzlich zur Multiplikation kann hier ein Tiefpassfilter eingesetzt werden, um die hohen Frequenzen der Wiederholungen zu unterdrücken und einen ähnlichen Effekt wie bei analogen Echoeffekten auf Magnetbandbasis zu erzielen.
Steuerelemente zur Klangbearbeitung:
- blur: Wiederholungsunschärfe (Tiefpassfilter), Bereich 2 - 8kHz
- time: Verzögerungszeit, Bereich 0,05 - 1s
- feedback: Überblendung der Wiederholungen, Bereich 0 - 1
- mode: Auswahl des echo/delay
Chorus
Das heißt, einfach der Chor. Der Hauptmechanismus dieses Effekts besteht darin, die ursprüngliche Klangquelle zu duplizieren, sie dann zeitlich leicht zu verschieben (und diese Zeit möglicherweise zu modulieren) und sie schließlich mit dem Original zu summieren. Auch hier wird eine Verzögerungsleitung verwendet, deren Verzögerungszeit jedoch von einem niederfrequenten Oszillator moduliert wird.
Steuerelemente zur Klangbearbeitung:
- depth: Modulationsintensität, Bereich 0 - 1
- Rate: Modulationsfrequenz, Bereich 0,05 - 4Hz
- mix: Mischung von Original und Effekt, Bereich 0 - 1
- mode: Auswahl der Effektvariation
Reverb
Es handelt sich um einen Effekt, der den Nachhall in einem Raum, einer Halle usw. simuliert. Die Aufgabe des Algorithmus besteht darin, eine große Anzahl von "Reflexionen" des ursprünglichen Signals zu erzeugen, diese zu zirkulieren, möglicherweise zu modulieren, aufrechtzuerhalten und dann zu dämpfen . Ein gut klingender Hall-Algorithmus ist schwer zu entwickeln und aufgrund seiner Komplexität in der Regel sehr rechenintensiv. Hier habe ich eine bestimmte bekannte Topologie von J. Dattorro aus den 1990er Jahren verwendet, die einen analogen Plattenhall simuliert.
Steuerelemente zur Klangbearbeitung:
- bandwidth: Tiefpassfilter am Eingang,, Bereich 0 - 24kHz
- decay: Nachhallzeit, Bereich 0 - 0.999
- damping: Dämpfung des Nachhalls (Dp-Filter), Bereich 0 - 24kHz
- mode: Effektmodus keine Modulation/Modulation
Overdrive
Einer der beliebtesten Effekte in der Rock- und Metal-Musik. Die Hauptaufgabe des Algorithmus besteht darin, die Form des Signals so zu verändern, dass es "abgeschnitten" oder "abgeflacht" wird, wenn es einen bestimmten Wert überschreitet. Bei analogen Effekten wird dies z. B. durch antiparallel geschaltete Dioden erreicht (symmetrisches Clipping). Bei digitalen Effekten hingegen wird in der Regel eine nichtlineare Funktion verwendet, z. B: y = tanh(kx)/tanh(k) wobei k die Verstärkung des Eingangssignals, das Argument x das Eingangssignal und y das Ausgangssignal ist. Die Verwendung solcher Verfahren führt eine Reihe von Harmonischen in das Signal ein, so dass darauf geachtet werden muss, Aliasing zu reduzieren. Overdrive-Algorithmen verwenden zu diesem Zweck Oversampling und Dezimierung.
Steuerelemente zur Klangbearbeitung:
- gain: Verstärkung des Signals, Bereich 1 - 200
- tone: Tonänderung (Bass/Höhen), Bereich 0 - 1
- mix: Mischung von Original und Effekt, Bereich 0 - 1
- mode: Auswahl des Clipping-Charakters soft/hard
Cab sim
Dies ist eine Simulation des Klangs einer Gitarrenbox. Überwiegend wird es direkt nach dem Overdrive „angelegt“, sodass wir nicht den schrecklichen Lärm des übersteuerten Signals im Kopfhörer haben

Steuerelemente zur Klangbearbeitung:
- Liste mit Impulsen von Gitarrenboxen
Was kann hinzugefügt/verbessert werden?
Ich habe eine Liste mit ein paar Dingen, die ich in Zukunft hinzufügen möchte:
1) Gitarrenstimmer
2) Speichern/Lesen von Effekt-Einstellungen (presets)
3) Gestaltung einzigartiger Effekt-Steuerpanels (derzeit sieht jedes Steuerpanel fast gleich aus)
4) Effekt-Vocoder
5) Unterstützung von Fußschaltern zum Wechseln von Effekten
Und was sind Eure Vorschläge?
Bilder
Unten sind ein paar Bilder des Bildschirms (entschuldigt bitte die Qualität, aber es fällt mir schwer, ein gutes Foto von diesem LCD-Bildschirm zu machen :/)




Quellen
Den größten Teil der Theorie über Audioeffekte habe ich in den folgenden Quellen gefunden:
1) Udo Zölzer, DAFX: Digital Audio Effects, Second Edition
2) Will C. Pirkle, Designing Audio Effect Plugins in C++, Second Edition
3) J. Dattorro, Effect Design, Part 1 – 3
und darüber hinaus in allen Ecken des Internets.
Wenn ich vergessen habe, über etwas Wichtiges zu schreiben, fragt in den Kommentaren nach.
Kommentare
Kommentar hinzufügen