Ein Tremolo-Effekt ändert zyklisch die Lautstärke eines Signals. Es wird je nach Parametrierung zum Erzeugen von „Country“-Sounds oder aber auch in starker Ausführung für spezielle Effekte wie „Boulevard of broken dreams“-Intro von Green day.
Im folgenden ist das Grundprinzip des Tremolo-Effekts aufgezeigt.
Parameter
Folgende Kontrollparameter für den Tremolo-Effekt sind üblich:
Frequenz
Mit der Frequenz kontrolliert man die Geschwindigkeit der Verstärkungsmodulation. Üblicherweise in Hertz. Typische Werte zwischen 1Hz und 25Hz.
Tiefe (Depth)
Mit diesem Parameter kontrolliert man die Wirksamkeit der Modulation. Üblicherweise in [%] angegeben. Bei 30% wird die Lautstärke zwischen 70% und 100% gesteuert. Bei 100% wird die Lautstärke zwischen 0 und 100% gesteuert (Also dabei teilweise ganz stummgeschaltet.)
LFO Typ
Damit wird der Typ des LFO-Signals gewählt. Übliche Signale sind:
- Sinussignal
- Dreiecksignal
- Sägezahnsignal
- Rechtecksignal
Modulation mit LFO
Während sonstige Tonhöhenmodulationseffekte wie Chorus, Flanger, Rotary mit einem Sinus-Signal kontrolliert wird, sind für den Tremolo-Effekt auch andere Signalquellen üblich. Die effiziente Implementierung dieser Signalgeneratoren sind unten gezeigt.
Implementierung
LFO
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
/* LFO */ float c_tremolo::lfo(void){ float y_lfo; //Calculate LFO value switch(type){ //Sinus case 0: y_lfo=0.5*(1+sin(i_lfo)); //Update angle i_lfo+=a_step; if(i_lfo>=2*PI){ i_lfo-=2*PI; } break; //Triangle case 1: y_lfo = fabs(fmod(i_lfo, 2) -1 ); i_lfo+=t_step; break; case 2: //Square y_lfo=fmod(i_lfo,2) < 1 ? 1 : 0; i_lfo+=t_step; break; } // printf("%.3f\n",y_lfo); return y_lfo; } /* Calculate the gain */ float c_tremolo::get_current_attenuation(void){ return 1-depth*lfo(); } |
Hauptroutine
Der Algorithmus vom Rotary-Effekt ist vergleichbar mit einem Chorus-Algorithmus ohne Signalkopie und Trockensignal / Effektsignal-Mischung.
1 2 3 4 |
float c_tremolo::process(float x){ return x*get_current_attenuation(); } |
Klangbeispiele
Anbei ist dieser Algorithmus mit ein paar verschiedenen Parametern zu hören.
Schreibe einen Kommentar