From d17388ee95fb885a4f78ddf71f1bdb5f6a82cabd Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Wed, 12 Feb 2025 20:11:05 -0800 Subject: [PATCH] Rubber Band DSP: Make it possible to disable it And disable it by default in new installations, otherwise leave the setting alone. The disablement setting is shared with the engine setting, so the default should not really change anything, except for new installs. Also, the time/pitch shifting dialog disables itself and displays an obvious notice button, which opens the Rubber Band settings. Signed-off-by: Christopher Snowhill --- Application/AppController.h | 3 + Application/AppController.m | 17 +++ Application/PlaybackController.m | 2 +- Audio/Chain/DSP/DSPRubberbandNode.m | 20 ++- Base.lproj/MainMenu.xib | 116 ++++++++++++------ Cog.xcodeproj/project.pbxproj | 6 + .../Preferences/Base.lproj/Preferences.xib | 81 +++++++++--- .../Preferences/GeneralPreferencesPlugin.m | 10 +- .../Preferences/RubberbandEngineTransformer.h | 10 +- .../Preferences/RubberbandEngineTransformer.m | 55 ++++++--- Preferences/Preferences/RubberbandPane.m | 2 + .../Preferences/en.lproj/Localizable.strings | 1 + .../Preferences/es.lproj/Localizable.strings | 1 + Preferences/PreferencesController.h | 1 + Preferences/PreferencesController.m | 6 + Preferences/PreferencesWindow.h | 1 + Preferences/PreferencesWindow.m | 8 ++ Window/MainWindow.m | 10 ++ 18 files changed, 272 insertions(+), 78 deletions(-) diff --git a/Application/AppController.h b/Application/AppController.h index f0fbb1540..74552e982 100644 --- a/Application/AppController.h +++ b/Application/AppController.h @@ -103,6 +103,9 @@ - (void)showPathSuggester; + (void)globalShowPathSuggester; +- (IBAction)showRubberbandSettings:(id)sender; +- (void)globalShowRubberbandSettings; + @property NSWindow *mainWindow; @property NSWindow *miniWindow; diff --git a/Application/AppController.m b/Application/AppController.m index edfd81368..e2dff470a 100644 --- a/Application/AppController.m +++ b/Application/AppController.m @@ -11,6 +11,7 @@ #import "PlaylistEntry.h" #import "PlaylistLoader.h" #import "PlaylistView.h" +#import "RubberbandEngineTransformer.h" #import "SQLiteStore.h" #import "SandboxBroker.h" #import "SpotlightWindowController.h" @@ -71,6 +72,14 @@ static AppController *kAppController = nil; NSValueTransformer *numberHertzToStringTransformer = [[NumberHertzToStringTransformer alloc] init]; [NSValueTransformer setValueTransformer:numberHertzToStringTransformer forName:@"NumberHertzToStringTransformer"]; + + NSValueTransformer *rubberbandEngineEnabledTransformer = [[RubberbandEngineEnabledTransformer alloc] init]; + [NSValueTransformer setValueTransformer:rubberbandEngineEnabledTransformer + forName:@"RubberbandEngineEnabledTransformer"]; + + NSValueTransformer *rubberbandEngineHiddenTransformer = [[RubberbandEngineHiddenTransformer alloc] init]; + [NSValueTransformer setValueTransformer:rubberbandEngineHiddenTransformer + forName:@"RubberbandEngineHiddenTransformer"]; } - (id)init { self = [super init]; @@ -801,4 +810,12 @@ static AppController *kAppController = nil; [kAppController showPathSuggester]; } +- (void)showRubberbandSettings:(id)sender { + [preferencesController showRubberbandSettings:sender]; +} + ++ (void)globalShowRubberbandSettings { + [kAppController showRubberbandSettings:kAppController]; +} + @end diff --git a/Application/PlaybackController.m b/Application/PlaybackController.m index 96ed25614..cc2dfe0eb 100644 --- a/Application/PlaybackController.m +++ b/Application/PlaybackController.m @@ -100,7 +100,7 @@ NSString *CogPlaybackDidStopNotificiation = @"CogPlaybackDidStopNotificiation"; @"volumeLimit": @(YES), @"enableHrtf": @(NO), @"enableHeadTracking": @(NO), - @"rubberbandEngine": @"faster", + /*@"rubberbandEngine": @"faster",*/ @"rubberbandTransients": @"crisp", @"rubberbandDetector": @"compound", @"rubberbandPhase": @"laminar", diff --git a/Audio/Chain/DSP/DSPRubberbandNode.m b/Audio/Chain/DSP/DSPRubberbandNode.m index da52fe809..67d4b10d4 100644 --- a/Audio/Chain/DSP/DSPRubberbandNode.m +++ b/Audio/Chain/DSP/DSPRubberbandNode.m @@ -16,6 +16,8 @@ static void * kDSPRubberbandNodeContext = &kDSPRubberbandNodeContext; @implementation DSPRubberbandNode { + BOOL enableRubberband; + RubberBandState ts; RubberBandOptions tslastoptions, tsnewoptions; size_t blockSize, toDrop, samplesBuffered, tschannels; @@ -44,6 +46,8 @@ static void * kDSPRubberbandNodeContext = &kDSPRubberbandNodeContext; self = [super initWithController:c previous:p latency:latency]; if(self) { NSUserDefaults *defaults = [[NSUserDefaultsController sharedUserDefaultsController] defaults]; + enableRubberband = ![[defaults stringForKey:@"rubberbandEngine"] isEqualToString:@"disabled"]; + pitch = [defaults doubleForKey:@"pitch"]; tempo = [defaults doubleForKey:@"tempo"]; @@ -106,7 +110,9 @@ static void * kDSPRubberbandNodeContext = &kDSPRubberbandNodeContext; tempo = [defaults doubleForKey:@"tempo"]; tsapplynewoptions = YES; } else if([[keyPath substringToIndex:17] isEqualToString:@"values.rubberband"]) { - if(ts) { + NSUserDefaults *defaults = [[NSUserDefaultsController sharedUserDefaultsController] defaults]; + enableRubberband = ![[defaults stringForKey:@"rubberbandEngine"] isEqualToString:@"disabled"]; + if(enableRubberband && ts) { RubberBandOptions options = [self getRubberbandOptions]; RubberBandOptions changed = options ^ tslastoptions; if(changed) { @@ -348,7 +354,9 @@ static void * kDSPRubberbandNodeContext = &kDSPRubberbandNodeContext; [self writeChunk:chunk]; chunk = nil; } - if(tsrestartengine) { + if(!enableRubberband && ts) { + [self fullShutdown]; + } else if(tsrestartengine) { [self fullShutdown]; } else if(tsapplynewoptions) { [self partialInit]; @@ -373,7 +381,8 @@ static void * kDSPRubberbandNodeContext = &kDSPRubberbandNodeContext; return nil; } - if(!ts || memcmp(&inputFormat, &lastInputFormat, sizeof(inputFormat)) != 0 || + if((enableRubberband && !ts) || + memcmp(&inputFormat, &lastInputFormat, sizeof(inputFormat)) != 0 || inputChannelConfig != lastInputChannelConfig) { lastInputFormat = inputFormat; lastInputChannelConfig = inputChannelConfig; @@ -384,6 +393,11 @@ static void * kDSPRubberbandNodeContext = &kDSPRubberbandNodeContext; } } + if(!ts) { + processEntered = NO; + return [self readChunk:4096]; + } + size_t samplesToProcess = rubberband_get_samples_required(ts); if(samplesToProcess > blockSize) samplesToProcess = blockSize; diff --git a/Base.lproj/MainMenu.xib b/Base.lproj/MainMenu.xib index e4d3b903c..ff02fe14c 100644 --- a/Base.lproj/MainMenu.xib +++ b/Base.lproj/MainMenu.xib @@ -21,27 +21,27 @@ - + - + - + - + - + - + @@ -54,11 +54,11 @@ - + - + @@ -95,7 +95,7 @@ - + @@ -127,7 +127,7 @@ - + @@ -141,11 +141,11 @@ - + - + @@ -171,7 +171,7 @@ - + @@ -185,11 +185,11 @@ - + - + @@ -259,7 +259,7 @@ - + @@ -273,11 +273,11 @@ - + - + @@ -347,7 +347,7 @@ - + @@ -361,11 +361,11 @@ - + - + @@ -391,7 +391,7 @@ - + @@ -404,11 +404,11 @@ - + - + @@ -435,7 +435,7 @@ - + @@ -448,11 +448,11 @@ - + - + @@ -475,7 +475,7 @@ - + @@ -489,11 +489,11 @@ - + - + @@ -516,7 +516,7 @@ - + @@ -529,11 +529,11 @@ - + - + @@ -556,7 +556,7 @@ - + @@ -569,11 +569,11 @@ - + - + @@ -592,12 +592,12 @@ - + @@ -905,7 +905,7 @@ - + @@ -2617,6 +2617,11 @@ Gw + + + RubberbandEngineEnabledTransformer + + @@ -2629,6 +2634,11 @@ Gw + + + RubberbandEngineEnabledTransformer + + @@ -2637,6 +2647,11 @@ Gw + + + RubberbandEngineEnabledTransformer + + @@ -2649,10 +2664,31 @@ Gw + + + RubberbandEngineEnabledTransformer + + + + + - + diff --git a/Cog.xcodeproj/project.pbxproj b/Cog.xcodeproj/project.pbxproj index cac9bda0f..3f9adc5c8 100644 --- a/Cog.xcodeproj/project.pbxproj +++ b/Cog.xcodeproj/project.pbxproj @@ -161,6 +161,7 @@ 839B837F286D7F8D00F529EE /* NumberHertzToStringTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 839B837E286D7F8D00F529EE /* NumberHertzToStringTransformer.swift */; }; 839DA7CF274A2D4C001B18E5 /* NSDictionary+Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = 839DA7CE274A2D4C001B18E5 /* NSDictionary+Merge.m */; }; 839E56F52879625100DFB5F4 /* SADIE_D02-96000.mhr in Resources */ = {isa = PBXBuildFile; fileRef = 839E56F12879625100DFB5F4 /* SADIE_D02-96000.mhr */; }; + 839E876E2D5DA0AC00A13526 /* RubberbandEngineTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 839E876D2D5DA0AC00A13526 /* RubberbandEngineTransformer.m */; }; 83A360B220E4E81D00192DAB /* Flac.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8303A30C20E4E3D000951EF8 /* Flac.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 83A3B734283AE89000CC6593 /* ColorToValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 83A3B72F283AE6AA00CC6593 /* ColorToValueTransformer.m */; }; 83AA7D04279EBCA900087AA4 /* libavcodec.61.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 83AA7D00279EBC8200087AA4 /* libavcodec.61.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; @@ -1001,6 +1002,8 @@ 839DA7CE274A2D4C001B18E5 /* NSDictionary+Merge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+Merge.m"; sourceTree = ""; }; 839E3B53286595D700880EA2 /* GeneralPane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GeneralPane.h; path = Preferences/Preferences/GeneralPane.h; sourceTree = ""; }; 839E56F12879625100DFB5F4 /* SADIE_D02-96000.mhr */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SADIE_D02-96000.mhr"; sourceTree = ""; }; + 839E876C2D5DA0AC00A13526 /* RubberbandEngineTransformer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RubberbandEngineTransformer.h; path = Preferences/Preferences/RubberbandEngineTransformer.h; sourceTree = ""; }; + 839E876D2D5DA0AC00A13526 /* RubberbandEngineTransformer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = RubberbandEngineTransformer.m; path = Preferences/Preferences/RubberbandEngineTransformer.m; sourceTree = ""; }; 83A3B72F283AE6AA00CC6593 /* ColorToValueTransformer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = ColorToValueTransformer.m; path = Preferences/Preferences/ColorToValueTransformer.m; sourceTree = ""; }; 83A3B733283AE6AA00CC6593 /* ColorToValueTransformer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ColorToValueTransformer.h; path = Preferences/Preferences/ColorToValueTransformer.h; sourceTree = ""; }; 83AA7D00279EBC8200087AA4 /* libavcodec.61.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libavcodec.61.dylib; path = ThirdParty/ffmpeg/lib/libavcodec.61.dylib; sourceTree = ""; }; @@ -1407,6 +1410,8 @@ 17E0D5F60F520F42005B6FED /* Transformers */ = { isa = PBXGroup; children = ( + 839E876C2D5DA0AC00A13526 /* RubberbandEngineTransformer.h */, + 839E876D2D5DA0AC00A13526 /* RubberbandEngineTransformer.m */, 83A3B733283AE6AA00CC6593 /* ColorToValueTransformer.h */, 83A3B72F283AE6AA00CC6593 /* ColorToValueTransformer.m */, 17E0D6120F520F87005B6FED /* FontSizetoLineHeightTransformer.h */, @@ -2559,6 +2564,7 @@ 838A337D2D06C14200D0D770 /* TempoSlider.m in Sources */, 838A337E2D06C14200D0D770 /* PitchSlider.m in Sources */, 838A33832D06CF4100D0D770 /* SpectrumViewCG.m in Sources */, + 839E876E2D5DA0AC00A13526 /* RubberbandEngineTransformer.m in Sources */, 838A33842D06CF4100D0D770 /* SpectrumWindowController.m in Sources */, 83B61E2829A82A0200CD0580 /* LyricsWindowController.m in Sources */, 56462EB20D634206000AB68C /* SpotlightPlaylistController.m in Sources */, diff --git a/Preferences/Preferences/Base.lproj/Preferences.xib b/Preferences/Preferences/Base.lproj/Preferences.xib index fe9f4a547..dcb6d1314 100644 --- a/Preferences/Preferences/Base.lproj/Preferences.xib +++ b/Preferences/Preferences/Base.lproj/Preferences.xib @@ -17,6 +17,7 @@ + @@ -1193,9 +1194,9 @@ - + - RubberbandEngineTransformer + RubberbandEngineR3Transformer @@ -1218,9 +1219,9 @@ - + - RubberbandEngineTransformer + RubberbandEngineR3Transformer @@ -1235,9 +1236,9 @@ - + - RubberbandEngineTransformer + RubberbandEngineR3Transformer @@ -1260,9 +1261,9 @@ - + - RubberbandEngineTransformer + RubberbandEngineR3Transformer @@ -1277,9 +1278,9 @@ - + - RubberbandEngineTransformer + RubberbandEngineR3Transformer @@ -1302,9 +1303,9 @@ - + - RubberbandEngineTransformer + RubberbandEngineR3Transformer @@ -1318,6 +1319,13 @@ + + + + RubberbandEngineEnabledTransformer + + + @@ -1337,6 +1345,11 @@ + + + RubberbandEngineEnabledTransformer + + @@ -1349,9 +1362,9 @@ - + - RubberbandEngineTransformer + RubberbandEngineR3Transformer @@ -1374,9 +1387,9 @@ - + - RubberbandEngineTransformer + RubberbandEngineR3Transformer @@ -1390,6 +1403,13 @@ + + + + RubberbandEngineEnabledTransformer + + + @@ -1409,6 +1429,11 @@ + + + RubberbandEngineEnabledTransformer + + @@ -1420,6 +1445,13 @@ + + + + RubberbandEngineEnabledTransformer + + + @@ -1439,6 +1471,11 @@ + + + RubberbandEngineEnabledTransformer + + @@ -1450,6 +1487,13 @@ + + + + RubberbandEngineEnabledTransformer + + + @@ -1469,6 +1513,11 @@ + + + RubberbandEngineEnabledTransformer + + diff --git a/Preferences/Preferences/GeneralPreferencesPlugin.m b/Preferences/Preferences/GeneralPreferencesPlugin.m index 6b8c04615..a89a43825 100644 --- a/Preferences/Preferences/GeneralPreferencesPlugin.m +++ b/Preferences/Preferences/GeneralPreferencesPlugin.m @@ -27,9 +27,13 @@ [NSValueTransformer setValueTransformer:timeIntervalToStringTransformer forName:@"TimeIntervalToStringTransformer"]; - NSValueTransformer *rubberbandEngineTransformer = [[RubberbandEngineTransformer alloc] init]; - [NSValueTransformer setValueTransformer:rubberbandEngineTransformer - forName:@"RubberbandEngineTransformer"]; + NSValueTransformer *rubberbandEngineR3Transformer = [[RubberbandEngineR3Transformer alloc] init]; + [NSValueTransformer setValueTransformer:rubberbandEngineR3Transformer + forName:@"RubberbandEngineR3Transformer"]; + + NSValueTransformer *rubberbandEngineEnabledTransformer = [[RubberbandEngineEnabledTransformer alloc] init]; + [NSValueTransformer setValueTransformer:rubberbandEngineEnabledTransformer + forName:@"RubberbandEngineEnabledTransformer"]; } + (NSArray *)preferencePanes { diff --git a/Preferences/Preferences/RubberbandEngineTransformer.h b/Preferences/Preferences/RubberbandEngineTransformer.h index 89e3499bd..4edde9084 100644 --- a/Preferences/Preferences/RubberbandEngineTransformer.h +++ b/Preferences/Preferences/RubberbandEngineTransformer.h @@ -10,7 +10,15 @@ NS_ASSUME_NONNULL_BEGIN -@interface RubberbandEngineTransformer : NSValueTransformer +@interface RubberbandEngineEnabledTransformer : NSValueTransformer + +@end + +@interface RubberbandEngineHiddenTransformer : NSValueTransformer + +@end + +@interface RubberbandEngineR3Transformer : NSValueTransformer @end diff --git a/Preferences/Preferences/RubberbandEngineTransformer.m b/Preferences/Preferences/RubberbandEngineTransformer.m index 9f1d098d7..71dc20787 100644 --- a/Preferences/Preferences/RubberbandEngineTransformer.m +++ b/Preferences/Preferences/RubberbandEngineTransformer.m @@ -9,7 +9,7 @@ #import "RubberbandEngineTransformer.h" -@implementation RubberbandEngineTransformer +@implementation RubberbandEngineR3Transformer + (Class)transformedValueClass { return [NSNumber class]; } @@ -19,35 +19,62 @@ - (id)transformedValue:(id)value { if(value == nil) return @(YES); - + if([value isKindOfClass:[NSString class]]) { NSString *stringValue = value; - if([stringValue isEqualToString:@"finer"]) { + if([stringValue isEqualToString:@"disabled"] || + [stringValue isEqualToString:@"finer"]) { return @(NO); } } - + return @(YES); } @end +@implementation RubberbandEngineEnabledTransformer ++ (Class)transformedValueClass { + return [NSNumber class]; +} ++ (BOOL)allowsReverseTransformation { + return NO; +} +- (id)transformedValue:(id)value { + if(value == nil) return @(YES); + if([value isKindOfClass:[NSString class]]) { + NSString *stringValue = value; + if([stringValue isEqualToString:@"disabled"]) { + return @(NO); + } + } + return @(YES); +} +@end +@implementation RubberbandEngineHiddenTransformer ++ (Class)transformedValueClass { + return [NSNumber class]; +} ++ (BOOL)allowsReverseTransformation { + return NO; +} +- (id)transformedValue:(id)value { + if(value == nil) return @(YES); + if([value isKindOfClass:[NSString class]]) { + NSString *stringValue = value; + if([stringValue isEqualToString:@"disabled"]) { + return @(NO); + } + } + return @(YES); +} - - - - - - - - - - +@end diff --git a/Preferences/Preferences/RubberbandPane.m b/Preferences/Preferences/RubberbandPane.m index 5df1492ad..c3832aceb 100644 --- a/Preferences/Preferences/RubberbandPane.m +++ b/Preferences/Preferences/RubberbandPane.m @@ -45,6 +45,8 @@ - (void)awakeFromNib { [self removeObjects:[self arrangedObjects]]; + [self addObject:@{@"name": NSLocalizedStringFromTableInBundle(@"EngineDisabled", nil, [NSBundle bundleForClass:[self class]], @""), @"preference": @"disabled"}]; + [self addObject:@{@"name": NSLocalizedStringFromTableInBundle(@"EngineFaster", nil, [NSBundle bundleForClass:[self class]], @""), @"preference": @"faster"}]; [self addObject:@{@"name": NSLocalizedStringFromTableInBundle(@"EngineFiner", nil, [NSBundle bundleForClass:[self class]], @""), @"preference": @"finer"}]; diff --git a/Preferences/Preferences/en.lproj/Localizable.strings b/Preferences/Preferences/en.lproj/Localizable.strings index cf76d66d6..9c196c4c3 100644 --- a/Preferences/Preferences/en.lproj/Localizable.strings +++ b/Preferences/Preferences/en.lproj/Localizable.strings @@ -31,6 +31,7 @@ "Volume scale tag only" = "Volume scale tag only"; "Zero Order Hold" = "Zero Order Hold"; "Rubber Band" = "Rubber Band"; +"EngineDisabled" = "Disabled"; "EngineFaster" = "Faster"; "EngineFiner" = "Finer"; "TransientsCrisp" = "Crisp"; diff --git a/Preferences/Preferences/es.lproj/Localizable.strings b/Preferences/Preferences/es.lproj/Localizable.strings index c7637adf7..9e2131191 100644 --- a/Preferences/Preferences/es.lproj/Localizable.strings +++ b/Preferences/Preferences/es.lproj/Localizable.strings @@ -83,6 +83,7 @@ "Zero Order Hold" = "Retención de orden cero"; "Rubber Band" = "Rubber Band"; +"EngineDisabled" = "Desactivado"; "EngineFaster" = "Más rápido"; "EngineFiner" = "Mejor calidad"; "TransientsCrisp" = "Definidos"; diff --git a/Preferences/PreferencesController.h b/Preferences/PreferencesController.h index 1c71c8004..a797285c1 100644 --- a/Preferences/PreferencesController.h +++ b/Preferences/PreferencesController.h @@ -15,5 +15,6 @@ - (IBAction)showPreferences:(id)sender; - (IBAction)showPathSuggester:(id)sender; +- (IBAction)showRubberbandSettings:(id)sender; @end diff --git a/Preferences/PreferencesController.m b/Preferences/PreferencesController.m index 717a81a3b..283d7b507 100644 --- a/Preferences/PreferencesController.m +++ b/Preferences/PreferencesController.m @@ -38,4 +38,10 @@ [window showPathSuggester]; } +- (IBAction)showRubberbandSettings:(id)sender { + [self initWindow]; + + [window showRubberbandSettings]; +} + @end diff --git a/Preferences/PreferencesWindow.h b/Preferences/PreferencesWindow.h index da494f56e..817e04e98 100644 --- a/Preferences/PreferencesWindow.h +++ b/Preferences/PreferencesWindow.h @@ -23,5 +23,6 @@ - (void)show; - (void)showPathSuggester; +- (void)showRubberbandSettings; @end diff --git a/Preferences/PreferencesWindow.m b/Preferences/PreferencesWindow.m index 7db3fd4dd..a5e658b69 100644 --- a/Preferences/PreferencesWindow.m +++ b/Preferences/PreferencesWindow.m @@ -167,6 +167,14 @@ } } +- (void)showRubberbandSettings { + NSString *name = NSLocalizedPrefString(@"Rubber Band"); + + [self loadPaneNamed:name display:NO]; + + [self makeKeyAndOrderFront:self]; +} + // Close on Esc pressed. - (void)cancelOperation:(id)sender { [self close]; diff --git a/Window/MainWindow.m b/Window/MainWindow.m index 4562e9ebf..9ebea956c 100644 --- a/Window/MainWindow.m +++ b/Window/MainWindow.m @@ -10,9 +10,17 @@ #import "AppController.h" +// NOTICE! We bury first time defaults that should depend on whether the install is fresh or not here +// so that they get created correctly depending on the situation. + +// For instance, for the first option to get this treatment, we want time stretching to stay enabled +// for existing installations, but disable itself by default on new installs, to spare processing. + void showCrashlyticsConsent(NSWindow *window) { BOOL askedConsent = [[NSUserDefaults standardUserDefaults] boolForKey:@"crashlyticsAskedConsent"]; if(!askedConsent) { + [[NSUserDefaults standardUserDefaults] registerDefaults:@{ @"rubberbandEngine": @"disabled" }]; + [window orderFront:window]; NSAlert *alert = [[NSAlert alloc] init]; @@ -28,6 +36,8 @@ void showCrashlyticsConsent(NSWindow *window) { }]; [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"crashlyticsAskedConsent"]; + } else { + [[NSUserDefaults standardUserDefaults] registerDefaults:@{ @"rubberbandEngine": @"faster" }]; } }