diff libaf/af_tools.c @ 8607:d6f40a06867b

Changes includes: - Improved runtime control system - 3 New filter panning, compressor/limiter and a noise gate - The compressor/limiter and the noise gate are not yet finished - The panning filter does combined mixing and channel routing and can be used to down-mix from stereo to mono (for example) - Improvements to volume and channel - volume now has a very good soft clipping using sin() - channel can handle generic routing of audio data - Conversion of all filters to handle floating point data - Cleanup of message printing - Fix for the sig 11 bug reported by Denes
author anders
date Sat, 28 Dec 2002 13:59:53 +0000
parents
children 440301fef3fe
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libaf/af_tools.c	Sat Dec 28 13:59:53 2002 +0000
@@ -0,0 +1,79 @@
+#include <math.h>
+#include <af.h>
+
+/* Convert to gain value from dB. Returns AF_OK if of and AF_ERROR if
+   fail */
+inline int af_from_dB(int n, float* in, float* out, float k, float mi, float ma)
+{
+  int i = 0; 
+  // Sanity check
+  if(!in || !out) 
+    return AF_ERROR;
+
+  for(i=0;i<n;i++){
+    if(in[i]<=-200)
+      out[i]=0.0;
+    else
+      out[i]=pow(10.0,clamp(in[i],mi,ma)/k);
+  }
+  return AF_OK;
+}
+
+/* Convert from gain value to dB. Returns AF_OK if of and AF_ERROR if
+   fail */
+inline int af_to_dB(int n, float* in, float* out, float k)
+{
+  int i = 0; 
+  // Sanity check
+  if(!in || !out) 
+    return AF_ERROR;
+
+  for(i=0;i<AF_NCH;i++){
+    if(in[i] == 0.0)
+      out[i]=-200.0;
+    else
+      out[i]=k*log10(in[i]);
+  }
+  return AF_OK;
+}
+
+/* Convert from ms to sample time*/
+inline int af_from_ms(int n, float* in, float* out, int rate, float mi, float ma)
+{
+  int i = 0; 
+  // Sanity check
+  if(!in || !out) 
+    return AF_ERROR;
+
+  for(i=0;i<AF_NCH;i++)
+    out[i]=clamp(in[i],ma,mi);
+
+  return AF_OK;
+}
+
+/* Convert from sample time to ms */
+inline int af_to_ms(int n, float* in, float* out, int rate)
+{
+  int i = 0; 
+  // Sanity check
+  if(!in || !out) 
+    return AF_ERROR;
+
+  for(i=0;i<AF_NCH;i++)
+    out[i]=in[i];
+  
+  return AF_OK;
+}
+
+/* Helper function for testing the output format */
+inline int af_test_output(struct af_instance_s* af, af_data_t* out)
+{
+  if((af->data->format != out->format) || 
+     (af->data->bps    != out->bps)    ||
+     (af->data->rate   != out->rate)   ||
+     (af->data->nch    != out->nch)){
+    memcpy(out,af->data,sizeof(af_data_t));
+    return AF_FALSE;
+  }
+  return AF_OK;
+}