Skip to content

Commit

Permalink
Rubber Band DSP: Make it possible to disable it
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
kode54 committed Feb 13, 2025
1 parent b913d42 commit d17388e
Show file tree
Hide file tree
Showing 18 changed files with 272 additions and 78 deletions.
3 changes: 3 additions & 0 deletions Application/AppController.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@
- (void)showPathSuggester;
+ (void)globalShowPathSuggester;

- (IBAction)showRubberbandSettings:(id)sender;
- (void)globalShowRubberbandSettings;

@property NSWindow *mainWindow;
@property NSWindow *miniWindow;

Expand Down
17 changes: 17 additions & 0 deletions Application/AppController.m
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -71,6 +72,14 @@ + (void)initialize {
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];
Expand Down Expand Up @@ -801,4 +810,12 @@ + (void)globalShowPathSuggester {
[kAppController showPathSuggester];
}

- (void)showRubberbandSettings:(id)sender {
[preferencesController showRubberbandSettings:sender];
}

+ (void)globalShowRubberbandSettings {
[kAppController showRubberbandSettings:kAppController];
}

@end
2 changes: 1 addition & 1 deletion Application/PlaybackController.m
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ - (void)initDefaults {
@"volumeLimit": @(YES),
@"enableHrtf": @(NO),
@"enableHeadTracking": @(NO),
@"rubberbandEngine": @"faster",
/*@"rubberbandEngine": @"faster",*/
@"rubberbandTransients": @"crisp",
@"rubberbandDetector": @"compound",
@"rubberbandPhase": @"laminar",
Expand Down
20 changes: 17 additions & 3 deletions Audio/Chain/DSP/DSPRubberbandNode.m
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
static void * kDSPRubberbandNodeContext = &kDSPRubberbandNodeContext;

@implementation DSPRubberbandNode {
BOOL enableRubberband;

RubberBandState ts;
RubberBandOptions tslastoptions, tsnewoptions;
size_t blockSize, toDrop, samplesBuffered, tschannels;
Expand Down Expand Up @@ -44,6 +46,8 @@ - (id _Nullable)initWithController:(id _Nonnull)c previous:(id _Nullable)p laten
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"];

Expand Down Expand Up @@ -106,7 +110,9 @@ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N
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) {
Expand Down Expand Up @@ -348,7 +354,9 @@ - (void)process {
[self writeChunk:chunk];
chunk = nil;
}
if(tsrestartengine) {
if(!enableRubberband && ts) {
[self fullShutdown];
} else if(tsrestartengine) {
[self fullShutdown];
} else if(tsapplynewoptions) {
[self partialInit];
Expand All @@ -373,7 +381,8 @@ - (AudioChunk *)convert {
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;
Expand All @@ -384,6 +393,11 @@ - (AudioChunk *)convert {
}
}

if(!ts) {
processEntered = NO;
return [self readChunk:4096];
}

size_t samplesToProcess = rubberband_get_samples_required(ts);
if(samplesToProcess > blockSize)
samplesToProcess = blockSize;
Expand Down
Loading

0 comments on commit d17388e

Please sign in to comment.