Die Lautstärkenregelung basiert auf logarithmischen Ansatz, weil der Mensch die Schallstärke logaritmisch wahrnimmt. Im Folgenden wird eine Eingabe zwischen 0 und 100 auf einen Verstärkungswert zwischen 0 und 2 skaliert.

Bei beliebigem Maximalwert der Verstärkung
kann die Gleichung kann als
(1) ![Rendered by QuickLaTeX.com \begin{equation*} \begin{aligned} g&=\frac{g_{max}}{9} [ 10^{v/100}-1] \\ x& \in \{0 ... 100\} \end{aligned} \end{equation*}](http://www.cankosar.com/wp-content/ql-cache/quicklatex.com-efe59a3430cbbbc5fb148600a18f7b33_l3.png)
gestellt werden.
Implementierung
Berechnung der Verstärkung
Der Verstärkungsfaktor ergibt sich aus der erwünschten Lautstärke. Diese Routine wird nach jedem Lautstärkenupdate durchgeführt.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/*Calculate gain out of volume */ void c_volume::set_volume(float *v){ if(*v>1){ gain=pregain*(fastPow(10,(double)*v*0.01)-1); }else{ //Absolute silence gain=0; } printf("Volume:%f \t Gain: %f\n",*v,gain); } /* Main process */ float c_volume::process(float x){ return x*gain; } |
Schreibe einen Kommentar