logo elektroda
logo elektroda
X
logo elektroda

Digitaler Gitarren-Multieffekt

Kwarcu 
STM32F746G-DISCO-Entwicklungsboard mit Display, das den Text GMFX zeigt, sowie sichtbare Audio- und Netzwerkkabel.

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 ;). Darüber hinaus ist die Anwendung im MVC-Muster (Model-View-Controller) geschrieben, um eine Trennung zwischen den Hauptmodulen zu erreichen. Das Model enthält den Effektprozessor zusammen mit den Algorithmen, die View enthält alles, was mit der Anzeige und der Benutzerinteraktion zu tun hat, und der Controller ist der Vermittler zwischen den beiden. So ist es beispielsweise relativ einfach, ein weiteres view-Modul hinzuzufügen, bei dem die Benutzerinteraktion und die Steuerung des Geräts z. B. über ein Terminal erfolgt. Die genannten Module kommunizieren über Ereignisse (event-driven), deren Mechanismus auf RTOS-Warteschlangen basiert.

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 ;). Es handelt sich eigentlich um einen grafischen Equalizer ohne Einstellmöglichkeit. Der Algorithmus besteht darin, den Faltungshall der Impulsantwort einer bestimmten Gitarrenbox mit dem Audiosignal zu erzeugen. Ein solcher Faltungshall für lange Impulsantworten ist rechenintensiv, daher wird hier ein sogenannter "schneller" Faltungshall mit Hilfe der FFT verwendet.


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 :/)

Touchscreen STM32F746G-DISCO mit Chorus-Effekt-Einstellungen

Bildschirm eines Multi-Effektgeräts mit Chorus-Effekt-Einstellung.

Touchscreen zeigt eine Liste von Gitarreneffekten: Tremolo, Chorus, Reverb mit Bearbeitungsoptionen.

Touchscreen mit Audio-Lautstärkeeinstellungen und 6% CPU-Auslastung.

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.

Über den Autor
Kwarcu
Kwarcu hat 78 Beiträge geschrieben mit der Bewertung 64 , und dabei 5 Mal geholfen. Wohnt in der Stadt Kraków. Er ist seit 2007 bei uns.