Changeset 5624:ec1593cc8525 in roaraudio for roard/codecfilter_flac.c


Ignore:
Timestamp:
08/18/12 02:04:07 (12 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

Added support for RePlayGain? (RPG) control (See: #300)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/codecfilter_flac.c

    r5381 r5624  
    116116 const FLAC__StreamMetadata_VorbisComment * vc; 
    117117 FLAC__uint32 i; 
     118 struct roar_stream_rpg rpg; 
    118119 const char * key, * value; 
    119120 char keycopy[ROAR_META_MAX_NAMELEN]; 
    120121 int type; 
    121  float rpg_track = 0, rpg_album = 0; 
     122 float rpg_track = 0, rpg_album = 0, rpg_final = 0; 
    122123 
    123124 if ( metadata->type == FLAC__METADATA_TYPE_VORBIS_COMMENT ) { 
     
    171172  } 
    172173 
    173  if ( rpg_album ) { 
    174   self->ss->mixer.rpg_div = 2718;  // = int(exp(1)*1000) 
    175   self->ss->mixer.rpg_mul = (float)rpg_album*2718; 
    176  } else if ( rpg_track ) { 
    177   self->ss->mixer.rpg_div = 2718; 
    178   self->ss->mixer.rpg_mul = (float)rpg_track*2718; 
     174 if ( streams_get_rpg(ROAR_STREAM(self->ss)->id, &rpg) != -1 ) { 
     175  rpg_final = 0; 
     176 
     177  switch (rpg.mode) { 
     178   case ROAR_RPGMODE_NONE: rpg_final =  0.; break; 
     179   case ROAR_RPGMODE_USER: rpg_final = -1.; break; 
     180   case ROAR_RPGMODE_ALBUM: rpg_final = rpg_album; break; 
     181   case ROAR_RPGMODE_TRACK: rpg_final = rpg_track; break; 
     182   case ROAR_RPGMODE_ALBUMTRACK: rpg_final = rpg_album ? rpg_album : rpg_track; break; 
     183   case ROAR_RPGMODE_TRACKALBUM: rpg_final = rpg_track ? rpg_track : rpg_album; break; 
     184  } 
     185 
     186  if ( rpg_final > 0 ) { 
     187   self->ss->mixer.rpg_div = 2718; 
     188   self->ss->mixer.rpg_mul = (float)rpg_final*2718; 
     189  } else if ( !rpg_final ) { 
     190   self->ss->mixer.rpg_div = 1; 
     191   self->ss->mixer.rpg_mul = 1; 
     192  } 
    179193 } 
    180194 
Note: See TracChangeset for help on using the changeset viewer.