Changeset 2937:1cca3e1fa89c in roaraudio for libroardsp


Ignore:
Timestamp:
10/16/09 22:34:18 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added roar_amp_pcm*()

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroardsp/amp.c

    r2935 r2937  
    22 
    33/* 
    4  *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2009 
     4 *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2008, 2009 
    55 * 
    66 *  This file is part of libroardsp a part of RoarAudio, 
     
    2525#include "libroardsp.h" 
    2626 
     27int roar_amp_pcm(void * output, int bits, void * input, int samples, int channels, struct roar_mixer_settings * set) { 
     28 switch (bits) { 
     29  case  8: return roar_amp_pcm_8bit (output, input, samples, channels, set); break; 
     30  case 16: return roar_amp_pcm_16bit(output, input, samples, channels, set); break; 
     31  case 24: return roar_amp_pcm_24bit(output, input, samples, channels, set); break; 
     32  case 32: return roar_amp_pcm_32bit(output, input, samples, channels, set); break; 
     33  default: return -1; 
     34 } 
     35} 
     36 
     37int roar_amp_pcm_8bit  (int8_t  * output, int8_t  * input, int samples, int channels, struct roar_mixer_settings * set) { 
     38 int    i; 
     39 register int s; 
     40 
     41 if ( !(input && output) ) 
     42  return -1; 
     43 
     44 if (set->rpg_mul == set->rpg_div) { 
     45  for (i = 0; i < samples; i++) { 
     46   s  = input[i]; 
     47   s *= set->mixer[i % channels]; 
     48   s /= set->scale; 
     49   output[i] = s; 
     50  } 
     51 } else { 
     52  for (i = 0; i < samples; i++) { 
     53   s  = input[i]; 
     54   s *= (set->mixer[i % channels] * set->rpg_mul) / set->rpg_div; 
     55   s /= set->scale; 
     56   output[i] = s; 
     57  } 
     58 } 
     59 
     60 return 0; 
     61} 
     62 
     63int roar_amp_pcm_16bit (int16_t * output, int16_t * input, int samples, int channels, struct roar_mixer_settings * set) { 
     64 int       i; 
     65 register int s; 
     66 
     67 if ( !(input && output) ) 
     68  return -1; 
     69 
     70 if (set->rpg_mul == set->rpg_div) { 
     71  for (i = 0; i < samples; i++) { 
     72   s  = input[i]; 
     73   s *= set->mixer[i % channels]; 
     74   s /= set->scale; 
     75   output[i] = s; 
     76  } 
     77 } else { 
     78  for (i = 0; i < samples; i++) { 
     79   s  = input[i]; 
     80   s *= (set->mixer[i % channels] * set->rpg_mul) / set->rpg_div; 
     81   s /= set->scale; 
     82   output[i] = s; 
     83  } 
     84 } 
     85 
     86 return 0; 
     87} 
     88 
     89int roar_amp_pcm_24bit (void    * output, void    * input, int samples, int channels, struct roar_mixer_settings * set) { 
     90 return -1; 
     91} 
     92 
     93int roar_amp_pcm_32bit (int32_t * output, int32_t * input, int samples, int channels, struct roar_mixer_settings * set) { 
     94#ifdef ROAR_NATIVE_INT64 
     95 int       i; 
     96 ROAR_NATIVE_INT64 s; 
     97 
     98 if ( !(input && output) ) 
     99  return -1; 
     100 
     101 if (set->rpg_mul == set->rpg_div) { 
     102  for (i = 0; i < samples; i++) { 
     103   s  = input[i]; 
     104   s *= set->mixer[i % channels]; 
     105   s /= set->scale; 
     106   output[i] = s; 
     107  } 
     108 } else { 
     109  for (i = 0; i < samples; i++) { 
     110   s  = input[i]; 
     111   s *= (set->mixer[i % channels] * set->rpg_mul) / set->rpg_div; 
     112   s /= set->scale; 
     113   output[i] = s; 
     114  } 
     115 } 
     116 
     117 return 0; 
     118#else 
     119 return -1; 
     120#endif 
     121} 
    27122 
    28123//ll 
Note: See TracChangeset for help on using the changeset viewer.