Changeset 2738:6ac10ee7a131 in roaraudio


Ignore:
Timestamp:
09/21/09 01:39:19 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

volume change support: stereo -> 3.1, 5.1, 6.1

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roarclients/roarctl.c

    r2700 r2738  
    411411 int len; 
    412412 int old_chans; 
    413  int vol_l, vol_r; 
     413 int vol_l, vol_r, vol_mono; 
    414414 char * k; 
    415415 struct roar_mixer_settings mixer; 
     
    435435 
    436436  if ( *cur + 1 > max ) 
     437   return -1; 
     438 
     439  k   = arg[++(*cur)]; 
     440  len = strlen(k); 
     441 
     442  if ( k[len - 1] == '%' ) { 
     443   k[len - 1] = 0; 
     444   vol_mono = (atof(k)*65535)/100; 
     445  } else { 
     446   vol_mono = atoi(k); 
     447  } 
     448 
     449  for (i = 0; i < old_chans; i++) 
     450   mixer.mixer[i] = vol_mono; 
     451 
     452  chans = old_chans; 
     453 
     454 } else if ( strcmp(k, "stereo") == 0 && old_chans != 2 ) { 
     455  chans = old_chans; 
     456 
     457  if ( *cur + 2 > max ) 
    437458   return -1; 
    438459 
     
    447468  } 
    448469 
    449   for (i = 0; i < old_chans; i++) 
    450    mixer.mixer[i] = vol_l; 
    451  
    452   chans = old_chans; 
    453  
    454  } else if ( strcmp(k, "stereo") == 0 && old_chans == 4 ) { 
    455   chans = 4; 
    456  
    457   if ( *cur + 2 > max ) 
    458    return -1; 
    459  
    460   k   = arg[++(*cur)]; 
    461   len = strlen(k); 
    462  
    463   if ( k[len - 1] == '%' ) { 
    464    k[len - 1] = 0; 
    465    vol_l = (atof(k)*65535)/100; 
    466   } else { 
    467    vol_l = atoi(k); 
    468   } 
    469  
    470470  k   = arg[++(*cur)]; 
    471471  len = strlen(k); 
     
    478478  } 
    479479 
     480  vol_mono = (vol_l + vol_r) / 2; 
     481 
    480482  mixer.mixer[0] = vol_l; 
    481483  mixer.mixer[1] = vol_r; 
    482   mixer.mixer[2] = vol_l; 
    483   mixer.mixer[3] = vol_r; 
    484  
    485  } else if ( strcmp(k, "stereo") == 0 && old_chans != 2 ) { 
    486   chans = 2; 
    487 //  printf("mode: stereo; chans=%i, old_chans=%i\n", chans, old_chans); 
    488   ROAR_ERR("mode stereo not supported"); 
    489   return -1; 
     484 
     485  switch (chans) { 
     486   case 3: 
     487     mixer.mixer[2] = vol_mono; 
     488    break; 
     489   case 4: 
     490     mixer.mixer[2] = vol_l; 
     491     mixer.mixer[3] = vol_r; 
     492    break; 
     493   case 5: 
     494     mixer.mixer[2] = vol_mono; 
     495     mixer.mixer[3] = vol_l; 
     496     mixer.mixer[4] = vol_r; 
     497    break; 
     498   case 6: 
     499     mixer.mixer[2] = vol_mono; 
     500     mixer.mixer[3] = vol_mono; 
     501     mixer.mixer[4] = vol_l; 
     502     mixer.mixer[5] = vol_r; 
     503    break; 
     504   default: 
     505     ROAR_ERR("mode stereo not supported"); 
     506     return -1; 
     507    break; 
     508  } 
     509 
    490510 } else { 
    491511  if ( strcmp(k, "mono") == 0 ) { 
Note: See TracChangeset for help on using the changeset viewer.