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 <kode54@gmail.com>
This commit is contained in:
Christopher Snowhill 2025-02-12 20:11:05 -08:00
parent b913d423a2
commit d17388ee95
18 changed files with 272 additions and 78 deletions

View file

@ -103,6 +103,9 @@
- (void)showPathSuggester;
+ (void)globalShowPathSuggester;
- (IBAction)showRubberbandSettings:(id)sender;
- (void)globalShowRubberbandSettings;
@property NSWindow *mainWindow;
@property NSWindow *miniWindow;

View file

@ -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

View file

@ -100,7 +100,7 @@ NSString *CogPlaybackDidStopNotificiation = @"CogPlaybackDidStopNotificiation";
@"volumeLimit": @(YES),
@"enableHrtf": @(NO),
@"enableHeadTracking": @(NO),
@"rubberbandEngine": @"faster",
/*@"rubberbandEngine": @"faster",*/
@"rubberbandTransients": @"crisp",
@"rubberbandDetector": @"compound",
@"rubberbandPhase": @"laminar",

View file

@ -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;

View file

@ -21,27 +21,27 @@
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
<value key="minSize" type="size" width="750" height="200"/>
<stackView key="contentView" distribution="equalSpacing" orientation="vertical" alignment="centerX" spacing="0.0" misplaced="YES" detachesHiddenViews="YES" id="2">
<rect key="frame" x="0.0" y="0.0" width="1263" height="400"/>
<rect key="frame" x="0.0" y="0.0" width="1281" height="400"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<splitView dividerStyle="thin" vertical="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2123">
<rect key="frame" x="0.0" y="334" width="1276" height="66"/>
<rect key="frame" x="0.0" y="350" width="1274" height="50"/>
<subviews>
<scrollView fixedFrame="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="24" horizontalPageScroll="0.0" verticalLineScroll="24" verticalPageScroll="0.0" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" id="206" userLabel="Scroll View - Playlist View">
<rect key="frame" x="0.0" y="0.0" width="1276" height="66"/>
<rect key="frame" x="0.0" y="0.0" width="1291" height="50"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="KWC-Ti-8KY">
<rect key="frame" x="0.0" y="0.0" width="1276" height="66"/>
<rect key="frame" x="0.0" y="0.0" width="1291" height="50"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" alternatingRowBackgroundColors="YES" autosaveName="Playlist" rowHeight="18" headerView="1517" viewBased="YES" id="207" customClass="PlaylistView">
<rect key="frame" x="0.0" y="0.0" width="1276" height="49"/>
<rect key="frame" x="0.0" y="0.0" width="1291" height="33"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="6"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn identifier="index" editable="NO" width="62" minWidth="28" maxWidth="64" id="209">
<tableColumn identifier="index" editable="NO" width="64" minWidth="28" maxWidth="64" id="209">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="right" title="#">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333299" alpha="1" colorSpace="calibratedWhite"/>
@ -54,11 +54,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="5N3-SP-Y8z">
<rect key="frame" x="11" y="3" width="67" height="18"/>
<rect key="frame" x="11" y="3" width="69" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="w5u-JQ-3Hf">
<rect key="frame" x="0.0" y="1" width="67" height="16"/>
<rect key="frame" x="0.0" y="1" width="69" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="right" title="Table View Cell" id="FMU-QZ-NdQ">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -95,7 +95,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="Vw5-xt-0vG">
<rect key="frame" x="81" y="3" width="20" height="17"/>
<rect key="frame" x="83" y="3" width="20" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ERj-i9-caa">
@ -127,7 +127,7 @@
</tableCellView>
</prototypeCellViews>
</tableColumn>
<tableColumn identifier="rating" editable="NO" width="114" minWidth="48" maxWidth="128" id="208" userLabel="Rating">
<tableColumn identifier="rating" editable="NO" width="116" minWidth="48" maxWidth="128" id="208" userLabel="Rating">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Rating">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333299" alpha="1" colorSpace="calibratedWhite"/>
@ -141,11 +141,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="ZCP-Dx-UBV">
<rect key="frame" x="104" y="3" width="114" height="18"/>
<rect key="frame" x="106" y="3" width="116" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="exY-Bg-Mjm">
<rect key="frame" x="0.0" y="1" width="114" height="16"/>
<rect key="frame" x="0.0" y="1" width="116" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="sdo-Sm-KPH">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -171,7 +171,7 @@
</binding>
</connections>
</tableColumn>
<tableColumn identifier="title" editable="NO" width="177" minWidth="96" maxWidth="1024" id="XBr-ec-D81">
<tableColumn identifier="title" editable="NO" width="179" minWidth="96" maxWidth="1024" id="XBr-ec-D81">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Title">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333299" alpha="1" colorSpace="calibratedWhite"/>
@ -185,11 +185,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="ZHl-H1-IIC">
<rect key="frame" x="221" y="3" width="177" height="18"/>
<rect key="frame" x="225" y="3" width="179" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="dQP-wC-mba">
<rect key="frame" x="0.0" y="1" width="177" height="16"/>
<rect key="frame" x="0.0" y="1" width="179" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="VVx-99-roJ">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -259,7 +259,7 @@
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="dJs-UO-m5r"/>
</connections>
</tableColumn>
<tableColumn identifier="artist" editable="NO" width="200" minWidth="96" maxWidth="1024" id="391">
<tableColumn identifier="artist" editable="NO" width="202" minWidth="96" maxWidth="1024" id="391">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Artist">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@ -273,11 +273,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="gpC-Oe-Rog">
<rect key="frame" x="401" y="3" width="200" height="18"/>
<rect key="frame" x="407" y="3" width="202" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1WK-qN-Mgj">
<rect key="frame" x="0.0" y="1" width="200" height="16"/>
<rect key="frame" x="0.0" y="1" width="202" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="71l-3L-S3g">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -347,7 +347,7 @@
</binding>
</connections>
</tableColumn>
<tableColumn identifier="album" editable="NO" width="200" minWidth="96" maxWidth="1024" id="806">
<tableColumn identifier="album" editable="NO" width="202" minWidth="96" maxWidth="1024" id="806">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Album">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@ -361,11 +361,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="1ed-gX-bct">
<rect key="frame" x="604" y="3" width="200" height="18"/>
<rect key="frame" x="612" y="3" width="202" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="nEt-s5-vRX">
<rect key="frame" x="0.0" y="1" width="200" height="16"/>
<rect key="frame" x="0.0" y="1" width="202" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="moV-3G-GpB">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -391,7 +391,7 @@
</binding>
</connections>
</tableColumn>
<tableColumn identifier="length" editable="NO" width="94" minWidth="43.62012" maxWidth="96" id="807">
<tableColumn identifier="length" editable="NO" width="95" minWidth="43.62012" maxWidth="96" id="807">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="right" title="Length">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@ -404,11 +404,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="hhB-nv-e78">
<rect key="frame" x="807" y="3" width="94" height="18"/>
<rect key="frame" x="817" y="3" width="95" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="tHy-sM-HDB">
<rect key="frame" x="0.0" y="1" width="94" height="16"/>
<rect key="frame" x="0.0" y="1" width="95" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="Igo-5f-yim">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -435,7 +435,7 @@
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="1919"/>
</connections>
</tableColumn>
<tableColumn identifier="year" editable="NO" width="94" minWidth="42" maxWidth="96" id="848">
<tableColumn identifier="year" editable="NO" width="95" minWidth="42" maxWidth="96" id="848">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="right" title="Year">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@ -448,11 +448,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="q93-oh-i5T">
<rect key="frame" x="904" y="3" width="94" height="18"/>
<rect key="frame" x="915" y="3" width="95" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="bOi-LI-TDx">
<rect key="frame" x="0.0" y="1" width="94" height="16"/>
<rect key="frame" x="0.0" y="1" width="95" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="C2Q-qG-dwX">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -475,7 +475,7 @@
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="1921"/>
</connections>
</tableColumn>
<tableColumn identifier="genre" editable="NO" width="113" minWidth="32" maxWidth="512" id="849">
<tableColumn identifier="genre" editable="NO" width="114" minWidth="32" maxWidth="512" id="849">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Genre">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@ -489,11 +489,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="rRl-p9-Awr">
<rect key="frame" x="1001" y="3" width="113" height="18"/>
<rect key="frame" x="1013" y="3" width="114" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="yW6-2w-6mN">
<rect key="frame" x="0.0" y="1" width="113" height="16"/>
<rect key="frame" x="0.0" y="1" width="114" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="js2-sT-U4M">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -516,7 +516,7 @@
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="1922"/>
</connections>
</tableColumn>
<tableColumn identifier="track" editable="NO" width="70" minWidth="24" maxWidth="72" id="850">
<tableColumn identifier="track" editable="NO" width="71" minWidth="24" maxWidth="72" id="850">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="right" title="№">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@ -529,11 +529,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="hgh-VE-5kl">
<rect key="frame" x="1117" y="3" width="70" height="18"/>
<rect key="frame" x="1130" y="3" width="71" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="yEY-MI-d3o">
<rect key="frame" x="0.0" y="1" width="70" height="16"/>
<rect key="frame" x="0.0" y="1" width="71" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="tus-lr-RhS">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -556,7 +556,7 @@
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="1923"/>
</connections>
</tableColumn>
<tableColumn identifier="playcount" editable="NO" width="70" minWidth="24" maxWidth="72" id="1g1-Th-emL" userLabel="Play Count">
<tableColumn identifier="playcount" editable="NO" width="71" minWidth="24" maxWidth="72" id="1g1-Th-emL" userLabel="Play Count">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="right" title="Play Count">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@ -569,11 +569,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView id="aED-2V-LLM">
<rect key="frame" x="1190" y="3" width="74" height="18"/>
<rect key="frame" x="1204" y="3" width="75" height="18"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="tYz-2J-JRx">
<rect key="frame" x="0.0" y="1" width="74" height="16"/>
<rect key="frame" x="0.0" y="1" width="75" height="16"/>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="HJL-T1-ufx">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -592,12 +592,12 @@
</tableCellView>
</prototypeCellViews>
<connections>
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="iAQ-bR-gvW"/>
<binding destination="218" name="value" keyPath="arrangedObjects.playCount" id="6s9-cV-iYx">
<dictionary key="options">
<bool key="NSConditionallySetsEditable" value="YES"/>
</dictionary>
</binding>
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="iAQ-bR-gvW"/>
</connections>
</tableColumn>
<tableColumn identifier="path" editable="NO" width="64" minWidth="32" maxWidth="2048" hidden="YES" id="1712">
@ -892,7 +892,7 @@
<autoresizingMask key="autoresizingMask"/>
</scroller>
<tableHeaderView key="headerView" wantsLayer="YES" id="1517">
<rect key="frame" x="0.0" y="0.0" width="1276" height="17"/>
<rect key="frame" x="0.0" y="0.0" width="1291" height="17"/>
<autoresizingMask key="autoresizingMask"/>
</tableHeaderView>
</scrollView>
@ -905,7 +905,7 @@
</connections>
</splitView>
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="778">
<rect key="frame" x="508" y="4" width="261" height="14"/>
<rect key="frame" x="507" y="4" width="261" height="14"/>
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="center" title="Total Duration: 00 hours 00 minutes 00 seconds" bezelStyle="round" id="1473">
<font key="font" metaFont="controlContent" size="11"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -2617,6 +2617,11 @@ Gw
<sliderCell key="cell" controlSize="small" continuous="YES" state="on" alignment="left" maxValue="100" doubleValue="40.824829049999998" tickMarkPosition="left" sliderType="linear" id="vTw-tV-W5R"/>
<connections>
<action selector="changePitch:" target="705" id="bZt-zY-tjg"/>
<binding destination="1689" name="enabled" keyPath="values.rubberbandEngine" id="3Kk-ix-XCv">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineEnabledTransformer</string>
</dictionary>
</binding>
<outlet property="_TempoSlider" destination="stI-oD-51s" id="HMq-pE-Ssc"/>
</connections>
</slider>
@ -2629,6 +2634,11 @@ Gw
</buttonCell>
<connections>
<action selector="pressLock:" target="Ta5-Ik-jh9" id="HnF-AC-arz"/>
<binding destination="1689" name="enabled" keyPath="values.rubberbandEngine" id="BUK-i6-qzt">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineEnabledTransformer</string>
</dictionary>
</binding>
</connections>
</button>
<slider horizontalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="stI-oD-51s" userLabel="Tempo Slider" customClass="TempoSlider">
@ -2637,6 +2647,11 @@ Gw
<sliderCell key="cell" controlSize="small" continuous="YES" alignment="left" maxValue="100" doubleValue="40.824829049999998" tickMarkPosition="left" sliderType="linear" id="94j-7B-a8j"/>
<connections>
<action selector="changeTempo:" target="705" id="8xu-Dm-ceG"/>
<binding destination="1689" name="enabled" keyPath="values.rubberbandEngine" id="eRW-kg-FQc">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineEnabledTransformer</string>
</dictionary>
</binding>
<outlet property="_PitchSlider" destination="6P4-yi-9TK" id="QaV-cx-2wf"/>
</connections>
</slider>
@ -2649,10 +2664,31 @@ Gw
</buttonCell>
<connections>
<action selector="pressReset:" target="Ta5-Ik-jh9" id="zoi-N3-teA"/>
<binding destination="1689" name="enabled" keyPath="values.rubberbandEngine" id="GU1-d5-uWi">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineEnabledTransformer</string>
</dictionary>
</binding>
</connections>
</button>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="yQh-Rt-nJL" userLabel="Notice">
<rect key="frame" x="0.0" y="57" width="66" height="27"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="⚠️" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="XV7-Re-I9u">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="smallSystem"/>
</buttonCell>
<connections>
<action selector="showRubberbandSettings:" target="226" id="zqd-7k-1f0"/>
<binding destination="1689" name="hidden" keyPath="values.rubberbandEngine" id="BoK-zT-W4T">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineHiddenTransformer</string>
</dictionary>
</binding>
</connections>
</button>
</subviews>
<point key="canvasLocation" x="965" y="12"/>
<point key="canvasLocation" x="964.5" y="12"/>
</customView>
<customObject id="1675" customClass="SpotlightWindowController">
<connections>

View file

@ -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 = "<group>"; };
839E3B53286595D700880EA2 /* GeneralPane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GeneralPane.h; path = Preferences/Preferences/GeneralPane.h; sourceTree = "<group>"; };
839E56F12879625100DFB5F4 /* SADIE_D02-96000.mhr */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SADIE_D02-96000.mhr"; sourceTree = "<group>"; };
839E876C2D5DA0AC00A13526 /* RubberbandEngineTransformer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RubberbandEngineTransformer.h; path = Preferences/Preferences/RubberbandEngineTransformer.h; sourceTree = "<group>"; };
839E876D2D5DA0AC00A13526 /* RubberbandEngineTransformer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = RubberbandEngineTransformer.m; path = Preferences/Preferences/RubberbandEngineTransformer.m; sourceTree = "<group>"; };
83A3B72F283AE6AA00CC6593 /* ColorToValueTransformer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = ColorToValueTransformer.m; path = Preferences/Preferences/ColorToValueTransformer.m; sourceTree = "<group>"; };
83A3B733283AE6AA00CC6593 /* ColorToValueTransformer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ColorToValueTransformer.h; path = Preferences/Preferences/ColorToValueTransformer.h; sourceTree = "<group>"; };
83AA7D00279EBC8200087AA4 /* libavcodec.61.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libavcodec.61.dylib; path = ThirdParty/ffmpeg/lib/libavcodec.61.dylib; sourceTree = "<group>"; };
@ -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 */,

View file

@ -17,6 +17,7 @@
<outlet property="outputPane" destination="57" id="75"/>
<outlet property="playlistView" destination="231" id="244"/>
<outlet property="rubberbandPane" destination="l4Y-NE-ezS" id="XTA-io-tov"/>
<outlet property="updatesView" destination="50" id="99"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
@ -1193,9 +1194,9 @@
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="Kbb-Jr-kQr">
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="WpV-AO-w2c">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineTransformer</string>
<string key="NSValueTransformerName">RubberbandEngineR3Transformer</string>
</dictionary>
</binding>
</connections>
@ -1218,9 +1219,9 @@
<binding destination="rD7-3H-4FM" name="content" keyPath="arrangedObjects" id="vf7-6E-9v5"/>
<binding destination="rD7-3H-4FM" name="contentValues" keyPath="arrangedObjects.name" previousBinding="M9I-iY-Wej" id="O0z-2y-UPl"/>
<binding destination="rD7-3H-4FM" name="contentObjects" keyPath="arrangedObjects.preference" previousBinding="vf7-6E-9v5" id="M9I-iY-Wej"/>
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="pYS-w5-uyT">
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="sRp-Zg-Fij">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineTransformer</string>
<string key="NSValueTransformerName">RubberbandEngineR3Transformer</string>
</dictionary>
</binding>
<binding destination="52" name="selectedObject" keyPath="values.rubberbandTransients" previousBinding="O0z-2y-UPl" id="KLB-xJ-rb9"/>
@ -1235,9 +1236,9 @@
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="Yam-2c-Ktt">
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="6jW-SO-QOk">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineTransformer</string>
<string key="NSValueTransformerName">RubberbandEngineR3Transformer</string>
</dictionary>
</binding>
</connections>
@ -1260,9 +1261,9 @@
<binding destination="0rf-6O-MPh" name="content" keyPath="arrangedObjects" id="1Lg-gE-DdG"/>
<binding destination="0rf-6O-MPh" name="contentValues" keyPath="arrangedObjects.name" previousBinding="37N-3K-rq6" id="kLx-xv-a24"/>
<binding destination="0rf-6O-MPh" name="contentObjects" keyPath="arrangedObjects.preference" previousBinding="1Lg-gE-DdG" id="37N-3K-rq6"/>
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="0Qr-w7-JMe">
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="YLJ-Qx-vXy">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineTransformer</string>
<string key="NSValueTransformerName">RubberbandEngineR3Transformer</string>
</dictionary>
</binding>
<binding destination="52" name="selectedObject" keyPath="values.rubberbandDetector" previousBinding="kLx-xv-a24" id="MQw-g6-ogU"/>
@ -1277,9 +1278,9 @@
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="hqe-Xx-oDX">
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="Woj-HJ-niS">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineTransformer</string>
<string key="NSValueTransformerName">RubberbandEngineR3Transformer</string>
</dictionary>
</binding>
</connections>
@ -1302,9 +1303,9 @@
<binding destination="XkG-oY-ZCw" name="content" keyPath="arrangedObjects" id="15P-mE-WZ7"/>
<binding destination="XkG-oY-ZCw" name="contentValues" keyPath="arrangedObjects.name" previousBinding="iRN-4y-psG" id="VjJ-5K-hbu"/>
<binding destination="XkG-oY-ZCw" name="contentObjects" keyPath="arrangedObjects.preference" previousBinding="15P-mE-WZ7" id="iRN-4y-psG"/>
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="olc-Zu-jtV">
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="h5e-kZ-s0v">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineTransformer</string>
<string key="NSValueTransformerName">RubberbandEngineR3Transformer</string>
</dictionary>
</binding>
<binding destination="52" name="selectedObject" keyPath="values.rubberbandPhase" previousBinding="VjJ-5K-hbu" id="e13-ei-jMs"/>
@ -1318,6 +1319,13 @@
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="6f6-M1-n3d">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineEnabledTransformer</string>
</dictionary>
</binding>
</connections>
</textField>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="9g3-eD-m8o" userLabel="Rubberband Window Size">
<rect key="frame" x="186" y="112" width="164" height="25"/>
@ -1337,6 +1345,11 @@
<binding destination="qKv-dH-ulp" name="content" keyPath="arrangedObjects" id="Wph-cL-g56"/>
<binding destination="qKv-dH-ulp" name="contentValues" keyPath="arrangedObjects.name" previousBinding="RHw-Gv-iI0" id="NOc-zw-E5B"/>
<binding destination="qKv-dH-ulp" name="contentObjects" keyPath="arrangedObjects.preference" previousBinding="Wph-cL-g56" id="RHw-Gv-iI0"/>
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="CuA-Yi-XqB">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineEnabledTransformer</string>
</dictionary>
</binding>
<binding destination="52" name="selectedObject" keyPath="values.rubberbandWindow" previousBinding="NOc-zw-E5B" id="jO4-fL-0ka"/>
</connections>
</popUpButton>
@ -1349,9 +1362,9 @@
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="Shn-JN-4nI">
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="949-Ha-vsM">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineTransformer</string>
<string key="NSValueTransformerName">RubberbandEngineR3Transformer</string>
</dictionary>
</binding>
</connections>
@ -1374,9 +1387,9 @@
<binding destination="7qK-HD-YRC" name="content" keyPath="arrangedObjects" id="glT-yT-Xy1"/>
<binding destination="7qK-HD-YRC" name="contentValues" keyPath="arrangedObjects.name" previousBinding="R8g-75-OWT" id="OtE-O8-meo"/>
<binding destination="7qK-HD-YRC" name="contentObjects" keyPath="arrangedObjects.preference" previousBinding="glT-yT-Xy1" id="R8g-75-OWT"/>
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="q0n-WG-Xis">
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="J82-Il-BcJ">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineTransformer</string>
<string key="NSValueTransformerName">RubberbandEngineR3Transformer</string>
</dictionary>
</binding>
<binding destination="52" name="selectedObject" keyPath="values.rubberbandSmoothing" previousBinding="OtE-O8-meo" id="jqW-KQ-IiR"/>
@ -1390,6 +1403,13 @@
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="6aI-ea-kLD">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineEnabledTransformer</string>
</dictionary>
</binding>
</connections>
</textField>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2Y7-n5-g43" userLabel="Rubberband Formant">
<rect key="frame" x="186" y="64" width="164" height="25"/>
@ -1409,6 +1429,11 @@
<binding destination="5Cw-Q7-Y6w" name="content" keyPath="arrangedObjects" id="8PO-vs-kd4"/>
<binding destination="5Cw-Q7-Y6w" name="contentValues" keyPath="arrangedObjects.name" previousBinding="Tuw-7B-rA3" id="d3u-gj-AVL"/>
<binding destination="5Cw-Q7-Y6w" name="contentObjects" keyPath="arrangedObjects.preference" previousBinding="8PO-vs-kd4" id="Tuw-7B-rA3"/>
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="mBh-PO-miO">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineEnabledTransformer</string>
</dictionary>
</binding>
<binding destination="52" name="selectedObject" keyPath="values.rubberbandFormant" previousBinding="d3u-gj-AVL" id="jQQ-qt-LAC"/>
</connections>
</popUpButton>
@ -1420,6 +1445,13 @@
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="0Am-ed-3v0">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineEnabledTransformer</string>
</dictionary>
</binding>
</connections>
</textField>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="FIB-Jj-YWd" userLabel="Rubberband Pitch">
<rect key="frame" x="186" y="40" width="164" height="25"/>
@ -1439,6 +1471,11 @@
<binding destination="mFW-7h-5rd" name="content" keyPath="arrangedObjects" id="yqp-aH-3Vn"/>
<binding destination="mFW-7h-5rd" name="contentValues" keyPath="arrangedObjects.name" previousBinding="X49-3Z-EWj" id="ISf-ZT-bQj"/>
<binding destination="mFW-7h-5rd" name="contentObjects" keyPath="arrangedObjects.preference" previousBinding="yqp-aH-3Vn" id="X49-3Z-EWj"/>
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="XZU-H2-d2Y">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineEnabledTransformer</string>
</dictionary>
</binding>
<binding destination="52" name="selectedObject" keyPath="values.rubberbandPitch" previousBinding="ISf-ZT-bQj" id="O1U-TC-XPY"/>
</connections>
</popUpButton>
@ -1450,6 +1487,13 @@
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="Xmj-14-dvj">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineEnabledTransformer</string>
</dictionary>
</binding>
</connections>
</textField>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="f50-KA-ekP" userLabel="Rubberband Channels">
<rect key="frame" x="186" y="16" width="164" height="25"/>
@ -1469,6 +1513,11 @@
<binding destination="Dfm-y4-7ki" name="content" keyPath="arrangedObjects" id="bas-JW-4u4"/>
<binding destination="Dfm-y4-7ki" name="contentValues" keyPath="arrangedObjects.name" previousBinding="K1C-oq-2vZ" id="8Ja-Tu-lo2"/>
<binding destination="Dfm-y4-7ki" name="contentObjects" keyPath="arrangedObjects.preference" previousBinding="bas-JW-4u4" id="K1C-oq-2vZ"/>
<binding destination="52" name="enabled" keyPath="values.rubberbandEngine" id="hZx-A7-Nvg">
<dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineEnabledTransformer</string>
</dictionary>
</binding>
<binding destination="52" name="selectedObject" keyPath="values.rubberbandChannels" previousBinding="8Ja-Tu-lo2" id="Xyj-me-7r1"/>
</connections>
</popUpButton>

View file

@ -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 {

View file

@ -10,7 +10,15 @@
NS_ASSUME_NONNULL_BEGIN
@interface RubberbandEngineTransformer : NSValueTransformer
@interface RubberbandEngineEnabledTransformer : NSValueTransformer
@end
@interface RubberbandEngineHiddenTransformer : NSValueTransformer
@end
@interface RubberbandEngineR3Transformer : NSValueTransformer
@end

View file

@ -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

View file

@ -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"}];

View file

@ -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";

View file

@ -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";

View file

@ -15,5 +15,6 @@
- (IBAction)showPreferences:(id)sender;
- (IBAction)showPathSuggester:(id)sender;
- (IBAction)showRubberbandSettings:(id)sender;
@end

View file

@ -38,4 +38,10 @@
[window showPathSuggester];
}
- (IBAction)showRubberbandSettings:(id)sender {
[self initWindow];
[window showRubberbandSettings];
}
@end

View file

@ -23,5 +23,6 @@
- (void)show;
- (void)showPathSuggester;
- (void)showRubberbandSettings;
@end

View file

@ -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];

View file

@ -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" }];
}
}