Changeset 40

Show
Ignore:
Timestamp:
04/06/07 15:28:42 (2 years ago)
Author:
gbooker
Message:

More on the dynamic range compression.
Allows the user to reduce the dynamic range compression for soft sounds (make them louder).
Fixes #27

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/A52/ACShepA52Decoder.cpp

    r39 r40  
    6666                else if(type == CFNumberGetTypeID()) 
    6767                        CFNumberGetValue((CFNumberRef)dynRange, kCFNumberDoubleType, &dynamicRangeCompression); 
    68                 else if(type == CFBooleanGetTypeID()) 
    69         { 
    70             if(CFBooleanGetValue((CFBooleanRef)dynRange)) 
    71                 dynamicRangeCompression = 0.2; 
    72             else 
    73                 dynamicRangeCompression = 1;             
    74         } 
    7568        else 
    7669                        dynamicRangeCompression = 1; 
     
    343336} 
    344337 
     338/* 
     339 * Custom Dynamic range compression 
     340 * My logic here: 
     341 * Two cases 
     342 * 1) The user requested a compression of 1 or less 
     343 *              return the typical power rule 
     344 * 2) The user requested a compression of more than 1 (decompression) 
     345 *              If the stream's requested compression is less than 1.0 (loud sound), return the normal compression 
     346 *              If the stream's requested compression is more than 1.0 (soft sound), use power rule (which will make it louder in this case). 
     347 */ 
    345348static sample_t dynrng_call (sample_t c, void *data) 
    346349{ 
    347350        double *level = (double *)data; 
    348         return pow((double)c, *level); 
     351        float levelToUse = (float)*level; 
     352        if(c > 1.0 || levelToUse <= 1.0) 
     353                return powf(c, levelToUse); 
     354        else 
     355                return c; 
    349356} 
    350357 
  • trunk/A52Preferences/A52Preferences.h

    r16 r40  
    55@interface A52Preferences : NSObject 
    66{ 
    7     IBOutlet NSButton *NSButton_dynamicRange; 
    8     IBOutlet NSButton *NSButton_stereo; 
     7    IBOutlet NSTextField                *textField_ac3DynamicRangeValue; 
     8    IBOutlet NSSlider                   *slider_ac3DynamicRangeSlider; 
     9    IBOutlet NSButton                                   *button_stereo; 
    910         
    10         NSUserDefaults  *defaults; 
     11        NSUserDefaults                                          *defaults; 
     12        float                                                           dynValue; 
    1113} 
     14 
     15- (IBAction)setAC3DynamicRangeValue:(id)sender; 
     16- (IBAction)setAC3DynamicRangeSlider:(id)sender; 
     17 
    1218- (IBAction)cancel:(id)sender; 
    1319- (IBAction)save:(id)sender; 
  • trunk/A52Preferences/A52Preferences.m

    r16 r40  
    11#import "A52Preferences.h" 
     2 
     3@interface A52Preferences (private) 
     4- (void)setAC3DynamicRange:(float)newVal; 
     5@end 
    26 
    37@implementation A52Preferences 
     
    1519- (void)awakeFromNib 
    1620{ 
    17         if([defaults boolForKey:@"dynamicRange"]
    18                 [NSButton_dynamicRange setIntValue:1]; 
     21        if([defaults objectForKey:@"dynamicRange"] != nil
     22                [self setAC3DynamicRange:[defaults floatForKey:@"dynamicRange"]]; 
    1923        else 
    20                 [NSButton_dynamicRange setIntValue:0]; 
     24                [self setAC3DynamicRange:1.0]; 
    2125        if([defaults boolForKey:@"useStereoOverDolby"]) 
    22                 [NSButton_stereo setIntValue:1]; 
     26                [button_stereo setIntValue:1]; 
    2327        else 
    24                 [NSButton_stereo setIntValue:0]; 
     28                [button_stereo setIntValue:0]; 
    2529} 
    2630 
     
    2933        [defaults release]; 
    3034        [super dealloc]; 
     35} 
     36 
     37- (void)setAC3DynamicRange:(float)newVal 
     38{ 
     39    if(newVal > 4.0) 
     40        newVal = 4.0; 
     41    if(newVal < 0.0) 
     42        newVal = 0.0; 
     43     
     44    dynValue = newVal; 
     45    [textField_ac3DynamicRangeValue setFloatValue:newVal]; 
     46    [slider_ac3DynamicRangeSlider setFloatValue:newVal]; 
     47} 
     48 
     49- (IBAction)setAC3DynamicRangeValue:(id)sender 
     50{ 
     51    float newVal = [textField_ac3DynamicRangeValue floatValue]; 
     52     
     53    [self setAC3DynamicRange:newVal]; 
     54} 
     55 
     56- (IBAction)setAC3DynamicRangeSlider:(id)sender 
     57{ 
     58    float newVal = [slider_ac3DynamicRangeSlider floatValue]; 
     59     
     60    [self setAC3DynamicRange:newVal]; 
    3161} 
    3262 
     
    3868- (IBAction)save:(id)sender 
    3969{ 
    40         if([NSButton_dynamicRange intValue] != 0) 
    41                 [defaults setBool:YES forKey:@"dynamicRange"]; 
    42         else 
    43                 [defaults setBool:NO forKey:@"dynamicRange"]; 
    44         if([NSButton_stereo intValue] != 0) 
     70        [defaults setFloat:dynValue forKey:@"dynamicRange"]; 
     71        if([button_stereo intValue] != 0) 
    4572                [defaults setBool:YES forKey:@"useStereoOverDolby"]; 
    4673        else 
  • trunk/A52Preferences/English.lproj/A52CodecPreferences.nib/classes.nib

    r16 r40  
    22    IBClasses = ( 
    33        { 
    4             ACTIONS = {cancel = id; save = id; };  
     4            ACTIONS = { 
     5                cancel = id;  
     6                save = id;  
     7                setAC3DynamicRangeSlider = id;  
     8                setAC3DynamicRangeValue = id;  
     9            };  
    510            CLASS = A52Preferences;  
    611            LANGUAGE = ObjC;  
    7             OUTLETS = {"NSButton_dynamicRange" = NSButton; "NSButton_stereo" = NSButton; };  
     12            OUTLETS = { 
     13                "button_stereo" = NSButton;  
     14                "slider_ac3DynamicRangeSlider" = NSSlider;  
     15                "textField_ac3DynamicRangeValue" = NSTextField;  
     16            };  
    817            SUPERCLASS = NSObject;  
    918        },  
  • trunk/A52Preferences/English.lproj/A52CodecPreferences.nib/info.nib

    r31 r40  
    1414        <key>IBOpenObjects</key> 
    1515        <array> 
     16                <integer>21</integer> 
    1617                <integer>29</integer> 
    1718        </array> 
    1819        <key>IBSystem Version</key> 
    19         <string>8L127</string> 
     20        <string>8P135</string> 
    2021</dict> 
    2122</plist>