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 5e4dd125dd
commit afd2ca2e2a
18 changed files with 272 additions and 79 deletions

View file

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

View file

@ -11,6 +11,7 @@
#import "PlaylistEntry.h" #import "PlaylistEntry.h"
#import "PlaylistLoader.h" #import "PlaylistLoader.h"
#import "PlaylistView.h" #import "PlaylistView.h"
#import "RubberbandEngineTransformer.h"
#import "SQLiteStore.h" #import "SQLiteStore.h"
#import "SandboxBroker.h" #import "SandboxBroker.h"
#import "SpotlightWindowController.h" #import "SpotlightWindowController.h"
@ -89,6 +90,14 @@ static AppController *kAppController = nil;
NSValueTransformer *numberHertzToStringTransformer = [[NumberHertzToStringTransformer alloc] init]; NSValueTransformer *numberHertzToStringTransformer = [[NumberHertzToStringTransformer alloc] init];
[NSValueTransformer setValueTransformer:numberHertzToStringTransformer [NSValueTransformer setValueTransformer:numberHertzToStringTransformer
forName:@"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 { - (id)init {
self = [super init]; self = [super init];
@ -826,6 +835,14 @@ static AppController *kAppController = nil;
[kAppController showPathSuggester]; [kAppController showPathSuggester];
} }
- (void)showRubberbandSettings:(id)sender {
[preferencesController showRubberbandSettings:sender];
}
+ (void)globalShowRubberbandSettings {
[kAppController showRubberbandSettings:kAppController];
}
- (IBAction)checkForUpdates:(id)sender { - (IBAction)checkForUpdates:(id)sender {
[[SparkleBridge sharedStandardUpdaterController] checkForUpdates:[[NSApplication sharedApplication] delegate]]; [[SparkleBridge sharedStandardUpdaterController] checkForUpdates:[[NSApplication sharedApplication] delegate]];
} }

View file

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

View file

@ -16,6 +16,8 @@
static void * kDSPRubberbandNodeContext = &kDSPRubberbandNodeContext; static void * kDSPRubberbandNodeContext = &kDSPRubberbandNodeContext;
@implementation DSPRubberbandNode { @implementation DSPRubberbandNode {
BOOL enableRubberband;
RubberBandState ts; RubberBandState ts;
RubberBandOptions tslastoptions, tsnewoptions; RubberBandOptions tslastoptions, tsnewoptions;
size_t blockSize, toDrop, samplesBuffered, tschannels; size_t blockSize, toDrop, samplesBuffered, tschannels;
@ -44,6 +46,8 @@ static void * kDSPRubberbandNodeContext = &kDSPRubberbandNodeContext;
self = [super initWithController:c previous:p latency:latency]; self = [super initWithController:c previous:p latency:latency];
if(self) { if(self) {
NSUserDefaults *defaults = [[NSUserDefaultsController sharedUserDefaultsController] defaults]; NSUserDefaults *defaults = [[NSUserDefaultsController sharedUserDefaultsController] defaults];
enableRubberband = ![[defaults stringForKey:@"rubberbandEngine"] isEqualToString:@"disabled"];
pitch = [defaults doubleForKey:@"pitch"]; pitch = [defaults doubleForKey:@"pitch"];
tempo = [defaults doubleForKey:@"tempo"]; tempo = [defaults doubleForKey:@"tempo"];
@ -106,7 +110,9 @@ static void * kDSPRubberbandNodeContext = &kDSPRubberbandNodeContext;
tempo = [defaults doubleForKey:@"tempo"]; tempo = [defaults doubleForKey:@"tempo"];
tsapplynewoptions = YES; tsapplynewoptions = YES;
} else if([[keyPath substringToIndex:17] isEqualToString:@"values.rubberband"]) { } 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 options = [self getRubberbandOptions];
RubberBandOptions changed = options ^ tslastoptions; RubberBandOptions changed = options ^ tslastoptions;
if(changed) { if(changed) {
@ -348,7 +354,9 @@ static void * kDSPRubberbandNodeContext = &kDSPRubberbandNodeContext;
[self writeChunk:chunk]; [self writeChunk:chunk];
chunk = nil; chunk = nil;
} }
if(tsrestartengine) { if(!enableRubberband && ts) {
[self fullShutdown];
} else if(tsrestartengine) {
[self fullShutdown]; [self fullShutdown];
} else if(tsapplynewoptions) { } else if(tsapplynewoptions) {
[self partialInit]; [self partialInit];
@ -373,7 +381,8 @@ static void * kDSPRubberbandNodeContext = &kDSPRubberbandNodeContext;
return nil; return nil;
} }
if(!ts || memcmp(&inputFormat, &lastInputFormat, sizeof(inputFormat)) != 0 || if((enableRubberband && !ts) ||
memcmp(&inputFormat, &lastInputFormat, sizeof(inputFormat)) != 0 ||
inputChannelConfig != lastInputChannelConfig) { inputChannelConfig != lastInputChannelConfig) {
lastInputFormat = inputFormat; lastInputFormat = inputFormat;
lastInputChannelConfig = inputChannelConfig; 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); size_t samplesToProcess = rubberband_get_samples_required(ts);
if(samplesToProcess > blockSize) if(samplesToProcess > blockSize)
samplesToProcess = blockSize; samplesToProcess = blockSize;

View file

@ -21,27 +21,27 @@
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/> <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
<value key="minSize" type="size" width="750" height="200"/> <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"> <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"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<splitView dividerStyle="thin" vertical="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2123"> <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> <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"> <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"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="KWC-Ti-8KY"> <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"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<tableView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" alternatingRowBackgroundColors="YES" autosaveName="Playlist" rowHeight="18" headerView="1517" viewBased="YES" id="207" customClass="PlaylistView"> <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"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="6"/> <size key="intercellSpacing" width="3" height="6"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/> <color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns> <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="#"> <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="right" title="#">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333299" alpha="1" colorSpace="calibratedWhite"/> <color key="backgroundColor" white="0.33333299" alpha="1" colorSpace="calibratedWhite"/>
@ -54,11 +54,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="5N3-SP-Y8z"> <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"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="w5u-JQ-3Hf"> <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"> <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="right" title="Table View Cell" id="FMU-QZ-NdQ">
<font key="font" usesAppearanceFont="YES"/> <font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -95,7 +95,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="Vw5-xt-0vG"> <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"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ERj-i9-caa"> <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ERj-i9-caa">
@ -127,7 +127,7 @@
</tableCellView> </tableCellView>
</prototypeCellViews> </prototypeCellViews>
</tableColumn> </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"> <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Rating">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333299" alpha="1" colorSpace="calibratedWhite"/> <color key="backgroundColor" white="0.33333299" alpha="1" colorSpace="calibratedWhite"/>
@ -141,11 +141,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="ZCP-Dx-UBV"> <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"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="exY-Bg-Mjm"> <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"> <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="sdo-Sm-KPH">
<font key="font" usesAppearanceFont="YES"/> <font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -171,7 +171,7 @@
</binding> </binding>
</connections> </connections>
</tableColumn> </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"> <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Title">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333299" alpha="1" colorSpace="calibratedWhite"/> <color key="backgroundColor" white="0.33333299" alpha="1" colorSpace="calibratedWhite"/>
@ -185,11 +185,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="ZHl-H1-IIC"> <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"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="dQP-wC-mba"> <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"> <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="VVx-99-roJ">
<font key="font" usesAppearanceFont="YES"/> <font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <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"/> <binding destination="1689" name="fontSize" keyPath="values.fontSize" id="dJs-UO-m5r"/>
</connections> </connections>
</tableColumn> </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"> <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Artist">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@ -273,11 +273,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="gpC-Oe-Rog"> <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"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1WK-qN-Mgj"> <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"> <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="71l-3L-S3g">
<font key="font" usesAppearanceFont="YES"/> <font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -347,7 +347,7 @@
</binding> </binding>
</connections> </connections>
</tableColumn> </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"> <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Album">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@ -361,11 +361,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="1ed-gX-bct"> <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"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="nEt-s5-vRX"> <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"> <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="moV-3G-GpB">
<font key="font" usesAppearanceFont="YES"/> <font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -391,7 +391,7 @@
</binding> </binding>
</connections> </connections>
</tableColumn> </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"> <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="right" title="Length">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@ -404,11 +404,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="hhB-nv-e78"> <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"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="tHy-sM-HDB"> <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"> <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="Igo-5f-yim">
<font key="font" usesAppearanceFont="YES"/> <font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -435,7 +435,7 @@
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="1919"/> <binding destination="1689" name="fontSize" keyPath="values.fontSize" id="1919"/>
</connections> </connections>
</tableColumn> </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"> <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="right" title="Year">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@ -448,11 +448,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="q93-oh-i5T"> <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"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="bOi-LI-TDx"> <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"> <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="C2Q-qG-dwX">
<font key="font" usesAppearanceFont="YES"/> <font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -475,7 +475,7 @@
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="1921"/> <binding destination="1689" name="fontSize" keyPath="values.fontSize" id="1921"/>
</connections> </connections>
</tableColumn> </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"> <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Genre">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@ -489,11 +489,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="rRl-p9-Awr"> <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"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="yW6-2w-6mN"> <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"> <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="js2-sT-U4M">
<font key="font" usesAppearanceFont="YES"/> <font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -516,7 +516,7 @@
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="1922"/> <binding destination="1689" name="fontSize" keyPath="values.fontSize" id="1922"/>
</connections> </connections>
</tableColumn> </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="№"> <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="right" title="№">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@ -529,11 +529,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="hgh-VE-5kl"> <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"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="yEY-MI-d3o"> <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"> <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="tus-lr-RhS">
<font key="font" usesAppearanceFont="YES"/> <font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -556,7 +556,7 @@
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="1923"/> <binding destination="1689" name="fontSize" keyPath="values.fontSize" id="1923"/>
</connections> </connections>
</tableColumn> </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"> <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="right" title="Play Count">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@ -569,11 +569,11 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="aED-2V-LLM"> <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"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="tYz-2J-JRx"> <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"> <textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="HJL-T1-ufx">
<font key="font" usesAppearanceFont="YES"/> <font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -592,12 +592,12 @@
</tableCellView> </tableCellView>
</prototypeCellViews> </prototypeCellViews>
<connections> <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"> <binding destination="218" name="value" keyPath="arrangedObjects.playCount" id="6s9-cV-iYx">
<dictionary key="options"> <dictionary key="options">
<bool key="NSConditionallySetsEditable" value="YES"/> <bool key="NSConditionallySetsEditable" value="YES"/>
</dictionary> </dictionary>
</binding> </binding>
<binding destination="1689" name="fontSize" keyPath="values.fontSize" id="iAQ-bR-gvW"/>
</connections> </connections>
</tableColumn> </tableColumn>
<tableColumn identifier="path" editable="NO" width="64" minWidth="32" maxWidth="2048" hidden="YES" id="1712"> <tableColumn identifier="path" editable="NO" width="64" minWidth="32" maxWidth="2048" hidden="YES" id="1712">
@ -892,7 +892,7 @@
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
<tableHeaderView key="headerView" wantsLayer="YES" id="1517"> <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"/> <autoresizingMask key="autoresizingMask"/>
</tableHeaderView> </tableHeaderView>
</scrollView> </scrollView>
@ -905,7 +905,7 @@
</connections> </connections>
</splitView> </splitView>
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="778"> <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"> <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"/> <font key="font" metaFont="controlContent" size="11"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -2661,6 +2661,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"/> <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> <connections>
<action selector="changePitch:" target="705" id="bZt-zY-tjg"/> <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"/> <outlet property="_TempoSlider" destination="stI-oD-51s" id="HMq-pE-Ssc"/>
</connections> </connections>
</slider> </slider>
@ -2673,6 +2678,11 @@ Gw
</buttonCell> </buttonCell>
<connections> <connections>
<action selector="pressLock:" target="Ta5-Ik-jh9" id="HnF-AC-arz"/> <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> </connections>
</button> </button>
<slider horizontalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="stI-oD-51s" userLabel="Tempo Slider" customClass="TempoSlider"> <slider horizontalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="stI-oD-51s" userLabel="Tempo Slider" customClass="TempoSlider">
@ -2681,6 +2691,11 @@ Gw
<sliderCell key="cell" controlSize="small" continuous="YES" alignment="left" maxValue="100" doubleValue="40.824829049999998" tickMarkPosition="left" sliderType="linear" id="94j-7B-a8j"/> <sliderCell key="cell" controlSize="small" continuous="YES" alignment="left" maxValue="100" doubleValue="40.824829049999998" tickMarkPosition="left" sliderType="linear" id="94j-7B-a8j"/>
<connections> <connections>
<action selector="changeTempo:" target="705" id="8xu-Dm-ceG"/> <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"/> <outlet property="_PitchSlider" destination="6P4-yi-9TK" id="QaV-cx-2wf"/>
</connections> </connections>
</slider> </slider>
@ -2693,10 +2708,31 @@ Gw
</buttonCell> </buttonCell>
<connections> <connections>
<action selector="pressReset:" target="Ta5-Ik-jh9" id="zoi-N3-teA"/> <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> </connections>
</button> </button>
</subviews> </subviews>
<point key="canvasLocation" x="965" y="12"/> <point key="canvasLocation" x="964.5" y="12"/>
</customView> </customView>
<customObject id="1675" customClass="SpotlightWindowController"> <customObject id="1675" customClass="SpotlightWindowController">
<connections> <connections>

View file

@ -163,6 +163,7 @@
839B837F286D7F8D00F529EE /* NumberHertzToStringTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 839B837E286D7F8D00F529EE /* NumberHertzToStringTransformer.swift */; }; 839B837F286D7F8D00F529EE /* NumberHertzToStringTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 839B837E286D7F8D00F529EE /* NumberHertzToStringTransformer.swift */; };
839DA7CF274A2D4C001B18E5 /* NSDictionary+Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = 839DA7CE274A2D4C001B18E5 /* NSDictionary+Merge.m */; }; 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 */; }; 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, ); }; }; 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 */; }; 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, ); }; }; 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 = "<group>"; }; 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>"; }; 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>"; }; 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>"; }; 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>"; }; 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>"; }; 83AA7D00279EBC8200087AA4 /* libavcodec.61.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libavcodec.61.dylib; path = ThirdParty/ffmpeg/lib/libavcodec.61.dylib; sourceTree = "<group>"; };
@ -1413,6 +1416,8 @@
17E0D5F60F520F42005B6FED /* Transformers */ = { 17E0D5F60F520F42005B6FED /* Transformers */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
839E876C2D5DA0AC00A13526 /* RubberbandEngineTransformer.h */,
839E876D2D5DA0AC00A13526 /* RubberbandEngineTransformer.m */,
83A3B733283AE6AA00CC6593 /* ColorToValueTransformer.h */, 83A3B733283AE6AA00CC6593 /* ColorToValueTransformer.h */,
83A3B72F283AE6AA00CC6593 /* ColorToValueTransformer.m */, 83A3B72F283AE6AA00CC6593 /* ColorToValueTransformer.m */,
17E0D6120F520F87005B6FED /* FontSizetoLineHeightTransformer.h */, 17E0D6120F520F87005B6FED /* FontSizetoLineHeightTransformer.h */,
@ -2565,6 +2570,7 @@
838A337D2D06C14200D0D770 /* TempoSlider.m in Sources */, 838A337D2D06C14200D0D770 /* TempoSlider.m in Sources */,
838A337E2D06C14200D0D770 /* PitchSlider.m in Sources */, 838A337E2D06C14200D0D770 /* PitchSlider.m in Sources */,
838A33832D06CF4100D0D770 /* SpectrumViewCG.m in Sources */, 838A33832D06CF4100D0D770 /* SpectrumViewCG.m in Sources */,
839E876E2D5DA0AC00A13526 /* RubberbandEngineTransformer.m in Sources */,
838A33842D06CF4100D0D770 /* SpectrumWindowController.m in Sources */, 838A33842D06CF4100D0D770 /* SpectrumWindowController.m in Sources */,
83B61E2829A82A0200CD0580 /* LyricsWindowController.m in Sources */, 83B61E2829A82A0200CD0580 /* LyricsWindowController.m in Sources */,
56462EB20D634206000AB68C /* SpotlightPlaylistController.m in Sources */, 56462EB20D634206000AB68C /* SpotlightPlaylistController.m in Sources */,

View file

@ -16,8 +16,8 @@
<outlet property="notificationsView" destination="U4w-jw-ca5" id="wVJ-GH-A21"/> <outlet property="notificationsView" destination="U4w-jw-ca5" id="wVJ-GH-A21"/>
<outlet property="outputPane" destination="57" id="75"/> <outlet property="outputPane" destination="57" id="75"/>
<outlet property="playlistView" destination="231" id="244"/> <outlet property="playlistView" destination="231" id="244"/>
<outlet property="updatesView" destination="50" id="99"/>
<outlet property="rubberbandPane" destination="l4Y-NE-ezS" id="XTA-io-tov"/> <outlet property="rubberbandPane" destination="l4Y-NE-ezS" id="XTA-io-tov"/>
<outlet property="updatesView" destination="50" id="99"/>
</connections> </connections>
</customObject> </customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
@ -1212,9 +1212,9 @@
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
<connections> <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"> <dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineTransformer</string> <string key="NSValueTransformerName">RubberbandEngineR3Transformer</string>
</dictionary> </dictionary>
</binding> </binding>
</connections> </connections>
@ -1237,9 +1237,9 @@
<binding destination="rD7-3H-4FM" name="content" keyPath="arrangedObjects" id="vf7-6E-9v5"/> <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="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="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"> <dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineTransformer</string> <string key="NSValueTransformerName">RubberbandEngineR3Transformer</string>
</dictionary> </dictionary>
</binding> </binding>
<binding destination="52" name="selectedObject" keyPath="values.rubberbandTransients" previousBinding="O0z-2y-UPl" id="KLB-xJ-rb9"/> <binding destination="52" name="selectedObject" keyPath="values.rubberbandTransients" previousBinding="O0z-2y-UPl" id="KLB-xJ-rb9"/>
@ -1254,9 +1254,9 @@
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
<connections> <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"> <dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineTransformer</string> <string key="NSValueTransformerName">RubberbandEngineR3Transformer</string>
</dictionary> </dictionary>
</binding> </binding>
</connections> </connections>
@ -1279,9 +1279,9 @@
<binding destination="0rf-6O-MPh" name="content" keyPath="arrangedObjects" id="1Lg-gE-DdG"/> <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="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="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"> <dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineTransformer</string> <string key="NSValueTransformerName">RubberbandEngineR3Transformer</string>
</dictionary> </dictionary>
</binding> </binding>
<binding destination="52" name="selectedObject" keyPath="values.rubberbandDetector" previousBinding="kLx-xv-a24" id="MQw-g6-ogU"/> <binding destination="52" name="selectedObject" keyPath="values.rubberbandDetector" previousBinding="kLx-xv-a24" id="MQw-g6-ogU"/>
@ -1296,9 +1296,9 @@
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
<connections> <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"> <dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineTransformer</string> <string key="NSValueTransformerName">RubberbandEngineR3Transformer</string>
</dictionary> </dictionary>
</binding> </binding>
</connections> </connections>
@ -1321,9 +1321,9 @@
<binding destination="XkG-oY-ZCw" name="content" keyPath="arrangedObjects" id="15P-mE-WZ7"/> <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="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="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"> <dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineTransformer</string> <string key="NSValueTransformerName">RubberbandEngineR3Transformer</string>
</dictionary> </dictionary>
</binding> </binding>
<binding destination="52" name="selectedObject" keyPath="values.rubberbandPhase" previousBinding="VjJ-5K-hbu" id="e13-ei-jMs"/> <binding destination="52" name="selectedObject" keyPath="values.rubberbandPhase" previousBinding="VjJ-5K-hbu" id="e13-ei-jMs"/>
@ -1337,6 +1337,13 @@
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </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> </textField>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="9g3-eD-m8o" userLabel="Rubberband Window Size"> <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"/> <rect key="frame" x="186" y="112" width="164" height="25"/>
@ -1356,6 +1363,11 @@
<binding destination="qKv-dH-ulp" name="content" keyPath="arrangedObjects" id="Wph-cL-g56"/> <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="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="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"/> <binding destination="52" name="selectedObject" keyPath="values.rubberbandWindow" previousBinding="NOc-zw-E5B" id="jO4-fL-0ka"/>
</connections> </connections>
</popUpButton> </popUpButton>
@ -1368,9 +1380,9 @@
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </textFieldCell>
<connections> <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"> <dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineTransformer</string> <string key="NSValueTransformerName">RubberbandEngineR3Transformer</string>
</dictionary> </dictionary>
</binding> </binding>
</connections> </connections>
@ -1393,9 +1405,9 @@
<binding destination="7qK-HD-YRC" name="content" keyPath="arrangedObjects" id="glT-yT-Xy1"/> <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="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="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"> <dictionary key="options">
<string key="NSValueTransformerName">RubberbandEngineTransformer</string> <string key="NSValueTransformerName">RubberbandEngineR3Transformer</string>
</dictionary> </dictionary>
</binding> </binding>
<binding destination="52" name="selectedObject" keyPath="values.rubberbandSmoothing" previousBinding="OtE-O8-meo" id="jqW-KQ-IiR"/> <binding destination="52" name="selectedObject" keyPath="values.rubberbandSmoothing" previousBinding="OtE-O8-meo" id="jqW-KQ-IiR"/>
@ -1409,6 +1421,13 @@
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </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> </textField>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2Y7-n5-g43" userLabel="Rubberband Formant"> <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"/> <rect key="frame" x="186" y="64" width="164" height="25"/>
@ -1428,6 +1447,11 @@
<binding destination="5Cw-Q7-Y6w" name="content" keyPath="arrangedObjects" id="8PO-vs-kd4"/> <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="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="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"/> <binding destination="52" name="selectedObject" keyPath="values.rubberbandFormant" previousBinding="d3u-gj-AVL" id="jQQ-qt-LAC"/>
</connections> </connections>
</popUpButton> </popUpButton>
@ -1439,6 +1463,13 @@
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </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> </textField>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="FIB-Jj-YWd" userLabel="Rubberband Pitch"> <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"/> <rect key="frame" x="186" y="40" width="164" height="25"/>
@ -1458,6 +1489,11 @@
<binding destination="mFW-7h-5rd" name="content" keyPath="arrangedObjects" id="yqp-aH-3Vn"/> <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="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="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"/> <binding destination="52" name="selectedObject" keyPath="values.rubberbandPitch" previousBinding="ISf-ZT-bQj" id="O1U-TC-XPY"/>
</connections> </connections>
</popUpButton> </popUpButton>
@ -1469,6 +1505,13 @@
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell> </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> </textField>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="f50-KA-ekP" userLabel="Rubberband Channels"> <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"/> <rect key="frame" x="186" y="16" width="164" height="25"/>
@ -1488,6 +1531,11 @@
<binding destination="Dfm-y4-7ki" name="content" keyPath="arrangedObjects" id="bas-JW-4u4"/> <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="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="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"/> <binding destination="52" name="selectedObject" keyPath="values.rubberbandChannels" previousBinding="8Ja-Tu-lo2" id="Xyj-me-7r1"/>
</connections> </connections>
</popUpButton> </popUpButton>

View file

@ -27,9 +27,13 @@
[NSValueTransformer setValueTransformer:timeIntervalToStringTransformer [NSValueTransformer setValueTransformer:timeIntervalToStringTransformer
forName:@"TimeIntervalToStringTransformer"]; forName:@"TimeIntervalToStringTransformer"];
NSValueTransformer *rubberbandEngineTransformer = [[RubberbandEngineTransformer alloc] init]; NSValueTransformer *rubberbandEngineR3Transformer = [[RubberbandEngineR3Transformer alloc] init];
[NSValueTransformer setValueTransformer:rubberbandEngineTransformer [NSValueTransformer setValueTransformer:rubberbandEngineR3Transformer
forName:@"RubberbandEngineTransformer"]; forName:@"RubberbandEngineR3Transformer"];
NSValueTransformer *rubberbandEngineEnabledTransformer = [[RubberbandEngineEnabledTransformer alloc] init];
[NSValueTransformer setValueTransformer:rubberbandEngineEnabledTransformer
forName:@"RubberbandEngineEnabledTransformer"];
} }
+ (NSArray *)preferencePanes { + (NSArray *)preferencePanes {

View file

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

View file

@ -9,7 +9,7 @@
#import "RubberbandEngineTransformer.h" #import "RubberbandEngineTransformer.h"
@implementation RubberbandEngineTransformer @implementation RubberbandEngineR3Transformer
+ (Class)transformedValueClass { + (Class)transformedValueClass {
return [NSNumber class]; return [NSNumber class];
} }
@ -19,35 +19,62 @@
- (id)transformedValue:(id)value { - (id)transformedValue:(id)value {
if(value == nil) return @(YES); if(value == nil) return @(YES);
if([value isKindOfClass:[NSString class]]) { if([value isKindOfClass:[NSString class]]) {
NSString *stringValue = value; NSString *stringValue = value;
if([stringValue isEqualToString:@"finer"]) { if([stringValue isEqualToString:@"disabled"] ||
[stringValue isEqualToString:@"finer"]) {
return @(NO); return @(NO);
} }
} }
return @(YES); return @(YES);
} }
@end @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 { - (void)awakeFromNib {
[self removeObjects:[self arrangedObjects]]; [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(@"EngineFaster", nil, [NSBundle bundleForClass:[self class]], @""), @"preference": @"faster"}];
[self addObject:@{@"name": NSLocalizedStringFromTableInBundle(@"EngineFiner", nil, [NSBundle bundleForClass:[self class]], @""), @"preference": @"finer"}]; [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"; "Volume scale tag only" = "Volume scale tag only";
"Zero Order Hold" = "Zero Order Hold"; "Zero Order Hold" = "Zero Order Hold";
"Rubber Band" = "Rubber Band"; "Rubber Band" = "Rubber Band";
"EngineDisabled" = "Disabled";
"EngineFaster" = "Faster"; "EngineFaster" = "Faster";
"EngineFiner" = "Finer"; "EngineFiner" = "Finer";
"TransientsCrisp" = "Crisp"; "TransientsCrisp" = "Crisp";

View file

@ -83,6 +83,7 @@
"Zero Order Hold" = "Retención de orden cero"; "Zero Order Hold" = "Retención de orden cero";
"Rubber Band" = "Rubber Band"; "Rubber Band" = "Rubber Band";
"EngineDisabled" = "Desactivado";
"EngineFaster" = "Más rápido"; "EngineFaster" = "Más rápido";
"EngineFiner" = "Mejor calidad"; "EngineFiner" = "Mejor calidad";
"TransientsCrisp" = "Definidos"; "TransientsCrisp" = "Definidos";

View file

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

View file

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

View file

@ -23,5 +23,6 @@
- (void)show; - (void)show;
- (void)showPathSuggester; - (void)showPathSuggester;
- (void)showRubberbandSettings;
@end @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. // Close on Esc pressed.
- (void)cancelOperation:(id)sender { - (void)cancelOperation:(id)sender {
[self close]; [self close];

View file

@ -10,9 +10,17 @@
#import "AppController.h" #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) { void showCrashlyticsConsent(NSWindow *window) {
BOOL askedConsent = [[NSUserDefaults standardUserDefaults] boolForKey:@"crashlyticsAskedConsent"]; BOOL askedConsent = [[NSUserDefaults standardUserDefaults] boolForKey:@"crashlyticsAskedConsent"];
if(!askedConsent) { if(!askedConsent) {
[[NSUserDefaults standardUserDefaults] registerDefaults:@{ @"rubberbandEngine": @"disabled" }];
[window orderFront:window]; [window orderFront:window];
NSAlert *alert = [[NSAlert alloc] init]; NSAlert *alert = [[NSAlert alloc] init];
@ -28,6 +36,8 @@ void showCrashlyticsConsent(NSWindow *window) {
}]; }];
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"crashlyticsAskedConsent"]; [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"crashlyticsAskedConsent"];
} else {
[[NSUserDefaults standardUserDefaults] registerDefaults:@{ @"rubberbandEngine": @"faster" }];
} }
} }