From afd2ca2e2aef80a74624e4b04c54f95e4b2f3852 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 | 82 ++++++++++--- .../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(+), 79 deletions(-) diff --git a/Application/AppController.h b/Application/AppController.h index 1b8ab6135..4f9d918a6 100644 --- a/Application/AppController.h +++ b/Application/AppController.h @@ -108,6 +108,9 @@ - (void)showPathSuggester; + (void)globalShowPathSuggester; +- (IBAction)showRubberbandSettings:(id)sender; +- (void)globalShowRubberbandSettings; + - (IBAction)checkForUpdates:(id)sender; @property NSWindow *mainWindow; diff --git a/Application/AppController.m b/Application/AppController.m index 547143802..fedee5fd7 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" @@ -89,6 +90,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]; @@ -826,6 +835,14 @@ static AppController *kAppController = nil; [kAppController showPathSuggester]; } +- (void)showRubberbandSettings:(id)sender { + [preferencesController showRubberbandSettings:sender]; +} + ++ (void)globalShowRubberbandSettings { + [kAppController showRubberbandSettings:kAppController]; +} + - (IBAction)checkForUpdates:(id)sender { [[SparkleBridge sharedStandardUpdaterController] checkForUpdates:[[NSApplication sharedApplication] delegate]]; } 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 4ccbbbd3e..fcdaf94fb 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 @@ - + @@ -2661,6 +2661,11 @@ Gw + + + RubberbandEngineEnabledTransformer + + @@ -2673,6 +2678,11 @@ Gw + + + RubberbandEngineEnabledTransformer + + @@ -2681,6 +2691,11 @@ Gw + + + RubberbandEngineEnabledTransformer + + @@ -2693,10 +2708,31 @@ Gw + + + RubberbandEngineEnabledTransformer + + + + + - + diff --git a/Cog.xcodeproj/project.pbxproj b/Cog.xcodeproj/project.pbxproj index 9e9dbe949..b4c9e3a66 100644 --- a/Cog.xcodeproj/project.pbxproj +++ b/Cog.xcodeproj/project.pbxproj @@ -163,6 +163,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, ); }; }; @@ -1005,6 +1006,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 = ""; }; @@ -1413,6 +1416,8 @@ 17E0D5F60F520F42005B6FED /* Transformers */ = { isa = PBXGroup; children = ( + 839E876C2D5DA0AC00A13526 /* RubberbandEngineTransformer.h */, + 839E876D2D5DA0AC00A13526 /* RubberbandEngineTransformer.m */, 83A3B733283AE6AA00CC6593 /* ColorToValueTransformer.h */, 83A3B72F283AE6AA00CC6593 /* ColorToValueTransformer.m */, 17E0D6120F520F87005B6FED /* FontSizetoLineHeightTransformer.h */, @@ -2565,6 +2570,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 a91b39a00..fe955fb88 100644 --- a/Preferences/Preferences/Base.lproj/Preferences.xib +++ b/Preferences/Preferences/Base.lproj/Preferences.xib @@ -16,8 +16,8 @@ - + @@ -1212,9 +1212,9 @@ - + - RubberbandEngineTransformer + RubberbandEngineR3Transformer @@ -1237,9 +1237,9 @@ - + - RubberbandEngineTransformer + RubberbandEngineR3Transformer @@ -1254,9 +1254,9 @@ - + - RubberbandEngineTransformer + RubberbandEngineR3Transformer @@ -1279,9 +1279,9 @@ - + - RubberbandEngineTransformer + RubberbandEngineR3Transformer @@ -1296,9 +1296,9 @@ - + - RubberbandEngineTransformer + RubberbandEngineR3Transformer @@ -1321,9 +1321,9 @@ - + - RubberbandEngineTransformer + RubberbandEngineR3Transformer @@ -1337,6 +1337,13 @@ + + + + RubberbandEngineEnabledTransformer + + + @@ -1356,6 +1363,11 @@ + + + RubberbandEngineEnabledTransformer + + @@ -1368,9 +1380,9 @@ - + - RubberbandEngineTransformer + RubberbandEngineR3Transformer @@ -1393,9 +1405,9 @@ - + - RubberbandEngineTransformer + RubberbandEngineR3Transformer @@ -1409,6 +1421,13 @@ + + + + RubberbandEngineEnabledTransformer + + + @@ -1428,6 +1447,11 @@ + + + RubberbandEngineEnabledTransformer + + @@ -1439,6 +1463,13 @@ + + + + RubberbandEngineEnabledTransformer + + + @@ -1458,6 +1489,11 @@ + + + RubberbandEngineEnabledTransformer + + @@ -1469,6 +1505,13 @@ + + + + RubberbandEngineEnabledTransformer + + + @@ -1488,6 +1531,11 @@ + + + RubberbandEngineEnabledTransformer + + diff --git a/Preferences/Preferences/GeneralPreferencesPlugin.m b/Preferences/Preferences/GeneralPreferencesPlugin.m index 9d99376a5..12bc1e135 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" }]; } }