Changeset 130:1d082afbec7e in roaraudio for roarclients/roarfilt.c


Ignore:
Timestamp:
07/13/08 23:26:35 (16 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added some more options

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roarclients/roarfilt.c

    r128 r130  
    22 
    33#include <roaraudio.h> 
     4#include <math.h> 
    45 
    56#define BUFSIZE 1024 
     
    1819        "  --half             - half the volume\n" 
    1920        "  --double           - double the volume\n" 
     21        "  --amp VAL          - Set amplification\n" 
     22        "  --mul VAL          - Set mul\n" 
     23        "  --div VAL          - Set div\n" 
    2024       ); 
    2125 
     
    3640 int i; 
    3741 
     42 for (i = 0; i < len; i++) 
     43  samples[i] = ((int) samples[i] * mul) / div; 
     44} 
     45 
     46void logs2 (void * data, int scale, int len) { 
     47 int16_t * samples = (int16_t *) data; 
     48 int i; 
     49 float div = logf(scale); 
     50 int scalemul = scale - 1; 
     51 int neg; 
     52 
    3853 len /= 2; 
    3954 
    40  for (i = 0; i < len; i++) 
    41   samples[i] = ((int) samples[i] * mul) / div; 
     55 printf("logs2(data=%p, scale=%i, len=%i): scalemul=%i, div=%f\n", data, scale, len, scalemul, div); 
     56 
     57 for (i = 0; i < len; i++) { 
     58  if ( (neg = (samples[i] < 0)) )  
     59   samples[i] = abs(samples[i]); 
     60 
     61 
     62  samples[i] = (neg ? 32768.0 : 32767.0)*logf(1 + ((float)scalemul*samples[i]/(neg ? 32768.0 : 32767.0))) / div; 
     63 
     64  if ( neg ) 
     65   samples[i] *= -1; 
     66 } 
    4267} 
    4368 
     
    5277 int    i; 
    5378 int    mul = 1, div = 1; 
     79 int    logscale = 0; 
    5480 char buf[BUFSIZE]; 
    5581 
     
    6995  } else if ( strcmp(k, "--double") == 0 ) { 
    7096   mul *= 2; 
     97  } else if ( strcmp(k, "--amp") == 0 ) { 
     98   mul *= atoi(argv[++i]); 
     99  } else if ( strcmp(k, "--mul") == 0 ) { 
     100   mul  = atoi(argv[++i]); 
     101  } else if ( strcmp(k, "--div") == 0 ) { 
     102   div  = atoi(argv[++i]); 
     103  } else if ( strcmp(k, "--log") == 0 ) { 
     104   logscale = atoi(argv[++i]); 
    71105  } else if ( strcmp(k, "--help") == 0 ) { 
    72106   usage(); 
     
    84118 } 
    85119 
    86  if ( mul == div ) { 
     120 if ( mul == div && logscale == 0 ) { 
    87121  fprintf(stderr, "Error: filter is useless!\n"); 
    88122  return 0; 
     
    91125 if ( bits == 16 ) { 
    92126  while((i = read(fh, buf, BUFSIZE))) { 
    93    vol2((void*)buf, mul, div, i); 
     127   if ( mul != div ) 
     128    vol2((void*)buf, mul, div, i); 
     129   if ( logscale ) 
     130    logs2((void*)buf, logscale, i); 
    94131   if (write(fh, buf, i) != i) 
    95132    break; 
Note: See TracChangeset for help on using the changeset viewer.