summaryrefslogtreecommitdiff
path: root/libs/fluidsynth/src/fluid_conv.c
diff options
context:
space:
mode:
Diffstat (limited to 'libs/fluidsynth/src/fluid_conv.c')
-rw-r--r--libs/fluidsynth/src/fluid_conv.c88
1 files changed, 9 insertions, 79 deletions
diff --git a/libs/fluidsynth/src/fluid_conv.c b/libs/fluidsynth/src/fluid_conv.c
index 555dd61367..483b371d5e 100644
--- a/libs/fluidsynth/src/fluid_conv.c
+++ b/libs/fluidsynth/src/fluid_conv.c
@@ -19,74 +19,7 @@
*/
#include "fluid_conv.h"
-
-#define FLUID_CENTS_HZ_SIZE 1200
-#define FLUID_VEL_CB_SIZE 128
-#define FLUID_CB_AMP_SIZE 1441
-#define FLUID_PAN_SIZE 1002
-
-/* conversion tables */
-static fluid_real_t fluid_ct2hz_tab[FLUID_CENTS_HZ_SIZE];
-static fluid_real_t fluid_cb2amp_tab[FLUID_CB_AMP_SIZE];
-static fluid_real_t fluid_concave_tab[FLUID_VEL_CB_SIZE];
-static fluid_real_t fluid_convex_tab[FLUID_VEL_CB_SIZE];
-static fluid_real_t fluid_pan_tab[FLUID_PAN_SIZE];
-
-/*
- * void fluid_synth_init
- *
- * Does all the initialization for this module.
- */
-void
-fluid_conversion_config(void)
-{
- int i;
- double x;
-
- for(i = 0; i < FLUID_CENTS_HZ_SIZE; i++)
- {
- fluid_ct2hz_tab[i] = (fluid_real_t) pow(2.0, (double) i / 1200.0);
- }
-
- /* centibels to amplitude conversion
- * Note: SF2.01 section 8.1.3: Initial attenuation range is
- * between 0 and 144 dB. Therefore a negative attenuation is
- * not allowed.
- */
- for(i = 0; i < FLUID_CB_AMP_SIZE; i++)
- {
- fluid_cb2amp_tab[i] = (fluid_real_t) pow(10.0, (double) i / -200.0);
- }
-
- /* initialize the conversion tables (see fluid_mod.c
- fluid_mod_get_value cases 4 and 8) */
-
- /* concave unipolar positive transform curve */
- fluid_concave_tab[0] = 0.0;
- fluid_concave_tab[FLUID_VEL_CB_SIZE - 1] = 1.0;
-
- /* convex unipolar positive transform curve */
- fluid_convex_tab[0] = 0;
- fluid_convex_tab[FLUID_VEL_CB_SIZE - 1] = 1.0;
-
- /* There seems to be an error in the specs. The equations are
- implemented according to the pictures on SF2.01 page 73. */
-
- for(i = 1; i < FLUID_VEL_CB_SIZE - 1; i++)
- {
- x = (-200.0 / FLUID_PEAK_ATTENUATION) * log((i * i) / (fluid_real_t)((FLUID_VEL_CB_SIZE - 1) * (FLUID_VEL_CB_SIZE - 1))) / M_LN10;
- fluid_convex_tab[i] = (fluid_real_t)(1.0 - x);
- fluid_concave_tab[(FLUID_VEL_CB_SIZE - 1) - i] = (fluid_real_t) x;
- }
-
- /* initialize the pan conversion table */
- x = M_PI / 2.0 / (FLUID_PAN_SIZE - 1.0);
-
- for(i = 0; i < FLUID_PAN_SIZE; i++)
- {
- fluid_pan_tab[i] = (fluid_real_t) sin(i * x);
- }
-}
+#include "fluid_conv_tables.c"
/*
* fluid_ct2hz
@@ -299,22 +232,18 @@ fluid_tc2sec_release(fluid_real_t tc)
* fluid_act2hz
*
* Convert from absolute cents to Hertz
- */
-fluid_real_t
-fluid_act2hz(fluid_real_t c)
+ *
+ * The inverse operation, converting from Hertz to cents, was unused and implemented as
+ *
+fluid_hz2ct(fluid_real_t f)
{
- return (fluid_real_t)(8.176 * pow(2.0, (double) c / 1200.0));
+ return (fluid_real_t)(6900 + (1200 / M_LN2) * log(f / 440.0));
}
-
-/*
- * fluid_hz2ct
- *
- * Convert from Hertz to cents
*/
fluid_real_t
-fluid_hz2ct(fluid_real_t f)
+fluid_act2hz(fluid_real_t c)
{
- return (fluid_real_t)(6900 + 1200 * log(f / 440.0) / M_LN2);
+ return (fluid_real_t)(8.176 * pow(2.0, (double) c / 1200.0));
}
/*
@@ -407,3 +336,4 @@ fluid_convex(fluid_real_t val)
return fluid_convex_tab[(int) val];
}
+