Changeset 3529:fba86b5b08a7 in roaraudio


Ignore:
Timestamp:
02/19/10 17:36:33 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

support to read complet mixer from roard, including scale and rpg

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • libroar/ctl.c

    r3517 r3529  
    246246 m.cmd     = ROAR_CMD_GET_VOL; 
    247247 m.datalen = 2*2; 
    248  info[0] = 0; 
    249  info[1] = ROAR_HOST2NET16(id); 
     248 m.stream  = id; 
     249 
     250 info[0]   = ROAR_HOST2NET16(1); 
    250251 
    251252 if ( roar_req(con, &m, NULL) == -1 ) 
     
    255256  return -1; 
    256257 
    257  if ( info[0] != 0 ) 
     258 if ( ROAR_NET2HOST16(info[0]) != 1 ) 
    258259  return -1; 
    259260 
     
    266267  return -1; 
    267268 
    268  mixer->scale   = 65535; 
    269  mixer->rpg_mul = 1; 
    270  mixer->rpg_div = 1; 
     269 mixer->scale   = ROAR_NET2HOST16(info[2]); 
     270 mixer->rpg_mul = ROAR_NET2HOST16(info[3]); 
     271 mixer->rpg_div = ROAR_NET2HOST16(info[4]); 
    271272 
    272273 for (i = 0; i < info[1]; i++) 
    273   mixer->mixer[i] = ROAR_NET2HOST16(info[i+2]); 
     274  mixer->mixer[i] = ROAR_NET2HOST16(info[i+5]); 
    274275 
    275276 return 0; 
  • roarclients/roarctl.c

    r3517 r3529  
    429429 
    430430int display_mixer (struct roar_connection * con, int stream) { 
     431 struct roar_mixer_settings mixer; 
    431432 int channels; 
    432  struct roar_mixer_settings mixer; 
    433433 int i; 
     434 float fs; 
    434435 
    435436 if ( roar_get_vol(con, stream, &mixer, &channels) == -1 ) { 
     
    444445#endif 
    445446 
     447 fs = (float)mixer.scale / 100.; 
     448 
     449 printf("Mixer ReplayGain      : %i/%i (%.2f%%" _DB ")\n", mixer.rpg_mul, mixer.rpg_div, 
     450                                                         100.*(float)mixer.rpg_mul/((float)mixer.rpg_div) 
     451#ifdef ROAR_HAVE_LIBM 
     452                          , 20*log10f((float)mixer.rpg_mul/(float)mixer.rpg_div) 
     453#endif 
     454       ); 
     455 
    446456 for (i = 0; i < channels; i++) 
    447   printf("Mixer volume chan %2i  : %i (%.2f%%" _DB ")\n", i, mixer.mixer[i], 
    448                            (float)mixer.mixer[i]/655.35f 
     457  printf("Mixer volume chan %2i  : %i/%i (%.2f%%" _DB ")\n", i, mixer.mixer[i], mixer.scale, 
     458                           (float)mixer.mixer[i]/fs 
    449459#ifdef ROAR_HAVE_LIBM 
    450                           , 20*log10f((float)mixer.mixer[i]/65535.f) 
     460                          , 20*log10f((float)mixer.mixer[i]/(float)mixer.scale) 
    451461#endif 
    452462        ); 
  • roard/req.c

    r3517 r3529  
    808808int req_on_get_vol (int client, struct roar_message * mes, char * data) { 
    809809 uint16_t * info = (uint16_t *) mes->data; 
     810 uint16_t   version = -1; 
    810811 int stream; 
    811812 struct roar_stream_server * s; 
     
    816817 ROAR_DBG("req_on_get_vol(*): mes->datalen=%i", mes->datalen); 
    817818 
    818  if ( mes->datalen < (2*2) ) 
    819   return -1; 
    820  
    821  if ( info[0] != 0 ) // version 
    822   return -1; 
    823  
    824  stream = ROAR_NET2HOST16(info[1]); 
     819 if ( mes->datalen < 2 ) { 
     820  return -1; 
     821 } 
     822 
     823 version = ROAR_NET2HOST16(info[0]); 
     824 
     825 switch (version) { 
     826  case 0: 
     827    if ( mes->datalen < (2*2) ) 
     828     return -1; 
     829 
     830    stream = ROAR_NET2HOST16(info[1]); 
     831   break; 
     832  case 1: 
     833    stream = mes->stream; 
     834   break; 
     835  default: 
     836    return -1; 
     837   break; 
     838 } 
     839 
    825840 ROAR_DBG("req_on_get_vol(*): stream=%i", stream); 
    826841 
     
    841856 // ok, we have everything 
    842857 
    843  info[0] = 0; 
    844  info[1] = ROAR_HOST2NET16(chans = ROAR_STREAM(s)->info.channels); 
    845  
    846  for (i = 0; i < chans; i++) 
    847   info[2+i] = ROAR_HOST2NET16(s->mixer.mixer[i]); 
    848  
    849  mes->datalen = (2 + chans)*2; 
     858 info[0] = ROAR_HOST2NET16(version); 
     859 
     860 switch (version) { 
     861  case 0: 
     862    info[1] = ROAR_HOST2NET16(chans = ROAR_STREAM(s)->info.channels); 
     863 
     864    for (i = 0; i < chans; i++) 
     865     info[2+i] = ROAR_HOST2NET16(s->mixer.mixer[i]); 
     866 
     867     mes->datalen = (2 + chans)*2; 
     868   break; 
     869  case 1: 
     870    info[1] = ROAR_HOST2NET16(chans = ROAR_STREAM(s)->info.channels); 
     871    info[2] = ROAR_HOST2NET16(s->mixer.scale); 
     872    info[3] = ROAR_HOST2NET16(s->mixer.rpg_mul); 
     873    info[4] = ROAR_HOST2NET16(s->mixer.rpg_div); 
     874 
     875    for (i = 0; i < chans; i++) 
     876     info[5+i] = ROAR_HOST2NET16(s->mixer.mixer[i]); 
     877 
     878     mes->datalen = (5 + chans)*2; 
     879   break; 
     880  default: 
     881    return -1; 
     882   break; 
     883 } 
     884 
    850885 mes->cmd = ROAR_CMD_OK; 
    851886 
Note: See TracChangeset for help on using the changeset viewer.