Changeset 3633:33a6a1a59939 in roaraudio for libroardsp


Ignore:
Timestamp:
03/11/10 23:21:59 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

code for multi channel RMS (currently only 1 and 2 channels)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroardsp/rms.c

    r3517 r3633  
    22 
    33/* 
    4  *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2009 
     4 *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2009-2010 
    55 * 
    66 *  This file is part of libroardsp a part of RoarAudio, 
     
    6363 
    6464 
     65int roar_rms2_1_8_2    (int8_t  * data, size_t samples, int64_t * rms) { 
     66 register int64_t a0 = 0, a1 = 0; 
     67 register size_t  i; 
     68 
     69 if ( samples == 0 ) 
     70  return 0; 
     71 
     72 if ( data == NULL ) 
     73  return -1; 
     74 
     75 if ( samples & 0x1 ) /* odd */ 
     76  return -1; 
     77 
     78 for (i = 0; i < samples; i += 2) { 
     79  a0 += data[i+0] * data[i+0]; 
     80  a1 += data[i+1] * data[i+1]; 
     81 } 
     82 
     83 samples /= 2; 
     84 
     85 a0 /= samples; 
     86 a1 /= samples; 
     87 
     88 rms[0] = a0; 
     89 rms[1] = a1; 
     90 
     91 return 0; 
     92} 
     93 
     94int roar_rms2_1_16_2   (int16_t * data, size_t samples, int64_t * rms) { 
     95 register int64_t a0 = 0, a1 = 0; 
     96 register size_t  i; 
     97 
     98 if ( samples == 0 ) 
     99  return 0; 
     100 
     101 if ( data == NULL ) 
     102  return -1; 
     103 
     104 if ( samples & 0x1 ) /* odd */ 
     105  return -1; 
     106 
     107 for (i = 0; i < samples; i += 2) { 
     108  a0 += data[i+0] * data[i+0]; 
     109  a1 += data[i+1] * data[i+1]; 
     110 } 
     111 
     112 samples /= 2; 
     113 
     114 a0 /= samples; 
     115 a1 /= samples; 
     116 
     117 rms[0] = a0; 
     118 rms[1] = a1; 
     119 
     120 return 0; 
     121} 
     122 
     123int roar_rms2_1_32_2   (int32_t * data, size_t samples, int64_t * rms) { 
     124 register int64_t a0 = 0, a1 = 0; 
     125 register size_t  i; 
     126 
     127 if ( samples == 0 ) 
     128  return 0; 
     129 
     130 if ( data == NULL ) 
     131  return -1; 
     132 
     133 if ( samples & 0x1 ) /* odd */ 
     134  return -1; 
     135 
     136 for (i = 0; i < samples; i += 2) { 
     137  a0 += data[i+0] * data[i+0]; 
     138  a1 += data[i+1] * data[i+1]; 
     139 } 
     140 
     141 samples /= 2; 
     142 
     143 a0 /= samples; 
     144 a1 /= samples; 
     145 
     146 rms[0] = a0; 
     147 rms[1] = a1; 
     148 
     149 return 0; 
     150} 
     151 
     152 
     153int roar_rms2_1_8_n    (int8_t  * data, size_t samples, int64_t * rms, size_t n) { 
     154 if ( n == 0 ) 
     155  return 0; 
     156 
     157 if ( rms == NULL ) 
     158  return -1; 
     159 
     160 switch (n) { 
     161  case 1: return *rms = roar_rms2_1_8(data, samples); return *rms == -1 ? -1 : 0; break; 
     162  default: 
     163   return -1; 
     164 } 
     165} 
     166 
     167int roar_rms2_1_16_n   (int16_t * data, size_t samples, int64_t * rms, size_t n) { 
     168 if ( n == 0 ) 
     169  return 0; 
     170 
     171 if ( rms == NULL ) 
     172  return -1; 
     173 
     174 switch (n) { 
     175  case 1: return *rms = roar_rms2_1_16(data, samples); return *rms == -1 ? -1 : 0; break; 
     176  default: 
     177   return -1; 
     178 } 
     179} 
     180 
     181int roar_rms2_1_32_n   (int32_t * data, size_t samples, int64_t * rms, size_t n) { 
     182 if ( n == 0 ) 
     183  return 0; 
     184 
     185 if ( rms == NULL ) 
     186  return -1; 
     187 
     188 switch (n) { 
     189  case 1: return *rms = roar_rms2_1_32(data, samples); return *rms == -1 ? -1 : 0; break; 
     190  default: 
     191   return -1; 
     192 } 
     193} 
     194 
    65195//ll 
Note: See TracChangeset for help on using the changeset viewer.