Compare commits
110 commits
main
...
swiftingly
Author | SHA1 | Date | |
---|---|---|---|
|
10464b6761 | ||
|
73c4360b1d | ||
|
da21cd7341 | ||
|
27478e5df2 | ||
|
d739e68e8e | ||
|
4ce180fb2a | ||
|
3c0ccd9d46 | ||
|
b24b9744c1 | ||
|
61778b7165 | ||
|
7d26150c26 | ||
|
35400e1320 | ||
3d94978f82 | |||
fe7c424843 | |||
|
1a4c140708 | ||
|
29c070a616 | ||
|
8b7418857d | ||
|
a35459719d | ||
|
802a86a3d8 | ||
|
f8d2837c4e | ||
|
112366c850 | ||
|
a1a8607a84 | ||
|
690153f561 | ||
|
b33e3ff6b3 | ||
|
bedfac4e33 | ||
|
66102a6cda | ||
|
b36ebfe740 | ||
|
2ed78a0639 | ||
|
ae019409c5 | ||
|
66262c2a71 | ||
|
f567750d56 | ||
|
2a99bb076f | ||
|
dd65665990 | ||
|
c477fbf553 | ||
|
03b3b43cfe | ||
|
9d8e278a57 | ||
|
ed9e352543 | ||
|
16fdc1de6a | ||
|
fc37e96099 | ||
|
03a2c0c16e | ||
|
206a3e42e7 | ||
|
6f6b5d6986 | ||
|
038b0b8067 | ||
|
a57827f4da | ||
|
39be3ab962 | ||
|
17df6cde4f | ||
|
2945de085d | ||
|
c2ef7d0e61 | ||
|
96a7255779 | ||
|
050aaaf852 | ||
|
5f52a4be81 | ||
|
5f2335b796 | ||
|
d33475953e | ||
|
7a56447271 | ||
|
b86ec3340f | ||
|
36c82a61e7 | ||
|
ab13b66755 | ||
|
86de03a1ab | ||
|
0f923e6072 | ||
|
cb2ce5675a | ||
|
1f56e5ef5a | ||
|
2663b5007d | ||
|
72572c9c7f | ||
|
3de7a34eb8 | ||
|
86d8f04966 | ||
|
b55955ef1c | ||
|
8e1175bbd4 | ||
|
62e2880b49 | ||
|
1ac3e5cd22 | ||
|
d2eb4af3d5 | ||
|
50b7390181 | ||
|
abf80c19ac | ||
|
b21a02fe1b | ||
|
dd35639174 | ||
|
43433c244e | ||
|
870a5afed7 | ||
|
b9ef5853d6 | ||
|
1a9c73d166 | ||
|
ec393d186a | ||
|
dfb773e9cb | ||
|
438b142558 | ||
|
26a63e85b7 | ||
|
ccbeaf16dc | ||
|
cc5de69e9f | ||
|
80adb85b36 | ||
|
f3f3d436ba | ||
be6453e048 | |||
|
8af32e8d2e | ||
|
5b6dacd29c | ||
|
ff44bc4d34 | ||
|
62824a94bd | ||
|
903bc9cba5 | ||
|
f274a8ef73 | ||
0317f2a649 | |||
b484a0be44 | |||
|
36a9411b14 | ||
64fefce18d | |||
|
3a6e41cabd | ||
|
632ba36f13 | ||
|
271b9b34d0 | ||
|
8d031f394b | ||
|
f2c6ae39c3 | ||
|
bb95270747 | ||
|
aa36e3ce10 | ||
|
da8a4dffdf | ||
a4692b80a4 | |||
de5cce8351 | |||
|
05da7450da | ||
|
2b8156e86c | ||
|
d59b5335e9 | ||
|
bc9e7b5d67 |
611 changed files with 35710 additions and 27664 deletions
5
.github/workflows/debug.yml
vendored
5
.github/workflows/debug.yml
vendored
|
@ -11,7 +11,7 @@ on:
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build Universal Cog.app
|
name: Build Universal Cog.app
|
||||||
runs-on: macos-11
|
runs-on: macos-12
|
||||||
env:
|
env:
|
||||||
XCODE_DERIVEDDATA_PATH: build
|
XCODE_DERIVEDDATA_PATH: build
|
||||||
steps:
|
steps:
|
||||||
|
@ -19,6 +19,9 @@ jobs:
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
|
- name: Unpack libraries
|
||||||
|
run: >
|
||||||
|
cd ThirdParty && tar xvf libraries.tar.xz
|
||||||
- name: Run xcodebuild
|
- name: Run xcodebuild
|
||||||
run: >
|
run: >
|
||||||
xcodebuild
|
xcodebuild
|
||||||
|
|
40
.gitignore
vendored
40
.gitignore
vendored
|
@ -8,4 +8,42 @@ xcuserdata
|
||||||
# User-specific xcconfig files
|
# User-specific xcconfig files
|
||||||
Xcode-config/DEVELOPMENT_TEAM.xcconfig
|
Xcode-config/DEVELOPMENT_TEAM.xcconfig
|
||||||
|
|
||||||
Cog.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
|
# Plist derived from template at build time
|
||||||
|
/Info.plist
|
||||||
|
|
||||||
|
# This indicates the libraries are up to date
|
||||||
|
/ThirdParty/libraries.updated
|
||||||
|
|
||||||
|
# Temporary file to indicate libraries are being extracted by one process
|
||||||
|
/ThirdParty/libraries.extracting
|
||||||
|
|
||||||
|
# The project will unpack these before building, if necessary
|
||||||
|
/ThirdParty/BASS/libbass.dylib
|
||||||
|
/ThirdParty/BASS/libbassflac.dylib
|
||||||
|
/ThirdParty/BASS/libbassmidi.dylib
|
||||||
|
/ThirdParty/BASS/libbassopus.dylib
|
||||||
|
/ThirdParty/BASS/libbasswv.dylib
|
||||||
|
/ThirdParty/avif/lib/libaom.a
|
||||||
|
/ThirdParty/avif/lib/libavif.a
|
||||||
|
/ThirdParty/fdk-aac/lib/libfdk-aac.2.dylib
|
||||||
|
/ThirdParty/fdk-aac/lib/libfdk-aac.a
|
||||||
|
/ThirdParty/fdk-aac/lib/libfdk-aac.dylib
|
||||||
|
/ThirdParty/fdk-aac/lib/libfdk-aac.la
|
||||||
|
/ThirdParty/fdk-aac/lib/pkgconfig/fdk-aac.pc
|
||||||
|
/ThirdParty/ffmpeg/lib/libavcodec.59.dylib
|
||||||
|
/ThirdParty/ffmpeg/lib/libavformat.59.dylib
|
||||||
|
/ThirdParty/ffmpeg/lib/libavutil.57.dylib
|
||||||
|
/ThirdParty/ffmpeg/lib/libswresample.4.dylib
|
||||||
|
/ThirdParty/flac/lib/libFLAC.8.dylib
|
||||||
|
/ThirdParty/libid3tag/lib/libid3tag.a
|
||||||
|
/ThirdParty/libmad/lib/libmad.a
|
||||||
|
/ThirdParty/libopenmpt/lib/libopenmpt.a
|
||||||
|
/ThirdParty/libopenmpt_old/lib/libopenmpt.old.a
|
||||||
|
/ThirdParty/libvgm/lib/libvgm-emu.a
|
||||||
|
/ThirdParty/libvgm/lib/libvgm-player.a
|
||||||
|
/ThirdParty/libvgm/lib/libvgm-utils.a
|
||||||
|
/ThirdParty/mpg123/lib/libmpg123.0.dylib
|
||||||
|
/ThirdParty/ogg/lib/libogg.0.dylib
|
||||||
|
/ThirdParty/opus/lib/libopus.0.dylib
|
||||||
|
/ThirdParty/opusfile/lib/libopusfile.0.dylib
|
||||||
|
/ThirdParty/speex/libspeex.a
|
||||||
|
|
|
@ -2,11 +2,12 @@
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
@class FileTreeViewController;
|
|
||||||
@class PlaybackController;
|
@class PlaybackController;
|
||||||
@class PlaylistController;
|
@class PlaylistController;
|
||||||
@class PlaylistView;
|
@class PlaylistView;
|
||||||
@class PlaylistLoader;
|
@class PlaylistLoader;
|
||||||
|
@class SUUpdater;
|
||||||
|
@class PreferencesController;
|
||||||
|
|
||||||
@interface AppController : NSObject {
|
@interface AppController : NSObject {
|
||||||
IBOutlet NSObjectController *currentEntryController;
|
IBOutlet NSObjectController *currentEntryController;
|
||||||
|
@ -18,7 +19,6 @@
|
||||||
|
|
||||||
IBOutlet NSWindow *mainWindow;
|
IBOutlet NSWindow *mainWindow;
|
||||||
IBOutlet NSWindow *miniWindow;
|
IBOutlet NSWindow *miniWindow;
|
||||||
IBOutlet NSSplitView *mainView;
|
|
||||||
|
|
||||||
IBOutlet NSSegmentedControl *playbackButtons;
|
IBOutlet NSSegmentedControl *playbackButtons;
|
||||||
IBOutlet NSButton *fileButton;
|
IBOutlet NSButton *fileButton;
|
||||||
|
@ -45,7 +45,9 @@
|
||||||
|
|
||||||
IBOutlet NSWindowController *spotlightWindowController;
|
IBOutlet NSWindowController *spotlightWindowController;
|
||||||
|
|
||||||
IBOutlet FileTreeViewController *fileTreeViewController;
|
IBOutlet SUUpdater *updater;
|
||||||
|
|
||||||
|
IBOutlet PreferencesController *preferencesController;
|
||||||
|
|
||||||
NSOperationQueue *queue; // Since we are the app delegate, we take care of the op queue
|
NSOperationQueue *queue; // Since we are the app delegate, we take care of the op queue
|
||||||
|
|
||||||
|
@ -68,6 +70,8 @@
|
||||||
- (IBAction)openKofiPage:(id)sender;
|
- (IBAction)openKofiPage:(id)sender;
|
||||||
- (IBAction)openPatreonPage:(id)sender;
|
- (IBAction)openPatreonPage:(id)sender;
|
||||||
|
|
||||||
|
- (IBAction)privacyPolicy:(id)sender;
|
||||||
|
|
||||||
- (IBAction)feedback:(id)sender;
|
- (IBAction)feedback:(id)sender;
|
||||||
|
|
||||||
- (void)initDefaults;
|
- (void)initDefaults;
|
||||||
|
@ -97,6 +101,11 @@
|
||||||
- (IBAction)toggleMiniMode:(id)sender;
|
- (IBAction)toggleMiniMode:(id)sender;
|
||||||
- (IBAction)toggleToolbarStyle:(id)sender;
|
- (IBAction)toggleToolbarStyle:(id)sender;
|
||||||
|
|
||||||
|
- (BOOL)pathSuggesterEmpty;
|
||||||
|
+ (BOOL)globalPathSuggesterEmpty;
|
||||||
|
- (void)showPathSuggester;
|
||||||
|
+ (void)globalShowPathSuggester;
|
||||||
|
|
||||||
@property NSWindow *mainWindow;
|
@property NSWindow *mainWindow;
|
||||||
@property NSWindow *miniWindow;
|
@property NSWindow *miniWindow;
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,7 @@
|
||||||
#import "AppController.h"
|
#import "AppController.h"
|
||||||
#import "Cog-Swift.h"
|
#import "Cog-Swift.h"
|
||||||
#import "FileTreeController.h"
|
|
||||||
#import "FileTreeOutlineView.h"
|
|
||||||
#import "FileTreeViewController.h"
|
|
||||||
#import "FontSizetoLineHeightTransformer.h"
|
#import "FontSizetoLineHeightTransformer.h"
|
||||||
#import "OpenURLPanel.h"
|
#import "OpenURLPanel.h"
|
||||||
#import "PathNode.h"
|
|
||||||
#import "PlaybackController.h"
|
#import "PlaybackController.h"
|
||||||
#import "PlaylistController.h"
|
#import "PlaylistController.h"
|
||||||
#import "PlaylistEntry.h"
|
#import "PlaylistEntry.h"
|
||||||
|
@ -28,12 +24,18 @@
|
||||||
#import "Shortcuts.h"
|
#import "Shortcuts.h"
|
||||||
#import <MASShortcut/Shortcut.h>
|
#import <MASShortcut/Shortcut.h>
|
||||||
|
|
||||||
|
#import <Sparkle/Sparkle.h>
|
||||||
|
|
||||||
|
#import "PreferencesController.h"
|
||||||
|
|
||||||
@import Firebase;
|
@import Firebase;
|
||||||
|
|
||||||
void *kAppControllerContext = &kAppControllerContext;
|
void *kAppControllerContext = &kAppControllerContext;
|
||||||
|
|
||||||
BOOL kAppControllerShuttingDown = NO;
|
BOOL kAppControllerShuttingDown = NO;
|
||||||
|
|
||||||
|
static AppController *kAppController = nil;
|
||||||
|
|
||||||
@implementation AppController {
|
@implementation AppController {
|
||||||
BOOL _isFullToolbarStyle;
|
BOOL _isFullToolbarStyle;
|
||||||
}
|
}
|
||||||
|
@ -63,6 +65,10 @@ BOOL kAppControllerShuttingDown = NO;
|
||||||
NSValueTransformer *totalTimeTransformer = [[TotalTimeTransformer alloc] init];
|
NSValueTransformer *totalTimeTransformer = [[TotalTimeTransformer alloc] init];
|
||||||
[NSValueTransformer setValueTransformer:totalTimeTransformer
|
[NSValueTransformer setValueTransformer:totalTimeTransformer
|
||||||
forName:@"TotalTimeTransformer"];
|
forName:@"TotalTimeTransformer"];
|
||||||
|
|
||||||
|
NSValueTransformer *numberHertzToStringTransformer = [[NumberHertzToStringTransformer alloc] init];
|
||||||
|
[NSValueTransformer setValueTransformer:numberHertzToStringTransformer
|
||||||
|
forName:@"NumberHertzToStringTransformer"];
|
||||||
}
|
}
|
||||||
- (id)init {
|
- (id)init {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
|
@ -70,6 +76,8 @@ BOOL kAppControllerShuttingDown = NO;
|
||||||
[self initDefaults];
|
[self initDefaults];
|
||||||
|
|
||||||
queue = [[NSOperationQueue alloc] init];
|
queue = [[NSOperationQueue alloc] init];
|
||||||
|
|
||||||
|
kAppController = self;
|
||||||
}
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
@ -144,10 +152,20 @@ BOOL kAppControllerShuttingDown = NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)awakeFromNib {
|
- (void)awakeFromNib {
|
||||||
|
#if DEBUG
|
||||||
|
[[NSUserDefaults standardUserDefaults] registerDefaults:@{ @"NSApplicationCrashOnExceptions": @(NO) }];
|
||||||
|
#else
|
||||||
[[NSUserDefaults standardUserDefaults] registerDefaults:@{ @"NSApplicationCrashOnExceptions": @(YES) }];
|
[[NSUserDefaults standardUserDefaults] registerDefaults:@{ @"NSApplicationCrashOnExceptions": @(YES) }];
|
||||||
|
#endif
|
||||||
|
|
||||||
[FIRApp configure];
|
[FIRApp configure];
|
||||||
[FIRAnalytics setAnalyticsCollectionEnabled:YES];
|
|
||||||
|
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.crashlyticsConsented" options:(NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew) context:kAppControllerContext];
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
// Prevent updates automatically in debug builds
|
||||||
|
[updater setAutomaticallyChecksForUpdates:NO];
|
||||||
|
#endif
|
||||||
|
|
||||||
[[totalTimeField cell] setBackgroundStyle:NSBackgroundStyleRaised];
|
[[totalTimeField cell] setBackgroundStyle:NSBackgroundStyleRaised];
|
||||||
|
|
||||||
|
@ -227,50 +245,11 @@ BOOL kAppControllerShuttingDown = NO;
|
||||||
[self setFloatingMiniWindow:[[NSUserDefaults standardUserDefaults]
|
[self setFloatingMiniWindow:[[NSUserDefaults standardUserDefaults]
|
||||||
boolForKey:@"floatingMiniWindow"]];
|
boolForKey:@"floatingMiniWindow"]];
|
||||||
|
|
||||||
// We need file tree view to restore its state here
|
|
||||||
// so attempt to access file tree view controller's root view
|
|
||||||
// to force it to read nib and create file tree view for us
|
|
||||||
//
|
|
||||||
// TODO: there probably is a more elegant way to do all this
|
|
||||||
// but i'm too stupid/tired to figure it out now
|
|
||||||
[fileTreeViewController view];
|
|
||||||
|
|
||||||
FileTreeOutlineView *outlineView = [fileTreeViewController outlineView];
|
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(nodeExpanded:) name:NSOutlineViewItemDidExpandNotification object:outlineView];
|
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(nodeCollapsed:) name:NSOutlineViewItemDidCollapseNotification object:outlineView];
|
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateDockMenu:) name:CogPlaybackDidBeginNotficiation object:nil];
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateDockMenu:) name:CogPlaybackDidBeginNotficiation object:nil];
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateDockMenu:) name:CogPlaybackDidStopNotficiation object:nil];
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateDockMenu:) name:CogPlaybackDidStopNotficiation object:nil];
|
||||||
|
|
||||||
[self updateDockMenu:nil];
|
[self updateDockMenu:nil];
|
||||||
|
|
||||||
NSArray *expandedNodesArray = [[NSUserDefaults standardUserDefaults] valueForKey:@"fileTreeViewExpandedNodes"];
|
|
||||||
|
|
||||||
if(expandedNodesArray) {
|
|
||||||
expandedNodes = [[NSMutableSet alloc] initWithArray:expandedNodesArray];
|
|
||||||
} else {
|
|
||||||
expandedNodes = [[NSMutableSet alloc] init];
|
|
||||||
}
|
|
||||||
|
|
||||||
DLog(@"Nodes to expand: %@", [expandedNodes description]);
|
|
||||||
|
|
||||||
DLog(@"Num of rows: %ld", [outlineView numberOfRows]);
|
|
||||||
|
|
||||||
if(!outlineView) {
|
|
||||||
DLog(@"outlineView is NULL!");
|
|
||||||
}
|
|
||||||
|
|
||||||
[outlineView reloadData];
|
|
||||||
|
|
||||||
for(NSInteger i = 0; i < [outlineView numberOfRows]; i++) {
|
|
||||||
PathNode *pn = [outlineView itemAtRow:i];
|
|
||||||
NSString *str = [[pn URL] absoluteString];
|
|
||||||
|
|
||||||
if([expandedNodes containsObject:str]) {
|
|
||||||
[outlineView expandItem:pn];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[self addObserver:self
|
[self addObserver:self
|
||||||
forKeyPath:@"playlistController.currentEntry"
|
forKeyPath:@"playlistController.currentEntry"
|
||||||
options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew
|
options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew
|
||||||
|
@ -284,8 +263,12 @@ BOOL kAppControllerShuttingDown = NO;
|
||||||
if(context != kAppControllerContext) {
|
if(context != kAppControllerContext) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if([keyPath isEqualToString:@"playlistController.currentEntry"]) {
|
if([keyPath isEqualToString:@"values.crashlyticsConsented"]) {
|
||||||
|
BOOL enabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"crashlyticsConsented"];
|
||||||
|
[[FIRCrashlytics crashlytics] setCrashlyticsCollectionEnabled:enabled];
|
||||||
|
[FIRAnalytics setAnalyticsCollectionEnabled:enabled];
|
||||||
|
} else if([keyPath isEqualToString:@"playlistController.currentEntry"]) {
|
||||||
PlaylistEntry *entry = playlistController.currentEntry;
|
PlaylistEntry *entry = playlistController.currentEntry;
|
||||||
NSString *appTitle = NSLocalizedString(@"CogTitle", @"");
|
NSString *appTitle = NSLocalizedString(@"CogTitle", @"");
|
||||||
if(!entry) {
|
if(!entry) {
|
||||||
|
@ -354,20 +337,6 @@ BOOL kAppControllerShuttingDown = NO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)nodeExpanded:(NSNotification *)notification {
|
|
||||||
PathNode *node = [[notification userInfo] objectForKey:@"NSObject"];
|
|
||||||
NSString *url = [[node URL] absoluteString];
|
|
||||||
|
|
||||||
[expandedNodes addObject:url];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)nodeCollapsed:(NSNotification *)notification {
|
|
||||||
PathNode *node = [[notification userInfo] objectForKey:@"NSObject"];
|
|
||||||
NSString *url = [[node URL] absoluteString];
|
|
||||||
|
|
||||||
[expandedNodes removeObject:url];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
|
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
|
||||||
if(playbackController.progressOverall) {
|
if(playbackController.progressOverall) {
|
||||||
[playbackController.progressOverall addObserver:self forKeyPath:@"finished" options:0 context:kAppControllerContext];
|
[playbackController.progressOverall addObserver:self forKeyPath:@"finished" options:0 context:kAppControllerContext];
|
||||||
|
@ -441,7 +410,6 @@ BOOL kAppControllerShuttingDown = NO;
|
||||||
|
|
||||||
DLog(@"Saving expanded nodes: %@", [expandedNodes description]);
|
DLog(@"Saving expanded nodes: %@", [expandedNodes description]);
|
||||||
|
|
||||||
[[NSUserDefaults standardUserDefaults] setValue:[expandedNodes allObjects] forKey:@"fileTreeViewExpandedNodes"];
|
|
||||||
// Workaround window not restoring it's size and position.
|
// Workaround window not restoring it's size and position.
|
||||||
[miniWindow setContentSize:NSMakeSize(miniWindow.frame.size.width, 1)];
|
[miniWindow setContentSize:NSMakeSize(miniWindow.frame.size.width, 1)];
|
||||||
[miniWindow saveFrameUsingName:@"Mini Window"];
|
[miniWindow saveFrameUsingName:@"Mini Window"];
|
||||||
|
@ -493,6 +461,10 @@ BOOL kAppControllerShuttingDown = NO;
|
||||||
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"https://www.patreon.com/kode54"]];
|
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"https://www.patreon.com/kode54"]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (IBAction)privacyPolicy:(id)sender {
|
||||||
|
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"https://www.iubenda.com/privacy-policy/59859310"]];
|
||||||
|
}
|
||||||
|
|
||||||
- (IBAction)feedback:(id)sender {
|
- (IBAction)feedback:(id)sender {
|
||||||
NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
|
NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
|
||||||
|
|
||||||
|
@ -712,4 +684,20 @@ BOOL kAppControllerShuttingDown = NO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)pathSuggesterEmpty {
|
||||||
|
return [playlistController pathSuggesterEmpty];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (BOOL)globalPathSuggesterEmpty {
|
||||||
|
return [kAppController pathSuggesterEmpty];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)showPathSuggester {
|
||||||
|
[preferencesController showPathSuggester:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (void)globalShowPathSuggester {
|
||||||
|
[kAppController showPathSuggester];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -617,12 +617,15 @@ NSDictionary *makeRGInfo(PlaylistEntry *pe) {
|
||||||
|
|
||||||
// Delay the action until this function has returned to the audio thread
|
// Delay the action until this function has returned to the audio thread
|
||||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_MSEC), dispatch_get_main_queue(), ^{
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_MSEC), dispatch_get_main_queue(), ^{
|
||||||
[[FIRCrashlytics crashlytics] logWithFormat:@"Updating UI with track: %@", pe.url];
|
if(pe) {
|
||||||
|
[[FIRCrashlytics crashlytics] logWithFormat:@"Updating UI with track: %@", pe.url];
|
||||||
|
}
|
||||||
|
|
||||||
[self->playlistController setCurrentEntry:pe];
|
[self->playlistController setCurrentEntry:pe];
|
||||||
|
|
||||||
if(self->_eq)
|
if(pe && self->_eq) {
|
||||||
equalizerApplyGenre(self->_eq, [pe genre]);
|
equalizerApplyGenre(self->_eq, [pe genre]);
|
||||||
|
}
|
||||||
|
|
||||||
self->lastPosition = -10;
|
self->lastPosition = -10;
|
||||||
|
|
||||||
|
@ -631,7 +634,9 @@ NSDictionary *makeRGInfo(PlaylistEntry *pe) {
|
||||||
[self removeHDCD:nil];
|
[self removeHDCD:nil];
|
||||||
});
|
});
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:CogPlaybackDidBeginNotficiation object:pe];
|
if(pe) {
|
||||||
|
[[NSNotificationCenter defaultCenter] postNotificationName:CogPlaybackDidBeginNotficiation object:pe];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)audioPlayer:(AudioPlayer *)player didChangeStatus:(NSNumber *)s userInfo:(id)userInfo {
|
- (void)audioPlayer:(AudioPlayer *)player didChangeStatus:(NSNumber *)s userInfo:(id)userInfo {
|
||||||
|
|
|
@ -13,5 +13,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (NSArray *)urlsForContainerURL:(NSURL *)url;
|
+ (NSArray *)urlsForContainerURL:(NSURL *)url;
|
||||||
|
+ (NSArray *)dependencyUrlsForContainerURL:(NSURL *)url;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -18,4 +18,10 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+ (NSArray *)dependencyUrlsForContainerURL:(NSURL *)url {
|
||||||
|
@autoreleasepool {
|
||||||
|
return [[PluginController sharedPluginController] dependencyUrlsForContainerURL:url];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -16,13 +16,7 @@
|
||||||
#import <CoreAudio/CoreAudio.h>
|
#import <CoreAudio/CoreAudio.h>
|
||||||
#import <CoreAudio/CoreAudioTypes.h>
|
#import <CoreAudio/CoreAudioTypes.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#import <atomic>
|
|
||||||
using std::atomic_int;
|
|
||||||
using std::atomic_bool;
|
|
||||||
#else
|
|
||||||
#import <stdatomic.h>
|
#import <stdatomic.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
@class BufferChain;
|
@class BufferChain;
|
||||||
@class OutputNode;
|
@class OutputNode;
|
||||||
|
@ -39,6 +33,8 @@ using std::atomic_bool;
|
||||||
id nextStreamUserInfo;
|
id nextStreamUserInfo;
|
||||||
NSDictionary *nextStreamRGInfo;
|
NSDictionary *nextStreamRGInfo;
|
||||||
|
|
||||||
|
id previousUserInfo; // Track currently last heard track for play counts
|
||||||
|
|
||||||
id delegate;
|
id delegate;
|
||||||
|
|
||||||
BOOL outputLaunched;
|
BOOL outputLaunched;
|
||||||
|
@ -116,6 +112,7 @@ using std::atomic_bool;
|
||||||
- (void)setShouldContinue:(BOOL)s;
|
- (void)setShouldContinue:(BOOL)s;
|
||||||
//- (BufferChain *)bufferChain;
|
//- (BufferChain *)bufferChain;
|
||||||
- (void)launchOutputThread;
|
- (void)launchOutputThread;
|
||||||
|
- (BOOL)selectNextBuffer;
|
||||||
- (void)endOfInputPlayed;
|
- (void)endOfInputPlayed;
|
||||||
- (void)reportPlayCount;
|
- (void)reportPlayCount;
|
||||||
- (void)sendDelegateMethod:(SEL)selector withVoid:(void *)obj waitUntilDone:(BOOL)wait;
|
- (void)sendDelegateMethod:(SEL)selector withVoid:(void *)obj waitUntilDone:(BOOL)wait;
|
||||||
|
|
|
@ -62,9 +62,11 @@
|
||||||
[self waitUntilCallbacksExit];
|
[self waitUntilCallbacksExit];
|
||||||
if(output) {
|
if(output) {
|
||||||
[output setShouldContinue:NO];
|
[output setShouldContinue:NO];
|
||||||
output = nil;
|
[output close];
|
||||||
|
}
|
||||||
|
if(!output) {
|
||||||
|
output = [[OutputNode alloc] initWithController:self previous:nil];
|
||||||
}
|
}
|
||||||
output = [[OutputNode alloc] initWithController:self previous:nil];
|
|
||||||
[output setup];
|
[output setup];
|
||||||
[output setVolume:volume];
|
[output setVolume:volume];
|
||||||
@synchronized(chainQueue) {
|
@synchronized(chainQueue) {
|
||||||
|
@ -83,7 +85,7 @@
|
||||||
bufferChain = [[BufferChain alloc] initWithController:self];
|
bufferChain = [[BufferChain alloc] initWithController:self];
|
||||||
[self notifyStreamChanged:userInfo];
|
[self notifyStreamChanged:userInfo];
|
||||||
|
|
||||||
while(![bufferChain open:url withOutputFormat:[output format] withOutputConfig:[output config] withUserInfo:userInfo withRGInfo:rgi]) {
|
while(![bufferChain open:url withUserInfo:userInfo withRGInfo:rgi]) {
|
||||||
bufferChain = nil;
|
bufferChain = nil;
|
||||||
|
|
||||||
[self requestNextStream:userInfo];
|
[self requestNextStream:userInfo];
|
||||||
|
@ -111,6 +113,7 @@
|
||||||
outputLaunched = NO;
|
outputLaunched = NO;
|
||||||
startedPaused = paused;
|
startedPaused = paused;
|
||||||
initialBufferFilled = NO;
|
initialBufferFilled = NO;
|
||||||
|
previousUserInfo = userInfo;
|
||||||
|
|
||||||
[bufferChain launchThreads];
|
[bufferChain launchThreads];
|
||||||
|
|
||||||
|
@ -133,6 +136,10 @@
|
||||||
bufferChain = nil;
|
bufferChain = nil;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(output) {
|
||||||
|
[output setShouldContinue:NO];
|
||||||
|
[output close];
|
||||||
|
}
|
||||||
output = nil;
|
output = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,7 +226,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)restartPlaybackAtCurrentPosition {
|
- (void)restartPlaybackAtCurrentPosition {
|
||||||
[self sendDelegateMethod:@selector(audioPlayer:restartPlaybackAtCurrentPosition:) withObject:[bufferChain userInfo] waitUntilDone:NO];
|
[self sendDelegateMethod:@selector(audioPlayer:restartPlaybackAtCurrentPosition:) withObject:previousUserInfo waitUntilDone:NO];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)pushInfo:(NSDictionary *)info toTrack:(id)userInfo {
|
- (void)pushInfo:(NSDictionary *)info toTrack:(id)userInfo {
|
||||||
|
@ -290,6 +297,8 @@
|
||||||
|
|
||||||
- (BOOL)endOfInputReached:(BufferChain *)sender // Sender is a BufferChain
|
- (BOOL)endOfInputReached:(BufferChain *)sender // Sender is a BufferChain
|
||||||
{
|
{
|
||||||
|
previousUserInfo = [sender userInfo];
|
||||||
|
|
||||||
BufferChain *newChain = nil;
|
BufferChain *newChain = nil;
|
||||||
|
|
||||||
if(atomic_load_explicit(&resettingNow, memory_order_relaxed))
|
if(atomic_load_explicit(&resettingNow, memory_order_relaxed))
|
||||||
|
@ -369,7 +378,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if(pathsEqual || ([[nextStream scheme] isEqualToString:[[lastChain streamURL] scheme]] && (([nextStream host] == nil && [[lastChain streamURL] host] == nil) || [[nextStream host] isEqualToString:[[lastChain streamURL] host]]) && [[nextStream path] isEqualToString:[[lastChain streamURL] path]])) {
|
if(pathsEqual || ([[nextStream scheme] isEqualToString:[[lastChain streamURL] scheme]] && (([nextStream host] == nil && [[lastChain streamURL] host] == nil) || [[nextStream host] isEqualToString:[[lastChain streamURL] host]]) && [[nextStream path] isEqualToString:[[lastChain streamURL] path]])) {
|
||||||
if([lastChain setTrack:nextStream] && [newChain openWithInput:[lastChain inputNode] withOutputFormat:[output format] withOutputConfig:[output config] withUserInfo:nextStreamUserInfo withRGInfo:nextStreamRGInfo]) {
|
if([lastChain setTrack:nextStream] && [newChain openWithInput:[lastChain inputNode] withUserInfo:nextStreamUserInfo withRGInfo:nextStreamRGInfo]) {
|
||||||
[newChain setStreamURL:nextStream];
|
[newChain setStreamURL:nextStream];
|
||||||
|
|
||||||
[self addChainToQueue:newChain];
|
[self addChainToQueue:newChain];
|
||||||
|
@ -384,7 +393,7 @@
|
||||||
|
|
||||||
lastChain = nil;
|
lastChain = nil;
|
||||||
|
|
||||||
while(shouldContinue && ![newChain open:nextStream withOutputFormat:[output format] withOutputConfig:[output config] withUserInfo:nextStreamUserInfo withRGInfo:nextStreamRGInfo]) {
|
while(shouldContinue && ![newChain open:nextStream withUserInfo:nextStreamUserInfo withRGInfo:nextStreamRGInfo]) {
|
||||||
if(nextStream == nil) {
|
if(nextStream == nil) {
|
||||||
newChain = nil;
|
newChain = nil;
|
||||||
atomic_fetch_sub(&refCount, 1);
|
atomic_fetch_sub(&refCount, 1);
|
||||||
|
@ -418,9 +427,49 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)reportPlayCount {
|
- (void)reportPlayCount {
|
||||||
if(bufferChain) {
|
[self reportPlayCountForTrack:previousUserInfo];
|
||||||
[self reportPlayCountForTrack:[bufferChain userInfo]];
|
}
|
||||||
|
|
||||||
|
- (BOOL)selectNextBuffer {
|
||||||
|
BOOL signalStopped = NO;
|
||||||
|
do {
|
||||||
|
@synchronized(chainQueue) {
|
||||||
|
endOfInputReached = NO;
|
||||||
|
|
||||||
|
if([chainQueue count] <= 0) {
|
||||||
|
// End of playlist
|
||||||
|
signalStopped = YES;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
bufferChain = nil;
|
||||||
|
bufferChain = [chainQueue objectAtIndex:0];
|
||||||
|
|
||||||
|
[chainQueue removeObjectAtIndex:0];
|
||||||
|
DLog(@"New!!! %@ %@", bufferChain, [[bufferChain inputNode] decoder]);
|
||||||
|
|
||||||
|
[semaphore signal];
|
||||||
|
}
|
||||||
|
} while(0);
|
||||||
|
|
||||||
|
if(signalStopped) {
|
||||||
|
double latency = 0;
|
||||||
|
if(output) latency = [output latency];
|
||||||
|
|
||||||
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, latency * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
|
||||||
|
[self stop];
|
||||||
|
|
||||||
|
self->bufferChain = nil;
|
||||||
|
|
||||||
|
[self notifyPlaybackStopped:nil];
|
||||||
|
});
|
||||||
|
|
||||||
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[output setEndOfStream:NO];
|
||||||
|
|
||||||
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)endOfInputPlayed {
|
- (void)endOfInputPlayed {
|
||||||
|
@ -428,32 +477,8 @@
|
||||||
// - the buffer chain for the next playlist entry (started in endOfInputReached) have been working for some time
|
// - the buffer chain for the next playlist entry (started in endOfInputReached) have been working for some time
|
||||||
// already, so that there is some decoded and converted data to play
|
// already, so that there is some decoded and converted data to play
|
||||||
// - the buffer chain for the next entry is the first item in chainQueue
|
// - the buffer chain for the next entry is the first item in chainQueue
|
||||||
|
previousUserInfo = [bufferChain userInfo];
|
||||||
@synchronized(chainQueue) {
|
[self notifyStreamChanged:previousUserInfo];
|
||||||
endOfInputReached = NO;
|
|
||||||
|
|
||||||
if([chainQueue count] <= 0) {
|
|
||||||
// End of playlist
|
|
||||||
[self stop];
|
|
||||||
|
|
||||||
bufferChain = nil;
|
|
||||||
|
|
||||||
[self notifyPlaybackStopped:nil];
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bufferChain = nil;
|
|
||||||
bufferChain = [chainQueue objectAtIndex:0];
|
|
||||||
|
|
||||||
[chainQueue removeObjectAtIndex:0];
|
|
||||||
DLog(@"New!!! %@ %@", bufferChain, [[bufferChain inputNode] decoder]);
|
|
||||||
|
|
||||||
[semaphore signal];
|
|
||||||
}
|
|
||||||
|
|
||||||
[self notifyStreamChanged:[bufferChain userInfo]];
|
|
||||||
[output setEndOfStream:NO];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)chainQueueHasTracks {
|
- (BOOL)chainQueueHasTracks {
|
||||||
|
|
|
@ -28,15 +28,13 @@
|
||||||
- (id)initWithController:(id)c;
|
- (id)initWithController:(id)c;
|
||||||
- (void)buildChain;
|
- (void)buildChain;
|
||||||
|
|
||||||
- (BOOL)open:(NSURL *)url withOutputFormat:(AudioStreamBasicDescription)outputFormat withOutputConfig:(uint32_t)outputConfig withUserInfo:(id)userInfo withRGInfo:(NSDictionary *)rgi;
|
- (BOOL)open:(NSURL *)url withUserInfo:(id)userInfo withRGInfo:(NSDictionary *)rgi;
|
||||||
|
|
||||||
// Used when changing tracks to reuse the same decoder
|
// Used when changing tracks to reuse the same decoder
|
||||||
- (BOOL)openWithInput:(InputNode *)i withOutputFormat:(AudioStreamBasicDescription)outputFormat withOutputConfig:(uint32_t)outputConfig withUserInfo:(id)userInfo withRGInfo:(NSDictionary *)rgi;
|
- (BOOL)openWithInput:(InputNode *)i withUserInfo:(id)userInfo withRGInfo:(NSDictionary *)rgi;
|
||||||
|
|
||||||
// Used when resetting the decoder on seek
|
// Used when resetting the decoder on seek
|
||||||
- (BOOL)openWithDecoder:(id<CogDecoder>)decoder
|
- (BOOL)openWithDecoder:(id<CogDecoder>)decoder
|
||||||
withOutputFormat:(AudioStreamBasicDescription)outputFormat
|
|
||||||
withOutputConfig:(uint32_t)outputConfig
|
|
||||||
withUserInfo:(id)userInfo
|
withUserInfo:(id)userInfo
|
||||||
withRGInfo:(NSDictionary *)rgi;
|
withRGInfo:(NSDictionary *)rgi;
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
finalNode = converterNode;
|
finalNode = converterNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)open:(NSURL *)url withOutputFormat:(AudioStreamBasicDescription)outputFormat withOutputConfig:(uint32_t)outputConfig withUserInfo:(id)userInfo withRGInfo:(NSDictionary *)rgi {
|
- (BOOL)open:(NSURL *)url withUserInfo:(id)userInfo withRGInfo:(NSDictionary *)rgi {
|
||||||
[self setStreamURL:url];
|
[self setStreamURL:url];
|
||||||
[self setUserInfo:userInfo];
|
[self setUserInfo:userInfo];
|
||||||
|
|
||||||
|
@ -66,13 +66,7 @@
|
||||||
if([properties valueForKey:@"channelConfig"])
|
if([properties valueForKey:@"channelConfig"])
|
||||||
inputChannelConfig = [[properties valueForKey:@"channelConfig"] unsignedIntValue];
|
inputChannelConfig = [[properties valueForKey:@"channelConfig"] unsignedIntValue];
|
||||||
|
|
||||||
outputFormat.mChannelsPerFrame = inputFormat.mChannelsPerFrame;
|
if(![converterNode setupWithInputFormat:inputFormat withInputConfig:inputChannelConfig isLossless:[[properties valueForKey:@"encoding"] isEqualToString:@"lossless"]])
|
||||||
outputFormat.mBytesPerFrame = ((outputFormat.mBitsPerChannel + 7) / 8) * outputFormat.mChannelsPerFrame;
|
|
||||||
outputFormat.mBytesPerPacket = outputFormat.mBytesPerFrame * outputFormat.mFramesPerPacket;
|
|
||||||
|
|
||||||
outputConfig = inputChannelConfig;
|
|
||||||
|
|
||||||
if(![converterNode setupWithInputFormat:inputFormat withInputConfig:inputChannelConfig outputFormat:outputFormat outputConfig:outputConfig isLossless:[[properties valueForKey:@"encoding"] isEqualToString:@"lossless"]])
|
|
||||||
return NO;
|
return NO;
|
||||||
|
|
||||||
[self setRGInfo:rgi];
|
[self setRGInfo:rgi];
|
||||||
|
@ -82,7 +76,7 @@
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)openWithInput:(InputNode *)i withOutputFormat:(AudioStreamBasicDescription)outputFormat withOutputConfig:(uint32_t)outputConfig withUserInfo:(id)userInfo withRGInfo:(NSDictionary *)rgi {
|
- (BOOL)openWithInput:(InputNode *)i withUserInfo:(id)userInfo withRGInfo:(NSDictionary *)rgi {
|
||||||
DLog(@"New buffer chain!");
|
DLog(@"New buffer chain!");
|
||||||
[self setUserInfo:userInfo];
|
[self setUserInfo:userInfo];
|
||||||
[self buildChain];
|
[self buildChain];
|
||||||
|
@ -97,14 +91,8 @@
|
||||||
if([properties valueForKey:@"channelConfig"])
|
if([properties valueForKey:@"channelConfig"])
|
||||||
inputChannelConfig = [[properties valueForKey:@"channelConfig"] unsignedIntValue];
|
inputChannelConfig = [[properties valueForKey:@"channelConfig"] unsignedIntValue];
|
||||||
|
|
||||||
outputFormat.mChannelsPerFrame = inputFormat.mChannelsPerFrame;
|
|
||||||
outputFormat.mBytesPerFrame = ((outputFormat.mBitsPerChannel + 7) / 8) * outputFormat.mChannelsPerFrame;
|
|
||||||
outputFormat.mBytesPerPacket = outputFormat.mBytesPerFrame * outputFormat.mFramesPerPacket;
|
|
||||||
|
|
||||||
outputConfig = inputChannelConfig;
|
|
||||||
|
|
||||||
DLog(@"Input Properties: %@", properties);
|
DLog(@"Input Properties: %@", properties);
|
||||||
if(![converterNode setupWithInputFormat:inputFormat withInputConfig:inputChannelConfig outputFormat:outputFormat outputConfig:outputConfig isLossless:[[properties objectForKey:@"encoding"] isEqualToString:@"lossless"]])
|
if(![converterNode setupWithInputFormat:inputFormat withInputConfig:inputChannelConfig isLossless:[[properties objectForKey:@"encoding"] isEqualToString:@"lossless"]])
|
||||||
return NO;
|
return NO;
|
||||||
|
|
||||||
[self setRGInfo:rgi];
|
[self setRGInfo:rgi];
|
||||||
|
@ -113,8 +101,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)openWithDecoder:(id<CogDecoder>)decoder
|
- (BOOL)openWithDecoder:(id<CogDecoder>)decoder
|
||||||
withOutputFormat:(AudioStreamBasicDescription)outputFormat
|
|
||||||
withOutputConfig:(uint32_t)outputConfig
|
|
||||||
withUserInfo:(id)userInfo
|
withUserInfo:(id)userInfo
|
||||||
withRGInfo:(NSDictionary *)rgi;
|
withRGInfo:(NSDictionary *)rgi;
|
||||||
{
|
{
|
||||||
|
@ -134,13 +120,7 @@
|
||||||
if([properties valueForKey:@"channelConfig"])
|
if([properties valueForKey:@"channelConfig"])
|
||||||
inputChannelConfig = [[properties valueForKey:@"channelConfig"] unsignedIntValue];
|
inputChannelConfig = [[properties valueForKey:@"channelConfig"] unsignedIntValue];
|
||||||
|
|
||||||
outputFormat.mChannelsPerFrame = inputFormat.mChannelsPerFrame;
|
if(![converterNode setupWithInputFormat:inputFormat withInputConfig:inputChannelConfig isLossless:[[properties objectForKey:@"encoding"] isEqualToString:@"lossless"]])
|
||||||
outputFormat.mBytesPerFrame = ((outputFormat.mBitsPerChannel + 7) / 8) * outputFormat.mChannelsPerFrame;
|
|
||||||
outputFormat.mBytesPerPacket = outputFormat.mBytesPerFrame * outputFormat.mFramesPerPacket;
|
|
||||||
|
|
||||||
outputConfig = inputChannelConfig;
|
|
||||||
|
|
||||||
if(![converterNode setupWithInputFormat:inputFormat withInputConfig:inputChannelConfig outputFormat:outputFormat outputConfig:outputConfig isLossless:[[properties objectForKey:@"encoding"] isEqualToString:@"lossless"]])
|
|
||||||
return NO;
|
return NO;
|
||||||
|
|
||||||
[self setRGInfo:rgi];
|
[self setRGInfo:rgi];
|
||||||
|
|
|
@ -14,15 +14,11 @@
|
||||||
|
|
||||||
#import "Node.h"
|
#import "Node.h"
|
||||||
|
|
||||||
#import "HeadphoneFilter.h"
|
|
||||||
|
|
||||||
#define DSD_DECIMATE 1
|
#define DSD_DECIMATE 1
|
||||||
|
|
||||||
@interface ConverterNode : Node {
|
@interface ConverterNode : Node {
|
||||||
NSDictionary *rgInfo;
|
NSDictionary *rgInfo;
|
||||||
|
|
||||||
void *_r8bstate;
|
|
||||||
|
|
||||||
void *inputBuffer;
|
void *inputBuffer;
|
||||||
size_t inputBufferSize;
|
size_t inputBufferSize;
|
||||||
size_t inpSize, inpOffset;
|
size_t inpSize, inpOffset;
|
||||||
|
@ -31,29 +27,12 @@
|
||||||
BOOL convertEntered;
|
BOOL convertEntered;
|
||||||
BOOL paused;
|
BOOL paused;
|
||||||
|
|
||||||
BOOL skipResampler;
|
|
||||||
|
|
||||||
unsigned int PRIME_LEN_;
|
|
||||||
unsigned int N_samples_to_add_;
|
|
||||||
unsigned int N_samples_to_drop_;
|
|
||||||
|
|
||||||
unsigned int is_preextrapolated_;
|
|
||||||
unsigned int is_postextrapolated_;
|
|
||||||
|
|
||||||
int latencyEaten;
|
|
||||||
int latencyEatenPost;
|
|
||||||
|
|
||||||
double sampleRatio;
|
|
||||||
|
|
||||||
float volumeScale;
|
float volumeScale;
|
||||||
|
|
||||||
void *floatBuffer;
|
void *floatBuffer;
|
||||||
size_t floatBufferSize;
|
size_t floatBufferSize;
|
||||||
size_t floatSize, floatOffset;
|
size_t floatSize, floatOffset;
|
||||||
|
|
||||||
void *extrapolateBuffer;
|
|
||||||
size_t extrapolateBufferSize;
|
|
||||||
|
|
||||||
#if DSD_DECIMATE
|
#if DSD_DECIMATE
|
||||||
void **dsd2pcm;
|
void **dsd2pcm;
|
||||||
size_t dsd2pcmCount;
|
size_t dsd2pcmCount;
|
||||||
|
@ -65,10 +44,8 @@
|
||||||
AudioStreamBasicDescription inputFormat;
|
AudioStreamBasicDescription inputFormat;
|
||||||
AudioStreamBasicDescription floatFormat;
|
AudioStreamBasicDescription floatFormat;
|
||||||
AudioStreamBasicDescription dmFloatFormat; // downmixed/upmixed float format
|
AudioStreamBasicDescription dmFloatFormat; // downmixed/upmixed float format
|
||||||
AudioStreamBasicDescription outputFormat;
|
|
||||||
|
|
||||||
uint32_t inputChannelConfig;
|
uint32_t inputChannelConfig;
|
||||||
uint32_t outputChannelConfig;
|
|
||||||
|
|
||||||
BOOL streamFormatChanged;
|
BOOL streamFormatChanged;
|
||||||
AudioStreamBasicDescription newInputFormat;
|
AudioStreamBasicDescription newInputFormat;
|
||||||
|
@ -77,15 +54,13 @@
|
||||||
AudioChunk *lastChunkIn;
|
AudioChunk *lastChunkIn;
|
||||||
|
|
||||||
void *hdcd_decoder;
|
void *hdcd_decoder;
|
||||||
|
|
||||||
HeadphoneFilter *hFilter;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@property AudioStreamBasicDescription inputFormat;
|
@property AudioStreamBasicDescription inputFormat;
|
||||||
|
|
||||||
- (id)initWithController:(id)c previous:(id)p;
|
- (id)initWithController:(id)c previous:(id)p;
|
||||||
|
|
||||||
- (BOOL)setupWithInputFormat:(AudioStreamBasicDescription)inputFormat withInputConfig:(uint32_t)inputConfig outputFormat:(AudioStreamBasicDescription)outputFormat outputConfig:(uint32_t)outputConfig isLossless:(BOOL)lossless;
|
- (BOOL)setupWithInputFormat:(AudioStreamBasicDescription)inputFormat withInputConfig:(uint32_t)inputConfig isLossless:(BOOL)lossless;
|
||||||
- (void)cleanUp;
|
- (void)cleanUp;
|
||||||
|
|
||||||
- (void)process;
|
- (void)process;
|
||||||
|
@ -93,8 +68,6 @@
|
||||||
|
|
||||||
- (void)setRGInfo:(NSDictionary *)rgi;
|
- (void)setRGInfo:(NSDictionary *)rgi;
|
||||||
|
|
||||||
- (void)setOutputFormat:(AudioStreamBasicDescription)format outputConfig:(uint32_t)outputConfig;
|
|
||||||
|
|
||||||
- (void)inputFormatDidChange:(AudioStreamBasicDescription)format inputConfig:(uint32_t)inputConfig;
|
- (void)inputFormatDidChange:(AudioStreamBasicDescription)format inputConfig:(uint32_t)inputConfig;
|
||||||
|
|
||||||
- (void)refreshVolumeScaling;
|
- (void)refreshVolumeScaling;
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
// Copyright 2005 __MyCompanyName__. All rights reserved.
|
// Copyright 2005 __MyCompanyName__. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#import <Accelerate/Accelerate.h>
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
#import "ConverterNode.h"
|
#import "ConverterNode.h"
|
||||||
|
|
||||||
#import "BufferChain.h"
|
#import "BufferChain.h"
|
||||||
|
@ -13,17 +16,12 @@
|
||||||
|
|
||||||
#import "Logging.h"
|
#import "Logging.h"
|
||||||
|
|
||||||
#import "lpc.h"
|
|
||||||
#import "util.h"
|
|
||||||
|
|
||||||
#import "hdcd_decode2.h"
|
#import "hdcd_decode2.h"
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
#import "BadSampleCleaner.h"
|
#import "BadSampleCleaner.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#import "r8bstate.h"
|
|
||||||
|
|
||||||
#if !DSD_DECIMATE
|
#if !DSD_DECIMATE
|
||||||
#include "dsd2float.h"
|
#include "dsd2float.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -56,7 +54,6 @@ static void *kConverterNodeContext = &kConverterNodeContext;
|
||||||
if(self) {
|
if(self) {
|
||||||
rgInfo = nil;
|
rgInfo = nil;
|
||||||
|
|
||||||
_r8bstate = 0;
|
|
||||||
inputBuffer = NULL;
|
inputBuffer = NULL;
|
||||||
inputBufferSize = 0;
|
inputBufferSize = 0;
|
||||||
floatBuffer = NULL;
|
floatBuffer = NULL;
|
||||||
|
@ -66,11 +63,6 @@ static void *kConverterNodeContext = &kConverterNodeContext;
|
||||||
convertEntered = NO;
|
convertEntered = NO;
|
||||||
paused = NO;
|
paused = NO;
|
||||||
|
|
||||||
skipResampler = YES;
|
|
||||||
|
|
||||||
extrapolateBuffer = NULL;
|
|
||||||
extrapolateBufferSize = 0;
|
|
||||||
|
|
||||||
#if DSD_DECIMATE
|
#if DSD_DECIMATE
|
||||||
dsd2pcm = NULL;
|
dsd2pcm = NULL;
|
||||||
dsd2pcmCount = 0;
|
dsd2pcmCount = 0;
|
||||||
|
@ -86,7 +78,7 @@ static void *kConverterNodeContext = &kConverterNodeContext;
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void scale_by_volume(float *buffer, size_t count, float volume) {
|
void scale_by_volume(float *buffer, size_t count, float volume) {
|
||||||
if(volume != 1.0) {
|
if(volume != 1.0) {
|
||||||
size_t unaligned = (uintptr_t)buffer & 15;
|
size_t unaligned = (uintptr_t)buffer & 15;
|
||||||
if(unaligned) {
|
if(unaligned) {
|
||||||
|
@ -458,7 +450,7 @@ static void convert_be_to_le(uint8_t *buffer, size_t bitsPerSample, size_t bytes
|
||||||
continue;
|
continue;
|
||||||
} else if(streamFormatChanged) {
|
} else if(streamFormatChanged) {
|
||||||
[self cleanUp];
|
[self cleanUp];
|
||||||
[self setupWithInputFormat:newInputFormat withInputConfig:newInputChannelConfig outputFormat:outputFormat outputConfig:outputChannelConfig isLossless:rememberedLossless];
|
[self setupWithInputFormat:newInputFormat withInputConfig:newInputChannelConfig isLossless:rememberedLossless];
|
||||||
continue;
|
continue;
|
||||||
} else
|
} else
|
||||||
break;
|
break;
|
||||||
|
@ -471,7 +463,6 @@ static void convert_be_to_le(uint8_t *buffer, size_t bitsPerSample, size_t bytes
|
||||||
UInt32 ioNumberPackets;
|
UInt32 ioNumberPackets;
|
||||||
int amountReadFromFC;
|
int amountReadFromFC;
|
||||||
int amountRead = 0;
|
int amountRead = 0;
|
||||||
int amountToIgnorePostExtrapolated = 0;
|
|
||||||
|
|
||||||
if(stopping)
|
if(stopping)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -496,13 +487,6 @@ tryagain:
|
||||||
|
|
||||||
// Approximately the most we want on input
|
// Approximately the most we want on input
|
||||||
ioNumberPackets = CHUNK_SIZE;
|
ioNumberPackets = CHUNK_SIZE;
|
||||||
if(!skipResampler && ioNumberPackets < PRIME_LEN_)
|
|
||||||
ioNumberPackets = PRIME_LEN_;
|
|
||||||
|
|
||||||
// We want to upscale this count if the ratio is below zero
|
|
||||||
if(sampleRatio < 1.0) {
|
|
||||||
ioNumberPackets = ((uint32_t)(ioNumberPackets / sampleRatio) + 15) & ~15;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if DSD_DECIMATE
|
#if DSD_DECIMATE
|
||||||
const size_t sizeScale = 3;
|
const size_t sizeScale = 3;
|
||||||
|
@ -555,41 +539,8 @@ tryagain:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pad end of track with input format silence
|
|
||||||
|
|
||||||
if(stopping || paused || streamFormatChanged || [self shouldContinue] == NO || [self endOfStream] == YES) {
|
|
||||||
if(!skipResampler && !is_postextrapolated_) {
|
|
||||||
#if DSD_DECIMATE
|
|
||||||
if(dsd2pcm) {
|
|
||||||
uint32_t amountToSkip = dsd2pcmLatency * inputFormat.mBytesPerPacket;
|
|
||||||
memset(((uint8_t *)inputBuffer) + bytesReadFromInput, 0x55, amountToSkip);
|
|
||||||
bytesReadFromInput += amountToSkip;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
is_postextrapolated_ = 1;
|
|
||||||
#if DSD_DECIMATE
|
|
||||||
} else if(!is_postextrapolated_ && dsd2pcm) {
|
|
||||||
is_postextrapolated_ = 3;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL isBigEndian = !!(inputFormat.mFormatFlags & kAudioFormatFlagIsBigEndian);
|
BOOL isBigEndian = !!(inputFormat.mFormatFlags & kAudioFormatFlagIsBigEndian);
|
||||||
|
|
||||||
if(!bytesReadFromInput && streamFormatChanged && !skipResampler && is_postextrapolated_ < 2) {
|
|
||||||
AudioChunk *chunk = lastChunkIn;
|
|
||||||
lastChunkIn = nil;
|
|
||||||
AudioStreamBasicDescription inf = [chunk format];
|
|
||||||
size_t frameCount = [chunk frameCount];
|
|
||||||
size_t bytesRead = frameCount * inf.mBytesPerPacket;
|
|
||||||
if(frameCount) {
|
|
||||||
amountToIgnorePostExtrapolated = (int)frameCount;
|
|
||||||
NSData *samples = [chunk removeSamples:frameCount];
|
|
||||||
memcpy(inputBuffer, [samples bytes], bytesRead);
|
|
||||||
}
|
|
||||||
bytesReadFromInput += bytesRead;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!bytesReadFromInput) {
|
if(!bytesReadFromInput) {
|
||||||
convertEntered = NO;
|
convertEntered = NO;
|
||||||
return amountRead;
|
return amountRead;
|
||||||
|
@ -701,82 +652,9 @@ tryagain:
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extrapolate start
|
|
||||||
if(!skipResampler && !is_preextrapolated_) {
|
|
||||||
size_t samples_in_buffer = bytesReadFromInput / floatFormat.mBytesPerPacket;
|
|
||||||
size_t prime = min(samples_in_buffer, PRIME_LEN_);
|
|
||||||
size_t _N_samples_to_add_ = N_samples_to_add_;
|
|
||||||
#if DSD_DECIMATE
|
|
||||||
if(dsd2pcm) _N_samples_to_add_ += dsd2pcmLatency;
|
|
||||||
#endif
|
|
||||||
size_t newSize = _N_samples_to_add_ * floatFormat.mBytesPerPacket;
|
|
||||||
newSize += bytesReadFromInput;
|
|
||||||
|
|
||||||
if(newSize > inputBufferSize) {
|
|
||||||
inputBuffer = realloc(inputBuffer, inputBufferSize = newSize * 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t bytesToSkip = 0;
|
|
||||||
#if DSD_DECIMATE
|
|
||||||
if(dsd2pcm) {
|
|
||||||
bytesToSkip = dsd2pcmLatency * floatFormat.mBytesPerPacket;
|
|
||||||
if(bytesReadFromInput >= bytesToSkip) {
|
|
||||||
bytesReadFromInput -= bytesToSkip;
|
|
||||||
} else {
|
|
||||||
bytesToSkip = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
memmove(((uint8_t *)inputBuffer) + N_samples_to_add_ * floatFormat.mBytesPerPacket, ((uint8_t *)inputBuffer) + bytesToSkip, bytesReadFromInput);
|
|
||||||
|
|
||||||
lpc_extrapolate_bkwd((float *)(((uint8_t *)inputBuffer) + _N_samples_to_add_ * floatFormat.mBytesPerPacket), samples_in_buffer, prime, floatFormat.mChannelsPerFrame, LPC_ORDER, _N_samples_to_add_, &extrapolateBuffer, &extrapolateBufferSize);
|
|
||||||
#ifdef _DEBUG
|
|
||||||
[BadSampleCleaner cleanSamples:(float *)inputBuffer
|
|
||||||
amount:_N_samples_to_add_ * floatFormat.mChannelsPerFrame
|
|
||||||
location:@"pre-extrapolated data"];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bytesReadFromInput += _N_samples_to_add_ * floatFormat.mBytesPerPacket;
|
|
||||||
latencyEaten = N_samples_to_drop_;
|
|
||||||
#if DSD_DECIMATE
|
|
||||||
if(dsd2pcm) latencyEaten += (int)ceil(dsd2pcmLatency * sampleRatio);
|
|
||||||
#endif
|
|
||||||
is_preextrapolated_ = 2;
|
|
||||||
#if DSD_DECIMATE
|
|
||||||
} else if(dsd2pcm && !is_preextrapolated_) {
|
|
||||||
latencyEaten = dsd2pcmLatency;
|
|
||||||
is_preextrapolated_ = 3;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
if(is_postextrapolated_ == 1) {
|
|
||||||
size_t samples_in_buffer = bytesReadFromInput / floatFormat.mBytesPerPacket;
|
|
||||||
|
|
||||||
size_t prime = min(samples_in_buffer, PRIME_LEN_);
|
|
||||||
|
|
||||||
size_t newSize = bytesReadFromInput;
|
|
||||||
newSize += N_samples_to_add_ * floatFormat.mBytesPerPacket;
|
|
||||||
if(newSize > inputBufferSize) {
|
|
||||||
inputBuffer = realloc(inputBuffer, inputBufferSize = newSize * 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
lpc_extrapolate_fwd((float *)inputBuffer, samples_in_buffer, prime, floatFormat.mChannelsPerFrame, LPC_ORDER, N_samples_to_add_, &extrapolateBuffer, &extrapolateBufferSize);
|
|
||||||
#ifdef _DEBUG
|
|
||||||
[BadSampleCleaner cleanSamples:(float *)(inputBuffer) + samples_in_buffer * floatFormat.mChannelsPerFrame
|
|
||||||
amount:N_samples_to_add_ * floatFormat.mChannelsPerFrame
|
|
||||||
location:@"post-extrapolated data"];
|
|
||||||
#endif
|
|
||||||
bytesReadFromInput += N_samples_to_add_ * floatFormat.mBytesPerPacket;
|
|
||||||
latencyEatenPost = N_samples_to_drop_;
|
|
||||||
is_postextrapolated_ = 2;
|
|
||||||
} else if(is_postextrapolated_ == 3) { // No need to skip the end
|
|
||||||
latencyEatenPost = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Input now contains bytesReadFromInput worth of floats, in the input sample rate
|
// Input now contains bytesReadFromInput worth of floats, in the input sample rate
|
||||||
inpSize = bytesReadFromInput;
|
inpSize = bytesReadFromInput;
|
||||||
inpOffset = amountToIgnorePostExtrapolated * floatFormat.mBytesPerPacket;
|
inpOffset = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(inpOffset != inpSize && floatOffset == floatSize) {
|
if(inpOffset != inpSize && floatOffset == floatSize) {
|
||||||
|
@ -788,7 +666,6 @@ tryagain:
|
||||||
|
|
||||||
ioNumberPackets = (UInt32)inputSamples;
|
ioNumberPackets = (UInt32)inputSamples;
|
||||||
|
|
||||||
ioNumberPackets = (UInt32)ceil((float)ioNumberPackets * sampleRatio);
|
|
||||||
ioNumberPackets = (ioNumberPackets + 255) & ~255;
|
ioNumberPackets = (ioNumberPackets + 255) & ~255;
|
||||||
|
|
||||||
size_t newSize = ioNumberPackets * floatFormat.mBytesPerPacket;
|
size_t newSize = ioNumberPackets * floatFormat.mBytesPerPacket;
|
||||||
|
@ -805,64 +682,12 @@ tryagain:
|
||||||
size_t inputDone = 0;
|
size_t inputDone = 0;
|
||||||
size_t outputDone = 0;
|
size_t outputDone = 0;
|
||||||
|
|
||||||
if(!skipResampler) {
|
memcpy(floatBuffer, (((uint8_t *)inputBuffer) + inpOffset), inputSamples * floatFormat.mBytesPerPacket);
|
||||||
// This is needed at least for the flush, or else there won't be room for it
|
inputDone = inputSamples;
|
||||||
ioNumberPackets += ((r8bstate *)_r8bstate)->latency();
|
outputDone = inputSamples;
|
||||||
|
|
||||||
#ifdef _DEBUG
|
|
||||||
[BadSampleCleaner cleanSamples:(float *)(((uint8_t *)inputBuffer) + inpOffset)
|
|
||||||
amount:inputSamples * floatFormat.mChannelsPerFrame
|
|
||||||
location:@"resampler input"];
|
|
||||||
#endif
|
|
||||||
outputDone = ((r8bstate *)_r8bstate)->resample((float *)(((uint8_t *)inputBuffer) + inpOffset), inputSamples, &inputDone, (float *)floatBuffer, ioNumberPackets);
|
|
||||||
#ifdef _DEBUG
|
|
||||||
[BadSampleCleaner cleanSamples:(float *)floatBuffer
|
|
||||||
amount:outputDone * floatFormat.mChannelsPerFrame
|
|
||||||
location:@"resampler output"];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(latencyEatenPost) {
|
|
||||||
// Post file flush
|
|
||||||
size_t odone = 0;
|
|
||||||
|
|
||||||
do {
|
|
||||||
odone = ((r8bstate *)_r8bstate)->flush((float *)(((uint8_t *)floatBuffer) + outputDone * floatFormat.mBytesPerPacket), ioNumberPackets - outputDone);
|
|
||||||
#ifdef _DEBUG
|
|
||||||
[BadSampleCleaner cleanSamples:(float *)(floatBuffer + outputDone * floatFormat.mBytesPerPacket)
|
|
||||||
amount:odone * floatFormat.mChannelsPerFrame
|
|
||||||
location:@"resampler flushed output"];
|
|
||||||
#endif
|
|
||||||
outputDone += odone;
|
|
||||||
} while(odone > 0);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
memcpy(floatBuffer, (((uint8_t *)inputBuffer) + inpOffset), inputSamples * floatFormat.mBytesPerPacket);
|
|
||||||
inputDone = inputSamples;
|
|
||||||
outputDone = inputSamples;
|
|
||||||
}
|
|
||||||
|
|
||||||
inpOffset += inputDone * floatFormat.mBytesPerPacket;
|
inpOffset += inputDone * floatFormat.mBytesPerPacket;
|
||||||
|
|
||||||
if(latencyEaten) {
|
|
||||||
if(outputDone > latencyEaten) {
|
|
||||||
outputDone -= latencyEaten;
|
|
||||||
memmove(floatBuffer, ((uint8_t *)floatBuffer) + latencyEaten * floatFormat.mBytesPerPacket, outputDone * floatFormat.mBytesPerPacket);
|
|
||||||
latencyEaten = 0;
|
|
||||||
} else {
|
|
||||||
latencyEaten -= outputDone;
|
|
||||||
outputDone = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(latencyEatenPost) {
|
|
||||||
if(outputDone > latencyEatenPost) {
|
|
||||||
outputDone -= latencyEatenPost;
|
|
||||||
} else {
|
|
||||||
outputDone = 0;
|
|
||||||
}
|
|
||||||
latencyEatenPost = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
amountReadFromFC = (int)(outputDone * floatFormat.mBytesPerPacket);
|
amountReadFromFC = (int)(outputDone * floatFormat.mBytesPerPacket);
|
||||||
|
|
||||||
scale_by_volume((float *)floatBuffer, amountReadFromFC / sizeof(float), volumeScale
|
scale_by_volume((float *)floatBuffer, amountReadFromFC / sizeof(float), volumeScale
|
||||||
|
@ -882,7 +707,7 @@ tryagain:
|
||||||
if(ioNumberPackets > (floatSize - floatOffset))
|
if(ioNumberPackets > (floatSize - floatOffset))
|
||||||
ioNumberPackets = (UInt32)(floatSize - floatOffset);
|
ioNumberPackets = (UInt32)(floatSize - floatOffset);
|
||||||
|
|
||||||
ioNumberPackets -= ioNumberPackets % outputFormat.mBytesPerPacket;
|
ioNumberPackets -= ioNumberPackets % dmFloatFormat.mBytesPerPacket;
|
||||||
|
|
||||||
memcpy(((uint8_t *)dest) + amountRead, ((uint8_t *)floatBuffer) + floatOffset, ioNumberPackets);
|
memcpy(((uint8_t *)dest) + amountRead, ((uint8_t *)floatBuffer) + floatOffset, ioNumberPackets);
|
||||||
|
|
||||||
|
@ -953,16 +778,11 @@ static float db_to_scale(float db) {
|
||||||
volumeScale = scale;
|
volumeScale = scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)setupWithInputFormat:(AudioStreamBasicDescription)inf withInputConfig:(uint32_t)inputConfig outputFormat:(AudioStreamBasicDescription)outf outputConfig:(uint32_t)outputConfig isLossless:(BOOL)lossless {
|
- (BOOL)setupWithInputFormat:(AudioStreamBasicDescription)inf withInputConfig:(uint32_t)inputConfig isLossless:(BOOL)lossless {
|
||||||
// Make the converter
|
// Make the converter
|
||||||
inputFormat = inf;
|
inputFormat = inf;
|
||||||
outputFormat = outf;
|
|
||||||
|
|
||||||
inputChannelConfig = inputConfig;
|
inputChannelConfig = inputConfig;
|
||||||
outputChannelConfig = outputConfig;
|
|
||||||
|
|
||||||
nodeFormat = outputFormat;
|
|
||||||
nodeChannelConfig = outputChannelConfig;
|
|
||||||
|
|
||||||
rememberedLossless = lossless;
|
rememberedLossless = lossless;
|
||||||
|
|
||||||
|
@ -1010,38 +830,12 @@ static float db_to_scale(float db) {
|
||||||
// This is a post resampler, post-down/upmix format
|
// This is a post resampler, post-down/upmix format
|
||||||
|
|
||||||
dmFloatFormat = floatFormat;
|
dmFloatFormat = floatFormat;
|
||||||
dmFloatFormat.mSampleRate = outputFormat.mSampleRate;
|
|
||||||
dmFloatFormat.mChannelsPerFrame = outputFormat.mChannelsPerFrame;
|
|
||||||
dmFloatFormat.mBytesPerFrame = (32 / 8) * dmFloatFormat.mChannelsPerFrame;
|
|
||||||
dmFloatFormat.mBytesPerPacket = dmFloatFormat.mBytesPerFrame * floatFormat.mFramesPerPacket;
|
|
||||||
|
|
||||||
skipResampler = outputFormat.mSampleRate == floatFormat.mSampleRate;
|
nodeFormat = dmFloatFormat;
|
||||||
|
nodeChannelConfig = inputChannelConfig;
|
||||||
sampleRatio = (double)outputFormat.mSampleRate / (double)floatFormat.mSampleRate;
|
|
||||||
|
|
||||||
if(!skipResampler) {
|
|
||||||
const int channelCount = floatFormat.mChannelsPerFrame;
|
|
||||||
|
|
||||||
_r8bstate = (void *)(new r8bstate(channelCount, 1024, floatFormat.mSampleRate, outputFormat.mSampleRate));
|
|
||||||
|
|
||||||
PRIME_LEN_ = max(floatFormat.mSampleRate / 20, 1024u);
|
|
||||||
PRIME_LEN_ = min(PRIME_LEN_, 16384u);
|
|
||||||
PRIME_LEN_ = max(PRIME_LEN_, 2 * LPC_ORDER + 1);
|
|
||||||
|
|
||||||
N_samples_to_add_ = floatFormat.mSampleRate;
|
|
||||||
N_samples_to_drop_ = outputFormat.mSampleRate;
|
|
||||||
|
|
||||||
samples_len(&N_samples_to_add_, &N_samples_to_drop_, 20, 8192u);
|
|
||||||
|
|
||||||
is_preextrapolated_ = 0;
|
|
||||||
is_postextrapolated_ = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
latencyEaten = 0;
|
|
||||||
latencyEatenPost = 0;
|
|
||||||
|
|
||||||
PrintStreamDesc(&inf);
|
PrintStreamDesc(&inf);
|
||||||
PrintStreamDesc(&outf);
|
PrintStreamDesc(&nodeFormat);
|
||||||
|
|
||||||
[self refreshVolumeScaling];
|
[self refreshVolumeScaling];
|
||||||
|
|
||||||
|
@ -1063,12 +857,6 @@ static float db_to_scale(float db) {
|
||||||
[self cleanUp];
|
[self cleanUp];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setOutputFormat:(AudioStreamBasicDescription)format outputConfig:(uint32_t)outputConfig {
|
|
||||||
DLog(@"SETTING OUTPUT FORMAT!");
|
|
||||||
outputFormat = format;
|
|
||||||
outputChannelConfig = outputConfig;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)inputFormatDidChange:(AudioStreamBasicDescription)format inputConfig:(uint32_t)inputConfig {
|
- (void)inputFormatDidChange:(AudioStreamBasicDescription)format inputConfig:(uint32_t)inputConfig {
|
||||||
DLog(@"FORMAT CHANGED");
|
DLog(@"FORMAT CHANGED");
|
||||||
paused = YES;
|
paused = YES;
|
||||||
|
@ -1076,7 +864,7 @@ static float db_to_scale(float db) {
|
||||||
usleep(500);
|
usleep(500);
|
||||||
}
|
}
|
||||||
[self cleanUp];
|
[self cleanUp];
|
||||||
[self setupWithInputFormat:format withInputConfig:inputConfig outputFormat:outputFormat outputConfig:outputChannelConfig isLossless:rememberedLossless];
|
[self setupWithInputFormat:format withInputConfig:inputConfig isLossless:rememberedLossless];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setRGInfo:(NSDictionary *)rgi {
|
- (void)setRGInfo:(NSDictionary *)rgi {
|
||||||
|
@ -1090,17 +878,10 @@ static float db_to_scale(float db) {
|
||||||
while(convertEntered) {
|
while(convertEntered) {
|
||||||
usleep(500);
|
usleep(500);
|
||||||
}
|
}
|
||||||
if(hFilter) {
|
|
||||||
hFilter = nil;
|
|
||||||
}
|
|
||||||
if(hdcd_decoder) {
|
if(hdcd_decoder) {
|
||||||
free(hdcd_decoder);
|
free(hdcd_decoder);
|
||||||
hdcd_decoder = NULL;
|
hdcd_decoder = NULL;
|
||||||
}
|
}
|
||||||
if(_r8bstate) {
|
|
||||||
delete(r8bstate *)_r8bstate;
|
|
||||||
_r8bstate = NULL;
|
|
||||||
}
|
|
||||||
#if DSD_DECIMATE
|
#if DSD_DECIMATE
|
||||||
if(dsd2pcm && dsd2pcmCount) {
|
if(dsd2pcm && dsd2pcmCount) {
|
||||||
for(size_t i = 0; i < dsd2pcmCount; ++i) {
|
for(size_t i = 0; i < dsd2pcmCount; ++i) {
|
||||||
|
@ -1111,11 +892,6 @@ static float db_to_scale(float db) {
|
||||||
dsd2pcm = NULL;
|
dsd2pcm = NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if(extrapolateBuffer) {
|
|
||||||
free(extrapolateBuffer);
|
|
||||||
extrapolateBuffer = NULL;
|
|
||||||
extrapolateBufferSize = 0;
|
|
||||||
}
|
|
||||||
if(floatBuffer) {
|
if(floatBuffer) {
|
||||||
free(floatBuffer);
|
free(floatBuffer);
|
||||||
floatBuffer = NULL;
|
floatBuffer = NULL;
|
|
@ -9,11 +9,7 @@
|
||||||
#import <CoreAudio/CoreAudio.h>
|
#import <CoreAudio/CoreAudio.h>
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
#import "HeadphoneFilter.h"
|
|
||||||
|
|
||||||
@interface DownmixProcessor : NSObject {
|
@interface DownmixProcessor : NSObject {
|
||||||
HeadphoneFilter *hFilter;
|
|
||||||
|
|
||||||
AudioStreamBasicDescription inputFormat;
|
AudioStreamBasicDescription inputFormat;
|
||||||
AudioStreamBasicDescription outputFormat;
|
AudioStreamBasicDescription outputFormat;
|
||||||
|
|
||||||
|
|
|
@ -275,92 +275,12 @@ static void *kDownmixProcessorContext = &kDownmixProcessorContext;
|
||||||
|
|
||||||
inConfig = iConfig;
|
inConfig = iConfig;
|
||||||
outConfig = oConfig;
|
outConfig = oConfig;
|
||||||
|
|
||||||
[self setupVirt];
|
|
||||||
|
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.headphoneVirtualization" options:0 context:kDownmixProcessorContext];
|
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.hrirPath" options:0 context:kDownmixProcessorContext];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)dealloc {
|
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeyPath:@"values.headphoneVirtualization" context:kDownmixProcessorContext];
|
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeyPath:@"values.hrirPath" context:kDownmixProcessorContext];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setupVirt {
|
|
||||||
@synchronized(hFilter) {
|
|
||||||
hFilter = nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL hVirt = [[[NSUserDefaultsController sharedUserDefaultsController] defaults] boolForKey:@"headphoneVirtualization"];
|
|
||||||
|
|
||||||
if(hVirt &&
|
|
||||||
outputFormat.mChannelsPerFrame >= 2 &&
|
|
||||||
(outConfig & AudioConfigStereo) == AudioConfigStereo &&
|
|
||||||
inputFormat.mChannelsPerFrame >= 1 &&
|
|
||||||
(inConfig & (AudioConfig7Point1 | AudioChannelBackCenter)) != 0) {
|
|
||||||
NSString *userPreset = [[[NSUserDefaultsController sharedUserDefaultsController] defaults] stringForKey:@"hrirPath"];
|
|
||||||
|
|
||||||
NSURL *presetUrl = nil;
|
|
||||||
|
|
||||||
if(userPreset && ![userPreset isEqualToString:@""]) {
|
|
||||||
presetUrl = [NSURL fileURLWithPath:userPreset];
|
|
||||||
if(![HeadphoneFilter validateImpulseFile:presetUrl])
|
|
||||||
presetUrl = nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!presetUrl) {
|
|
||||||
presetUrl = [[NSBundle mainBundle] URLForResource:@"gsx" withExtension:@"wv"];
|
|
||||||
if(![HeadphoneFilter validateImpulseFile:presetUrl])
|
|
||||||
presetUrl = nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(presetUrl) {
|
|
||||||
@synchronized(hFilter) {
|
|
||||||
hFilter = [[HeadphoneFilter alloc] initWithImpulseFile:presetUrl forSampleRate:outputFormat.mSampleRate withInputChannels:inputFormat.mChannelsPerFrame withConfig:inConfig];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)observeValueForKeyPath:(NSString *)keyPath
|
|
||||||
ofObject:(id)object
|
|
||||||
change:(NSDictionary *)change
|
|
||||||
context:(void *)context {
|
|
||||||
if(context == kDownmixProcessorContext) {
|
|
||||||
DLog(@"SOMETHING CHANGED!");
|
|
||||||
if([keyPath isEqualToString:@"values.headphoneVirtualization"] ||
|
|
||||||
[keyPath isEqualToString:@"values.hrirPath"]) {
|
|
||||||
// Reset the converter, without rebuffering
|
|
||||||
[self setupVirt];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)process:(const void *)inBuffer frameCount:(size_t)frames output:(void *)outBuffer {
|
- (void)process:(const void *)inBuffer frameCount:(size_t)frames output:(void *)outBuffer {
|
||||||
@synchronized(hFilter) {
|
|
||||||
if(hFilter) {
|
|
||||||
uint32_t outChannels = outputFormat.mChannelsPerFrame;
|
|
||||||
if(outChannels > 2) {
|
|
||||||
float tempBuffer[frames * 2];
|
|
||||||
[hFilter process:(const float *)inBuffer sampleCount:frames toBuffer:&tempBuffer[0]];
|
|
||||||
cblas_scopy((int)frames, tempBuffer, 2, (float *)outBuffer, outChannels);
|
|
||||||
cblas_scopy((int)frames, tempBuffer + 1, 2, ((float *)outBuffer) + 1, outChannels);
|
|
||||||
for(size_t i = 2; i < outChannels; ++i) {
|
|
||||||
vDSP_vclr(((float *)outBuffer) + i, outChannels, (int)frames);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
[hFilter process:(const float *)inBuffer sampleCount:frames toBuffer:(float *)outBuffer];
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(inputFormat.mChannelsPerFrame > 2 && outConfig == AudioConfigStereo) {
|
if(inputFormat.mChannelsPerFrame > 2 && outConfig == AudioConfigStereo) {
|
||||||
downmix_to_stereo((const float *)inBuffer, inputFormat.mChannelsPerFrame, inConfig, (float *)outBuffer, frames);
|
downmix_to_stereo((const float *)inBuffer, inputFormat.mChannelsPerFrame, inConfig, (float *)outBuffer, frames);
|
||||||
} else if(inputFormat.mChannelsPerFrame > 1 && outConfig == AudioConfigMono) {
|
} else if(inputFormat.mChannelsPerFrame > 1 && outConfig == AudioConfigMono) {
|
||||||
|
|
|
@ -1,47 +0,0 @@
|
||||||
//
|
|
||||||
// HeadphoneFilter.h
|
|
||||||
// CogAudio Framework
|
|
||||||
//
|
|
||||||
// Created by Christopher Snowhill on 1/24/22.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef HeadphoneFilter_h
|
|
||||||
#define HeadphoneFilter_h
|
|
||||||
|
|
||||||
#import <Accelerate/Accelerate.h>
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
|
|
||||||
@interface HeadphoneFilter : NSObject {
|
|
||||||
vDSP_DFT_Setup dftSetupF;
|
|
||||||
vDSP_DFT_Setup dftSetupB;
|
|
||||||
|
|
||||||
size_t fftSize;
|
|
||||||
size_t fftSizeOver2;
|
|
||||||
size_t bufferSize;
|
|
||||||
size_t paddedBufferSize;
|
|
||||||
size_t channelCount;
|
|
||||||
|
|
||||||
DSPSplitComplex signal_fft;
|
|
||||||
DSPSplitComplex input_filtered_signal_per_channel[2];
|
|
||||||
DSPSplitComplex input_filtered_signal_totals[2];
|
|
||||||
DSPSplitComplex *impulse_responses;
|
|
||||||
|
|
||||||
float **prevInputs;
|
|
||||||
|
|
||||||
float *left_result;
|
|
||||||
float *right_result;
|
|
||||||
|
|
||||||
float *paddedSignal;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ (BOOL)validateImpulseFile:(NSURL *)url;
|
|
||||||
|
|
||||||
- (id)initWithImpulseFile:(NSURL *)url forSampleRate:(double)sampleRate withInputChannels:(size_t)channels withConfig:(uint32_t)config;
|
|
||||||
|
|
||||||
- (void)process:(const float *)inBuffer sampleCount:(size_t)count toBuffer:(float *)outBuffer;
|
|
||||||
|
|
||||||
- (void)reset;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
#endif /* HeadphoneFilter_h */
|
|
|
@ -1,678 +0,0 @@
|
||||||
//
|
|
||||||
// HeadphoneFilter.m
|
|
||||||
// CogAudio Framework
|
|
||||||
//
|
|
||||||
// Created by Christopher Snowhill on 1/24/22.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "HeadphoneFilter.h"
|
|
||||||
#import "AudioChunk.h"
|
|
||||||
#import "AudioDecoder.h"
|
|
||||||
#import "AudioSource.h"
|
|
||||||
|
|
||||||
#import <stdlib.h>
|
|
||||||
|
|
||||||
#import "r8bstate.h"
|
|
||||||
|
|
||||||
#import "lpc.h"
|
|
||||||
#import "util.h"
|
|
||||||
|
|
||||||
@interface impulseCacheObject : NSObject {
|
|
||||||
}
|
|
||||||
@property NSURL *URL;
|
|
||||||
@property int sampleCount;
|
|
||||||
@property int channelCount;
|
|
||||||
@property double sampleRate;
|
|
||||||
@property double targetSampleRate;
|
|
||||||
@property NSData *data;
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation impulseCacheObject
|
|
||||||
@synthesize URL;
|
|
||||||
@synthesize sampleCount;
|
|
||||||
@synthesize channelCount;
|
|
||||||
@synthesize sampleRate;
|
|
||||||
@synthesize targetSampleRate;
|
|
||||||
@synthesize data;
|
|
||||||
@end
|
|
||||||
|
|
||||||
@interface impulseCache : NSObject {
|
|
||||||
}
|
|
||||||
@property NSMutableArray<impulseCacheObject *> *cacheObjects;
|
|
||||||
+ (impulseCache *)sharedController;
|
|
||||||
- (const float *)getImpulse:(NSURL *)url sampleCount:(int *)sampleCount channelCount:(int *)channelCount sampleRate:(double)sampleRate;
|
|
||||||
@end
|
|
||||||
|
|
||||||
// Apparently _mm_malloc is Intel-only on newer macOS targets, so use supported posix_memalign
|
|
||||||
static void *_memalign_malloc(size_t size, size_t align) {
|
|
||||||
void *ret = NULL;
|
|
||||||
if(posix_memalign(&ret, align, size) != 0) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@implementation impulseCache
|
|
||||||
|
|
||||||
static impulseCache *_sharedController = nil;
|
|
||||||
|
|
||||||
+ (impulseCache *)sharedController {
|
|
||||||
@synchronized(self) {
|
|
||||||
if(!_sharedController) {
|
|
||||||
_sharedController = [[impulseCache alloc] init];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _sharedController;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)init {
|
|
||||||
self = [super init];
|
|
||||||
if(self) {
|
|
||||||
self.cacheObjects = [[NSMutableArray alloc] init];
|
|
||||||
}
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (impulseCacheObject *)addImpulse:(NSURL *)url sampleCount:(int)sampleCount channelCount:(int)channelCount originalSampleRate:(double)originalSampleRate targetSampleRate:(double)targetSampleRate impulseBuffer:(const float *)impulseBuffer {
|
|
||||||
impulseCacheObject *obj = [[impulseCacheObject alloc] init];
|
|
||||||
|
|
||||||
obj.URL = url;
|
|
||||||
obj.sampleCount = sampleCount;
|
|
||||||
obj.channelCount = channelCount;
|
|
||||||
obj.sampleRate = originalSampleRate;
|
|
||||||
obj.targetSampleRate = targetSampleRate;
|
|
||||||
obj.data = [NSData dataWithBytes:impulseBuffer length:(sampleCount * channelCount * sizeof(float))];
|
|
||||||
|
|
||||||
@synchronized(self.cacheObjects) {
|
|
||||||
[self.cacheObjects addObject:obj];
|
|
||||||
}
|
|
||||||
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (const float *)getImpulse:(NSURL *)url sampleCount:(int *)retSampleCount channelCount:(int *)retImpulseChannels sampleRate:(double)sampleRate {
|
|
||||||
BOOL impulseFound = NO;
|
|
||||||
const float *impulseData = NULL;
|
|
||||||
double sampleRateOfSource = 0;
|
|
||||||
int sampleCount = 0;
|
|
||||||
int impulseChannels = 0;
|
|
||||||
impulseCacheObject *cacheObject = nil;
|
|
||||||
|
|
||||||
@synchronized(self.cacheObjects) {
|
|
||||||
for(impulseCacheObject *obj in self.cacheObjects) {
|
|
||||||
if([obj.URL isEqualTo:url] &&
|
|
||||||
obj.targetSampleRate == sampleRate) {
|
|
||||||
*retSampleCount = obj.sampleCount;
|
|
||||||
*retImpulseChannels = obj.channelCount;
|
|
||||||
return (const float *)[obj.data bytes];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(impulseCacheObject *obj in self.cacheObjects) {
|
|
||||||
if([obj.URL isEqualTo:url] &&
|
|
||||||
obj.sampleRate == obj.targetSampleRate) {
|
|
||||||
impulseData = (const float *)[obj.data bytes];
|
|
||||||
sampleCount = obj.sampleCount;
|
|
||||||
impulseChannels = obj.channelCount;
|
|
||||||
sampleRateOfSource = obj.sampleRate;
|
|
||||||
impulseFound = YES;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!impulseFound) {
|
|
||||||
id<CogSource> source = [AudioSource audioSourceForURL:url];
|
|
||||||
if(!source)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if(![source open:url])
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
id<CogDecoder> decoder = [AudioDecoder audioDecoderForSource:source];
|
|
||||||
|
|
||||||
if(decoder == nil) {
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(![decoder open:source]) {
|
|
||||||
decoder = nil;
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
NSDictionary *properties = [decoder properties];
|
|
||||||
|
|
||||||
sampleRateOfSource = [[properties objectForKey:@"sampleRate"] floatValue];
|
|
||||||
|
|
||||||
sampleCount = [[properties objectForKey:@"totalFrames"] intValue];
|
|
||||||
impulseChannels = [[properties objectForKey:@"channels"] intValue];
|
|
||||||
|
|
||||||
if([[properties objectForKey:@"floatingPoint"] boolValue] != YES ||
|
|
||||||
[[properties objectForKey:@"bitsPerSample"] intValue] != 32 ||
|
|
||||||
!([[properties objectForKey:@"endian"] isEqualToString:@"host"] ||
|
|
||||||
[[properties objectForKey:@"endian"] isEqualToString:@"little"]) ||
|
|
||||||
(impulseChannels != 14 && impulseChannels != 7)) {
|
|
||||||
[decoder close];
|
|
||||||
decoder = nil;
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
float *impulseBuffer = (float *)_memalign_malloc(sampleCount * sizeof(float) * impulseChannels, 16);
|
|
||||||
if(!impulseBuffer) {
|
|
||||||
[decoder close];
|
|
||||||
decoder = nil;
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if([decoder readAudio:impulseBuffer frames:sampleCount] != sampleCount) {
|
|
||||||
free(impulseBuffer);
|
|
||||||
[decoder close];
|
|
||||||
decoder = nil;
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
[decoder close];
|
|
||||||
decoder = nil;
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
|
|
||||||
cacheObject = [self addImpulse:url sampleCount:sampleCount channelCount:impulseChannels originalSampleRate:sampleRateOfSource targetSampleRate:sampleRateOfSource impulseBuffer:impulseBuffer];
|
|
||||||
|
|
||||||
free(impulseBuffer);
|
|
||||||
|
|
||||||
impulseData = (const float *)[cacheObject.data bytes];
|
|
||||||
}
|
|
||||||
|
|
||||||
if(sampleRateOfSource != sampleRate) {
|
|
||||||
double sampleRatio = sampleRate / sampleRateOfSource;
|
|
||||||
int resampledCount = (int)ceil((double)sampleCount * sampleRatio);
|
|
||||||
|
|
||||||
r8bstate *_r8bstate = new r8bstate(impulseChannels, 1024, sampleRateOfSource, sampleRate);
|
|
||||||
|
|
||||||
unsigned long PRIME_LEN_ = MAX(sampleRateOfSource / 20, 1024u);
|
|
||||||
PRIME_LEN_ = MIN(PRIME_LEN_, 16384u);
|
|
||||||
PRIME_LEN_ = MAX(PRIME_LEN_, 2 * LPC_ORDER + 1);
|
|
||||||
|
|
||||||
unsigned int N_samples_to_add_ = sampleRateOfSource;
|
|
||||||
unsigned int N_samples_to_drop_ = sampleRate;
|
|
||||||
|
|
||||||
samples_len(&N_samples_to_add_, &N_samples_to_drop_, 20, 8192u);
|
|
||||||
|
|
||||||
int resamplerLatencyIn = (int)N_samples_to_add_;
|
|
||||||
int resamplerLatencyOut = (int)N_samples_to_drop_;
|
|
||||||
|
|
||||||
float *tempImpulse = (float *)_memalign_malloc((sampleCount + resamplerLatencyIn * 2 + 1024) * sizeof(float) * impulseChannels, 16);
|
|
||||||
if(!tempImpulse) {
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
resampledCount += resamplerLatencyOut * 2 + 1024;
|
|
||||||
|
|
||||||
float *resampledImpulse = (float *)_memalign_malloc(resampledCount * sizeof(float) * impulseChannels, 16);
|
|
||||||
if(!resampledImpulse) {
|
|
||||||
free(tempImpulse);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t prime = MIN(sampleCount, PRIME_LEN_);
|
|
||||||
|
|
||||||
void *extrapolate_buffer = NULL;
|
|
||||||
size_t extrapolate_buffer_size = 0;
|
|
||||||
|
|
||||||
memcpy(tempImpulse + resamplerLatencyIn * impulseChannels, impulseData, sampleCount * sizeof(float) * impulseChannels);
|
|
||||||
lpc_extrapolate_bkwd(tempImpulse + N_samples_to_add_ * impulseChannels, sampleCount, prime, impulseChannels, LPC_ORDER, N_samples_to_add_, &extrapolate_buffer, &extrapolate_buffer_size);
|
|
||||||
lpc_extrapolate_fwd(tempImpulse + N_samples_to_add_ * impulseChannels, sampleCount, prime, impulseChannels, LPC_ORDER, N_samples_to_add_, &extrapolate_buffer, &extrapolate_buffer_size);
|
|
||||||
free(extrapolate_buffer);
|
|
||||||
|
|
||||||
size_t inputDone = 0;
|
|
||||||
size_t outputDone = 0;
|
|
||||||
|
|
||||||
outputDone = _r8bstate->resample(tempImpulse, sampleCount + N_samples_to_add_ * 2, &inputDone, resampledImpulse, resampledCount);
|
|
||||||
|
|
||||||
free(tempImpulse);
|
|
||||||
|
|
||||||
if(outputDone < resampledCount) {
|
|
||||||
outputDone += _r8bstate->flush(resampledImpulse + outputDone * impulseChannels, resampledCount - outputDone);
|
|
||||||
}
|
|
||||||
|
|
||||||
delete _r8bstate;
|
|
||||||
|
|
||||||
outputDone -= N_samples_to_drop_ * 2;
|
|
||||||
|
|
||||||
// Do this instead of the memmove
|
|
||||||
float *resampledImpulseData = resampledImpulse + N_samples_to_drop_ * impulseChannels;
|
|
||||||
|
|
||||||
/*memmove(resampledImpulse, resampledImpulse + N_samples_to_drop_ * impulseChannels, outputDone * sizeof(float) * impulseChannels);*/
|
|
||||||
|
|
||||||
sampleCount = (int)outputDone;
|
|
||||||
|
|
||||||
// Normalize resampled impulse by sample ratio
|
|
||||||
float fSampleRatio = (float)sampleRatio;
|
|
||||||
vDSP_vsdiv(resampledImpulseData, 1, &fSampleRatio, resampledImpulseData, 1, sampleCount * impulseChannels);
|
|
||||||
|
|
||||||
cacheObject = [self addImpulse:url sampleCount:sampleCount channelCount:impulseChannels originalSampleRate:sampleRateOfSource targetSampleRate:sampleRate impulseBuffer:resampledImpulseData];
|
|
||||||
|
|
||||||
free(resampledImpulse);
|
|
||||||
|
|
||||||
impulseData = (const float *)[cacheObject.data bytes];
|
|
||||||
}
|
|
||||||
|
|
||||||
*retSampleCount = sampleCount;
|
|
||||||
*retImpulseChannels = impulseChannels;
|
|
||||||
return impulseData;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation HeadphoneFilter
|
|
||||||
|
|
||||||
enum {
|
|
||||||
speaker_is_back_center = -1,
|
|
||||||
speaker_not_present = -2,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const uint32_t max_speaker_index = 10;
|
|
||||||
|
|
||||||
static const int8_t speakers_to_hesuvi_7[11][2] = {
|
|
||||||
// front left
|
|
||||||
{ 0, 1 },
|
|
||||||
// front right
|
|
||||||
{ 1, 0 },
|
|
||||||
// front center
|
|
||||||
{ 6, 6 },
|
|
||||||
// lfe
|
|
||||||
{ 6, 6 },
|
|
||||||
// back left
|
|
||||||
{ 4, 5 },
|
|
||||||
// back right
|
|
||||||
{ 5, 4 },
|
|
||||||
// front center left
|
|
||||||
{ speaker_not_present, speaker_not_present },
|
|
||||||
// front center right
|
|
||||||
{ speaker_not_present, speaker_not_present },
|
|
||||||
// back center
|
|
||||||
{ speaker_is_back_center, speaker_is_back_center },
|
|
||||||
// side left
|
|
||||||
{ 2, 3 },
|
|
||||||
// side right
|
|
||||||
{ 3, 2 }
|
|
||||||
};
|
|
||||||
|
|
||||||
static const int8_t speakers_to_hesuvi_14[11][2] = {
|
|
||||||
// front left
|
|
||||||
{ 0, 1 },
|
|
||||||
// front right
|
|
||||||
{ 8, 7 },
|
|
||||||
// front center
|
|
||||||
{ 6, 13 },
|
|
||||||
// lfe
|
|
||||||
{ 6, 13 },
|
|
||||||
// back left
|
|
||||||
{ 4, 5 },
|
|
||||||
// back right
|
|
||||||
{ 12, 11 },
|
|
||||||
// front center left
|
|
||||||
{ speaker_not_present, speaker_not_present },
|
|
||||||
// front center right
|
|
||||||
{ speaker_not_present, speaker_not_present },
|
|
||||||
// back center
|
|
||||||
{ speaker_is_back_center, speaker_is_back_center },
|
|
||||||
// side left
|
|
||||||
{ 2, 3 },
|
|
||||||
// side right
|
|
||||||
{ 10, 9 }
|
|
||||||
};
|
|
||||||
|
|
||||||
+ (BOOL)validateImpulseFile:(NSURL *)url {
|
|
||||||
id<CogSource> source = [AudioSource audioSourceForURL:url];
|
|
||||||
if(!source)
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
if(![source open:url])
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
id<CogDecoder> decoder = [AudioDecoder audioDecoderForSource:source];
|
|
||||||
|
|
||||||
if(decoder == nil) {
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(![decoder open:source]) {
|
|
||||||
decoder = nil;
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
NSDictionary *properties = [decoder properties];
|
|
||||||
|
|
||||||
[decoder close];
|
|
||||||
decoder = nil;
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
|
|
||||||
int impulseChannels = [[properties objectForKey:@"channels"] intValue];
|
|
||||||
|
|
||||||
if([[properties objectForKey:@"floatingPoint"] boolValue] != YES ||
|
|
||||||
[[properties objectForKey:@"bitsPerSample"] intValue] != 32 ||
|
|
||||||
!([[properties objectForKey:@"endian"] isEqualToString:@"host"] ||
|
|
||||||
[[properties objectForKey:@"endian"] isEqualToString:@"little"]) ||
|
|
||||||
(impulseChannels != 14 && impulseChannels != 7))
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)initWithImpulseFile:(NSURL *)url forSampleRate:(double)sampleRate withInputChannels:(size_t)channels withConfig:(uint32_t)config {
|
|
||||||
self = [super init];
|
|
||||||
|
|
||||||
if(self) {
|
|
||||||
int sampleCount = 0;
|
|
||||||
int impulseChannels = 0;
|
|
||||||
const float *impulseBuffer = [[impulseCache sharedController] getImpulse:url sampleCount:&sampleCount channelCount:&impulseChannels sampleRate:sampleRate];
|
|
||||||
if(!impulseBuffer) {
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
channelCount = channels;
|
|
||||||
|
|
||||||
bufferSize = 512;
|
|
||||||
fftSize = sampleCount + bufferSize;
|
|
||||||
|
|
||||||
int pow = 1;
|
|
||||||
while(fftSize > 2) {
|
|
||||||
pow++;
|
|
||||||
fftSize /= 2;
|
|
||||||
}
|
|
||||||
fftSize = 2 << pow;
|
|
||||||
|
|
||||||
float *deinterleavedImpulseBuffer = (float *)_memalign_malloc(fftSize * sizeof(float) * impulseChannels, 16);
|
|
||||||
if(!deinterleavedImpulseBuffer) {
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(size_t i = 0; i < impulseChannels; ++i) {
|
|
||||||
cblas_scopy(sampleCount, impulseBuffer + i, impulseChannels, deinterleavedImpulseBuffer + i * fftSize, 1);
|
|
||||||
vDSP_vclr(deinterleavedImpulseBuffer + i * fftSize + sampleCount, 1, fftSize - sampleCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
paddedBufferSize = fftSize;
|
|
||||||
fftSizeOver2 = (fftSize + 1) / 2;
|
|
||||||
const size_t fftSizeOver2Plus1 = fftSizeOver2 + 1; // DFT float overwrites plus one, double doesn't
|
|
||||||
|
|
||||||
dftSetupF = vDSP_DFT_zrop_CreateSetup(nil, fftSize, vDSP_DFT_FORWARD);
|
|
||||||
dftSetupB = vDSP_DFT_zrop_CreateSetup(nil, fftSize, vDSP_DFT_INVERSE);
|
|
||||||
if(!dftSetupF || !dftSetupB) {
|
|
||||||
free(deinterleavedImpulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
paddedSignal = (float *)_memalign_malloc(sizeof(float) * paddedBufferSize, 16);
|
|
||||||
if(!paddedSignal) {
|
|
||||||
free(deinterleavedImpulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
signal_fft.realp = (float *)_memalign_malloc(sizeof(float) * fftSizeOver2Plus1, 16);
|
|
||||||
signal_fft.imagp = (float *)_memalign_malloc(sizeof(float) * fftSizeOver2Plus1, 16);
|
|
||||||
if(!signal_fft.realp || !signal_fft.imagp) {
|
|
||||||
free(deinterleavedImpulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
input_filtered_signal_per_channel[0].realp = (float *)_memalign_malloc(sizeof(float) * fftSizeOver2Plus1, 16);
|
|
||||||
input_filtered_signal_per_channel[0].imagp = (float *)_memalign_malloc(sizeof(float) * fftSizeOver2Plus1, 16);
|
|
||||||
if(!input_filtered_signal_per_channel[0].realp ||
|
|
||||||
!input_filtered_signal_per_channel[0].imagp) {
|
|
||||||
free(deinterleavedImpulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
input_filtered_signal_per_channel[1].realp = (float *)_memalign_malloc(sizeof(float) * fftSizeOver2Plus1, 16);
|
|
||||||
input_filtered_signal_per_channel[1].imagp = (float *)_memalign_malloc(sizeof(float) * fftSizeOver2Plus1, 16);
|
|
||||||
if(!input_filtered_signal_per_channel[1].realp ||
|
|
||||||
!input_filtered_signal_per_channel[1].imagp) {
|
|
||||||
free(deinterleavedImpulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
input_filtered_signal_totals[0].realp = (float *)_memalign_malloc(sizeof(float) * fftSizeOver2Plus1, 16);
|
|
||||||
input_filtered_signal_totals[0].imagp = (float *)_memalign_malloc(sizeof(float) * fftSizeOver2Plus1, 16);
|
|
||||||
if(!input_filtered_signal_totals[0].realp ||
|
|
||||||
!input_filtered_signal_totals[0].imagp) {
|
|
||||||
free(deinterleavedImpulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
input_filtered_signal_totals[1].realp = (float *)_memalign_malloc(sizeof(float) * fftSizeOver2Plus1, 16);
|
|
||||||
input_filtered_signal_totals[1].imagp = (float *)_memalign_malloc(sizeof(float) * fftSizeOver2Plus1, 16);
|
|
||||||
if(!input_filtered_signal_totals[1].realp ||
|
|
||||||
!input_filtered_signal_totals[1].imagp) {
|
|
||||||
free(deinterleavedImpulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
impulse_responses = (DSPSplitComplex *)calloc(sizeof(DSPSplitComplex), channels * 2);
|
|
||||||
if(!impulse_responses) {
|
|
||||||
free(deinterleavedImpulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(size_t i = 0; i < channels; ++i) {
|
|
||||||
impulse_responses[i * 2 + 0].realp = (float *)_memalign_malloc(sizeof(float) * fftSizeOver2Plus1, 16);
|
|
||||||
impulse_responses[i * 2 + 0].imagp = (float *)_memalign_malloc(sizeof(float) * fftSizeOver2Plus1, 16);
|
|
||||||
impulse_responses[i * 2 + 1].realp = (float *)_memalign_malloc(sizeof(float) * fftSizeOver2Plus1, 16);
|
|
||||||
impulse_responses[i * 2 + 1].imagp = (float *)_memalign_malloc(sizeof(float) * fftSizeOver2Plus1, 16);
|
|
||||||
|
|
||||||
if(!impulse_responses[i * 2 + 0].realp || !impulse_responses[i * 2 + 0].imagp ||
|
|
||||||
!impulse_responses[i * 2 + 1].realp || !impulse_responses[i * 2 + 1].imagp) {
|
|
||||||
free(deinterleavedImpulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t channelFlag = [AudioChunk extractChannelFlag:(uint32_t)i fromConfig:config];
|
|
||||||
uint32_t channelIndex = [AudioChunk findChannelIndex:channelFlag];
|
|
||||||
|
|
||||||
int leftInChannel = speaker_not_present;
|
|
||||||
int rightInChannel = speaker_not_present;
|
|
||||||
|
|
||||||
if(impulseChannels == 7) {
|
|
||||||
if(channelIndex <= max_speaker_index) {
|
|
||||||
leftInChannel = speakers_to_hesuvi_7[channelIndex][0];
|
|
||||||
rightInChannel = speakers_to_hesuvi_7[channelIndex][1];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(channelIndex <= max_speaker_index) {
|
|
||||||
leftInChannel = speakers_to_hesuvi_14[channelIndex][0];
|
|
||||||
rightInChannel = speakers_to_hesuvi_14[channelIndex][1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(leftInChannel == speaker_is_back_center || rightInChannel == speaker_is_back_center) {
|
|
||||||
float *temp;
|
|
||||||
if(impulseChannels == 7) {
|
|
||||||
temp = (float *)malloc(sizeof(float) * fftSize);
|
|
||||||
if(!temp) {
|
|
||||||
free(deinterleavedImpulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
cblas_scopy((int)fftSize, deinterleavedImpulseBuffer + 4 * fftSize, 1, temp, 1);
|
|
||||||
vDSP_vadd(temp, 1, deinterleavedImpulseBuffer + 5 * fftSize, 1, temp, 1, fftSize);
|
|
||||||
|
|
||||||
vDSP_ctoz((DSPComplex *)temp, 2, &impulse_responses[i * 2 + 0], 1, fftSizeOver2);
|
|
||||||
vDSP_ctoz((DSPComplex *)temp, 2, &impulse_responses[i * 2 + 1], 1, fftSizeOver2);
|
|
||||||
} else {
|
|
||||||
temp = (float *)malloc(sizeof(float) * fftSize * 2);
|
|
||||||
if(!temp) {
|
|
||||||
free(deinterleavedImpulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
cblas_scopy((int)fftSize, deinterleavedImpulseBuffer + 4 * fftSize, 1, temp, 1);
|
|
||||||
vDSP_vadd(temp, 1, deinterleavedImpulseBuffer + 12 * fftSize, 1, temp, 1, fftSize);
|
|
||||||
|
|
||||||
cblas_scopy((int)fftSize, deinterleavedImpulseBuffer + 5 * fftSize, 1, temp + fftSize, 1);
|
|
||||||
vDSP_vadd(temp + fftSize, 1, deinterleavedImpulseBuffer + 11 * fftSize, 1, temp + fftSize, 1, fftSize);
|
|
||||||
|
|
||||||
vDSP_ctoz((DSPComplex *)temp, 2, &impulse_responses[i * 2 + 0], 1, fftSizeOver2);
|
|
||||||
vDSP_ctoz((DSPComplex *)(temp + fftSize), 2, &impulse_responses[i * 2 + 1], 1, fftSizeOver2);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(temp);
|
|
||||||
} else if(leftInChannel == speaker_not_present || rightInChannel == speaker_not_present) {
|
|
||||||
vDSP_ctoz((DSPComplex *)(deinterleavedImpulseBuffer + impulseChannels * fftSize), 2, &impulse_responses[i * 2 + 0], 1, fftSizeOver2);
|
|
||||||
vDSP_ctoz((DSPComplex *)(deinterleavedImpulseBuffer + impulseChannels * fftSize), 2, &impulse_responses[i * 2 + 1], 1, fftSizeOver2);
|
|
||||||
} else {
|
|
||||||
vDSP_ctoz((DSPComplex *)(deinterleavedImpulseBuffer + leftInChannel * fftSize), 2, &impulse_responses[i * 2 + 0], 1, fftSizeOver2);
|
|
||||||
vDSP_ctoz((DSPComplex *)(deinterleavedImpulseBuffer + rightInChannel * fftSize), 2, &impulse_responses[i * 2 + 1], 1, fftSizeOver2);
|
|
||||||
}
|
|
||||||
|
|
||||||
vDSP_DFT_Execute(dftSetupF, impulse_responses[i * 2 + 0].realp, impulse_responses[i * 2 + 0].imagp, impulse_responses[i * 2 + 0].realp, impulse_responses[i * 2 + 0].imagp);
|
|
||||||
vDSP_DFT_Execute(dftSetupF, impulse_responses[i * 2 + 1].realp, impulse_responses[i * 2 + 1].imagp, impulse_responses[i * 2 + 1].realp, impulse_responses[i * 2 + 1].imagp);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(deinterleavedImpulseBuffer);
|
|
||||||
|
|
||||||
left_result = (float *)_memalign_malloc(sizeof(float) * fftSize, 16);
|
|
||||||
right_result = (float *)_memalign_malloc(sizeof(float) * fftSize, 16);
|
|
||||||
if(!left_result || !right_result)
|
|
||||||
return nil;
|
|
||||||
|
|
||||||
prevInputs = (float **)calloc(channels, sizeof(float *));
|
|
||||||
if(!prevInputs)
|
|
||||||
return nil;
|
|
||||||
for(size_t i = 0; i < channels; ++i) {
|
|
||||||
prevInputs[i] = (float *)_memalign_malloc(sizeof(float) * fftSize, 16);
|
|
||||||
if(!prevInputs[i])
|
|
||||||
return nil;
|
|
||||||
vDSP_vclr(prevInputs[i], 1, fftSize);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)dealloc {
|
|
||||||
if(dftSetupF) vDSP_DFT_DestroySetup(dftSetupF);
|
|
||||||
if(dftSetupB) vDSP_DFT_DestroySetup(dftSetupB);
|
|
||||||
|
|
||||||
free(paddedSignal);
|
|
||||||
|
|
||||||
free(signal_fft.realp);
|
|
||||||
free(signal_fft.imagp);
|
|
||||||
|
|
||||||
free(input_filtered_signal_per_channel[0].realp);
|
|
||||||
free(input_filtered_signal_per_channel[0].imagp);
|
|
||||||
free(input_filtered_signal_per_channel[1].realp);
|
|
||||||
free(input_filtered_signal_per_channel[1].imagp);
|
|
||||||
|
|
||||||
free(input_filtered_signal_totals[0].realp);
|
|
||||||
free(input_filtered_signal_totals[0].imagp);
|
|
||||||
free(input_filtered_signal_totals[1].realp);
|
|
||||||
free(input_filtered_signal_totals[1].imagp);
|
|
||||||
|
|
||||||
if(impulse_responses) {
|
|
||||||
for(size_t i = 0; i < channelCount * 2; ++i) {
|
|
||||||
free(impulse_responses[i].realp);
|
|
||||||
free(impulse_responses[i].imagp);
|
|
||||||
}
|
|
||||||
free(impulse_responses);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(left_result);
|
|
||||||
free(right_result);
|
|
||||||
|
|
||||||
if(prevInputs) {
|
|
||||||
for(size_t i = 0; i < channelCount; ++i) {
|
|
||||||
free(prevInputs[i]);
|
|
||||||
}
|
|
||||||
free(prevInputs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)process:(const float *)inBuffer sampleCount:(size_t)count toBuffer:(float *)outBuffer {
|
|
||||||
const float scale = 1.0 / (4.0 * (float)fftSize);
|
|
||||||
|
|
||||||
while(count > 0) {
|
|
||||||
const size_t countToDo = (count > bufferSize) ? bufferSize : count;
|
|
||||||
const size_t prevToDo = fftSize - countToDo;
|
|
||||||
|
|
||||||
vDSP_vclr(input_filtered_signal_totals[0].realp, 1, fftSizeOver2);
|
|
||||||
vDSP_vclr(input_filtered_signal_totals[0].imagp, 1, fftSizeOver2);
|
|
||||||
vDSP_vclr(input_filtered_signal_totals[1].realp, 1, fftSizeOver2);
|
|
||||||
vDSP_vclr(input_filtered_signal_totals[1].imagp, 1, fftSizeOver2);
|
|
||||||
|
|
||||||
for(size_t i = 0; i < channelCount; ++i) {
|
|
||||||
cblas_scopy((int)prevToDo, prevInputs[i] + countToDo, 1, paddedSignal, 1);
|
|
||||||
cblas_scopy((int)countToDo, inBuffer + i, (int)channelCount, paddedSignal + prevToDo, 1);
|
|
||||||
cblas_scopy((int)fftSize, paddedSignal, 1, prevInputs[i], 1);
|
|
||||||
|
|
||||||
vDSP_ctoz((DSPComplex *)paddedSignal, 2, &signal_fft, 1, fftSizeOver2);
|
|
||||||
|
|
||||||
vDSP_DFT_Execute(dftSetupF, signal_fft.realp, signal_fft.imagp, signal_fft.realp, signal_fft.imagp);
|
|
||||||
|
|
||||||
// One channel forward, then multiply and back twice
|
|
||||||
|
|
||||||
float preserveIRNyq = impulse_responses[i * 2 + 0].imagp[0];
|
|
||||||
float preserveSigNyq = signal_fft.imagp[0];
|
|
||||||
impulse_responses[i * 2 + 0].imagp[0] = 0;
|
|
||||||
signal_fft.imagp[0] = 0;
|
|
||||||
|
|
||||||
vDSP_zvmul(&signal_fft, 1, &impulse_responses[i * 2 + 0], 1, &input_filtered_signal_per_channel[0], 1, fftSizeOver2, 1);
|
|
||||||
|
|
||||||
input_filtered_signal_per_channel[0].imagp[0] = preserveIRNyq * preserveSigNyq;
|
|
||||||
impulse_responses[i * 2 + 0].imagp[0] = preserveIRNyq;
|
|
||||||
|
|
||||||
preserveIRNyq = impulse_responses[i * 2 + 1].imagp[0];
|
|
||||||
impulse_responses[i * 2 + 1].imagp[0] = 0;
|
|
||||||
|
|
||||||
vDSP_zvmul(&signal_fft, 1, &impulse_responses[i * 2 + 1], 1, &input_filtered_signal_per_channel[1], 1, fftSizeOver2, 1);
|
|
||||||
|
|
||||||
input_filtered_signal_per_channel[1].imagp[0] = preserveIRNyq * preserveSigNyq;
|
|
||||||
impulse_responses[i * 2 + 1].imagp[0] = preserveIRNyq;
|
|
||||||
|
|
||||||
vDSP_zvadd(&input_filtered_signal_totals[0], 1, &input_filtered_signal_per_channel[0], 1, &input_filtered_signal_totals[0], 1, fftSizeOver2);
|
|
||||||
vDSP_zvadd(&input_filtered_signal_totals[1], 1, &input_filtered_signal_per_channel[1], 1, &input_filtered_signal_totals[1], 1, fftSizeOver2);
|
|
||||||
}
|
|
||||||
|
|
||||||
vDSP_DFT_Execute(dftSetupB, input_filtered_signal_totals[0].realp, input_filtered_signal_totals[0].imagp, input_filtered_signal_totals[0].realp, input_filtered_signal_totals[0].imagp);
|
|
||||||
vDSP_DFT_Execute(dftSetupB, input_filtered_signal_totals[1].realp, input_filtered_signal_totals[1].imagp, input_filtered_signal_totals[1].realp, input_filtered_signal_totals[1].imagp);
|
|
||||||
|
|
||||||
vDSP_ztoc(&input_filtered_signal_totals[0], 1, (DSPComplex *)left_result, 2, fftSizeOver2);
|
|
||||||
vDSP_ztoc(&input_filtered_signal_totals[1], 1, (DSPComplex *)right_result, 2, fftSizeOver2);
|
|
||||||
|
|
||||||
float *left_ptr = left_result + prevToDo;
|
|
||||||
float *right_ptr = right_result + prevToDo;
|
|
||||||
|
|
||||||
vDSP_vsmul(left_ptr, 1, &scale, left_ptr, 1, countToDo);
|
|
||||||
vDSP_vsmul(right_ptr, 1, &scale, right_ptr, 1, countToDo);
|
|
||||||
|
|
||||||
cblas_scopy((int)countToDo, left_ptr, 1, outBuffer + 0, 2);
|
|
||||||
cblas_scopy((int)countToDo, right_ptr, 1, outBuffer + 1, 2);
|
|
||||||
|
|
||||||
inBuffer += countToDo * channelCount;
|
|
||||||
outBuffer += countToDo * 2;
|
|
||||||
|
|
||||||
count -= countToDo;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)reset {
|
|
||||||
for(size_t i = 0; i < channelCount; ++i) {
|
|
||||||
vDSP_vclr(prevInputs[i], 1, fftSize);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,45 +0,0 @@
|
||||||
//
|
|
||||||
// HeadphoneFilter.h
|
|
||||||
// CogAudio Framework
|
|
||||||
//
|
|
||||||
// Created by Christopher Snowhill on 1/24/22.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef HeadphoneFilter_h
|
|
||||||
#define HeadphoneFilter_h
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
|
|
||||||
#import "pffft.h"
|
|
||||||
|
|
||||||
@interface HeadphoneFilter : NSObject {
|
|
||||||
PFFFT_Setup *fftSetup;
|
|
||||||
|
|
||||||
size_t fftSize;
|
|
||||||
size_t bufferSize;
|
|
||||||
size_t paddedBufferSize;
|
|
||||||
size_t channelCount;
|
|
||||||
|
|
||||||
float *workBuffer;
|
|
||||||
|
|
||||||
float **impulse_responses;
|
|
||||||
|
|
||||||
float **prevInputs;
|
|
||||||
|
|
||||||
float *left_result;
|
|
||||||
float *right_result;
|
|
||||||
|
|
||||||
float *paddedSignal;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ (BOOL)validateImpulseFile:(NSURL *)url;
|
|
||||||
|
|
||||||
- (id)initWithImpulseFile:(NSURL *)url forSampleRate:(double)sampleRate withInputChannels:(size_t)channels withConfig:(uint32_t)config;
|
|
||||||
|
|
||||||
- (void)process:(const float *)inBuffer sampleCount:(size_t)count toBuffer:(float *)outBuffer;
|
|
||||||
|
|
||||||
- (void)reset;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
#endif /* HeadphoneFilter_h */
|
|
|
@ -1,447 +0,0 @@
|
||||||
//
|
|
||||||
// HeadphoneFilter.m
|
|
||||||
// CogAudio Framework
|
|
||||||
//
|
|
||||||
// Created by Christopher Snowhill on 1/24/22.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "AudioChunk.h"
|
|
||||||
#import "AudioDecoder.h"
|
|
||||||
#import "AudioSource.h"
|
|
||||||
#import "HeadphoneFilter.h"
|
|
||||||
|
|
||||||
#import <stdlib.h>
|
|
||||||
|
|
||||||
#import "r8bstate.h"
|
|
||||||
|
|
||||||
#import "lpc.h"
|
|
||||||
#import "util.h"
|
|
||||||
|
|
||||||
#import "pffft_double.h"
|
|
||||||
|
|
||||||
@implementation HeadphoneFilter
|
|
||||||
|
|
||||||
enum {
|
|
||||||
speaker_is_back_center = -1,
|
|
||||||
speaker_not_present = -2,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const uint32_t max_speaker_index = 10;
|
|
||||||
|
|
||||||
static const int8_t speakers_to_hesuvi_7[11][2] = {
|
|
||||||
// front left
|
|
||||||
{ 0, 1 },
|
|
||||||
// front right
|
|
||||||
{ 1, 0 },
|
|
||||||
// front center
|
|
||||||
{ 6, 6 },
|
|
||||||
// lfe
|
|
||||||
{ 6, 6 },
|
|
||||||
// back left
|
|
||||||
{ 4, 5 },
|
|
||||||
// back right
|
|
||||||
{ 5, 4 },
|
|
||||||
// front center left
|
|
||||||
{ speaker_not_present, speaker_not_present },
|
|
||||||
// front center right
|
|
||||||
{ speaker_not_present, speaker_not_present },
|
|
||||||
// back center
|
|
||||||
{ speaker_is_back_center, speaker_is_back_center },
|
|
||||||
// side left
|
|
||||||
{ 2, 3 },
|
|
||||||
// side right
|
|
||||||
{ 3, 2 }
|
|
||||||
};
|
|
||||||
|
|
||||||
static const int8_t speakers_to_hesuvi_14[11][2] = {
|
|
||||||
// front left
|
|
||||||
{ 0, 1 },
|
|
||||||
// front right
|
|
||||||
{ 8, 7 },
|
|
||||||
// front center
|
|
||||||
{ 6, 13 },
|
|
||||||
// lfe
|
|
||||||
{ 6, 13 },
|
|
||||||
// back left
|
|
||||||
{ 4, 5 },
|
|
||||||
// back right
|
|
||||||
{ 12, 11 },
|
|
||||||
// front center left
|
|
||||||
{ speaker_not_present, speaker_not_present },
|
|
||||||
// front center right
|
|
||||||
{ speaker_not_present, speaker_not_present },
|
|
||||||
// back center
|
|
||||||
{ speaker_is_back_center, speaker_is_back_center },
|
|
||||||
// side left
|
|
||||||
{ 2, 3 },
|
|
||||||
// side right
|
|
||||||
{ 10, 9 }
|
|
||||||
};
|
|
||||||
|
|
||||||
+ (BOOL)validateImpulseFile:(NSURL *)url {
|
|
||||||
id<CogSource> source = [AudioSource audioSourceForURL:url];
|
|
||||||
if(!source)
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
if(![source open:url])
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
id<CogDecoder> decoder = [AudioDecoder audioDecoderForSource:source];
|
|
||||||
|
|
||||||
if(decoder == nil) {
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(![decoder open:source]) {
|
|
||||||
decoder = nil;
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
NSDictionary *properties = [decoder properties];
|
|
||||||
|
|
||||||
[decoder close];
|
|
||||||
decoder = nil;
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
|
|
||||||
int impulseChannels = [[properties objectForKey:@"channels"] intValue];
|
|
||||||
|
|
||||||
if([[properties objectForKey:@"floatingPoint"] boolValue] != YES ||
|
|
||||||
[[properties objectForKey:@"bitsPerSample"] intValue] != 32 ||
|
|
||||||
!([[properties objectForKey:@"endian"] isEqualToString:@"host"] ||
|
|
||||||
[[properties objectForKey:@"endian"] isEqualToString:@"little"]) ||
|
|
||||||
(impulseChannels != 14 && impulseChannels != 7))
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)initWithImpulseFile:(NSURL *)url forSampleRate:(double)sampleRate withInputChannels:(size_t)channels withConfig:(uint32_t)config {
|
|
||||||
self = [super init];
|
|
||||||
|
|
||||||
if(self) {
|
|
||||||
id<CogSource> source = [AudioSource audioSourceForURL:url];
|
|
||||||
if(!source)
|
|
||||||
return nil;
|
|
||||||
|
|
||||||
if(![source open:url])
|
|
||||||
return nil;
|
|
||||||
|
|
||||||
id<CogDecoder> decoder = [AudioDecoder audioDecoderForSource:source];
|
|
||||||
|
|
||||||
if(decoder == nil) {
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(![decoder open:source]) {
|
|
||||||
decoder = nil;
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
NSDictionary *properties = [decoder properties];
|
|
||||||
|
|
||||||
double sampleRateOfSource = [[properties objectForKey:@"sampleRate"] doubleValue];
|
|
||||||
|
|
||||||
int sampleCount = [[properties objectForKey:@"totalFrames"] intValue];
|
|
||||||
int impulseChannels = [[properties objectForKey:@"channels"] intValue];
|
|
||||||
|
|
||||||
if([[properties objectForKey:@"floatingPoint"] boolValue] != YES ||
|
|
||||||
[[properties objectForKey:@"bitsPerSample"] intValue] != 32 ||
|
|
||||||
!([[properties objectForKey:@"endian"] isEqualToString:@"host"] ||
|
|
||||||
[[properties objectForKey:@"endian"] isEqualToString:@"little"]) ||
|
|
||||||
(impulseChannels != 14 && impulseChannels != 7)) {
|
|
||||||
[decoder close];
|
|
||||||
decoder = nil;
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
float *impulseBuffer = (float *)pffft_aligned_malloc(sampleCount * sizeof(float) * impulseChannels);
|
|
||||||
if(!impulseBuffer) {
|
|
||||||
[decoder close];
|
|
||||||
decoder = nil;
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
if([decoder readAudio:impulseBuffer frames:sampleCount] != sampleCount) {
|
|
||||||
pffft_aligned_free(impulseBuffer);
|
|
||||||
[decoder close];
|
|
||||||
decoder = nil;
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
[decoder close];
|
|
||||||
decoder = nil;
|
|
||||||
[source close];
|
|
||||||
source = nil;
|
|
||||||
|
|
||||||
if(sampleRateOfSource != sampleRate) {
|
|
||||||
double sampleRatio = sampleRate / sampleRateOfSource;
|
|
||||||
int resampledCount = (int)ceil((double)sampleCount * sampleRatio);
|
|
||||||
|
|
||||||
r8bstate *_r8bstate = new r8bstate(impulseChannels, 1024, sampleRateOfSource, sampleRate);
|
|
||||||
|
|
||||||
unsigned long PRIME_LEN_ = MAX(sampleRateOfSource / 20, 1024u);
|
|
||||||
PRIME_LEN_ = MIN(PRIME_LEN_, 16384u);
|
|
||||||
PRIME_LEN_ = MAX(PRIME_LEN_, 2 * LPC_ORDER + 1);
|
|
||||||
|
|
||||||
unsigned int N_samples_to_add_ = sampleRateOfSource;
|
|
||||||
unsigned int N_samples_to_drop_ = sampleRate;
|
|
||||||
|
|
||||||
samples_len(&N_samples_to_add_, &N_samples_to_drop_, 20, 8192u);
|
|
||||||
|
|
||||||
int resamplerLatencyIn = (int)N_samples_to_add_;
|
|
||||||
int resamplerLatencyOut = (int)N_samples_to_drop_;
|
|
||||||
|
|
||||||
float *tempImpulse = (float *)pffft_aligned_malloc((sampleCount + resamplerLatencyIn * 2 + 1024) * sizeof(float) * impulseChannels);
|
|
||||||
if(!tempImpulse) {
|
|
||||||
pffft_aligned_free(impulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
resampledCount += resamplerLatencyOut * 2 + 1024;
|
|
||||||
|
|
||||||
float *resampledImpulse = (float *)pffft_aligned_malloc(resampledCount * sizeof(float) * impulseChannels);
|
|
||||||
if(!resampledImpulse) {
|
|
||||||
pffft_aligned_free(impulseBuffer);
|
|
||||||
pffft_aligned_free(tempImpulse);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t prime = MIN(sampleCount, PRIME_LEN_);
|
|
||||||
|
|
||||||
void *extrapolate_buffer = NULL;
|
|
||||||
size_t extrapolate_buffer_size = 0;
|
|
||||||
|
|
||||||
memcpy(tempImpulse + resamplerLatencyIn * impulseChannels, impulseBuffer, sampleCount * sizeof(float) * impulseChannels);
|
|
||||||
lpc_extrapolate_bkwd(tempImpulse + N_samples_to_add_ * impulseChannels, sampleCount, prime, impulseChannels, LPC_ORDER, N_samples_to_add_, &extrapolate_buffer, &extrapolate_buffer_size);
|
|
||||||
lpc_extrapolate_fwd(tempImpulse + N_samples_to_add_ * impulseChannels, sampleCount, prime, impulseChannels, LPC_ORDER, N_samples_to_add_, &extrapolate_buffer, &extrapolate_buffer_size);
|
|
||||||
free(extrapolate_buffer);
|
|
||||||
|
|
||||||
size_t inputDone = 0;
|
|
||||||
size_t outputDone = 0;
|
|
||||||
|
|
||||||
outputDone = _r8bstate->resample(tempImpulse, sampleCount + N_samples_to_add_ * 2, &inputDone, resampledImpulse, resampledCount);
|
|
||||||
|
|
||||||
if(outputDone < resampledCount) {
|
|
||||||
outputDone += _r8bstate->flush(resampledImpulse + outputDone * impulseChannels, resampledCount - outputDone);
|
|
||||||
}
|
|
||||||
|
|
||||||
delete _r8bstate;
|
|
||||||
|
|
||||||
outputDone -= N_samples_to_drop_ * 2;
|
|
||||||
|
|
||||||
memmove(resampledImpulse, resampledImpulse + N_samples_to_drop_ * impulseChannels, outputDone * sizeof(float) * impulseChannels);
|
|
||||||
|
|
||||||
pffft_aligned_free(tempImpulse);
|
|
||||||
pffft_aligned_free(impulseBuffer);
|
|
||||||
impulseBuffer = resampledImpulse;
|
|
||||||
sampleCount = (int)outputDone;
|
|
||||||
|
|
||||||
// Normalize resampled impulse by sample ratio
|
|
||||||
float fSampleRatio = (float)sampleRatio;
|
|
||||||
vDSP_vsdiv(impulseBuffer, 1, &fSampleRatio, impulseBuffer, 1, sampleCount * impulseChannels);
|
|
||||||
}
|
|
||||||
|
|
||||||
channelCount = channels;
|
|
||||||
|
|
||||||
bufferSize = 512;
|
|
||||||
fftSize = sampleCount + bufferSize;
|
|
||||||
|
|
||||||
fftSize = (size_t)pffftd_next_power_of_two((int)fftSize);
|
|
||||||
|
|
||||||
float *deinterleavedImpulseBuffer = (float *)pffft_aligned_malloc(fftSize * sizeof(float) * impulseChannels);
|
|
||||||
if(!deinterleavedImpulseBuffer) {
|
|
||||||
pffft_aligned_free(impulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(size_t i = 0; i < impulseChannels; ++i) {
|
|
||||||
cblas_scopy(sampleCount, impulseBuffer + i, impulseChannels, deinterleavedImpulseBuffer + i * fftSize, 1);
|
|
||||||
vDSP_vclr(deinterleavedImpulseBuffer + i * fftSize + sampleCount, 1, fftSize - sampleCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
pffft_aligned_free(impulseBuffer);
|
|
||||||
|
|
||||||
paddedBufferSize = fftSize;
|
|
||||||
|
|
||||||
fftSetup = pffft_new_setup((int)fftSize, PFFFT_REAL);
|
|
||||||
if(!fftSetup) {
|
|
||||||
pffft_aligned_free(deinterleavedImpulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
workBuffer = (float *)pffft_aligned_malloc(sizeof(float) * fftSize);
|
|
||||||
if(!workBuffer) {
|
|
||||||
pffft_aligned_free(deinterleavedImpulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
paddedSignal = (float *)pffft_aligned_malloc(sizeof(float) * paddedBufferSize);
|
|
||||||
if(!paddedSignal) {
|
|
||||||
pffft_aligned_free(deinterleavedImpulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
impulse_responses = (float **)calloc(sizeof(float *), channels * 2);
|
|
||||||
if(!impulse_responses) {
|
|
||||||
pffft_aligned_free(deinterleavedImpulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(size_t i = 0; i < channels; ++i) {
|
|
||||||
impulse_responses[i * 2 + 0] = (float *)pffft_aligned_malloc(sizeof(float) * fftSize * 2);
|
|
||||||
impulse_responses[i * 2 + 1] = (float *)pffft_aligned_malloc(sizeof(float) * fftSize * 2);
|
|
||||||
|
|
||||||
if(!impulse_responses[i * 2 + 0] || !impulse_responses[i * 2 + 1]) {
|
|
||||||
pffft_aligned_free(deinterleavedImpulseBuffer);
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t channelFlag = [AudioChunk extractChannelFlag:(uint32_t)i fromConfig:config];
|
|
||||||
uint32_t channelIndex = [AudioChunk findChannelIndex:channelFlag];
|
|
||||||
|
|
||||||
int leftInChannel = speaker_not_present;
|
|
||||||
int rightInChannel = speaker_not_present;
|
|
||||||
|
|
||||||
if(impulseChannels == 7) {
|
|
||||||
if(channelIndex <= max_speaker_index) {
|
|
||||||
leftInChannel = speakers_to_hesuvi_7[channelIndex][0];
|
|
||||||
rightInChannel = speakers_to_hesuvi_7[channelIndex][1];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(channelIndex <= max_speaker_index) {
|
|
||||||
leftInChannel = speakers_to_hesuvi_14[channelIndex][0];
|
|
||||||
rightInChannel = speakers_to_hesuvi_14[channelIndex][1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(leftInChannel == speaker_is_back_center || rightInChannel == speaker_is_back_center) {
|
|
||||||
if(impulseChannels == 7) {
|
|
||||||
cblas_scopy((int)fftSize, deinterleavedImpulseBuffer + 4 * fftSize, 1, impulse_responses[i * 2 + 0], 1);
|
|
||||||
vDSP_vadd(impulse_responses[i * 2 + 0], 1, deinterleavedImpulseBuffer + 5 * fftSize, 1, impulse_responses[i * 2 + 0], 1, fftSize);
|
|
||||||
cblas_scopy((int)fftSize, impulse_responses[i * 2 + 0], 1, impulse_responses[i * 2 + 1], 1);
|
|
||||||
} else {
|
|
||||||
cblas_scopy((int)fftSize, deinterleavedImpulseBuffer + 4 * fftSize, 1, impulse_responses[i * 2 + 0], 1);
|
|
||||||
vDSP_vadd(impulse_responses[i * 2 + 0], 1, deinterleavedImpulseBuffer + 12 * fftSize, 1, impulse_responses[i * 2 + 0], 1, fftSize);
|
|
||||||
|
|
||||||
cblas_scopy((int)fftSize, deinterleavedImpulseBuffer + 5 * fftSize, 1, impulse_responses[i * 2 + 1], 1);
|
|
||||||
vDSP_vadd(impulse_responses[i * 2 + 1], 1, deinterleavedImpulseBuffer + 11 * fftSize, 1, impulse_responses[i * 2 + 1], 1, fftSize);
|
|
||||||
}
|
|
||||||
} else if(leftInChannel == speaker_not_present || rightInChannel == speaker_not_present) {
|
|
||||||
vDSP_vclr(impulse_responses[i * 2 + 0], 1, fftSize);
|
|
||||||
vDSP_vclr(impulse_responses[i * 2 + 1], 1, fftSize);
|
|
||||||
} else {
|
|
||||||
cblas_scopy((int)fftSize, deinterleavedImpulseBuffer + leftInChannel * fftSize, 1, impulse_responses[i * 2 + 0], 1);
|
|
||||||
cblas_scopy((int)fftSize, deinterleavedImpulseBuffer + rightInChannel * fftSize, 1, impulse_responses[i * 2 + 1], 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
pffft_transform(fftSetup, impulse_responses[i * 2 + 0], impulse_responses[i * 2 + 0], workBuffer, PFFFT_FORWARD);
|
|
||||||
pffft_transform(fftSetup, impulse_responses[i * 2 + 1], impulse_responses[i * 2 + 1], workBuffer, PFFFT_FORWARD);
|
|
||||||
}
|
|
||||||
|
|
||||||
pffft_aligned_free(deinterleavedImpulseBuffer);
|
|
||||||
|
|
||||||
left_result = (float *)pffft_aligned_malloc(sizeof(float) * fftSize);
|
|
||||||
right_result = (float *)pffft_aligned_malloc(sizeof(float) * fftSize);
|
|
||||||
if(!left_result || !right_result)
|
|
||||||
return nil;
|
|
||||||
|
|
||||||
prevInputs = (float **)calloc(sizeof(float *), channels);
|
|
||||||
if(!prevInputs) {
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
for(size_t i = 0; i < channels; ++i) {
|
|
||||||
prevInputs[i] = (float *)pffft_aligned_malloc(sizeof(float) * fftSize);
|
|
||||||
if(!prevInputs[i]) {
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
vDSP_vclr(prevInputs[i], 1, fftSize);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)dealloc {
|
|
||||||
if(fftSetup) pffft_destroy_setup(fftSetup);
|
|
||||||
|
|
||||||
pffft_aligned_free(workBuffer);
|
|
||||||
|
|
||||||
pffft_aligned_free(paddedSignal);
|
|
||||||
|
|
||||||
if(impulse_responses) {
|
|
||||||
for(size_t i = 0; i < channelCount * 2; ++i) {
|
|
||||||
pffft_aligned_free(impulse_responses[i]);
|
|
||||||
}
|
|
||||||
free(impulse_responses);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(prevInputs) {
|
|
||||||
for(size_t i = 0; i < channelCount; ++i) {
|
|
||||||
pffft_aligned_free(prevInputs[i]);
|
|
||||||
}
|
|
||||||
free(prevInputs);
|
|
||||||
}
|
|
||||||
|
|
||||||
pffft_aligned_free(left_result);
|
|
||||||
pffft_aligned_free(right_result);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)process:(const float *)inBuffer sampleCount:(size_t)count toBuffer:(float *)outBuffer {
|
|
||||||
const float scale = 1.0 / ((float)fftSize);
|
|
||||||
|
|
||||||
while(count > 0) {
|
|
||||||
const size_t countToDo = (count > bufferSize) ? bufferSize : count;
|
|
||||||
const size_t outOffset = fftSize - countToDo;
|
|
||||||
|
|
||||||
vDSP_vclr(left_result, 1, fftSize);
|
|
||||||
vDSP_vclr(right_result, 1, fftSize);
|
|
||||||
|
|
||||||
for(size_t i = 0; i < channelCount; ++i) {
|
|
||||||
cblas_scopy((int)outOffset, prevInputs[i] + countToDo, 1, paddedSignal, 1);
|
|
||||||
cblas_scopy((int)countToDo, inBuffer + i, (int)channelCount, paddedSignal + outOffset, 1);
|
|
||||||
cblas_scopy((int)fftSize, paddedSignal, 1, prevInputs[i], 1);
|
|
||||||
|
|
||||||
pffft_transform(fftSetup, paddedSignal, paddedSignal, workBuffer, PFFFT_FORWARD);
|
|
||||||
|
|
||||||
pffft_zconvolve_accumulate(fftSetup, paddedSignal, impulse_responses[i * 2 + 0], left_result, 1.0);
|
|
||||||
pffft_zconvolve_accumulate(fftSetup, paddedSignal, impulse_responses[i * 2 + 1], right_result, 1.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
pffft_transform(fftSetup, left_result, left_result, workBuffer, PFFFT_BACKWARD);
|
|
||||||
pffft_transform(fftSetup, right_result, right_result, workBuffer, PFFFT_BACKWARD);
|
|
||||||
|
|
||||||
vDSP_vsmul(left_result + outOffset, 1, &scale, left_result + outOffset, 1, countToDo);
|
|
||||||
vDSP_vsmul(right_result + outOffset, 1, &scale, right_result + outOffset, 1, countToDo);
|
|
||||||
|
|
||||||
cblas_scopy((int)countToDo, left_result + outOffset, 1, outBuffer + 0, 2);
|
|
||||||
cblas_scopy((int)countToDo, right_result + outOffset, 1, outBuffer + 1, 2);
|
|
||||||
|
|
||||||
inBuffer += countToDo * channelCount;
|
|
||||||
outBuffer += countToDo * 2;
|
|
||||||
|
|
||||||
count -= countToDo;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)reset {
|
|
||||||
for(size_t i = 0; i < channelCount; ++i) {
|
|
||||||
vDSP_vclr(prevInputs[i], 1, fftSize);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -214,7 +214,8 @@ static void *kInputNodeContext = &kInputNodeContext;
|
||||||
// wait before exiting, as we might still get seeking request
|
// wait before exiting, as we might still get seeking request
|
||||||
DLog("InputNode: Before wait")
|
DLog("InputNode: Before wait")
|
||||||
[exitAtTheEndOfTheStream waitIndefinitely];
|
[exitAtTheEndOfTheStream waitIndefinitely];
|
||||||
DLog("InputNode: After wait, should seek = %d", shouldSeek) if(shouldSeek) {
|
DLog("InputNode: After wait, should seek = %d", shouldSeek);
|
||||||
|
if(shouldSeek) {
|
||||||
endOfStream = NO;
|
endOfStream = NO;
|
||||||
shouldClose = NO;
|
shouldClose = NO;
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#import "BufferChain.h"
|
#import "BufferChain.h"
|
||||||
#import "Logging.h"
|
#import "Logging.h"
|
||||||
|
|
||||||
#import "OutputCoreAudio.h"
|
#import "OutputAVFoundation.h"
|
||||||
|
|
||||||
#import <pthread.h>
|
#import <pthread.h>
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#import <CoreAudio/AudioHardware.h>
|
#import <CoreAudio/AudioHardware.h>
|
||||||
|
|
||||||
#import "Node.h"
|
#import "Node.h"
|
||||||
#import "OutputCoreAudio.h"
|
#import "OutputAVFoundation.h"
|
||||||
|
|
||||||
@interface OutputNode : Node {
|
@interface OutputNode : Node {
|
||||||
AudioStreamBasicDescription format;
|
AudioStreamBasicDescription format;
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
double amountPlayed;
|
double amountPlayed;
|
||||||
double amountPlayedInterval;
|
double amountPlayedInterval;
|
||||||
OutputCoreAudio *output;
|
OutputAVFoundation *output;
|
||||||
|
|
||||||
BOOL paused;
|
BOOL paused;
|
||||||
BOOL started;
|
BOOL started;
|
||||||
|
@ -39,6 +39,7 @@
|
||||||
- (void)resetAmountPlayed;
|
- (void)resetAmountPlayed;
|
||||||
- (void)resetAmountPlayedInterval;
|
- (void)resetAmountPlayedInterval;
|
||||||
|
|
||||||
|
- (BOOL)selectNextBuffer;
|
||||||
- (void)endOfInputPlayed;
|
- (void)endOfInputPlayed;
|
||||||
|
|
||||||
- (BOOL)chainQueueHasTracks;
|
- (BOOL)chainQueueHasTracks;
|
||||||
|
@ -50,6 +51,8 @@
|
||||||
- (void)close;
|
- (void)close;
|
||||||
- (void)seek:(double)time;
|
- (void)seek:(double)time;
|
||||||
|
|
||||||
|
- (double)latency;
|
||||||
|
|
||||||
- (AudioChunk *)readChunk:(size_t)amount;
|
- (AudioChunk *)readChunk:(size_t)amount;
|
||||||
|
|
||||||
- (void)setFormat:(AudioStreamBasicDescription *)f channelConfig:(uint32_t)channelConfig;
|
- (void)setFormat:(AudioStreamBasicDescription *)f channelConfig:(uint32_t)channelConfig;
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#import "OutputNode.h"
|
#import "OutputNode.h"
|
||||||
#import "AudioPlayer.h"
|
#import "AudioPlayer.h"
|
||||||
#import "BufferChain.h"
|
#import "BufferChain.h"
|
||||||
#import "OutputCoreAudio.h"
|
#import "OutputAVFoundation.h"
|
||||||
|
|
||||||
#import "Logging.h"
|
#import "Logging.h"
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
started = NO;
|
started = NO;
|
||||||
intervalReported = NO;
|
intervalReported = NO;
|
||||||
|
|
||||||
output = [[OutputCoreAudio alloc] initWithController:self];
|
output = [[OutputAVFoundation alloc] initWithController:self];
|
||||||
|
|
||||||
[output setup];
|
[output setup];
|
||||||
}
|
}
|
||||||
|
@ -68,6 +68,10 @@
|
||||||
intervalReported = NO;
|
intervalReported = NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)selectNextBuffer {
|
||||||
|
return [controller selectNextBuffer];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)endOfInputPlayed {
|
- (void)endOfInputPlayed {
|
||||||
if(!intervalReported) {
|
if(!intervalReported) {
|
||||||
intervalReported = YES;
|
intervalReported = YES;
|
||||||
|
@ -137,8 +141,6 @@
|
||||||
format.mBytesPerPacket = format.mBytesPerFrame * format.mFramesPerPacket;
|
format.mBytesPerPacket = format.mBytesPerFrame * format.mFramesPerPacket;
|
||||||
channelConfig = config;
|
channelConfig = config;
|
||||||
|
|
||||||
[converter setOutputFormat:format
|
|
||||||
outputConfig:channelConfig];
|
|
||||||
[converter inputFormatDidChange:[bufferChain inputFormat] inputConfig:[bufferChain inputConfig]];
|
[converter inputFormatDidChange:[bufferChain inputFormat] inputConfig:[bufferChain inputConfig]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -184,4 +186,8 @@
|
||||||
[controller restartPlaybackAtCurrentPosition];
|
[controller restartPlaybackAtCurrentPosition];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (double)latency {
|
||||||
|
return [output latency];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -25,8 +25,8 @@
|
||||||
17D21CA80B8BE4BA00D1EBDE /* Node.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21C7D0B8BE4BA00D1EBDE /* Node.m */; };
|
17D21CA80B8BE4BA00D1EBDE /* Node.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21C7D0B8BE4BA00D1EBDE /* Node.m */; };
|
||||||
17D21CA90B8BE4BA00D1EBDE /* OutputNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21C7E0B8BE4BA00D1EBDE /* OutputNode.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
17D21CA90B8BE4BA00D1EBDE /* OutputNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21C7E0B8BE4BA00D1EBDE /* OutputNode.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
17D21CAA0B8BE4BA00D1EBDE /* OutputNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21C7F0B8BE4BA00D1EBDE /* OutputNode.m */; };
|
17D21CAA0B8BE4BA00D1EBDE /* OutputNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21C7F0B8BE4BA00D1EBDE /* OutputNode.m */; };
|
||||||
17D21CC50B8BE4BA00D1EBDE /* OutputCoreAudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21C9C0B8BE4BA00D1EBDE /* OutputCoreAudio.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
17D21CC50B8BE4BA00D1EBDE /* OutputAVFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21C9C0B8BE4BA00D1EBDE /* OutputAVFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
17D21CC60B8BE4BA00D1EBDE /* OutputCoreAudio.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21C9D0B8BE4BA00D1EBDE /* OutputCoreAudio.m */; };
|
17D21CC60B8BE4BA00D1EBDE /* OutputAVFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21C9D0B8BE4BA00D1EBDE /* OutputAVFoundation.m */; };
|
||||||
17D21CC70B8BE4BA00D1EBDE /* Status.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21C9E0B8BE4BA00D1EBDE /* Status.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
17D21CC70B8BE4BA00D1EBDE /* Status.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21C9E0B8BE4BA00D1EBDE /* Status.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
17D21CF30B8BE5EF00D1EBDE /* Semaphore.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21CF10B8BE5EF00D1EBDE /* Semaphore.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
17D21CF30B8BE5EF00D1EBDE /* Semaphore.h in Headers */ = {isa = PBXBuildFile; fileRef = 17D21CF10B8BE5EF00D1EBDE /* Semaphore.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
17D21CF40B8BE5EF00D1EBDE /* Semaphore.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21CF20B8BE5EF00D1EBDE /* Semaphore.m */; };
|
17D21CF40B8BE5EF00D1EBDE /* Semaphore.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D21CF20B8BE5EF00D1EBDE /* Semaphore.m */; };
|
||||||
|
@ -41,6 +41,35 @@
|
||||||
17F94DD50B8D0F7000A34E87 /* PluginController.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F94DD30B8D0F7000A34E87 /* PluginController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
17F94DD50B8D0F7000A34E87 /* PluginController.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F94DD30B8D0F7000A34E87 /* PluginController.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
17F94DD60B8D0F7000A34E87 /* PluginController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 17F94DD40B8D0F7000A34E87 /* PluginController.mm */; };
|
17F94DD60B8D0F7000A34E87 /* PluginController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 17F94DD40B8D0F7000A34E87 /* PluginController.mm */; };
|
||||||
17F94DDD0B8D101100A34E87 /* Plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F94DDC0B8D101100A34E87 /* Plugin.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
17F94DDD0B8D101100A34E87 /* Plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F94DDC0B8D101100A34E87 /* Plugin.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
|
831A4FDC2865A7DC0049CFE4 /* CDSPProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4F9D2865A7DC0049CFE4 /* CDSPProcessor.h */; };
|
||||||
|
831A4FDD2865A7DC0049CFE4 /* CDSPRealFFT.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4F9E2865A7DC0049CFE4 /* CDSPRealFFT.h */; };
|
||||||
|
831A4FDE2865A7DC0049CFE4 /* pffft_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FA02865A7DC0049CFE4 /* pffft_double.h */; };
|
||||||
|
831A4FDF2865A7DC0049CFE4 /* pf_neon_double_from_avx.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FA22865A7DC0049CFE4 /* pf_neon_double_from_avx.h */; };
|
||||||
|
831A4FE02865A7DC0049CFE4 /* pf_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FA32865A7DC0049CFE4 /* pf_double.h */; };
|
||||||
|
831A4FE12865A7DC0049CFE4 /* pf_neon_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FA42865A7DC0049CFE4 /* pf_neon_double.h */; };
|
||||||
|
831A4FE22865A7DC0049CFE4 /* pf_sse2_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FA52865A7DC0049CFE4 /* pf_sse2_double.h */; };
|
||||||
|
831A4FE32865A7DC0049CFE4 /* pf_avx_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FA62865A7DC0049CFE4 /* pf_avx_double.h */; };
|
||||||
|
831A4FE42865A7DC0049CFE4 /* pf_scalar_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FA72865A7DC0049CFE4 /* pf_scalar_double.h */; };
|
||||||
|
831A4FE52865A7DC0049CFE4 /* pffft_priv_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FA82865A7DC0049CFE4 /* pffft_priv_impl.h */; };
|
||||||
|
831A4FE62865A7DC0049CFE4 /* pffft_double.c in Sources */ = {isa = PBXBuildFile; fileRef = 831A4FA92865A7DC0049CFE4 /* pffft_double.c */; };
|
||||||
|
831A4FF22865A7DC0049CFE4 /* CDSPHBUpsampler.inc in Sources */ = {isa = PBXBuildFile; fileRef = 831A4FB72865A7DC0049CFE4 /* CDSPHBUpsampler.inc */; };
|
||||||
|
831A4FF32865A7DC0049CFE4 /* r8butil.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FB82865A7DC0049CFE4 /* r8butil.h */; };
|
||||||
|
831A4FF52865A7DC0049CFE4 /* r8bbase.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FBA2865A7DC0049CFE4 /* r8bbase.h */; };
|
||||||
|
831A4FFE2865A7DC0049CFE4 /* CDSPSincFilterGen.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FC42865A7DC0049CFE4 /* CDSPSincFilterGen.h */; };
|
||||||
|
831A50072865A7DC0049CFE4 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 831A4FD02865A7DC0049CFE4 /* LICENSE */; };
|
||||||
|
831A50082865A7DC0049CFE4 /* CDSPResampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FD12865A7DC0049CFE4 /* CDSPResampler.h */; };
|
||||||
|
831A50092865A7DC0049CFE4 /* CDSPHBUpsampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FD22865A7DC0049CFE4 /* CDSPHBUpsampler.h */; };
|
||||||
|
831A500B2865A7DC0049CFE4 /* CDSPBlockConvolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FD42865A7DC0049CFE4 /* CDSPBlockConvolver.h */; };
|
||||||
|
831A500C2865A7DC0049CFE4 /* fft4g.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FD52865A7DC0049CFE4 /* fft4g.h */; };
|
||||||
|
831A500D2865A7DC0049CFE4 /* CDSPHBDownsampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FD62865A7DC0049CFE4 /* CDSPHBDownsampler.h */; };
|
||||||
|
831A500E2865A7DC0049CFE4 /* r8bconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FD72865A7DC0049CFE4 /* r8bconf.h */; };
|
||||||
|
831A500F2865A7DC0049CFE4 /* CDSPFracInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FD82865A7DC0049CFE4 /* CDSPFracInterpolator.h */; };
|
||||||
|
831A50102865A7DC0049CFE4 /* CDSPFIRFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FD92865A7DC0049CFE4 /* CDSPFIRFilter.h */; };
|
||||||
|
831A50112865A7DC0049CFE4 /* r8bbase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 831A4FDA2865A7DC0049CFE4 /* r8bbase.cpp */; };
|
||||||
|
831A50122865A7DC0049CFE4 /* pffft.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A4FDB2865A7DC0049CFE4 /* pffft.h */; };
|
||||||
|
831A50142865A7FD0049CFE4 /* r8bstate.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 831A50132865A7FD0049CFE4 /* r8bstate.hpp */; };
|
||||||
|
831A50162865A8800049CFE4 /* r8bstate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 831A50152865A8800049CFE4 /* r8bstate.cpp */; };
|
||||||
|
831A50182865A8B30049CFE4 /* r8bstate.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A50172865A8B30049CFE4 /* r8bstate.h */; };
|
||||||
8328995327CB511000D7F028 /* RedundantPlaylistDataStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 8328995127CB510F00D7F028 /* RedundantPlaylistDataStore.m */; };
|
8328995327CB511000D7F028 /* RedundantPlaylistDataStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 8328995127CB510F00D7F028 /* RedundantPlaylistDataStore.m */; };
|
||||||
8328995427CB511000D7F028 /* RedundantPlaylistDataStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 8328995227CB511000D7F028 /* RedundantPlaylistDataStore.h */; };
|
8328995427CB511000D7F028 /* RedundantPlaylistDataStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 8328995227CB511000D7F028 /* RedundantPlaylistDataStore.h */; };
|
||||||
8328995727CB51B700D7F028 /* SHA256Digest.h in Headers */ = {isa = PBXBuildFile; fileRef = 8328995527CB51B700D7F028 /* SHA256Digest.h */; };
|
8328995727CB51B700D7F028 /* SHA256Digest.h in Headers */ = {isa = PBXBuildFile; fileRef = 8328995527CB51B700D7F028 /* SHA256Digest.h */; };
|
||||||
|
@ -52,64 +81,29 @@
|
||||||
834FD4ED27AF91220063BC83 /* AudioChunk.m in Sources */ = {isa = PBXBuildFile; fileRef = 834FD4EC27AF91220063BC83 /* AudioChunk.m */; };
|
834FD4ED27AF91220063BC83 /* AudioChunk.m in Sources */ = {isa = PBXBuildFile; fileRef = 834FD4EC27AF91220063BC83 /* AudioChunk.m */; };
|
||||||
834FD4F027AF93680063BC83 /* ChunkList.h in Headers */ = {isa = PBXBuildFile; fileRef = 834FD4EE27AF93680063BC83 /* ChunkList.h */; };
|
834FD4F027AF93680063BC83 /* ChunkList.h in Headers */ = {isa = PBXBuildFile; fileRef = 834FD4EE27AF93680063BC83 /* ChunkList.h */; };
|
||||||
834FD4F127AF93680063BC83 /* ChunkList.m in Sources */ = {isa = PBXBuildFile; fileRef = 834FD4EF27AF93680063BC83 /* ChunkList.m */; };
|
834FD4F127AF93680063BC83 /* ChunkList.m in Sources */ = {isa = PBXBuildFile; fileRef = 834FD4EF27AF93680063BC83 /* ChunkList.m */; };
|
||||||
834FD4F427AFA2150063BC83 /* Downmix.h in Headers */ = {isa = PBXBuildFile; fileRef = 834FD4F227AFA2150063BC83 /* Downmix.h */; };
|
83504165286447DA006B32CC /* Downmix.h in Headers */ = {isa = PBXBuildFile; fileRef = 83504163286447DA006B32CC /* Downmix.h */; };
|
||||||
834FD4F527AFA2150063BC83 /* Downmix.m in Sources */ = {isa = PBXBuildFile; fileRef = 834FD4F327AFA2150063BC83 /* Downmix.m */; };
|
83504166286447DA006B32CC /* Downmix.m in Sources */ = {isa = PBXBuildFile; fileRef = 83504164286447DA006B32CC /* Downmix.m */; };
|
||||||
835C88A82797D4D400E28EAE /* LICENSE.LGPL in Resources */ = {isa = PBXBuildFile; fileRef = 835C88A42797D4D400E28EAE /* LICENSE.LGPL */; };
|
8350416D28646149006B32CC /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8350416C28646149006B32CC /* CoreMedia.framework */; };
|
||||||
835C88A92797D4D400E28EAE /* License.txt in Resources */ = {isa = PBXBuildFile; fileRef = 835C88A52797D4D400E28EAE /* License.txt */; };
|
|
||||||
835C88AA2797D4D400E28EAE /* lpc.c in Sources */ = {isa = PBXBuildFile; fileRef = 835C88A62797D4D400E28EAE /* lpc.c */; };
|
|
||||||
835C88AB2797D4D400E28EAE /* lpc.h in Headers */ = {isa = PBXBuildFile; fileRef = 835C88A72797D4D400E28EAE /* lpc.h */; };
|
|
||||||
835C88AD2797DA5800E28EAE /* util.h in Headers */ = {isa = PBXBuildFile; fileRef = 835C88AC2797DA5800E28EAE /* util.h */; };
|
|
||||||
835C88B1279811A500E28EAE /* hdcd_decode2.h in Headers */ = {isa = PBXBuildFile; fileRef = 835C88AF279811A500E28EAE /* hdcd_decode2.h */; };
|
835C88B1279811A500E28EAE /* hdcd_decode2.h in Headers */ = {isa = PBXBuildFile; fileRef = 835C88AF279811A500E28EAE /* hdcd_decode2.h */; };
|
||||||
835C88B2279811A500E28EAE /* hdcd_decode2.c in Sources */ = {isa = PBXBuildFile; fileRef = 835C88B0279811A500E28EAE /* hdcd_decode2.c */; };
|
835C88B2279811A500E28EAE /* hdcd_decode2.c in Sources */ = {isa = PBXBuildFile; fileRef = 835C88B0279811A500E28EAE /* hdcd_decode2.c */; };
|
||||||
835EDD7B279FE23A001EDCCE /* HeadphoneFilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = 835EDD7A279FE23A001EDCCE /* HeadphoneFilter.mm */; };
|
|
||||||
835EDD7D279FE307001EDCCE /* HeadphoneFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 835EDD7C279FE307001EDCCE /* HeadphoneFilter.h */; };
|
|
||||||
835FAC5E27BCA14D00BA8562 /* BadSampleCleaner.h in Headers */ = {isa = PBXBuildFile; fileRef = 835FAC5C27BCA14D00BA8562 /* BadSampleCleaner.h */; };
|
835FAC5E27BCA14D00BA8562 /* BadSampleCleaner.h in Headers */ = {isa = PBXBuildFile; fileRef = 835FAC5C27BCA14D00BA8562 /* BadSampleCleaner.h */; };
|
||||||
835FAC5F27BCA14D00BA8562 /* BadSampleCleaner.m in Sources */ = {isa = PBXBuildFile; fileRef = 835FAC5D27BCA14D00BA8562 /* BadSampleCleaner.m */; };
|
835FAC5F27BCA14D00BA8562 /* BadSampleCleaner.m in Sources */ = {isa = PBXBuildFile; fileRef = 835FAC5D27BCA14D00BA8562 /* BadSampleCleaner.m */; };
|
||||||
8363BABE284E428F00E5C9DD /* pffft.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8363BABD284E428F00E5C9DD /* pffft.cpp */; };
|
|
||||||
83725A9027AA16C90003F694 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83725A7B27AA0D8A0003F694 /* Accelerate.framework */; };
|
83725A9027AA16C90003F694 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83725A7B27AA0D8A0003F694 /* Accelerate.framework */; };
|
||||||
83725A9127AA16D50003F694 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83725A7C27AA0D8E0003F694 /* AVFoundation.framework */; };
|
83725A9127AA16D50003F694 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83725A7C27AA0D8E0003F694 /* AVFoundation.framework */; };
|
||||||
8377C64C27B8C51500E8BC0F /* fft_accelerate.c in Sources */ = {isa = PBXBuildFile; fileRef = 8377C64B27B8C51500E8BC0F /* fft_accelerate.c */; };
|
8377C64C27B8C51500E8BC0F /* fft_accelerate.c in Sources */ = {isa = PBXBuildFile; fileRef = 8377C64B27B8C51500E8BC0F /* fft_accelerate.c */; };
|
||||||
8377C64E27B8C54400E8BC0F /* fft.h in Headers */ = {isa = PBXBuildFile; fileRef = 8377C64D27B8C54400E8BC0F /* fft.h */; };
|
8377C64E27B8C54400E8BC0F /* fft.h in Headers */ = {isa = PBXBuildFile; fileRef = 8377C64D27B8C54400E8BC0F /* fft.h */; };
|
||||||
8377C65227B8CAD100E8BC0F /* VisualizationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8377C65027B8CAD100E8BC0F /* VisualizationController.h */; };
|
|
||||||
8377C65327B8CAD100E8BC0F /* VisualizationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8377C65127B8CAD100E8BC0F /* VisualizationController.m */; };
|
|
||||||
8384912718080FF100E7332D /* Logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 8384912618080FF100E7332D /* Logging.h */; };
|
8384912718080FF100E7332D /* Logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 8384912618080FF100E7332D /* Logging.h */; };
|
||||||
839065F32853338700636FBB /* dsd2float.h in Headers */ = {isa = PBXBuildFile; fileRef = 839065F22853338700636FBB /* dsd2float.h */; };
|
839065F32853338700636FBB /* dsd2float.h in Headers */ = {isa = PBXBuildFile; fileRef = 839065F22853338700636FBB /* dsd2float.h */; };
|
||||||
839366671815923C006DD712 /* CogPluginMulti.h in Headers */ = {isa = PBXBuildFile; fileRef = 839366651815923C006DD712 /* CogPluginMulti.h */; };
|
839366671815923C006DD712 /* CogPluginMulti.h in Headers */ = {isa = PBXBuildFile; fileRef = 839366651815923C006DD712 /* CogPluginMulti.h */; };
|
||||||
839366681815923C006DD712 /* CogPluginMulti.m in Sources */ = {isa = PBXBuildFile; fileRef = 839366661815923C006DD712 /* CogPluginMulti.m */; };
|
839366681815923C006DD712 /* CogPluginMulti.m in Sources */ = {isa = PBXBuildFile; fileRef = 839366661815923C006DD712 /* CogPluginMulti.m */; };
|
||||||
8399CF2C27B5D1D5008751F1 /* NSDictionary+Merge.h in Headers */ = {isa = PBXBuildFile; fileRef = 8399CF2A27B5D1D4008751F1 /* NSDictionary+Merge.h */; };
|
8399CF2C27B5D1D5008751F1 /* NSDictionary+Merge.h in Headers */ = {isa = PBXBuildFile; fileRef = 8399CF2A27B5D1D4008751F1 /* NSDictionary+Merge.h */; };
|
||||||
8399CF2D27B5D1D5008751F1 /* NSDictionary+Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = 8399CF2B27B5D1D4008751F1 /* NSDictionary+Merge.m */; };
|
8399CF2D27B5D1D5008751F1 /* NSDictionary+Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = 8399CF2B27B5D1D4008751F1 /* NSDictionary+Merge.m */; };
|
||||||
83B69B752845DF6500D2435A /* pffft_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 83B69B6B2845DF6500D2435A /* pffft_double.h */; };
|
839B83FA286D91ED00F529EE /* VisualizationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 839B83F9286D91ED00F529EE /* VisualizationController.swift */; };
|
||||||
83B69B762845DF6500D2435A /* pf_neon_double_from_avx.h in Headers */ = {isa = PBXBuildFile; fileRef = 83B69B6D2845DF6500D2435A /* pf_neon_double_from_avx.h */; };
|
|
||||||
83B69B772845DF6500D2435A /* pf_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 83B69B6E2845DF6500D2435A /* pf_double.h */; };
|
|
||||||
83B69B782845DF6500D2435A /* pf_neon_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 83B69B6F2845DF6500D2435A /* pf_neon_double.h */; };
|
|
||||||
83B69B792845DF6500D2435A /* pf_sse2_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 83B69B702845DF6500D2435A /* pf_sse2_double.h */; };
|
|
||||||
83B69B7A2845DF6500D2435A /* pf_avx_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 83B69B712845DF6500D2435A /* pf_avx_double.h */; };
|
|
||||||
83B69B7B2845DF6500D2435A /* pf_scalar_double.h in Headers */ = {isa = PBXBuildFile; fileRef = 83B69B722845DF6500D2435A /* pf_scalar_double.h */; };
|
|
||||||
83B69B7C2845DF6500D2435A /* pffft_priv_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 83B69B732845DF6500D2435A /* pffft_priv_impl.h */; };
|
|
||||||
83D40B572852CB3B003BB85C /* pffft_double.c in Sources */ = {isa = PBXBuildFile; fileRef = 83B69B742845DF6500D2435A /* pffft_double.c */; };
|
|
||||||
83F18B1E27D1E8EF00385946 /* CDSPHBDownsampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F18ADF27D1E8EF00385946 /* CDSPHBDownsampler.h */; };
|
|
||||||
83F18B3327D1E8EF00385946 /* CDSPSincFilterGen.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F18AF827D1E8EF00385946 /* CDSPSincFilterGen.h */; };
|
|
||||||
83F18B3427D1E8EF00385946 /* r8butil.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F18AF927D1E8EF00385946 /* r8butil.h */; };
|
|
||||||
83F18B3627D1E8EF00385946 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 83F18AFB27D1E8EF00385946 /* LICENSE */; };
|
|
||||||
83F18B3727D1E8EF00385946 /* r8bbase.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F18AFC27D1E8EF00385946 /* r8bbase.h */; };
|
|
||||||
83F18B3827D1E8EF00385946 /* CDSPFIRFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F18AFD27D1E8EF00385946 /* CDSPFIRFilter.h */; };
|
|
||||||
83F18B4227D1E8EF00385946 /* CDSPProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F18B0827D1E8EF00385946 /* CDSPProcessor.h */; };
|
|
||||||
83F18B4327D1E8EF00385946 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 83F18B0927D1E8EF00385946 /* README.md */; };
|
|
||||||
83F18B4427D1E8EF00385946 /* fft4g.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F18B0A27D1E8EF00385946 /* fft4g.h */; };
|
|
||||||
83F18B4527D1E8EF00385946 /* CDSPRealFFT.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F18B0B27D1E8EF00385946 /* CDSPRealFFT.h */; };
|
|
||||||
83F18B4627D1E8EF00385946 /* CDSPFracInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F18B0C27D1E8EF00385946 /* CDSPFracInterpolator.h */; };
|
|
||||||
83F18B4E27D1E8F000385946 /* CDSPBlockConvolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F18B1727D1E8EF00385946 /* CDSPBlockConvolver.h */; };
|
|
||||||
83F18B5027D1E8F000385946 /* r8bconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F18B1927D1E8EF00385946 /* r8bconf.h */; };
|
|
||||||
83F18B5127D1E8F000385946 /* r8bbase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83F18B1A27D1E8EF00385946 /* r8bbase.cpp */; };
|
|
||||||
83F18B5227D1E8F000385946 /* pffft.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F18B1B27D1E8EF00385946 /* pffft.h */; };
|
|
||||||
83F18B5327D1E8F000385946 /* CDSPResampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F18B1C27D1E8EF00385946 /* CDSPResampler.h */; };
|
|
||||||
83F18B5427D1E8F000385946 /* CDSPHBUpsampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F18B1D27D1E8EF00385946 /* CDSPHBUpsampler.h */; };
|
|
||||||
83F18B5627D1F5E900385946 /* r8bstate.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F18B5527D1F5E900385946 /* r8bstate.h */; };
|
|
||||||
8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; };
|
8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; };
|
||||||
8E8D3D2F0CBAEE6E00135C1B /* AudioContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8D3D2D0CBAEE6E00135C1B /* AudioContainer.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
8E8D3D2F0CBAEE6E00135C1B /* AudioContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8D3D2D0CBAEE6E00135C1B /* AudioContainer.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
8E8D3D300CBAEE6E00135C1B /* AudioContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E8D3D2E0CBAEE6E00135C1B /* AudioContainer.m */; };
|
8E8D3D300CBAEE6E00135C1B /* AudioContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E8D3D2E0CBAEE6E00135C1B /* AudioContainer.m */; };
|
||||||
8EC1225F0B993BD500C5B3AD /* ConverterNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EC1225D0B993BD500C5B3AD /* ConverterNode.h */; };
|
8EC1225F0B993BD500C5B3AD /* ConverterNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EC1225D0B993BD500C5B3AD /* ConverterNode.h */; };
|
||||||
8EC122600B993BD500C5B3AD /* ConverterNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8EC1225E0B993BD500C5B3AD /* ConverterNode.mm */; };
|
8EC122600B993BD500C5B3AD /* ConverterNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EC1225E0B993BD500C5B3AD /* ConverterNode.m */; };
|
||||||
B0575F2D0D687A0800411D77 /* Helper.h in Headers */ = {isa = PBXBuildFile; fileRef = B0575F2C0D687A0800411D77 /* Helper.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
B0575F2D0D687A0800411D77 /* Helper.h in Headers */ = {isa = PBXBuildFile; fileRef = B0575F2C0D687A0800411D77 /* Helper.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
B0575F300D687A4000411D77 /* Helper.m in Sources */ = {isa = PBXBuildFile; fileRef = B0575F2F0D687A4000411D77 /* Helper.m */; };
|
B0575F300D687A4000411D77 /* Helper.m in Sources */ = {isa = PBXBuildFile; fileRef = B0575F2F0D687A4000411D77 /* Helper.m */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
@ -157,8 +151,8 @@
|
||||||
17D21C7D0B8BE4BA00D1EBDE /* Node.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = Node.m; sourceTree = "<group>"; };
|
17D21C7D0B8BE4BA00D1EBDE /* Node.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = Node.m; sourceTree = "<group>"; };
|
||||||
17D21C7E0B8BE4BA00D1EBDE /* OutputNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = OutputNode.h; sourceTree = "<group>"; };
|
17D21C7E0B8BE4BA00D1EBDE /* OutputNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = OutputNode.h; sourceTree = "<group>"; };
|
||||||
17D21C7F0B8BE4BA00D1EBDE /* OutputNode.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = OutputNode.m; sourceTree = "<group>"; };
|
17D21C7F0B8BE4BA00D1EBDE /* OutputNode.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = OutputNode.m; sourceTree = "<group>"; };
|
||||||
17D21C9C0B8BE4BA00D1EBDE /* OutputCoreAudio.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = OutputCoreAudio.h; sourceTree = "<group>"; };
|
17D21C9C0B8BE4BA00D1EBDE /* OutputAVFoundation.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = OutputAVFoundation.h; sourceTree = "<group>"; };
|
||||||
17D21C9D0B8BE4BA00D1EBDE /* OutputCoreAudio.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = OutputCoreAudio.m; sourceTree = "<group>"; };
|
17D21C9D0B8BE4BA00D1EBDE /* OutputAVFoundation.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = OutputAVFoundation.m; sourceTree = "<group>"; };
|
||||||
17D21C9E0B8BE4BA00D1EBDE /* Status.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Status.h; sourceTree = "<group>"; };
|
17D21C9E0B8BE4BA00D1EBDE /* Status.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Status.h; sourceTree = "<group>"; };
|
||||||
17D21CF10B8BE5EF00D1EBDE /* Semaphore.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Semaphore.h; sourceTree = "<group>"; };
|
17D21CF10B8BE5EF00D1EBDE /* Semaphore.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Semaphore.h; sourceTree = "<group>"; };
|
||||||
17D21CF20B8BE5EF00D1EBDE /* Semaphore.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = Semaphore.m; sourceTree = "<group>"; };
|
17D21CF20B8BE5EF00D1EBDE /* Semaphore.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = Semaphore.m; sourceTree = "<group>"; };
|
||||||
|
@ -174,6 +168,35 @@
|
||||||
17F94DD40B8D0F7000A34E87 /* PluginController.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = PluginController.mm; sourceTree = "<group>"; };
|
17F94DD40B8D0F7000A34E87 /* PluginController.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = PluginController.mm; sourceTree = "<group>"; };
|
||||||
17F94DDC0B8D101100A34E87 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Plugin.h; sourceTree = "<group>"; };
|
17F94DDC0B8D101100A34E87 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Plugin.h; sourceTree = "<group>"; };
|
||||||
32DBCF5E0370ADEE00C91783 /* CogAudio_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CogAudio_Prefix.pch; sourceTree = "<group>"; };
|
32DBCF5E0370ADEE00C91783 /* CogAudio_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CogAudio_Prefix.pch; sourceTree = "<group>"; };
|
||||||
|
831A4F9D2865A7DC0049CFE4 /* CDSPProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPProcessor.h; sourceTree = "<group>"; };
|
||||||
|
831A4F9E2865A7DC0049CFE4 /* CDSPRealFFT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPRealFFT.h; sourceTree = "<group>"; };
|
||||||
|
831A4FA02865A7DC0049CFE4 /* pffft_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pffft_double.h; sourceTree = "<group>"; };
|
||||||
|
831A4FA22865A7DC0049CFE4 /* pf_neon_double_from_avx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_neon_double_from_avx.h; sourceTree = "<group>"; };
|
||||||
|
831A4FA32865A7DC0049CFE4 /* pf_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_double.h; sourceTree = "<group>"; };
|
||||||
|
831A4FA42865A7DC0049CFE4 /* pf_neon_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_neon_double.h; sourceTree = "<group>"; };
|
||||||
|
831A4FA52865A7DC0049CFE4 /* pf_sse2_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_sse2_double.h; sourceTree = "<group>"; };
|
||||||
|
831A4FA62865A7DC0049CFE4 /* pf_avx_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_avx_double.h; sourceTree = "<group>"; };
|
||||||
|
831A4FA72865A7DC0049CFE4 /* pf_scalar_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_scalar_double.h; sourceTree = "<group>"; };
|
||||||
|
831A4FA82865A7DC0049CFE4 /* pffft_priv_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pffft_priv_impl.h; sourceTree = "<group>"; };
|
||||||
|
831A4FA92865A7DC0049CFE4 /* pffft_double.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pffft_double.c; sourceTree = "<group>"; };
|
||||||
|
831A4FB72865A7DC0049CFE4 /* CDSPHBUpsampler.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = CDSPHBUpsampler.inc; sourceTree = "<group>"; };
|
||||||
|
831A4FB82865A7DC0049CFE4 /* r8butil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = r8butil.h; sourceTree = "<group>"; };
|
||||||
|
831A4FBA2865A7DC0049CFE4 /* r8bbase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = r8bbase.h; sourceTree = "<group>"; };
|
||||||
|
831A4FC42865A7DC0049CFE4 /* CDSPSincFilterGen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPSincFilterGen.h; sourceTree = "<group>"; };
|
||||||
|
831A4FD02865A7DC0049CFE4 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
|
||||||
|
831A4FD12865A7DC0049CFE4 /* CDSPResampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPResampler.h; sourceTree = "<group>"; };
|
||||||
|
831A4FD22865A7DC0049CFE4 /* CDSPHBUpsampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPHBUpsampler.h; sourceTree = "<group>"; };
|
||||||
|
831A4FD42865A7DC0049CFE4 /* CDSPBlockConvolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPBlockConvolver.h; sourceTree = "<group>"; };
|
||||||
|
831A4FD52865A7DC0049CFE4 /* fft4g.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fft4g.h; sourceTree = "<group>"; };
|
||||||
|
831A4FD62865A7DC0049CFE4 /* CDSPHBDownsampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPHBDownsampler.h; sourceTree = "<group>"; };
|
||||||
|
831A4FD72865A7DC0049CFE4 /* r8bconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = r8bconf.h; sourceTree = "<group>"; };
|
||||||
|
831A4FD82865A7DC0049CFE4 /* CDSPFracInterpolator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPFracInterpolator.h; sourceTree = "<group>"; };
|
||||||
|
831A4FD92865A7DC0049CFE4 /* CDSPFIRFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPFIRFilter.h; sourceTree = "<group>"; };
|
||||||
|
831A4FDA2865A7DC0049CFE4 /* r8bbase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = r8bbase.cpp; sourceTree = "<group>"; };
|
||||||
|
831A4FDB2865A7DC0049CFE4 /* pffft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pffft.h; sourceTree = "<group>"; };
|
||||||
|
831A50132865A7FD0049CFE4 /* r8bstate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = r8bstate.hpp; sourceTree = "<group>"; };
|
||||||
|
831A50152865A8800049CFE4 /* r8bstate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = r8bstate.cpp; sourceTree = "<group>"; };
|
||||||
|
831A50172865A8B30049CFE4 /* r8bstate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = r8bstate.h; sourceTree = "<group>"; };
|
||||||
8328995127CB510F00D7F028 /* RedundantPlaylistDataStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RedundantPlaylistDataStore.m; path = ../../Utils/RedundantPlaylistDataStore.m; sourceTree = "<group>"; };
|
8328995127CB510F00D7F028 /* RedundantPlaylistDataStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RedundantPlaylistDataStore.m; path = ../../Utils/RedundantPlaylistDataStore.m; sourceTree = "<group>"; };
|
||||||
8328995227CB511000D7F028 /* RedundantPlaylistDataStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RedundantPlaylistDataStore.h; path = ../../Utils/RedundantPlaylistDataStore.h; sourceTree = "<group>"; };
|
8328995227CB511000D7F028 /* RedundantPlaylistDataStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RedundantPlaylistDataStore.h; path = ../../Utils/RedundantPlaylistDataStore.h; sourceTree = "<group>"; };
|
||||||
8328995527CB51B700D7F028 /* SHA256Digest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SHA256Digest.h; path = ../../Utils/SHA256Digest.h; sourceTree = "<group>"; };
|
8328995527CB51B700D7F028 /* SHA256Digest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SHA256Digest.h; path = ../../Utils/SHA256Digest.h; sourceTree = "<group>"; };
|
||||||
|
@ -185,66 +208,30 @@
|
||||||
834FD4EC27AF91220063BC83 /* AudioChunk.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AudioChunk.m; sourceTree = "<group>"; };
|
834FD4EC27AF91220063BC83 /* AudioChunk.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AudioChunk.m; sourceTree = "<group>"; };
|
||||||
834FD4EE27AF93680063BC83 /* ChunkList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ChunkList.h; sourceTree = "<group>"; };
|
834FD4EE27AF93680063BC83 /* ChunkList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ChunkList.h; sourceTree = "<group>"; };
|
||||||
834FD4EF27AF93680063BC83 /* ChunkList.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ChunkList.m; sourceTree = "<group>"; };
|
834FD4EF27AF93680063BC83 /* ChunkList.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ChunkList.m; sourceTree = "<group>"; };
|
||||||
834FD4F227AFA2150063BC83 /* Downmix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Downmix.h; sourceTree = "<group>"; };
|
83504163286447DA006B32CC /* Downmix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Downmix.h; sourceTree = "<group>"; };
|
||||||
834FD4F327AFA2150063BC83 /* Downmix.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Downmix.m; sourceTree = "<group>"; };
|
83504164286447DA006B32CC /* Downmix.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Downmix.m; sourceTree = "<group>"; };
|
||||||
835C88A42797D4D400E28EAE /* LICENSE.LGPL */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.LGPL; sourceTree = "<group>"; };
|
8350416C28646149006B32CC /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; };
|
||||||
835C88A52797D4D400E28EAE /* License.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = License.txt; sourceTree = "<group>"; };
|
|
||||||
835C88A62797D4D400E28EAE /* lpc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lpc.c; sourceTree = "<group>"; };
|
|
||||||
835C88A72797D4D400E28EAE /* lpc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lpc.h; sourceTree = "<group>"; };
|
|
||||||
835C88AC2797DA5800E28EAE /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = util.h; path = ThirdParty/lvqcl/util.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
835C88AF279811A500E28EAE /* hdcd_decode2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hdcd_decode2.h; sourceTree = "<group>"; };
|
835C88AF279811A500E28EAE /* hdcd_decode2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hdcd_decode2.h; sourceTree = "<group>"; };
|
||||||
835C88B0279811A500E28EAE /* hdcd_decode2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hdcd_decode2.c; sourceTree = "<group>"; };
|
835C88B0279811A500E28EAE /* hdcd_decode2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hdcd_decode2.c; sourceTree = "<group>"; };
|
||||||
835EDD7A279FE23A001EDCCE /* HeadphoneFilter.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = HeadphoneFilter.mm; sourceTree = "<group>"; };
|
|
||||||
835EDD7C279FE307001EDCCE /* HeadphoneFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HeadphoneFilter.h; sourceTree = "<group>"; };
|
|
||||||
835FAC5C27BCA14D00BA8562 /* BadSampleCleaner.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BadSampleCleaner.h; path = Utils/BadSampleCleaner.h; sourceTree = SOURCE_ROOT; };
|
835FAC5C27BCA14D00BA8562 /* BadSampleCleaner.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BadSampleCleaner.h; path = Utils/BadSampleCleaner.h; sourceTree = SOURCE_ROOT; };
|
||||||
835FAC5D27BCA14D00BA8562 /* BadSampleCleaner.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = BadSampleCleaner.m; path = Utils/BadSampleCleaner.m; sourceTree = SOURCE_ROOT; };
|
835FAC5D27BCA14D00BA8562 /* BadSampleCleaner.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = BadSampleCleaner.m; path = Utils/BadSampleCleaner.m; sourceTree = SOURCE_ROOT; };
|
||||||
8363BABD284E428F00E5C9DD /* pffft.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pffft.cpp; sourceTree = "<group>"; };
|
|
||||||
83725A7B27AA0D8A0003F694 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
|
83725A7B27AA0D8A0003F694 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
|
||||||
83725A7C27AA0D8E0003F694 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
|
83725A7C27AA0D8E0003F694 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
|
||||||
8377C64B27B8C51500E8BC0F /* fft_accelerate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fft_accelerate.c; sourceTree = "<group>"; };
|
8377C64B27B8C51500E8BC0F /* fft_accelerate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fft_accelerate.c; sourceTree = "<group>"; };
|
||||||
8377C64D27B8C54400E8BC0F /* fft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fft.h; sourceTree = "<group>"; };
|
8377C64D27B8C54400E8BC0F /* fft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fft.h; sourceTree = "<group>"; };
|
||||||
8377C65027B8CAD100E8BC0F /* VisualizationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VisualizationController.h; sourceTree = "<group>"; };
|
|
||||||
8377C65127B8CAD100E8BC0F /* VisualizationController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VisualizationController.m; sourceTree = "<group>"; };
|
|
||||||
8384912618080FF100E7332D /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../Utils/Logging.h; sourceTree = "<group>"; };
|
8384912618080FF100E7332D /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../Utils/Logging.h; sourceTree = "<group>"; };
|
||||||
839065F22853338700636FBB /* dsd2float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dsd2float.h; sourceTree = "<group>"; };
|
839065F22853338700636FBB /* dsd2float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dsd2float.h; sourceTree = "<group>"; };
|
||||||
839366651815923C006DD712 /* CogPluginMulti.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CogPluginMulti.h; sourceTree = "<group>"; };
|
839366651815923C006DD712 /* CogPluginMulti.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CogPluginMulti.h; sourceTree = "<group>"; };
|
||||||
839366661815923C006DD712 /* CogPluginMulti.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CogPluginMulti.m; sourceTree = "<group>"; };
|
839366661815923C006DD712 /* CogPluginMulti.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CogPluginMulti.m; sourceTree = "<group>"; };
|
||||||
8399CF2A27B5D1D4008751F1 /* NSDictionary+Merge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+Merge.h"; path = "../../Utils/NSDictionary+Merge.h"; sourceTree = "<group>"; };
|
8399CF2A27B5D1D4008751F1 /* NSDictionary+Merge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+Merge.h"; path = "../../Utils/NSDictionary+Merge.h"; sourceTree = "<group>"; };
|
||||||
8399CF2B27B5D1D4008751F1 /* NSDictionary+Merge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+Merge.m"; path = "../../Utils/NSDictionary+Merge.m"; sourceTree = "<group>"; };
|
8399CF2B27B5D1D4008751F1 /* NSDictionary+Merge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+Merge.m"; path = "../../Utils/NSDictionary+Merge.m"; sourceTree = "<group>"; };
|
||||||
83B69B6B2845DF6500D2435A /* pffft_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pffft_double.h; sourceTree = "<group>"; };
|
839B83F9286D91ED00F529EE /* VisualizationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisualizationController.swift; sourceTree = "<group>"; };
|
||||||
83B69B6D2845DF6500D2435A /* pf_neon_double_from_avx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_neon_double_from_avx.h; sourceTree = "<group>"; };
|
|
||||||
83B69B6E2845DF6500D2435A /* pf_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_double.h; sourceTree = "<group>"; };
|
|
||||||
83B69B6F2845DF6500D2435A /* pf_neon_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_neon_double.h; sourceTree = "<group>"; };
|
|
||||||
83B69B702845DF6500D2435A /* pf_sse2_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_sse2_double.h; sourceTree = "<group>"; };
|
|
||||||
83B69B712845DF6500D2435A /* pf_avx_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_avx_double.h; sourceTree = "<group>"; };
|
|
||||||
83B69B722845DF6500D2435A /* pf_scalar_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pf_scalar_double.h; sourceTree = "<group>"; };
|
|
||||||
83B69B732845DF6500D2435A /* pffft_priv_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pffft_priv_impl.h; sourceTree = "<group>"; };
|
|
||||||
83B69B742845DF6500D2435A /* pffft_double.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pffft_double.c; sourceTree = "<group>"; };
|
|
||||||
83F18ADF27D1E8EF00385946 /* CDSPHBDownsampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPHBDownsampler.h; sourceTree = "<group>"; };
|
|
||||||
83F18AF827D1E8EF00385946 /* CDSPSincFilterGen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPSincFilterGen.h; sourceTree = "<group>"; };
|
|
||||||
83F18AF927D1E8EF00385946 /* r8butil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = r8butil.h; sourceTree = "<group>"; };
|
|
||||||
83F18AFB27D1E8EF00385946 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
|
|
||||||
83F18AFC27D1E8EF00385946 /* r8bbase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = r8bbase.h; sourceTree = "<group>"; };
|
|
||||||
83F18AFD27D1E8EF00385946 /* CDSPFIRFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPFIRFilter.h; sourceTree = "<group>"; };
|
|
||||||
83F18B0827D1E8EF00385946 /* CDSPProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPProcessor.h; sourceTree = "<group>"; };
|
|
||||||
83F18B0927D1E8EF00385946 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
|
|
||||||
83F18B0A27D1E8EF00385946 /* fft4g.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fft4g.h; sourceTree = "<group>"; };
|
|
||||||
83F18B0B27D1E8EF00385946 /* CDSPRealFFT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPRealFFT.h; sourceTree = "<group>"; };
|
|
||||||
83F18B0C27D1E8EF00385946 /* CDSPFracInterpolator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPFracInterpolator.h; sourceTree = "<group>"; };
|
|
||||||
83F18B1727D1E8EF00385946 /* CDSPBlockConvolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPBlockConvolver.h; sourceTree = "<group>"; };
|
|
||||||
83F18B1827D1E8EF00385946 /* CDSPHBUpsampler.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = CDSPHBUpsampler.inc; sourceTree = "<group>"; };
|
|
||||||
83F18B1927D1E8EF00385946 /* r8bconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = r8bconf.h; sourceTree = "<group>"; };
|
|
||||||
83F18B1A27D1E8EF00385946 /* r8bbase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = r8bbase.cpp; sourceTree = "<group>"; };
|
|
||||||
83F18B1B27D1E8EF00385946 /* pffft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pffft.h; sourceTree = "<group>"; };
|
|
||||||
83F18B1C27D1E8EF00385946 /* CDSPResampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPResampler.h; sourceTree = "<group>"; };
|
|
||||||
83F18B1D27D1E8EF00385946 /* CDSPHBUpsampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDSPHBUpsampler.h; sourceTree = "<group>"; };
|
|
||||||
83F18B5527D1F5E900385946 /* r8bstate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = r8bstate.h; path = ThirdParty/r8bstate.h; sourceTree = SOURCE_ROOT; };
|
|
||||||
8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
||||||
8DC2EF5B0486A6940098B216 /* CogAudio.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CogAudio.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
8DC2EF5B0486A6940098B216 /* CogAudio.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CogAudio.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
8E8D3D2D0CBAEE6E00135C1B /* AudioContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioContainer.h; sourceTree = "<group>"; };
|
8E8D3D2D0CBAEE6E00135C1B /* AudioContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioContainer.h; sourceTree = "<group>"; };
|
||||||
8E8D3D2E0CBAEE6E00135C1B /* AudioContainer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AudioContainer.m; sourceTree = "<group>"; };
|
8E8D3D2E0CBAEE6E00135C1B /* AudioContainer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AudioContainer.m; sourceTree = "<group>"; };
|
||||||
8EC1225D0B993BD500C5B3AD /* ConverterNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ConverterNode.h; sourceTree = "<group>"; };
|
8EC1225D0B993BD500C5B3AD /* ConverterNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ConverterNode.h; sourceTree = "<group>"; };
|
||||||
8EC1225E0B993BD500C5B3AD /* ConverterNode.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ConverterNode.mm; sourceTree = "<group>"; };
|
8EC1225E0B993BD500C5B3AD /* ConverterNode.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ConverterNode.m; sourceTree = "<group>"; };
|
||||||
B0575F2C0D687A0800411D77 /* Helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Helper.h; sourceTree = "<group>"; };
|
B0575F2C0D687A0800411D77 /* Helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Helper.h; sourceTree = "<group>"; };
|
||||||
B0575F2F0D687A4000411D77 /* Helper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Helper.m; sourceTree = "<group>"; };
|
B0575F2F0D687A4000411D77 /* Helper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Helper.m; sourceTree = "<group>"; };
|
||||||
D2F7E79907B2D74100F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
|
D2F7E79907B2D74100F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
|
||||||
|
@ -258,6 +245,7 @@
|
||||||
8328995A27CB51C900D7F028 /* Security.framework in Frameworks */,
|
8328995A27CB51C900D7F028 /* Security.framework in Frameworks */,
|
||||||
83725A9127AA16D50003F694 /* AVFoundation.framework in Frameworks */,
|
83725A9127AA16D50003F694 /* AVFoundation.framework in Frameworks */,
|
||||||
8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */,
|
8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */,
|
||||||
|
8350416D28646149006B32CC /* CoreMedia.framework in Frameworks */,
|
||||||
83725A9027AA16C90003F694 /* Accelerate.framework in Frameworks */,
|
83725A9027AA16C90003F694 /* Accelerate.framework in Frameworks */,
|
||||||
17D21DAD0B8BE76800D1EBDE /* AudioToolbox.framework in Frameworks */,
|
17D21DAD0B8BE76800D1EBDE /* AudioToolbox.framework in Frameworks */,
|
||||||
17D21DAE0B8BE76800D1EBDE /* AudioUnit.framework in Frameworks */,
|
17D21DAE0B8BE76800D1EBDE /* AudioUnit.framework in Frameworks */,
|
||||||
|
@ -370,22 +358,20 @@
|
||||||
children = (
|
children = (
|
||||||
834FD4EA27AF8F380063BC83 /* AudioChunk.h */,
|
834FD4EA27AF8F380063BC83 /* AudioChunk.h */,
|
||||||
834FD4EC27AF91220063BC83 /* AudioChunk.m */,
|
834FD4EC27AF91220063BC83 /* AudioChunk.m */,
|
||||||
834FD4EE27AF93680063BC83 /* ChunkList.h */,
|
|
||||||
834FD4EF27AF93680063BC83 /* ChunkList.m */,
|
|
||||||
834FD4F227AFA2150063BC83 /* Downmix.h */,
|
|
||||||
834FD4F327AFA2150063BC83 /* Downmix.m */,
|
|
||||||
17D21C760B8BE4BA00D1EBDE /* BufferChain.h */,
|
17D21C760B8BE4BA00D1EBDE /* BufferChain.h */,
|
||||||
17D21C770B8BE4BA00D1EBDE /* BufferChain.m */,
|
17D21C770B8BE4BA00D1EBDE /* BufferChain.m */,
|
||||||
|
834FD4EE27AF93680063BC83 /* ChunkList.h */,
|
||||||
|
834FD4EF27AF93680063BC83 /* ChunkList.m */,
|
||||||
8EC1225D0B993BD500C5B3AD /* ConverterNode.h */,
|
8EC1225D0B993BD500C5B3AD /* ConverterNode.h */,
|
||||||
8EC1225E0B993BD500C5B3AD /* ConverterNode.mm */,
|
8EC1225E0B993BD500C5B3AD /* ConverterNode.m */,
|
||||||
|
83504163286447DA006B32CC /* Downmix.h */,
|
||||||
|
83504164286447DA006B32CC /* Downmix.m */,
|
||||||
17D21C7A0B8BE4BA00D1EBDE /* InputNode.h */,
|
17D21C7A0B8BE4BA00D1EBDE /* InputNode.h */,
|
||||||
17D21C7B0B8BE4BA00D1EBDE /* InputNode.m */,
|
17D21C7B0B8BE4BA00D1EBDE /* InputNode.m */,
|
||||||
17D21C7C0B8BE4BA00D1EBDE /* Node.h */,
|
17D21C7C0B8BE4BA00D1EBDE /* Node.h */,
|
||||||
17D21C7D0B8BE4BA00D1EBDE /* Node.m */,
|
17D21C7D0B8BE4BA00D1EBDE /* Node.m */,
|
||||||
17D21C7E0B8BE4BA00D1EBDE /* OutputNode.h */,
|
17D21C7E0B8BE4BA00D1EBDE /* OutputNode.h */,
|
||||||
17D21C7F0B8BE4BA00D1EBDE /* OutputNode.m */,
|
17D21C7F0B8BE4BA00D1EBDE /* OutputNode.m */,
|
||||||
835EDD7C279FE307001EDCCE /* HeadphoneFilter.h */,
|
|
||||||
835EDD7A279FE23A001EDCCE /* HeadphoneFilter.mm */,
|
|
||||||
);
|
);
|
||||||
path = Chain;
|
path = Chain;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -393,8 +379,8 @@
|
||||||
17D21C9B0B8BE4BA00D1EBDE /* Output */ = {
|
17D21C9B0B8BE4BA00D1EBDE /* Output */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
17D21C9C0B8BE4BA00D1EBDE /* OutputCoreAudio.h */,
|
17D21C9C0B8BE4BA00D1EBDE /* OutputAVFoundation.h */,
|
||||||
17D21C9D0B8BE4BA00D1EBDE /* OutputCoreAudio.m */,
|
17D21C9D0B8BE4BA00D1EBDE /* OutputAVFoundation.m */,
|
||||||
);
|
);
|
||||||
path = Output;
|
path = Output;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -402,10 +388,12 @@
|
||||||
17D21CD80B8BE5B400D1EBDE /* ThirdParty */ = {
|
17D21CD80B8BE5B400D1EBDE /* ThirdParty */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
83F18ADE27D1E8EF00385946 /* r8brain-free-src */,
|
831A50152865A8800049CFE4 /* r8bstate.cpp */,
|
||||||
|
831A50172865A8B30049CFE4 /* r8bstate.h */,
|
||||||
|
831A50132865A7FD0049CFE4 /* r8bstate.hpp */,
|
||||||
|
831A4F9C2865A7DC0049CFE4 /* r8brain-free-src */,
|
||||||
8377C64A27B8C51500E8BC0F /* deadbeef */,
|
8377C64A27B8C51500E8BC0F /* deadbeef */,
|
||||||
835C88AE279811A500E28EAE /* hdcd */,
|
835C88AE279811A500E28EAE /* hdcd */,
|
||||||
835C88A22797D4D400E28EAE /* lvqcl */,
|
|
||||||
17D21DC40B8BE79700D1EBDE /* CoreAudioUtils */,
|
17D21DC40B8BE79700D1EBDE /* CoreAudioUtils */,
|
||||||
);
|
);
|
||||||
path = ThirdParty;
|
path = ThirdParty;
|
||||||
|
@ -449,24 +437,53 @@
|
||||||
name = "Other Sources";
|
name = "Other Sources";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
835C88A22797D4D400E28EAE /* lvqcl */ = {
|
831A4F9C2865A7DC0049CFE4 /* r8brain-free-src */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
835C88A32797D4D400E28EAE /* License */,
|
831A4F9D2865A7DC0049CFE4 /* CDSPProcessor.h */,
|
||||||
835C88A62797D4D400E28EAE /* lpc.c */,
|
831A4F9E2865A7DC0049CFE4 /* CDSPRealFFT.h */,
|
||||||
835C88A72797D4D400E28EAE /* lpc.h */,
|
831A4F9F2865A7DC0049CFE4 /* pffft_double */,
|
||||||
835C88AC2797DA5800E28EAE /* util.h */,
|
831A4FB72865A7DC0049CFE4 /* CDSPHBUpsampler.inc */,
|
||||||
|
831A4FB82865A7DC0049CFE4 /* r8butil.h */,
|
||||||
|
831A4FBA2865A7DC0049CFE4 /* r8bbase.h */,
|
||||||
|
831A4FC42865A7DC0049CFE4 /* CDSPSincFilterGen.h */,
|
||||||
|
831A4FD02865A7DC0049CFE4 /* LICENSE */,
|
||||||
|
831A4FD12865A7DC0049CFE4 /* CDSPResampler.h */,
|
||||||
|
831A4FD22865A7DC0049CFE4 /* CDSPHBUpsampler.h */,
|
||||||
|
831A4FD42865A7DC0049CFE4 /* CDSPBlockConvolver.h */,
|
||||||
|
831A4FD52865A7DC0049CFE4 /* fft4g.h */,
|
||||||
|
831A4FD62865A7DC0049CFE4 /* CDSPHBDownsampler.h */,
|
||||||
|
831A4FD72865A7DC0049CFE4 /* r8bconf.h */,
|
||||||
|
831A4FD82865A7DC0049CFE4 /* CDSPFracInterpolator.h */,
|
||||||
|
831A4FD92865A7DC0049CFE4 /* CDSPFIRFilter.h */,
|
||||||
|
831A4FDA2865A7DC0049CFE4 /* r8bbase.cpp */,
|
||||||
|
831A4FDB2865A7DC0049CFE4 /* pffft.h */,
|
||||||
);
|
);
|
||||||
path = lvqcl;
|
path = "r8brain-free-src";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
835C88A32797D4D400E28EAE /* License */ = {
|
831A4F9F2865A7DC0049CFE4 /* pffft_double */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
835C88A42797D4D400E28EAE /* LICENSE.LGPL */,
|
831A4FA02865A7DC0049CFE4 /* pffft_double.h */,
|
||||||
835C88A52797D4D400E28EAE /* License.txt */,
|
831A4FA12865A7DC0049CFE4 /* simd */,
|
||||||
|
831A4FA82865A7DC0049CFE4 /* pffft_priv_impl.h */,
|
||||||
|
831A4FA92865A7DC0049CFE4 /* pffft_double.c */,
|
||||||
);
|
);
|
||||||
path = License;
|
path = pffft_double;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
831A4FA12865A7DC0049CFE4 /* simd */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
831A4FA22865A7DC0049CFE4 /* pf_neon_double_from_avx.h */,
|
||||||
|
831A4FA32865A7DC0049CFE4 /* pf_double.h */,
|
||||||
|
831A4FA42865A7DC0049CFE4 /* pf_neon_double.h */,
|
||||||
|
831A4FA52865A7DC0049CFE4 /* pf_sse2_double.h */,
|
||||||
|
831A4FA62865A7DC0049CFE4 /* pf_avx_double.h */,
|
||||||
|
831A4FA72865A7DC0049CFE4 /* pf_scalar_double.h */,
|
||||||
|
);
|
||||||
|
path = simd;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
835C88AE279811A500E28EAE /* hdcd */ = {
|
835C88AE279811A500E28EAE /* hdcd */ = {
|
||||||
|
@ -481,6 +498,7 @@
|
||||||
83725A8F27AA16C90003F694 /* Frameworks */ = {
|
83725A8F27AA16C90003F694 /* Frameworks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
8350416C28646149006B32CC /* CoreMedia.framework */,
|
||||||
8328995927CB51C900D7F028 /* Security.framework */,
|
8328995927CB51C900D7F028 /* Security.framework */,
|
||||||
);
|
);
|
||||||
name = Frameworks;
|
name = Frameworks;
|
||||||
|
@ -498,64 +516,11 @@
|
||||||
8377C64F27B8CAAB00E8BC0F /* Visualization */ = {
|
8377C64F27B8CAAB00E8BC0F /* Visualization */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
8377C65027B8CAD100E8BC0F /* VisualizationController.h */,
|
839B83F9286D91ED00F529EE /* VisualizationController.swift */,
|
||||||
8377C65127B8CAD100E8BC0F /* VisualizationController.m */,
|
|
||||||
);
|
);
|
||||||
path = Visualization;
|
path = Visualization;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
83B69B6A2845DF6500D2435A /* pffft_double */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
83B69B6B2845DF6500D2435A /* pffft_double.h */,
|
|
||||||
83B69B6C2845DF6500D2435A /* simd */,
|
|
||||||
83B69B732845DF6500D2435A /* pffft_priv_impl.h */,
|
|
||||||
83B69B742845DF6500D2435A /* pffft_double.c */,
|
|
||||||
);
|
|
||||||
path = pffft_double;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
83B69B6C2845DF6500D2435A /* simd */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
83B69B6D2845DF6500D2435A /* pf_neon_double_from_avx.h */,
|
|
||||||
83B69B6E2845DF6500D2435A /* pf_double.h */,
|
|
||||||
83B69B6F2845DF6500D2435A /* pf_neon_double.h */,
|
|
||||||
83B69B702845DF6500D2435A /* pf_sse2_double.h */,
|
|
||||||
83B69B712845DF6500D2435A /* pf_avx_double.h */,
|
|
||||||
83B69B722845DF6500D2435A /* pf_scalar_double.h */,
|
|
||||||
);
|
|
||||||
path = simd;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
83F18ADE27D1E8EF00385946 /* r8brain-free-src */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
8363BABD284E428F00E5C9DD /* pffft.cpp */,
|
|
||||||
83B69B6A2845DF6500D2435A /* pffft_double */,
|
|
||||||
83F18ADF27D1E8EF00385946 /* CDSPHBDownsampler.h */,
|
|
||||||
83F18AF827D1E8EF00385946 /* CDSPSincFilterGen.h */,
|
|
||||||
83F18AF927D1E8EF00385946 /* r8butil.h */,
|
|
||||||
83F18AFB27D1E8EF00385946 /* LICENSE */,
|
|
||||||
83F18AFC27D1E8EF00385946 /* r8bbase.h */,
|
|
||||||
83F18AFD27D1E8EF00385946 /* CDSPFIRFilter.h */,
|
|
||||||
83F18B0827D1E8EF00385946 /* CDSPProcessor.h */,
|
|
||||||
83F18B0927D1E8EF00385946 /* README.md */,
|
|
||||||
83F18B0A27D1E8EF00385946 /* fft4g.h */,
|
|
||||||
83F18B0B27D1E8EF00385946 /* CDSPRealFFT.h */,
|
|
||||||
83F18B0C27D1E8EF00385946 /* CDSPFracInterpolator.h */,
|
|
||||||
83F18B1727D1E8EF00385946 /* CDSPBlockConvolver.h */,
|
|
||||||
83F18B1827D1E8EF00385946 /* CDSPHBUpsampler.inc */,
|
|
||||||
83F18B1927D1E8EF00385946 /* r8bconf.h */,
|
|
||||||
83F18B1A27D1E8EF00385946 /* r8bbase.cpp */,
|
|
||||||
83F18B1B27D1E8EF00385946 /* pffft.h */,
|
|
||||||
83F18B1C27D1E8EF00385946 /* CDSPResampler.h */,
|
|
||||||
83F18B1D27D1E8EF00385946 /* CDSPHBUpsampler.h */,
|
|
||||||
83F18B5527D1F5E900385946 /* r8bstate.h */,
|
|
||||||
);
|
|
||||||
path = "r8brain-free-src";
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXHeadersBuildPhase section */
|
/* Begin PBXHeadersBuildPhase section */
|
||||||
|
@ -563,64 +528,61 @@
|
||||||
isa = PBXHeadersBuildPhase;
|
isa = PBXHeadersBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
83B69B7C2845DF6500D2435A /* pffft_priv_impl.h in Headers */,
|
|
||||||
17D21CA10B8BE4BA00D1EBDE /* BufferChain.h in Headers */,
|
17D21CA10B8BE4BA00D1EBDE /* BufferChain.h in Headers */,
|
||||||
|
831A4FE02865A7DC0049CFE4 /* pf_double.h in Headers */,
|
||||||
|
831A50142865A7FD0049CFE4 /* r8bstate.hpp in Headers */,
|
||||||
17D21CA50B8BE4BA00D1EBDE /* InputNode.h in Headers */,
|
17D21CA50B8BE4BA00D1EBDE /* InputNode.h in Headers */,
|
||||||
17D21CA70B8BE4BA00D1EBDE /* Node.h in Headers */,
|
17D21CA70B8BE4BA00D1EBDE /* Node.h in Headers */,
|
||||||
83B69B7B2845DF6500D2435A /* pf_scalar_double.h in Headers */,
|
|
||||||
83F18B3427D1E8EF00385946 /* r8butil.h in Headers */,
|
|
||||||
8399CF2C27B5D1D5008751F1 /* NSDictionary+Merge.h in Headers */,
|
8399CF2C27B5D1D5008751F1 /* NSDictionary+Merge.h in Headers */,
|
||||||
|
831A4FF32865A7DC0049CFE4 /* r8butil.h in Headers */,
|
||||||
17D21CA90B8BE4BA00D1EBDE /* OutputNode.h in Headers */,
|
17D21CA90B8BE4BA00D1EBDE /* OutputNode.h in Headers */,
|
||||||
83B69B792845DF6500D2435A /* pf_sse2_double.h in Headers */,
|
|
||||||
83F18B4527D1E8EF00385946 /* CDSPRealFFT.h in Headers */,
|
|
||||||
83F18B3827D1E8EF00385946 /* CDSPFIRFilter.h in Headers */,
|
|
||||||
8328995427CB511000D7F028 /* RedundantPlaylistDataStore.h in Headers */,
|
8328995427CB511000D7F028 /* RedundantPlaylistDataStore.h in Headers */,
|
||||||
17D21CC50B8BE4BA00D1EBDE /* OutputCoreAudio.h in Headers */,
|
831A50102865A7DC0049CFE4 /* CDSPFIRFilter.h in Headers */,
|
||||||
834FD4F427AFA2150063BC83 /* Downmix.h in Headers */,
|
831A4FFE2865A7DC0049CFE4 /* CDSPSincFilterGen.h in Headers */,
|
||||||
|
831A4FF52865A7DC0049CFE4 /* r8bbase.h in Headers */,
|
||||||
|
831A50082865A7DC0049CFE4 /* CDSPResampler.h in Headers */,
|
||||||
|
17D21CC50B8BE4BA00D1EBDE /* OutputAVFoundation.h in Headers */,
|
||||||
|
83504165286447DA006B32CC /* Downmix.h in Headers */,
|
||||||
|
831A4FDE2865A7DC0049CFE4 /* pffft_double.h in Headers */,
|
||||||
|
831A4FE12865A7DC0049CFE4 /* pf_neon_double.h in Headers */,
|
||||||
17D21CC70B8BE4BA00D1EBDE /* Status.h in Headers */,
|
17D21CC70B8BE4BA00D1EBDE /* Status.h in Headers */,
|
||||||
835C88AB2797D4D400E28EAE /* lpc.h in Headers */,
|
|
||||||
17D21CF30B8BE5EF00D1EBDE /* Semaphore.h in Headers */,
|
17D21CF30B8BE5EF00D1EBDE /* Semaphore.h in Headers */,
|
||||||
17D21DC70B8BE79700D1EBDE /* CoreAudioUtils.h in Headers */,
|
17D21DC70B8BE79700D1EBDE /* CoreAudioUtils.h in Headers */,
|
||||||
83F18B3327D1E8EF00385946 /* CDSPSincFilterGen.h in Headers */,
|
|
||||||
17D21EBD0B8BF44000D1EBDE /* AudioPlayer.h in Headers */,
|
17D21EBD0B8BF44000D1EBDE /* AudioPlayer.h in Headers */,
|
||||||
83F18B4427D1E8EF00385946 /* fft4g.h in Headers */,
|
831A50182865A8B30049CFE4 /* r8bstate.h in Headers */,
|
||||||
83F18B1E27D1E8EF00385946 /* CDSPHBDownsampler.h in Headers */,
|
831A4FE52865A7DC0049CFE4 /* pffft_priv_impl.h in Headers */,
|
||||||
83B69B762845DF6500D2435A /* pf_neon_double_from_avx.h in Headers */,
|
831A4FE42865A7DC0049CFE4 /* pf_scalar_double.h in Headers */,
|
||||||
83F18B5627D1F5E900385946 /* r8bstate.h in Headers */,
|
831A500D2865A7DC0049CFE4 /* CDSPHBDownsampler.h in Headers */,
|
||||||
8377C65227B8CAD100E8BC0F /* VisualizationController.h in Headers */,
|
831A500C2865A7DC0049CFE4 /* fft4g.h in Headers */,
|
||||||
83B69B772845DF6500D2435A /* pf_double.h in Headers */,
|
|
||||||
834FD4F027AF93680063BC83 /* ChunkList.h in Headers */,
|
834FD4F027AF93680063BC83 /* ChunkList.h in Headers */,
|
||||||
17F94DD50B8D0F7000A34E87 /* PluginController.h in Headers */,
|
17F94DD50B8D0F7000A34E87 /* PluginController.h in Headers */,
|
||||||
83B69B782845DF6500D2435A /* pf_neon_double.h in Headers */,
|
831A50122865A7DC0049CFE4 /* pffft.h in Headers */,
|
||||||
|
831A4FDC2865A7DC0049CFE4 /* CDSPProcessor.h in Headers */,
|
||||||
|
831A4FDD2865A7DC0049CFE4 /* CDSPRealFFT.h in Headers */,
|
||||||
17F94DDD0B8D101100A34E87 /* Plugin.h in Headers */,
|
17F94DDD0B8D101100A34E87 /* Plugin.h in Headers */,
|
||||||
83F18B5227D1E8F000385946 /* pffft.h in Headers */,
|
|
||||||
8328995727CB51B700D7F028 /* SHA256Digest.h in Headers */,
|
8328995727CB51B700D7F028 /* SHA256Digest.h in Headers */,
|
||||||
83B69B752845DF6500D2435A /* pffft_double.h in Headers */,
|
|
||||||
83F18B4627D1E8EF00385946 /* CDSPFracInterpolator.h in Headers */,
|
|
||||||
834FD4EB27AF8F380063BC83 /* AudioChunk.h in Headers */,
|
834FD4EB27AF8F380063BC83 /* AudioChunk.h in Headers */,
|
||||||
83F18B4E27D1E8F000385946 /* CDSPBlockConvolver.h in Headers */,
|
|
||||||
83F18B4227D1E8EF00385946 /* CDSPProcessor.h in Headers */,
|
|
||||||
83B69B7A2845DF6500D2435A /* pf_avx_double.h in Headers */,
|
|
||||||
17A2D3C50B8D1D37000778C4 /* AudioDecoder.h in Headers */,
|
17A2D3C50B8D1D37000778C4 /* AudioDecoder.h in Headers */,
|
||||||
|
831A50092865A7DC0049CFE4 /* CDSPHBUpsampler.h in Headers */,
|
||||||
|
831A500E2865A7DC0049CFE4 /* r8bconf.h in Headers */,
|
||||||
8347C7412796C58800FA8A7D /* NSFileHandle+CreateFile.h in Headers */,
|
8347C7412796C58800FA8A7D /* NSFileHandle+CreateFile.h in Headers */,
|
||||||
17C940230B900909008627D6 /* AudioMetadataReader.h in Headers */,
|
17C940230B900909008627D6 /* AudioMetadataReader.h in Headers */,
|
||||||
|
831A500F2865A7DC0049CFE4 /* CDSPFracInterpolator.h in Headers */,
|
||||||
|
831A4FE22865A7DC0049CFE4 /* pf_sse2_double.h in Headers */,
|
||||||
839065F32853338700636FBB /* dsd2float.h in Headers */,
|
839065F32853338700636FBB /* dsd2float.h in Headers */,
|
||||||
17B619300B909BC300BC003F /* AudioPropertiesReader.h in Headers */,
|
17B619300B909BC300BC003F /* AudioPropertiesReader.h in Headers */,
|
||||||
83F18B5427D1E8F000385946 /* CDSPHBUpsampler.h in Headers */,
|
831A4FDF2865A7DC0049CFE4 /* pf_neon_double_from_avx.h in Headers */,
|
||||||
835EDD7D279FE307001EDCCE /* HeadphoneFilter.h in Headers */,
|
831A4FE32865A7DC0049CFE4 /* pf_avx_double.h in Headers */,
|
||||||
839366671815923C006DD712 /* CogPluginMulti.h in Headers */,
|
839366671815923C006DD712 /* CogPluginMulti.h in Headers */,
|
||||||
83F18B5327D1E8F000385946 /* CDSPResampler.h in Headers */,
|
|
||||||
17ADB13C0B97926D00257CA2 /* AudioSource.h in Headers */,
|
17ADB13C0B97926D00257CA2 /* AudioSource.h in Headers */,
|
||||||
|
831A500B2865A7DC0049CFE4 /* CDSPBlockConvolver.h in Headers */,
|
||||||
835C88B1279811A500E28EAE /* hdcd_decode2.h in Headers */,
|
835C88B1279811A500E28EAE /* hdcd_decode2.h in Headers */,
|
||||||
8EC1225F0B993BD500C5B3AD /* ConverterNode.h in Headers */,
|
8EC1225F0B993BD500C5B3AD /* ConverterNode.h in Headers */,
|
||||||
8384912718080FF100E7332D /* Logging.h in Headers */,
|
8384912718080FF100E7332D /* Logging.h in Headers */,
|
||||||
8377C64E27B8C54400E8BC0F /* fft.h in Headers */,
|
8377C64E27B8C54400E8BC0F /* fft.h in Headers */,
|
||||||
83F18B5027D1E8F000385946 /* r8bconf.h in Headers */,
|
|
||||||
835FAC5E27BCA14D00BA8562 /* BadSampleCleaner.h in Headers */,
|
835FAC5E27BCA14D00BA8562 /* BadSampleCleaner.h in Headers */,
|
||||||
8E8D3D2F0CBAEE6E00135C1B /* AudioContainer.h in Headers */,
|
8E8D3D2F0CBAEE6E00135C1B /* AudioContainer.h in Headers */,
|
||||||
83F18B3727D1E8EF00385946 /* r8bbase.h in Headers */,
|
|
||||||
B0575F2D0D687A0800411D77 /* Helper.h in Headers */,
|
B0575F2D0D687A0800411D77 /* Helper.h in Headers */,
|
||||||
835C88AD2797DA5800E28EAE /* util.h in Headers */,
|
|
||||||
07DB5F3E0ED353A900C2E3EF /* AudioMetadataWriter.h in Headers */,
|
07DB5F3E0ED353A900C2E3EF /* AudioMetadataWriter.h in Headers */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
@ -658,8 +620,8 @@
|
||||||
LastUpgradeCheck = 1400;
|
LastUpgradeCheck = 1400;
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
8DC2EF4F0486A6940098B216 = {
|
8DC2EF4F0486A6940098B216 = {
|
||||||
DevelopmentTeam = "";
|
LastSwiftMigration = 1330;
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -686,10 +648,7 @@
|
||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
83F18B3627D1E8EF00385946 /* LICENSE in Resources */,
|
831A50072865A7DC0049CFE4 /* LICENSE in Resources */,
|
||||||
835C88A92797D4D400E28EAE /* License.txt in Resources */,
|
|
||||||
835C88A82797D4D400E28EAE /* LICENSE.LGPL in Resources */,
|
|
||||||
83F18B4327D1E8EF00385946 /* README.md in Resources */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -700,37 +659,36 @@
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
83D40B572852CB3B003BB85C /* pffft_double.c in Sources */,
|
|
||||||
835EDD7B279FE23A001EDCCE /* HeadphoneFilter.mm in Sources */,
|
|
||||||
17D21CA20B8BE4BA00D1EBDE /* BufferChain.m in Sources */,
|
17D21CA20B8BE4BA00D1EBDE /* BufferChain.m in Sources */,
|
||||||
17D21CA60B8BE4BA00D1EBDE /* InputNode.m in Sources */,
|
17D21CA60B8BE4BA00D1EBDE /* InputNode.m in Sources */,
|
||||||
|
831A50112865A7DC0049CFE4 /* r8bbase.cpp in Sources */,
|
||||||
|
83504166286447DA006B32CC /* Downmix.m in Sources */,
|
||||||
8399CF2D27B5D1D5008751F1 /* NSDictionary+Merge.m in Sources */,
|
8399CF2D27B5D1D5008751F1 /* NSDictionary+Merge.m in Sources */,
|
||||||
|
831A50162865A8800049CFE4 /* r8bstate.cpp in Sources */,
|
||||||
17D21CA80B8BE4BA00D1EBDE /* Node.m in Sources */,
|
17D21CA80B8BE4BA00D1EBDE /* Node.m in Sources */,
|
||||||
17D21CAA0B8BE4BA00D1EBDE /* OutputNode.m in Sources */,
|
17D21CAA0B8BE4BA00D1EBDE /* OutputNode.m in Sources */,
|
||||||
8377C65327B8CAD100E8BC0F /* VisualizationController.m in Sources */,
|
17D21CC60B8BE4BA00D1EBDE /* OutputAVFoundation.m in Sources */,
|
||||||
834FD4F527AFA2150063BC83 /* Downmix.m in Sources */,
|
|
||||||
17D21CC60B8BE4BA00D1EBDE /* OutputCoreAudio.m in Sources */,
|
|
||||||
835C88B2279811A500E28EAE /* hdcd_decode2.c in Sources */,
|
835C88B2279811A500E28EAE /* hdcd_decode2.c in Sources */,
|
||||||
835FAC5F27BCA14D00BA8562 /* BadSampleCleaner.m in Sources */,
|
835FAC5F27BCA14D00BA8562 /* BadSampleCleaner.m in Sources */,
|
||||||
834FD4ED27AF91220063BC83 /* AudioChunk.m in Sources */,
|
834FD4ED27AF91220063BC83 /* AudioChunk.m in Sources */,
|
||||||
83F18B5127D1E8F000385946 /* r8bbase.cpp in Sources */,
|
|
||||||
17D21CF40B8BE5EF00D1EBDE /* Semaphore.m in Sources */,
|
17D21CF40B8BE5EF00D1EBDE /* Semaphore.m in Sources */,
|
||||||
|
839B83FA286D91ED00F529EE /* VisualizationController.swift in Sources */,
|
||||||
8347C7422796C58800FA8A7D /* NSFileHandle+CreateFile.m in Sources */,
|
8347C7422796C58800FA8A7D /* NSFileHandle+CreateFile.m in Sources */,
|
||||||
17D21DC80B8BE79700D1EBDE /* CoreAudioUtils.m in Sources */,
|
17D21DC80B8BE79700D1EBDE /* CoreAudioUtils.m in Sources */,
|
||||||
8328995327CB511000D7F028 /* RedundantPlaylistDataStore.m in Sources */,
|
8328995327CB511000D7F028 /* RedundantPlaylistDataStore.m in Sources */,
|
||||||
8377C64C27B8C51500E8BC0F /* fft_accelerate.c in Sources */,
|
8377C64C27B8C51500E8BC0F /* fft_accelerate.c in Sources */,
|
||||||
8363BABE284E428F00E5C9DD /* pffft.cpp in Sources */,
|
|
||||||
839366681815923C006DD712 /* CogPluginMulti.m in Sources */,
|
839366681815923C006DD712 /* CogPluginMulti.m in Sources */,
|
||||||
835C88AA2797D4D400E28EAE /* lpc.c in Sources */,
|
|
||||||
17D21EBE0B8BF44000D1EBDE /* AudioPlayer.m in Sources */,
|
17D21EBE0B8BF44000D1EBDE /* AudioPlayer.m in Sources */,
|
||||||
17F94DD60B8D0F7000A34E87 /* PluginController.mm in Sources */,
|
17F94DD60B8D0F7000A34E87 /* PluginController.mm in Sources */,
|
||||||
|
831A4FE62865A7DC0049CFE4 /* pffft_double.c in Sources */,
|
||||||
|
831A4FF22865A7DC0049CFE4 /* CDSPHBUpsampler.inc in Sources */,
|
||||||
17A2D3C60B8D1D37000778C4 /* AudioDecoder.m in Sources */,
|
17A2D3C60B8D1D37000778C4 /* AudioDecoder.m in Sources */,
|
||||||
8328995827CB51B700D7F028 /* SHA256Digest.m in Sources */,
|
8328995827CB51B700D7F028 /* SHA256Digest.m in Sources */,
|
||||||
17C940240B900909008627D6 /* AudioMetadataReader.m in Sources */,
|
17C940240B900909008627D6 /* AudioMetadataReader.m in Sources */,
|
||||||
17B619310B909BC300BC003F /* AudioPropertiesReader.m in Sources */,
|
17B619310B909BC300BC003F /* AudioPropertiesReader.m in Sources */,
|
||||||
17ADB13D0B97926D00257CA2 /* AudioSource.m in Sources */,
|
17ADB13D0B97926D00257CA2 /* AudioSource.m in Sources */,
|
||||||
834FD4F127AF93680063BC83 /* ChunkList.m in Sources */,
|
834FD4F127AF93680063BC83 /* ChunkList.m in Sources */,
|
||||||
8EC122600B993BD500C5B3AD /* ConverterNode.mm in Sources */,
|
8EC122600B993BD500C5B3AD /* ConverterNode.m in Sources */,
|
||||||
8E8D3D300CBAEE6E00135C1B /* AudioContainer.m in Sources */,
|
8E8D3D300CBAEE6E00135C1B /* AudioContainer.m in Sources */,
|
||||||
B0575F300D687A4000411D77 /* Helper.m in Sources */,
|
B0575F300D687A4000411D77 /* Helper.m in Sources */,
|
||||||
07DB5F3F0ED353A900C2E3EF /* AudioMetadataWriter.m in Sources */,
|
07DB5F3F0ED353A900C2E3EF /* AudioMetadataWriter.m in Sources */,
|
||||||
|
@ -743,18 +701,16 @@
|
||||||
1DEB91AE08733DA50010E9CD /* Debug */ = {
|
1DEB91AE08733DA50010E9CD /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEFINES_MODULE = YES;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
GCC_DYNAMIC_NO_PIC = NO;
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||||
GCC_MODEL_TUNING = G5;
|
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = CogAudio_Prefix.pch;
|
GCC_PREFIX_HEADER = CogAudio_Prefix.pch;
|
||||||
|
@ -766,31 +722,29 @@
|
||||||
INFOPLIST_FILE = Info.plist;
|
INFOPLIST_FILE = Info.plist;
|
||||||
INSTALL_PATH = "@executable_path/../Frameworks";
|
INSTALL_PATH = "@executable_path/../Frameworks";
|
||||||
LD_RUNPATH_SEARCH_PATHS = "@loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "@loader_path/Frameworks";
|
||||||
|
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
||||||
OTHER_LDFLAGS = "";
|
OTHER_LDFLAGS = "";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.cogaudio;
|
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.cogaudio;
|
||||||
PRODUCT_NAME = CogAudio;
|
PRODUCT_NAME = CogAudio;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
WARNING_LDFLAGS = "";
|
WARNING_LDFLAGS = "";
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
ZERO_LINK = YES;
|
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
1DEB91AF08733DA50010E9CD /* Release */ = {
|
1DEB91AF08733DA50010E9CD /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEFINES_MODULE = YES;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||||
GCC_MODEL_TUNING = G5;
|
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = CogAudio_Prefix.pch;
|
GCC_PREFIX_HEADER = CogAudio_Prefix.pch;
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
@ -800,12 +754,12 @@
|
||||||
INFOPLIST_FILE = Info.plist;
|
INFOPLIST_FILE = Info.plist;
|
||||||
INSTALL_PATH = "@executable_path/../Frameworks";
|
INSTALL_PATH = "@executable_path/../Frameworks";
|
||||||
LD_RUNPATH_SEARCH_PATHS = "@loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "@loader_path/Frameworks";
|
||||||
|
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
||||||
OTHER_LDFLAGS = "";
|
OTHER_LDFLAGS = "";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.cogaudio;
|
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.cogaudio;
|
||||||
PRODUCT_NAME = CogAudio;
|
PRODUCT_NAME = CogAudio;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
WARNING_LDFLAGS = "";
|
WARNING_LDFLAGS = "";
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
};
|
};
|
||||||
|
@ -850,7 +804,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SYMROOT = ../build;
|
SYMROOT = ../build;
|
||||||
|
@ -892,7 +846,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SYMROOT = ../build;
|
SYMROOT = ../build;
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (NSArray *)urlsForContainerURL:(NSURL *)url containers:(NSArray *)containers;
|
+ (NSArray *)urlsForContainerURL:(NSURL *)url containers:(NSArray *)containers;
|
||||||
|
+ (NSArray *)dependencyUrlsForContainerURL:(NSURL *)url containers:(NSArray *)containers;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
|
@ -171,6 +171,19 @@ static void *kCogDecoderMultiContext = &kCogDecoderMultiContext;
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+ (NSArray *)dependencyUrlsForContainerURL:(NSURL *)url containers:(NSArray *)containers {
|
||||||
|
NSArray *sortedContainers = sortClassesByPriority(containers);
|
||||||
|
for(NSString *classString in sortedContainers) {
|
||||||
|
Class container = NSClassFromString(classString);
|
||||||
|
if([container respondsToSelector:@selector(dependencyUrlsForContainerURL:)]) {
|
||||||
|
NSArray *urls = [container dependencyUrlsForContainerURL:url];
|
||||||
|
if([urls count])
|
||||||
|
return urls;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation CogMetadataReaderMulti
|
@implementation CogMetadataReaderMulti
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
//
|
//
|
||||||
// OutputCoreAudio.h
|
// OutputAVFoundation.h
|
||||||
// Cog
|
// Cog
|
||||||
//
|
//
|
||||||
// Created by Vincent Spader on 8/2/05.
|
// Created by Christopher Snowhill on 6/23/22.
|
||||||
// Copyright 2005 Vincent Spader. All rights reserved.
|
// Copyright 2022 Christopher Snowhill. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <AssertMacros.h>
|
#import <AssertMacros.h>
|
||||||
|
@ -26,8 +26,6 @@ using std::atomic_long;
|
||||||
|
|
||||||
#import "VisualizationController.h"
|
#import "VisualizationController.h"
|
||||||
|
|
||||||
#import "Semaphore.h"
|
|
||||||
|
|
||||||
//#define OUTPUT_LOG
|
//#define OUTPUT_LOG
|
||||||
#ifdef OUTPUT_LOG
|
#ifdef OUTPUT_LOG
|
||||||
#import <stdio.h>
|
#import <stdio.h>
|
||||||
|
@ -35,28 +33,33 @@ using std::atomic_long;
|
||||||
|
|
||||||
@class OutputNode;
|
@class OutputNode;
|
||||||
|
|
||||||
@interface OutputCoreAudio : NSObject {
|
@interface OutputAVFoundation : NSObject {
|
||||||
OutputNode *outputController;
|
OutputNode *outputController;
|
||||||
|
|
||||||
Semaphore *writeSemaphore;
|
BOOL r8bDone;
|
||||||
Semaphore *readSemaphore;
|
void *r8bstate, *r8bold;
|
||||||
|
|
||||||
|
void *r8bvis;
|
||||||
|
double lastVisRate;
|
||||||
|
|
||||||
BOOL stopInvoked;
|
BOOL stopInvoked;
|
||||||
|
BOOL stopCompleted;
|
||||||
BOOL running;
|
BOOL running;
|
||||||
BOOL stopping;
|
BOOL stopping;
|
||||||
BOOL stopped;
|
BOOL stopped;
|
||||||
BOOL started;
|
BOOL started;
|
||||||
BOOL paused;
|
BOOL paused;
|
||||||
BOOL stopNext;
|
|
||||||
BOOL restarted;
|
BOOL restarted;
|
||||||
|
BOOL commandStop;
|
||||||
|
|
||||||
BOOL eqEnabled;
|
BOOL eqEnabled;
|
||||||
BOOL eqInitialized;
|
BOOL eqInitialized;
|
||||||
|
|
||||||
|
BOOL dontRemix;
|
||||||
|
|
||||||
BOOL streamFormatStarted;
|
BOOL streamFormatStarted;
|
||||||
|
|
||||||
atomic_long bytesRendered;
|
double secondsHdcdSustained;
|
||||||
atomic_long bytesHdcdSustained;
|
|
||||||
|
|
||||||
BOOL defaultdevicelistenerapplied;
|
BOOL defaultdevicelistenerapplied;
|
||||||
BOOL currentdevicelistenerapplied;
|
BOOL currentdevicelistenerapplied;
|
||||||
|
@ -67,29 +70,41 @@ using std::atomic_long;
|
||||||
float volume;
|
float volume;
|
||||||
float eqPreamp;
|
float eqPreamp;
|
||||||
|
|
||||||
AVAudioFormat *_deviceFormat;
|
|
||||||
|
|
||||||
AudioDeviceID outputDeviceID;
|
AudioDeviceID outputDeviceID;
|
||||||
AudioStreamBasicDescription deviceFormat; // info about the default device
|
|
||||||
AudioStreamBasicDescription streamFormat; // stream format last seen in render callback
|
AudioStreamBasicDescription streamFormat; // stream format last seen in render callback
|
||||||
|
AudioStreamBasicDescription newFormat; // in case of resampler flush
|
||||||
|
|
||||||
AudioStreamBasicDescription visFormat; // Mono format for vis
|
AudioStreamBasicDescription visFormat; // Mono format for vis
|
||||||
|
|
||||||
uint32_t deviceChannelConfig;
|
uint32_t deviceChannelConfig;
|
||||||
uint32_t streamChannelConfig;
|
uint32_t streamChannelConfig;
|
||||||
|
uint32_t newChannelConfig;
|
||||||
|
|
||||||
|
AVSampleBufferAudioRenderer *audioRenderer;
|
||||||
|
AVSampleBufferRenderSynchronizer *renderSynchronizer;
|
||||||
|
|
||||||
|
CMAudioFormatDescriptionRef audioFormatDescription;
|
||||||
|
|
||||||
|
AudioChannelLayoutTag streamTag;
|
||||||
|
|
||||||
|
id currentPtsObserver;
|
||||||
|
NSLock *currentPtsLock;
|
||||||
|
CMTime currentPts, lastPts;
|
||||||
|
double secondsLatency;
|
||||||
|
|
||||||
|
CMTime outputPts, trackPts, lastCheckpointPts;
|
||||||
|
AudioTimeStamp timeStamp;
|
||||||
|
|
||||||
AUAudioUnit *_au;
|
|
||||||
size_t _bufferSize;
|
size_t _bufferSize;
|
||||||
|
|
||||||
AudioUnit _eq;
|
AudioUnit _eq;
|
||||||
|
|
||||||
DownmixProcessor *downmixer;
|
|
||||||
DownmixProcessor *downmixerForVis;
|
DownmixProcessor *downmixerForVis;
|
||||||
|
|
||||||
VisualizationController *visController;
|
VisualizationController *visController;
|
||||||
|
|
||||||
os_workgroup_t wg;
|
float inputBuffer[2048 * 32]; // 2048 samples times maximum supported channel count
|
||||||
os_workgroup_join_token_s wgToken;
|
float eqBuffer[2048 * 32];
|
||||||
|
|
||||||
#ifdef OUTPUT_LOG
|
#ifdef OUTPUT_LOG
|
||||||
FILE *_logFile;
|
FILE *_logFile;
|
||||||
|
@ -106,6 +121,8 @@ using std::atomic_long;
|
||||||
- (void)resume;
|
- (void)resume;
|
||||||
- (void)stop;
|
- (void)stop;
|
||||||
|
|
||||||
|
- (double)latency;
|
||||||
|
|
||||||
- (void)setVolume:(double)v;
|
- (void)setVolume:(double)v;
|
||||||
|
|
||||||
- (void)setEqualizerEnabled:(BOOL)enabled;
|
- (void)setEqualizerEnabled:(BOOL)enabled;
|
1175
Audio/Output/OutputAVFoundation.m
Normal file
1175
Audio/Output/OutputAVFoundation.m
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,986 +0,0 @@
|
||||||
//
|
|
||||||
// OutputCoreAudio.m
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 8/2/05.
|
|
||||||
// Copyright 2005 Vincent Spader. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "OutputCoreAudio.h"
|
|
||||||
#import "OutputNode.h"
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
|
||||||
#import "BadSampleCleaner.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#import "Logging.h"
|
|
||||||
|
|
||||||
#import <Accelerate/Accelerate.h>
|
|
||||||
|
|
||||||
extern void scale_by_volume(float *buffer, size_t count, float volume);
|
|
||||||
|
|
||||||
static NSString *CogPlaybackDidBeginNotficiation = @"CogPlaybackDidBeginNotficiation";
|
|
||||||
|
|
||||||
@implementation OutputCoreAudio
|
|
||||||
|
|
||||||
static void *kOutputCoreAudioContext = &kOutputCoreAudioContext;
|
|
||||||
|
|
||||||
static void fillBuffers(AudioBufferList *ioData, float *inbuffer, size_t count, size_t offset) {
|
|
||||||
const size_t channels = ioData->mNumberBuffers;
|
|
||||||
for(int i = 0; i < channels; ++i) {
|
|
||||||
const size_t maxCount = (ioData->mBuffers[i].mDataByteSize / sizeof(float)) - offset;
|
|
||||||
float *output = ((float *)ioData->mBuffers[i].mData) + offset;
|
|
||||||
const float *input = inbuffer + i;
|
|
||||||
cblas_scopy((int)((count > maxCount) ? maxCount : count), input, (int)channels, output, 1);
|
|
||||||
ioData->mBuffers[i].mNumberChannels = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void clearBuffers(AudioBufferList *ioData, size_t count, size_t offset) {
|
|
||||||
for(int i = 0; i < ioData->mNumberBuffers; ++i) {
|
|
||||||
memset(ioData->mBuffers[i].mData + offset * sizeof(float), 0, count * sizeof(float));
|
|
||||||
ioData->mBuffers[i].mNumberChannels = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void scaleBuffersByVolume(AudioBufferList *ioData, float volume) {
|
|
||||||
if(volume != 1.0) {
|
|
||||||
for(int i = 0; i < ioData->mNumberBuffers; ++i) {
|
|
||||||
scale_by_volume((float *)ioData->mBuffers[i].mData, ioData->mBuffers[i].mDataByteSize / sizeof(float), volume);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static OSStatus renderCallback(void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData) {
|
|
||||||
@autoreleasepool {
|
|
||||||
if(!inRefCon) return 0;
|
|
||||||
|
|
||||||
OutputCoreAudio *_self = (__bridge OutputCoreAudio *)inRefCon;
|
|
||||||
|
|
||||||
const int channels = _self->deviceFormat.mChannelsPerFrame;
|
|
||||||
const int bytesPerPacket = channels * sizeof(float);
|
|
||||||
|
|
||||||
size_t amountToRead, amountRead = 0;
|
|
||||||
|
|
||||||
amountToRead = inNumberFrames * bytesPerPacket;
|
|
||||||
|
|
||||||
int visTabulated = 0;
|
|
||||||
float visAudio[inNumberFrames]; // Chunk size
|
|
||||||
|
|
||||||
if(_self->stopping == YES || [_self->outputController shouldContinue] == NO) {
|
|
||||||
// Chain is dead, fill out the serial number pointer forever with silence
|
|
||||||
clearBuffers(ioData, amountToRead / bytesPerPacket, 0);
|
|
||||||
atomic_fetch_add(&_self->bytesRendered, amountToRead);
|
|
||||||
_self->stopping = YES;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if([[_self->outputController buffer] isEmpty] && ![_self->outputController chainQueueHasTracks]) {
|
|
||||||
// Hit end of last track, pad with silence until queue event stops us
|
|
||||||
clearBuffers(ioData, amountToRead / bytesPerPacket, 0);
|
|
||||||
atomic_fetch_add(&_self->bytesRendered, amountToRead);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
AudioChunk *chunk = [[_self->outputController buffer] removeSamples:(amountToRead / bytesPerPacket)];
|
|
||||||
|
|
||||||
size_t frameCount = [chunk frameCount];
|
|
||||||
AudioStreamBasicDescription format = [chunk format];
|
|
||||||
uint32_t config = [chunk channelConfig];
|
|
||||||
|
|
||||||
if(frameCount) {
|
|
||||||
if(!_self->streamFormatStarted || config != _self->streamChannelConfig || memcmp(&_self->streamFormat, &format, sizeof(format)) != 0) {
|
|
||||||
_self->streamFormat = format;
|
|
||||||
_self->streamChannelConfig = config;
|
|
||||||
_self->streamFormatStarted = YES;
|
|
||||||
_self->downmixer = [[DownmixProcessor alloc] initWithInputFormat:format inputConfig:config andOutputFormat:_self->deviceFormat outputConfig:_self->deviceChannelConfig];
|
|
||||||
_self->downmixerForVis = [[DownmixProcessor alloc] initWithInputFormat:format inputConfig:config andOutputFormat:_self->visFormat outputConfig:AudioConfigMono];
|
|
||||||
}
|
|
||||||
|
|
||||||
double chunkDuration = [chunk duration];
|
|
||||||
|
|
||||||
NSData *samples = [chunk removeSamples:frameCount];
|
|
||||||
#ifdef _DEBUG
|
|
||||||
[BadSampleCleaner cleanSamples:(float *)[samples bytes]
|
|
||||||
amount:frameCount * format.mChannelsPerFrame
|
|
||||||
location:@"pre downmix"];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
float downmixedData[frameCount * channels];
|
|
||||||
[_self->downmixer process:[samples bytes] frameCount:frameCount output:downmixedData];
|
|
||||||
#ifdef _DEBUG
|
|
||||||
[BadSampleCleaner cleanSamples:downmixedData
|
|
||||||
amount:frameCount * channels
|
|
||||||
location:@"post downmix"];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
[_self->downmixerForVis process:[samples bytes] frameCount:frameCount output:visAudio];
|
|
||||||
visTabulated += frameCount;
|
|
||||||
|
|
||||||
fillBuffers(ioData, downmixedData, frameCount, 0);
|
|
||||||
amountRead = frameCount * bytesPerPacket;
|
|
||||||
[_self->outputController incrementAmountPlayed:chunkDuration];
|
|
||||||
atomic_fetch_add(&_self->bytesRendered, amountRead);
|
|
||||||
[_self->writeSemaphore signal];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try repeatedly! Buffer wraps can cause a slight data shortage, as can
|
|
||||||
// unexpected track changes.
|
|
||||||
while((amountRead < amountToRead) && [_self->outputController shouldContinue] == YES) {
|
|
||||||
chunk = [[_self->outputController buffer] removeSamples:((amountToRead - amountRead) / bytesPerPacket)];
|
|
||||||
frameCount = [chunk frameCount];
|
|
||||||
format = [chunk format];
|
|
||||||
config = [chunk channelConfig];
|
|
||||||
if(frameCount) {
|
|
||||||
if(!_self->streamFormatStarted || config != _self->streamChannelConfig || memcmp(&_self->streamFormat, &format, sizeof(format)) != 0) {
|
|
||||||
_self->streamFormat = format;
|
|
||||||
_self->streamFormatStarted = YES;
|
|
||||||
_self->downmixer = [[DownmixProcessor alloc] initWithInputFormat:format inputConfig:config andOutputFormat:_self->deviceFormat outputConfig:_self->deviceChannelConfig];
|
|
||||||
_self->downmixerForVis = [[DownmixProcessor alloc] initWithInputFormat:format inputConfig:config andOutputFormat:_self->visFormat outputConfig:AudioConfigMono];
|
|
||||||
}
|
|
||||||
atomic_fetch_add(&_self->bytesRendered, frameCount * bytesPerPacket);
|
|
||||||
double chunkDuration = [chunk duration];
|
|
||||||
NSData *samples = [chunk removeSamples:frameCount];
|
|
||||||
#ifdef _DEBUG
|
|
||||||
[BadSampleCleaner cleanSamples:(float *)[samples bytes]
|
|
||||||
amount:frameCount * format.mChannelsPerFrame
|
|
||||||
location:@"pre downmix"];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
float downmixedData[frameCount * channels];
|
|
||||||
[_self->downmixer process:[samples bytes] frameCount:frameCount output:downmixedData];
|
|
||||||
fillBuffers(ioData, downmixedData, frameCount, amountRead / bytesPerPacket);
|
|
||||||
#ifdef _DEBUG
|
|
||||||
[BadSampleCleaner cleanSamples:downmixedData
|
|
||||||
amount:frameCount * channels
|
|
||||||
location:@"post downmix"];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
[_self->downmixerForVis process:[samples bytes] frameCount:frameCount output:visAudio + visTabulated];
|
|
||||||
visTabulated += frameCount;
|
|
||||||
|
|
||||||
[_self->outputController incrementAmountPlayed:chunkDuration];
|
|
||||||
|
|
||||||
amountRead += frameCount * bytesPerPacket;
|
|
||||||
[_self->writeSemaphore signal];
|
|
||||||
} else {
|
|
||||||
[_self->readSemaphore timedWait:500];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
float volumeScale = 1.0;
|
|
||||||
long sustained = atomic_load_explicit(&_self->bytesHdcdSustained, memory_order_relaxed);
|
|
||||||
if(sustained) {
|
|
||||||
if(sustained < amountRead) {
|
|
||||||
atomic_store(&_self->bytesHdcdSustained, 0);
|
|
||||||
} else {
|
|
||||||
atomic_fetch_sub(&_self->bytesHdcdSustained, amountRead);
|
|
||||||
}
|
|
||||||
volumeScale = 0.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(_self->eqEnabled) {
|
|
||||||
volumeScale *= _self->eqPreamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
scaleBuffersByVolume(ioData, _self->volume * volumeScale);
|
|
||||||
|
|
||||||
if(amountRead < amountToRead) {
|
|
||||||
// Either underrun, or no data at all. Caller output tends to just
|
|
||||||
// buffer loop if it doesn't get anything, so always produce a full
|
|
||||||
// buffer, and silence anything we couldn't supply.
|
|
||||||
clearBuffers(ioData, (amountToRead - amountRead) / bytesPerPacket, amountRead / bytesPerPacket);
|
|
||||||
}
|
|
||||||
|
|
||||||
[_self->visController postSampleRate:_self->deviceFormat.mSampleRate];
|
|
||||||
[_self->visController postVisPCM:visAudio amount:visTabulated];
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
- (id)initWithController:(OutputNode *)c {
|
|
||||||
self = [super init];
|
|
||||||
if(self) {
|
|
||||||
outputController = c;
|
|
||||||
volume = 1.0;
|
|
||||||
outputDeviceID = -1;
|
|
||||||
|
|
||||||
atomic_init(&bytesRendered, 0);
|
|
||||||
atomic_init(&bytesHdcdSustained, 0);
|
|
||||||
|
|
||||||
writeSemaphore = [[Semaphore alloc] init];
|
|
||||||
readSemaphore = [[Semaphore alloc] init];
|
|
||||||
|
|
||||||
#ifdef OUTPUT_LOG
|
|
||||||
_logFile = fopen("/tmp/CogAudioLog.raw", "wb");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
static OSStatus
|
|
||||||
default_device_changed(AudioObjectID inObjectID, UInt32 inNumberAddresses, const AudioObjectPropertyAddress *inAddresses, void *inUserData) {
|
|
||||||
OutputCoreAudio *this = (__bridge OutputCoreAudio *)inUserData;
|
|
||||||
return [this setOutputDeviceByID:-1];
|
|
||||||
}
|
|
||||||
|
|
||||||
static OSStatus
|
|
||||||
current_device_listener(AudioObjectID inObjectID, UInt32 inNumberAddresses, const AudioObjectPropertyAddress *inAddresses, void *inUserData) {
|
|
||||||
OutputCoreAudio *this = (__bridge OutputCoreAudio *)inUserData;
|
|
||||||
for(UInt32 i = 0; i < inNumberAddresses; ++i) {
|
|
||||||
switch(inAddresses[i].mSelector) {
|
|
||||||
case kAudioDevicePropertyDeviceIsAlive:
|
|
||||||
return [this setOutputDeviceByID:-1];
|
|
||||||
|
|
||||||
case kAudioDevicePropertyNominalSampleRate:
|
|
||||||
case kAudioDevicePropertyStreamFormat:
|
|
||||||
this->outputdevicechanged = YES;
|
|
||||||
return noErr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return noErr;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
|
|
||||||
if(context != kOutputCoreAudioContext) {
|
|
||||||
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if([keyPath isEqualToString:@"values.outputDevice"]) {
|
|
||||||
NSDictionary *device = [[[NSUserDefaultsController sharedUserDefaultsController] defaults] objectForKey:@"outputDevice"];
|
|
||||||
|
|
||||||
[self setOutputDeviceWithDeviceDict:device];
|
|
||||||
} else if([keyPath isEqualToString:@"values.GraphicEQenable"]) {
|
|
||||||
BOOL enabled = [[[[NSUserDefaultsController sharedUserDefaultsController] defaults] objectForKey:@"GraphicEQenable"] boolValue];
|
|
||||||
|
|
||||||
[self setEqualizerEnabled:enabled];
|
|
||||||
} else if([keyPath isEqualToString:@"values.eqPreamp"]) {
|
|
||||||
float preamp = [[[NSUserDefaultsController sharedUserDefaultsController] defaults] floatForKey:@"eqPreamp"];
|
|
||||||
eqPreamp = pow(10.0, preamp / 20.0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)signalEndOfStream {
|
|
||||||
[outputController resetAmountPlayed];
|
|
||||||
[outputController endOfInputPlayed];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)threadEntry:(id)arg {
|
|
||||||
running = YES;
|
|
||||||
started = NO;
|
|
||||||
stopNext = NO;
|
|
||||||
atomic_store(&bytesRendered, 0);
|
|
||||||
NSMutableArray *delayedEvents = [[NSMutableArray alloc] init];
|
|
||||||
BOOL delayedEventsPopped = YES;
|
|
||||||
|
|
||||||
while(!stopping) {
|
|
||||||
if(outputdevicechanged) {
|
|
||||||
[self resetIfOutputChanged];
|
|
||||||
outputdevicechanged = NO;
|
|
||||||
}
|
|
||||||
if(restarted) break;
|
|
||||||
if([outputController shouldReset]) {
|
|
||||||
@autoreleasepool {
|
|
||||||
[[outputController buffer] reset];
|
|
||||||
}
|
|
||||||
[outputController setShouldReset:NO];
|
|
||||||
[delayedEvents removeAllObjects];
|
|
||||||
delayedEventsPopped = YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
while([delayedEvents count]) {
|
|
||||||
size_t localBytesRendered = atomic_load_explicit(&bytesRendered, memory_order_relaxed);
|
|
||||||
double secondsRendered = (double)localBytesRendered / (double)(deviceFormat.mBytesPerPacket * deviceFormat.mSampleRate);
|
|
||||||
if(secondsRendered >= [[delayedEvents objectAtIndex:0] doubleValue]) {
|
|
||||||
if([outputController chainQueueHasTracks])
|
|
||||||
delayedEventsPopped = YES;
|
|
||||||
[self signalEndOfStream];
|
|
||||||
[delayedEvents removeObjectAtIndex:0];
|
|
||||||
} else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(stopping)
|
|
||||||
break;
|
|
||||||
|
|
||||||
size_t frameCount = 0;
|
|
||||||
|
|
||||||
if(![[outputController buffer] isFull]) {
|
|
||||||
@autoreleasepool {
|
|
||||||
AudioChunk *chunk = [outputController readChunk:512];
|
|
||||||
frameCount = [chunk frameCount];
|
|
||||||
if(frameCount) {
|
|
||||||
[[outputController buffer] addChunk:chunk];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(frameCount) {
|
|
||||||
[readSemaphore signal];
|
|
||||||
continue;
|
|
||||||
} else if([outputController shouldContinue] == NO)
|
|
||||||
break;
|
|
||||||
else if([[outputController buffer] isFull]) {
|
|
||||||
if(!started) {
|
|
||||||
started = YES;
|
|
||||||
if(!paused) {
|
|
||||||
NSError *err;
|
|
||||||
[_au startHardwareAndReturnError:&err];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// End of input possibly reached
|
|
||||||
if(delayedEventsPopped && [outputController endOfStream] == YES) {
|
|
||||||
double secondsBuffered = [[outputController buffer] listDuration];
|
|
||||||
size_t _bytesRendered = atomic_load_explicit(&bytesRendered, memory_order_relaxed);
|
|
||||||
secondsBuffered += (double)_bytesRendered / (double)(deviceFormat.mBytesPerPacket * deviceFormat.mSampleRate);
|
|
||||||
if([outputController chainQueueHasTracks]) {
|
|
||||||
if(secondsBuffered <= 0.005)
|
|
||||||
secondsBuffered = 0.0;
|
|
||||||
else
|
|
||||||
secondsBuffered -= 0.005;
|
|
||||||
} else {
|
|
||||||
stopNext = YES;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
[delayedEvents addObject:@(secondsBuffered)];
|
|
||||||
delayedEventsPopped = NO;
|
|
||||||
if(!started) {
|
|
||||||
started = YES;
|
|
||||||
if(!paused) {
|
|
||||||
NSError *err;
|
|
||||||
[_au startHardwareAndReturnError:&err];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[readSemaphore signal];
|
|
||||||
[writeSemaphore timedWait:5000];
|
|
||||||
}
|
|
||||||
|
|
||||||
stopped = YES;
|
|
||||||
[self stop];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (OSStatus)setOutputDeviceByID:(AudioDeviceID)deviceID {
|
|
||||||
OSStatus err;
|
|
||||||
BOOL defaultDevice = NO;
|
|
||||||
AudioObjectPropertyAddress theAddress = {
|
|
||||||
.mSelector = kAudioHardwarePropertyDefaultOutputDevice,
|
|
||||||
.mScope = kAudioObjectPropertyScopeGlobal,
|
|
||||||
.mElement = kAudioObjectPropertyElementMaster
|
|
||||||
};
|
|
||||||
|
|
||||||
if(deviceID == -1) {
|
|
||||||
defaultDevice = YES;
|
|
||||||
UInt32 size = sizeof(AudioDeviceID);
|
|
||||||
err = AudioObjectGetPropertyData(kAudioObjectSystemObject, &theAddress, 0, NULL, &size, &deviceID);
|
|
||||||
|
|
||||||
if(err != noErr) {
|
|
||||||
DLog(@"THERE'S NO DEFAULT OUTPUT DEVICE");
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(_au) {
|
|
||||||
if(defaultdevicelistenerapplied && !defaultDevice) {
|
|
||||||
/* Already set above
|
|
||||||
* theAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; */
|
|
||||||
AudioObjectRemovePropertyListener(kAudioObjectSystemObject, &theAddress, default_device_changed, (__bridge void *_Nullable)(self));
|
|
||||||
defaultdevicelistenerapplied = NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
outputdevicechanged = NO;
|
|
||||||
|
|
||||||
if(outputDeviceID != deviceID) {
|
|
||||||
if(currentdevicelistenerapplied) {
|
|
||||||
if(devicealivelistenerapplied) {
|
|
||||||
theAddress.mSelector = kAudioDevicePropertyDeviceIsAlive;
|
|
||||||
AudioObjectRemovePropertyListener(outputDeviceID, &theAddress, current_device_listener, (__bridge void *_Nullable)(self));
|
|
||||||
devicealivelistenerapplied = NO;
|
|
||||||
}
|
|
||||||
theAddress.mSelector = kAudioDevicePropertyStreamFormat;
|
|
||||||
AudioObjectRemovePropertyListener(outputDeviceID, &theAddress, current_device_listener, (__bridge void *_Nullable)(self));
|
|
||||||
theAddress.mSelector = kAudioDevicePropertyNominalSampleRate;
|
|
||||||
AudioObjectRemovePropertyListener(outputDeviceID, &theAddress, current_device_listener, (__bridge void *_Nullable)(self));
|
|
||||||
currentdevicelistenerapplied = NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
DLog(@"Device: %i\n", deviceID);
|
|
||||||
outputDeviceID = deviceID;
|
|
||||||
|
|
||||||
NSError *nserr;
|
|
||||||
[_au setDeviceID:outputDeviceID error:&nserr];
|
|
||||||
if(nserr != nil) {
|
|
||||||
return (OSErr)[nserr code];
|
|
||||||
}
|
|
||||||
|
|
||||||
outputdevicechanged = YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!currentdevicelistenerapplied) {
|
|
||||||
if(!devicealivelistenerapplied && !defaultDevice) {
|
|
||||||
theAddress.mSelector = kAudioDevicePropertyDeviceIsAlive;
|
|
||||||
AudioObjectAddPropertyListener(outputDeviceID, &theAddress, current_device_listener, (__bridge void *_Nullable)(self));
|
|
||||||
devicealivelistenerapplied = YES;
|
|
||||||
}
|
|
||||||
theAddress.mSelector = kAudioDevicePropertyStreamFormat;
|
|
||||||
AudioObjectAddPropertyListener(outputDeviceID, &theAddress, current_device_listener, (__bridge void *_Nullable)(self));
|
|
||||||
theAddress.mSelector = kAudioDevicePropertyNominalSampleRate;
|
|
||||||
AudioObjectAddPropertyListener(outputDeviceID, &theAddress, current_device_listener, (__bridge void *_Nullable)(self));
|
|
||||||
currentdevicelistenerapplied = YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!defaultdevicelistenerapplied && defaultDevice) {
|
|
||||||
theAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice;
|
|
||||||
AudioObjectAddPropertyListener(kAudioObjectSystemObject, &theAddress, default_device_changed, (__bridge void *_Nullable)(self));
|
|
||||||
defaultdevicelistenerapplied = YES;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
err = noErr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(err != noErr) {
|
|
||||||
DLog(@"No output device with ID %d could be found.", deviceID);
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)setOutputDeviceWithDeviceDict:(NSDictionary *)deviceDict {
|
|
||||||
NSNumber *deviceIDNum = [deviceDict objectForKey:@"deviceID"];
|
|
||||||
AudioDeviceID outputDeviceID = [deviceIDNum unsignedIntValue] ?: -1;
|
|
||||||
|
|
||||||
__block OSStatus err = [self setOutputDeviceByID:outputDeviceID];
|
|
||||||
|
|
||||||
if(err != noErr) {
|
|
||||||
// Try matching by name.
|
|
||||||
NSString *userDeviceName = deviceDict[@"name"];
|
|
||||||
|
|
||||||
[self enumerateAudioOutputsUsingBlock:
|
|
||||||
^(NSString *deviceName, AudioDeviceID deviceID, AudioDeviceID systemDefaultID, BOOL *stop) {
|
|
||||||
if([deviceName isEqualToString:userDeviceName]) {
|
|
||||||
err = [self setOutputDeviceByID:deviceID];
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
// Disable. Would cause loop by triggering `-observeValueForKeyPath:ofObject:change:context:` above.
|
|
||||||
// Update `outputDevice`, in case the ID has changed.
|
|
||||||
NSDictionary *deviceInfo = @{
|
|
||||||
@"name": deviceName,
|
|
||||||
@"deviceID": @(deviceID),
|
|
||||||
};
|
|
||||||
[[NSUserDefaults standardUserDefaults] setObject:deviceInfo forKey:@"outputDevice"];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DLog(@"Found output device: \"%@\" (%d).", deviceName, deviceID);
|
|
||||||
|
|
||||||
*stop = YES;
|
|
||||||
}
|
|
||||||
}];
|
|
||||||
}
|
|
||||||
|
|
||||||
if(err != noErr) {
|
|
||||||
ALog(@"No output device could be found, your random error code is %d. Have a nice day!", err);
|
|
||||||
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The following is largely a copy pasta of -awakeFromNib from "OutputsArrayController.m".
|
|
||||||
// TODO: Share the code. (How to do this across xcodeproj?)
|
|
||||||
- (void)enumerateAudioOutputsUsingBlock:(void(NS_NOESCAPE ^ _Nonnull)(NSString *deviceName, AudioDeviceID deviceID, AudioDeviceID systemDefaultID, BOOL *stop))block {
|
|
||||||
UInt32 propsize;
|
|
||||||
AudioObjectPropertyAddress theAddress = {
|
|
||||||
.mSelector = kAudioHardwarePropertyDevices,
|
|
||||||
.mScope = kAudioObjectPropertyScopeGlobal,
|
|
||||||
.mElement = kAudioObjectPropertyElementMaster
|
|
||||||
};
|
|
||||||
|
|
||||||
__Verify_noErr(AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, &theAddress, 0, NULL, &propsize));
|
|
||||||
UInt32 nDevices = propsize / (UInt32)sizeof(AudioDeviceID);
|
|
||||||
AudioDeviceID *devids = malloc(propsize);
|
|
||||||
__Verify_noErr(AudioObjectGetPropertyData(kAudioObjectSystemObject, &theAddress, 0, NULL, &propsize, devids));
|
|
||||||
|
|
||||||
theAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice;
|
|
||||||
AudioDeviceID systemDefault;
|
|
||||||
propsize = sizeof(systemDefault);
|
|
||||||
__Verify_noErr(AudioObjectGetPropertyData(kAudioObjectSystemObject, &theAddress, 0, NULL, &propsize, &systemDefault));
|
|
||||||
|
|
||||||
theAddress.mScope = kAudioDevicePropertyScopeOutput;
|
|
||||||
|
|
||||||
for(UInt32 i = 0; i < nDevices; ++i) {
|
|
||||||
UInt32 isAlive = 0;
|
|
||||||
propsize = sizeof(isAlive);
|
|
||||||
theAddress.mSelector = kAudioDevicePropertyDeviceIsAlive;
|
|
||||||
__Verify_noErr(AudioObjectGetPropertyData(devids[i], &theAddress, 0, NULL, &propsize, &isAlive));
|
|
||||||
if(!isAlive) continue;
|
|
||||||
|
|
||||||
CFStringRef name = NULL;
|
|
||||||
propsize = sizeof(name);
|
|
||||||
theAddress.mSelector = kAudioDevicePropertyDeviceNameCFString;
|
|
||||||
__Verify_noErr(AudioObjectGetPropertyData(devids[i], &theAddress, 0, NULL, &propsize, &name));
|
|
||||||
|
|
||||||
propsize = 0;
|
|
||||||
theAddress.mSelector = kAudioDevicePropertyStreamConfiguration;
|
|
||||||
__Verify_noErr(AudioObjectGetPropertyDataSize(devids[i], &theAddress, 0, NULL, &propsize));
|
|
||||||
|
|
||||||
if(propsize < sizeof(UInt32)) {
|
|
||||||
if(name) CFRelease(name);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
AudioBufferList *bufferList = (AudioBufferList *)malloc(propsize);
|
|
||||||
__Verify_noErr(AudioObjectGetPropertyData(devids[i], &theAddress, 0, NULL, &propsize, bufferList));
|
|
||||||
UInt32 bufferCount = bufferList->mNumberBuffers;
|
|
||||||
free(bufferList);
|
|
||||||
|
|
||||||
if(!bufferCount) {
|
|
||||||
if(name) CFRelease(name);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL stop = NO;
|
|
||||||
NSString *deviceName = name ? [NSString stringWithString:(__bridge NSString *)name] : [NSString stringWithFormat:@"Unknown device %u", (unsigned int)devids[i]];
|
|
||||||
|
|
||||||
block(deviceName,
|
|
||||||
devids[i],
|
|
||||||
systemDefault,
|
|
||||||
&stop);
|
|
||||||
|
|
||||||
CFRelease(name);
|
|
||||||
|
|
||||||
if(stop) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
free(devids);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)resetIfOutputChanged {
|
|
||||||
AVAudioFormat *format = _au.outputBusses[0].format;
|
|
||||||
|
|
||||||
if(!restarted && (!_deviceFormat || ![_deviceFormat isEqual:format])) {
|
|
||||||
[outputController restartPlaybackAtCurrentPosition];
|
|
||||||
restarted = YES;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)updateDeviceFormat {
|
|
||||||
AVAudioFormat *format = _au.outputBusses[0].format;
|
|
||||||
|
|
||||||
if(!_deviceFormat || ![_deviceFormat isEqual:format]) {
|
|
||||||
NSError *err;
|
|
||||||
AVAudioFormat *renderFormat;
|
|
||||||
|
|
||||||
[outputController incrementAmountPlayed:[[outputController buffer] listDuration]];
|
|
||||||
@autoreleasepool {
|
|
||||||
[[outputController buffer] reset];
|
|
||||||
}
|
|
||||||
|
|
||||||
_deviceFormat = format;
|
|
||||||
deviceFormat = *(format.streamDescription);
|
|
||||||
|
|
||||||
/// Seems some 3rd party devices return incorrect stuff...or I just don't like noninterleaved data.
|
|
||||||
deviceFormat.mFormatFlags &= ~kLinearPCMFormatFlagIsNonInterleaved;
|
|
||||||
// deviceFormat.mFormatFlags &= ~kLinearPCMFormatFlagIsFloat;
|
|
||||||
// deviceFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger;
|
|
||||||
// We don't want more than 8 channels
|
|
||||||
if(deviceFormat.mChannelsPerFrame > 8) {
|
|
||||||
deviceFormat.mChannelsPerFrame = 8;
|
|
||||||
}
|
|
||||||
deviceFormat.mBytesPerFrame = deviceFormat.mChannelsPerFrame * (deviceFormat.mBitsPerChannel / 8);
|
|
||||||
deviceFormat.mBytesPerPacket = deviceFormat.mBytesPerFrame * deviceFormat.mFramesPerPacket;
|
|
||||||
|
|
||||||
visFormat = deviceFormat;
|
|
||||||
visFormat.mChannelsPerFrame = 1;
|
|
||||||
visFormat.mBytesPerFrame = visFormat.mChannelsPerFrame * (visFormat.mBitsPerChannel / 8);
|
|
||||||
visFormat.mBytesPerPacket = visFormat.mBytesPerFrame * visFormat.mFramesPerPacket;
|
|
||||||
|
|
||||||
/* Set the channel layout for the audio queue */
|
|
||||||
AudioChannelLayoutTag tag = 0;
|
|
||||||
switch(deviceFormat.mChannelsPerFrame) {
|
|
||||||
case 1:
|
|
||||||
tag = kAudioChannelLayoutTag_Mono;
|
|
||||||
deviceChannelConfig = AudioConfigMono;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
tag = kAudioChannelLayoutTag_Stereo;
|
|
||||||
deviceChannelConfig = AudioConfigStereo;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
tag = kAudioChannelLayoutTag_DVD_4;
|
|
||||||
deviceChannelConfig = AudioConfig3Point0;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
tag = kAudioChannelLayoutTag_Quadraphonic;
|
|
||||||
deviceChannelConfig = AudioConfig4Point0;
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
tag = kAudioChannelLayoutTag_MPEG_5_0_A;
|
|
||||||
deviceChannelConfig = AudioConfig5Point0;
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
tag = kAudioChannelLayoutTag_MPEG_5_1_A;
|
|
||||||
deviceChannelConfig = AudioConfig5Point1;
|
|
||||||
break;
|
|
||||||
case 7:
|
|
||||||
tag = kAudioChannelLayoutTag_MPEG_6_1_A;
|
|
||||||
deviceChannelConfig = AudioConfig6Point1;
|
|
||||||
break;
|
|
||||||
case 8:
|
|
||||||
tag = kAudioChannelLayoutTag_MPEG_7_1_A;
|
|
||||||
deviceChannelConfig = AudioConfig7Point1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
renderFormat = [[AVAudioFormat alloc] initWithStreamDescription:&deviceFormat channelLayout:[[AVAudioChannelLayout alloc] initWithLayoutTag:tag]];
|
|
||||||
[_au.inputBusses[0] setFormat:renderFormat error:&err];
|
|
||||||
if(err != nil)
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
[outputController setFormat:&deviceFormat channelConfig:deviceChannelConfig];
|
|
||||||
|
|
||||||
AudioStreamBasicDescription asbd = deviceFormat;
|
|
||||||
|
|
||||||
asbd.mFormatFlags &= ~kAudioFormatFlagIsPacked;
|
|
||||||
|
|
||||||
AudioUnitSetProperty(_eq, kAudioUnitProperty_StreamFormat,
|
|
||||||
kAudioUnitScope_Input, 0, &asbd, sizeof(asbd));
|
|
||||||
|
|
||||||
AudioUnitSetProperty(_eq, kAudioUnitProperty_StreamFormat,
|
|
||||||
kAudioUnitScope_Output, 0, &asbd, sizeof(asbd));
|
|
||||||
AudioUnitReset(_eq, kAudioUnitScope_Input, 0);
|
|
||||||
AudioUnitReset(_eq, kAudioUnitScope_Output, 0);
|
|
||||||
|
|
||||||
AudioUnitReset(_eq, kAudioUnitScope_Global, 0);
|
|
||||||
|
|
||||||
eqEnabled = [[[[NSUserDefaultsController sharedUserDefaultsController] defaults] objectForKey:@"GraphicEQenable"] boolValue];
|
|
||||||
}
|
|
||||||
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)audioOutputBlock {
|
|
||||||
__block AudioUnit eq = _eq;
|
|
||||||
__block AudioStreamBasicDescription *format = &deviceFormat;
|
|
||||||
__block BOOL *eqEnabled = &self->eqEnabled;
|
|
||||||
__block void *refCon = (__bridge void *)self;
|
|
||||||
|
|
||||||
#ifdef OUTPUT_LOG
|
|
||||||
__block FILE *logFile = _logFile;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_au.outputProvider = ^AUAudioUnitStatus(AudioUnitRenderActionFlags *_Nonnull actionFlags, const AudioTimeStamp *_Nonnull timestamp, AUAudioFrameCount frameCount, NSInteger inputBusNumber, AudioBufferList *_Nonnull inputData) {
|
|
||||||
// This expects multiple buffers, so:
|
|
||||||
if(!frameCount) return 0;
|
|
||||||
|
|
||||||
int i;
|
|
||||||
const int channels = format->mChannelsPerFrame;
|
|
||||||
if(!channels) return 0;
|
|
||||||
|
|
||||||
const int channelsminusone = channels - 1;
|
|
||||||
float buffers[frameCount * channels];
|
|
||||||
uint8_t bufferlistbuffer[sizeof(AudioBufferList) + sizeof(AudioBuffer) * channelsminusone];
|
|
||||||
AudioBufferList *ioData = (AudioBufferList *)(&bufferlistbuffer[0]);
|
|
||||||
|
|
||||||
ioData->mNumberBuffers = channels;
|
|
||||||
|
|
||||||
memset(buffers, 0, sizeof(buffers));
|
|
||||||
|
|
||||||
for(i = 0; i < channels; ++i) {
|
|
||||||
ioData->mBuffers[i].mNumberChannels = 1;
|
|
||||||
ioData->mBuffers[i].mData = buffers + frameCount * i;
|
|
||||||
ioData->mBuffers[i].mDataByteSize = frameCount * sizeof(float);
|
|
||||||
}
|
|
||||||
|
|
||||||
OSStatus ret;
|
|
||||||
|
|
||||||
if(*eqEnabled)
|
|
||||||
ret = AudioUnitRender(eq, actionFlags, timestamp, (UInt32)inputBusNumber, frameCount, ioData);
|
|
||||||
else
|
|
||||||
ret = renderCallback(refCon, actionFlags, timestamp, (UInt32)inputBusNumber, frameCount, ioData);
|
|
||||||
|
|
||||||
if(ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
for(i = 0; i < channels; ++i) {
|
|
||||||
float *outBuffer = ((float *)inputData->mBuffers[0].mData) + i;
|
|
||||||
const float *inBuffer = ((float *)ioData->mBuffers[i].mData);
|
|
||||||
const int frameCount = ioData->mBuffers[i].mDataByteSize / sizeof(float);
|
|
||||||
cblas_scopy(frameCount, inBuffer, 1, outBuffer, channels);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef OUTPUT_LOG
|
|
||||||
if(logFile) {
|
|
||||||
fwrite(inputData->mBuffers[0].mData, 1, inputData->mBuffers[0].mDataByteSize, logFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
// memset(inputData->mBuffers[0].mData, 0, inputData->mBuffers[0].mDataByteSize);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
inputData->mBuffers[0].mNumberChannels = channels;
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
|
||||||
[BadSampleCleaner cleanSamples:(float *)inputData->mBuffers[0].mData
|
|
||||||
amount:inputData->mBuffers[0].mDataByteSize / sizeof(float)
|
|
||||||
location:@"final output"];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)setup {
|
|
||||||
if(_au)
|
|
||||||
[self stop];
|
|
||||||
|
|
||||||
@synchronized(self) {
|
|
||||||
stopInvoked = NO;
|
|
||||||
|
|
||||||
running = NO;
|
|
||||||
stopping = NO;
|
|
||||||
stopped = NO;
|
|
||||||
paused = NO;
|
|
||||||
stopNext = NO;
|
|
||||||
outputDeviceID = -1;
|
|
||||||
restarted = NO;
|
|
||||||
|
|
||||||
downmixer = nil;
|
|
||||||
downmixerForVis = nil;
|
|
||||||
|
|
||||||
AudioComponentDescription desc;
|
|
||||||
NSError *err;
|
|
||||||
|
|
||||||
desc.componentType = kAudioUnitType_Output;
|
|
||||||
desc.componentSubType = kAudioUnitSubType_HALOutput;
|
|
||||||
desc.componentManufacturer = kAudioUnitManufacturer_Apple;
|
|
||||||
desc.componentFlags = 0;
|
|
||||||
desc.componentFlagsMask = 0;
|
|
||||||
|
|
||||||
_au = [[AUAudioUnit alloc] initWithComponentDescription:desc error:&err];
|
|
||||||
if(err != nil)
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
// Setup the output device before mucking with settings
|
|
||||||
NSDictionary *device = [[[NSUserDefaultsController sharedUserDefaultsController] defaults] objectForKey:@"outputDevice"];
|
|
||||||
if(device) {
|
|
||||||
BOOL ok = [self setOutputDeviceWithDeviceDict:device];
|
|
||||||
if(!ok) {
|
|
||||||
// Ruh roh.
|
|
||||||
[self setOutputDeviceWithDeviceDict:nil];
|
|
||||||
|
|
||||||
[[[NSUserDefaultsController sharedUserDefaultsController] defaults] removeObjectForKey:@"outputDevice"];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
[self setOutputDeviceWithDeviceDict:nil];
|
|
||||||
}
|
|
||||||
|
|
||||||
_deviceFormat = nil;
|
|
||||||
|
|
||||||
AudioComponent comp = NULL;
|
|
||||||
|
|
||||||
desc.componentType = kAudioUnitType_Effect;
|
|
||||||
desc.componentSubType = kAudioUnitSubType_GraphicEQ;
|
|
||||||
|
|
||||||
comp = AudioComponentFindNext(comp, &desc);
|
|
||||||
if(!comp)
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
OSStatus _err = AudioComponentInstanceNew(comp, &_eq);
|
|
||||||
if(err)
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
[self updateDeviceFormat];
|
|
||||||
|
|
||||||
[self audioOutputBlock];
|
|
||||||
|
|
||||||
[_au setMaximumFramesToRender:512];
|
|
||||||
|
|
||||||
UInt32 value;
|
|
||||||
UInt32 size = sizeof(value);
|
|
||||||
|
|
||||||
value = CHUNK_SIZE;
|
|
||||||
AudioUnitSetProperty(_eq, kAudioUnitProperty_MaximumFramesPerSlice,
|
|
||||||
kAudioUnitScope_Global, 0, &value, size);
|
|
||||||
|
|
||||||
value = 127;
|
|
||||||
AudioUnitSetProperty(_eq, kAudioUnitProperty_RenderQuality,
|
|
||||||
kAudioUnitScope_Global, 0, &value, size);
|
|
||||||
|
|
||||||
AURenderCallbackStruct callbackStruct;
|
|
||||||
callbackStruct.inputProcRefCon = (__bridge void *)self;
|
|
||||||
callbackStruct.inputProc = renderCallback;
|
|
||||||
AudioUnitSetProperty(_eq, kAudioUnitProperty_SetRenderCallback,
|
|
||||||
kAudioUnitScope_Input, 0, &callbackStruct, sizeof(callbackStruct));
|
|
||||||
|
|
||||||
AudioUnitReset(_eq, kAudioUnitScope_Input, 0);
|
|
||||||
AudioUnitReset(_eq, kAudioUnitScope_Output, 0);
|
|
||||||
|
|
||||||
AudioUnitReset(_eq, kAudioUnitScope_Global, 0);
|
|
||||||
|
|
||||||
_err = AudioUnitInitialize(_eq);
|
|
||||||
if(_err)
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
eqInitialized = YES;
|
|
||||||
|
|
||||||
[self setEqualizerEnabled:[[[[NSUserDefaultsController sharedUserDefaultsController] defaults] objectForKey:@"GraphicEQenable"] boolValue]];
|
|
||||||
|
|
||||||
[outputController beginEqualizer:_eq];
|
|
||||||
|
|
||||||
[_au allocateRenderResourcesAndReturnError:&err];
|
|
||||||
|
|
||||||
visController = [VisualizationController sharedController];
|
|
||||||
|
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.outputDevice" options:0 context:kOutputCoreAudioContext];
|
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.GraphicEQenable" options:0 context:kOutputCoreAudioContext];
|
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.eqPreamp" options:(NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew) context:kOutputCoreAudioContext];
|
|
||||||
observersapplied = YES;
|
|
||||||
|
|
||||||
return (err == nil);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setVolume:(double)v {
|
|
||||||
volume = v * 0.01f;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setEqualizerEnabled:(BOOL)enabled {
|
|
||||||
if(enabled && !eqEnabled) {
|
|
||||||
if(_eq) {
|
|
||||||
AudioUnitReset(_eq, kAudioUnitScope_Input, 0);
|
|
||||||
AudioUnitReset(_eq, kAudioUnitScope_Output, 0);
|
|
||||||
AudioUnitReset(_eq, kAudioUnitScope_Global, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
eqEnabled = enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)start {
|
|
||||||
[self threadEntry:nil];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)stop {
|
|
||||||
@synchronized(self) {
|
|
||||||
if(stopInvoked) return;
|
|
||||||
stopInvoked = YES;
|
|
||||||
if(observersapplied) {
|
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeyPath:@"values.outputDevice" context:kOutputCoreAudioContext];
|
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeyPath:@"values.GraphicEQenable" context:kOutputCoreAudioContext];
|
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeyPath:@"values.eqPreamp" context:kOutputCoreAudioContext];
|
|
||||||
observersapplied = NO;
|
|
||||||
}
|
|
||||||
if(stopNext && !paused) {
|
|
||||||
if(!started) {
|
|
||||||
// This happens if playback is started on a very short file, and the queue is empty or at the end of the playlist
|
|
||||||
started = YES;
|
|
||||||
NSError *err;
|
|
||||||
[_au startHardwareAndReturnError:&err];
|
|
||||||
}
|
|
||||||
while(![[outputController buffer] isEmpty]) {
|
|
||||||
[writeSemaphore signal];
|
|
||||||
[readSemaphore signal];
|
|
||||||
usleep(500);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(stopNext) {
|
|
||||||
stopNext = NO;
|
|
||||||
[self signalEndOfStream];
|
|
||||||
}
|
|
||||||
stopping = YES;
|
|
||||||
paused = NO;
|
|
||||||
[writeSemaphore signal];
|
|
||||||
[readSemaphore signal];
|
|
||||||
if(defaultdevicelistenerapplied || currentdevicelistenerapplied || devicealivelistenerapplied) {
|
|
||||||
AudioObjectPropertyAddress theAddress = {
|
|
||||||
.mScope = kAudioObjectPropertyScopeGlobal,
|
|
||||||
.mElement = kAudioObjectPropertyElementMaster
|
|
||||||
};
|
|
||||||
if(defaultdevicelistenerapplied) {
|
|
||||||
theAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice;
|
|
||||||
AudioObjectRemovePropertyListener(kAudioObjectSystemObject, &theAddress, default_device_changed, (__bridge void *_Nullable)(self));
|
|
||||||
defaultdevicelistenerapplied = NO;
|
|
||||||
}
|
|
||||||
if(devicealivelistenerapplied) {
|
|
||||||
theAddress.mSelector = kAudioDevicePropertyDeviceIsAlive;
|
|
||||||
AudioObjectRemovePropertyListener(outputDeviceID, &theAddress, current_device_listener, (__bridge void *_Nullable)(self));
|
|
||||||
devicealivelistenerapplied = NO;
|
|
||||||
}
|
|
||||||
if(currentdevicelistenerapplied) {
|
|
||||||
theAddress.mSelector = kAudioDevicePropertyStreamFormat;
|
|
||||||
AudioObjectRemovePropertyListener(outputDeviceID, &theAddress, current_device_listener, (__bridge void *_Nullable)(self));
|
|
||||||
theAddress.mSelector = kAudioDevicePropertyNominalSampleRate;
|
|
||||||
AudioObjectRemovePropertyListener(outputDeviceID, &theAddress, current_device_listener, (__bridge void *_Nullable)(self));
|
|
||||||
currentdevicelistenerapplied = NO;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(_au) {
|
|
||||||
if(started)
|
|
||||||
[_au stopHardware];
|
|
||||||
_au = nil;
|
|
||||||
}
|
|
||||||
if(running) {
|
|
||||||
while(!stopped) {
|
|
||||||
stopping = YES;
|
|
||||||
[readSemaphore signal];
|
|
||||||
[writeSemaphore timedWait:5000];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(_eq) {
|
|
||||||
[outputController endEqualizer:_eq];
|
|
||||||
if(eqInitialized) {
|
|
||||||
AudioUnitUninitialize(_eq);
|
|
||||||
eqInitialized = NO;
|
|
||||||
}
|
|
||||||
AudioComponentInstanceDispose(_eq);
|
|
||||||
_eq = NULL;
|
|
||||||
}
|
|
||||||
if(downmixer) {
|
|
||||||
downmixer = nil;
|
|
||||||
}
|
|
||||||
if(downmixerForVis) {
|
|
||||||
downmixerForVis = nil;
|
|
||||||
}
|
|
||||||
#ifdef OUTPUT_LOG
|
|
||||||
if(_logFile) {
|
|
||||||
fclose(_logFile);
|
|
||||||
_logFile = NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
outputController = nil;
|
|
||||||
visController = nil;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)dealloc {
|
|
||||||
[self stop];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)pause {
|
|
||||||
paused = YES;
|
|
||||||
if(started)
|
|
||||||
[_au stopHardware];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)resume {
|
|
||||||
NSError *err;
|
|
||||||
[_au startHardwareAndReturnError:&err];
|
|
||||||
paused = NO;
|
|
||||||
started = YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)sustainHDCD {
|
|
||||||
atomic_store(&bytesHdcdSustained, deviceFormat.mSampleRate * 10 * sizeof(float) * 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -25,6 +25,9 @@
|
||||||
+ (float)priority;
|
+ (float)priority;
|
||||||
|
|
||||||
+ (NSArray *)urlsForContainerURL:(NSURL *)url;
|
+ (NSArray *)urlsForContainerURL:(NSURL *)url;
|
||||||
|
|
||||||
|
@optional
|
||||||
|
+ (NSArray *)dependencyUrlsForContainerURL:(NSURL *)url;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@protocol CogDecoder <NSObject>
|
@protocol CogDecoder <NSObject>
|
||||||
|
@ -93,6 +96,7 @@
|
||||||
|
|
||||||
- (id<CogSource>)audioSourceForURL:(NSURL *)url;
|
- (id<CogSource>)audioSourceForURL:(NSURL *)url;
|
||||||
- (NSArray *)urlsForContainerURL:(NSURL *)url;
|
- (NSArray *)urlsForContainerURL:(NSURL *)url;
|
||||||
|
- (NSArray *)dependencyUrlsForContainerURL:(NSURL *)url;
|
||||||
- (NSDictionary *)metadataForURL:(NSURL *)url skipCue:(BOOL)skip;
|
- (NSDictionary *)metadataForURL:(NSURL *)url skipCue:(BOOL)skip;
|
||||||
- (NSDictionary *)propertiesForURL:(NSURL *)url skipCue:(BOOL)skip;
|
- (NSDictionary *)propertiesForURL:(NSURL *)url skipCue:(BOOL)skip;
|
||||||
- (id<CogDecoder>)audioDecoderForSource:(id<CogSource>)source skipCue:(BOOL)skip;
|
- (id<CogDecoder>)audioDecoderForSource:(id<CogSource>)source skipCue:(BOOL)skip;
|
||||||
|
|
|
@ -109,11 +109,16 @@ static NSDictionary *cache_access_metadata(NSURL *url) {
|
||||||
static void cache_run() {
|
static void cache_run() {
|
||||||
std::chrono::milliseconds dura(250);
|
std::chrono::milliseconds dura(250);
|
||||||
|
|
||||||
|
Cache_Running = true;
|
||||||
|
|
||||||
while(Cache_Running) {
|
while(Cache_Running) {
|
||||||
std::chrono::steady_clock::time_point now = std::chrono::steady_clock::now();
|
std::chrono::steady_clock::time_point now = std::chrono::steady_clock::now();
|
||||||
|
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
std::lock_guard<std::mutex> lock(Cache_Lock);
|
std::lock_guard<std::mutex> lock(Cache_Lock);
|
||||||
|
|
||||||
|
size_t cacheListOriginalSize = Cache_List.size();
|
||||||
|
|
||||||
for(auto it = Cache_List.begin(); it != Cache_List.end();) {
|
for(auto it = Cache_List.begin(); it != Cache_List.end();) {
|
||||||
auto elapsed = std::chrono::duration_cast<std::chrono::seconds>(now - it->second.time_accessed);
|
auto elapsed = std::chrono::duration_cast<std::chrono::seconds>(now - it->second.time_accessed);
|
||||||
if(elapsed.count() >= 10) {
|
if(elapsed.count() >= 10) {
|
||||||
|
@ -123,8 +128,9 @@ static void cache_run() {
|
||||||
++it;
|
++it;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Cache_List.size() == 0)
|
if(cacheListOriginalSize && Cache_List.size() == 0) {
|
||||||
[Cache_Data_Store reset];
|
[Cache_Data_Store reset];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::this_thread::sleep_for(dura);
|
std::this_thread::sleep_for(dura);
|
||||||
|
@ -348,6 +354,16 @@ static PluginController *sharedPluginController = nil;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static NSString *xmlEscapeString(NSString * string) {
|
||||||
|
CFStringRef textXML = CFXMLCreateStringByEscapingEntities(kCFAllocatorDefault, (CFStringRef)string, nil);
|
||||||
|
if(textXML) {
|
||||||
|
NSString *textString = (__bridge NSString *)textXML;
|
||||||
|
CFRelease(textXML);
|
||||||
|
return textString;
|
||||||
|
}
|
||||||
|
return @"";
|
||||||
|
}
|
||||||
|
|
||||||
- (void)printPluginInfo {
|
- (void)printPluginInfo {
|
||||||
ALog(@"Sources: %@", self.sources);
|
ALog(@"Sources: %@", self.sources);
|
||||||
ALog(@"Containers: %@", self.containers);
|
ALog(@"Containers: %@", self.containers);
|
||||||
|
@ -365,6 +381,8 @@ static PluginController *sharedPluginController = nil;
|
||||||
<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n\
|
<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n\
|
||||||
<plist version=\"1.0\">\n\
|
<plist version=\"1.0\">\n\
|
||||||
<dict>\n\
|
<dict>\n\
|
||||||
|
\t<key>FirebaseCrashlyticsCollectionEnabled</key>\n\
|
||||||
|
\t<false/>\n\
|
||||||
\t<key>SUEnableInstallerLauncherService</key>\n\
|
\t<key>SUEnableInstallerLauncherService</key>\n\
|
||||||
\t<true/>\n\
|
\t<true/>\n\
|
||||||
\t<key>CFBundleDevelopmentRegion</key>\n\
|
\t<key>CFBundleDevelopmentRegion</key>\n\
|
||||||
|
@ -504,7 +522,7 @@ static PluginController *sharedPluginController = nil;
|
||||||
\t\t\t<integer>1</integer>\n\
|
\t\t\t<integer>1</integer>\n\
|
||||||
\t\t\t<key>CFBundleTypeName</key>\n\
|
\t\t\t<key>CFBundleTypeName</key>\n\
|
||||||
\t\t\t<string>"];
|
\t\t\t<string>"];
|
||||||
[stringList addObject:[type objectAtIndex:0]];
|
[stringList addObject:xmlEscapeString([type objectAtIndex:0])];
|
||||||
[stringList addObject:@"</string>\n\
|
[stringList addObject:@"</string>\n\
|
||||||
\t\t\t<key>CFBundleTypeRole</key>\n\
|
\t\t\t<key>CFBundleTypeRole</key>\n\
|
||||||
\t\t\t<string>Viewer</string>\n\
|
\t\t\t<string>Viewer</string>\n\
|
||||||
|
@ -555,6 +573,29 @@ static PluginController *sharedPluginController = nil;
|
||||||
return [container urlsForContainerURL:url];
|
return [container urlsForContainerURL:url];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSArray *)dependencyUrlsForContainerURL:(NSURL *)url {
|
||||||
|
NSString *ext = [url pathExtension];
|
||||||
|
NSArray *containerSet = [containers objectForKey:[ext lowercaseString]];
|
||||||
|
NSString *classString;
|
||||||
|
if(containerSet) {
|
||||||
|
if([containerSet count] > 1) {
|
||||||
|
return [CogContainerMulti dependencyUrlsForContainerURL:url containers:containerSet];
|
||||||
|
} else {
|
||||||
|
classString = [containerSet objectAtIndex:0];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
Class container = NSClassFromString(classString);
|
||||||
|
|
||||||
|
if([container respondsToSelector:@selector(dependencyUrlsForContainerURL:)]) {
|
||||||
|
return [container dependencyUrlsForContainerURL:url];
|
||||||
|
} else {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Note: Source is assumed to already be opened.
|
// Note: Source is assumed to already be opened.
|
||||||
- (id<CogDecoder>)audioDecoderForSource:(id<CogSource>)source skipCue:(BOOL)skip {
|
- (id<CogDecoder>)audioDecoderForSource:(id<CogSource>)source skipCue:(BOOL)skip {
|
||||||
NSString *ext = [[source url] pathExtension];
|
NSString *ext = [[source url] pathExtension];
|
||||||
|
|
504
Audio/ThirdParty/lvqcl/License/LICENSE.LGPL
vendored
504
Audio/ThirdParty/lvqcl/License/LICENSE.LGPL
vendored
|
@ -1,504 +0,0 @@
|
||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
|
||||||
Version 2.1, February 1999
|
|
||||||
|
|
||||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
[This is the first released version of the Lesser GPL. It also counts
|
|
||||||
as the successor of the GNU Library Public License, version 2, hence
|
|
||||||
the version number 2.1.]
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The licenses for most software are designed to take away your
|
|
||||||
freedom to share and change it. By contrast, the GNU General Public
|
|
||||||
Licenses are intended to guarantee your freedom to share and change
|
|
||||||
free software--to make sure the software is free for all its users.
|
|
||||||
|
|
||||||
This license, the Lesser General Public License, applies to some
|
|
||||||
specially designated software packages--typically libraries--of the
|
|
||||||
Free Software Foundation and other authors who decide to use it. You
|
|
||||||
can use it too, but we suggest you first think carefully about whether
|
|
||||||
this license or the ordinary General Public License is the better
|
|
||||||
strategy to use in any particular case, based on the explanations below.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom of use,
|
|
||||||
not price. Our General Public Licenses are designed to make sure that
|
|
||||||
you have the freedom to distribute copies of free software (and charge
|
|
||||||
for this service if you wish); that you receive source code or can get
|
|
||||||
it if you want it; that you can change the software and use pieces of
|
|
||||||
it in new free programs; and that you are informed that you can do
|
|
||||||
these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to make restrictions that forbid
|
|
||||||
distributors to deny you these rights or to ask you to surrender these
|
|
||||||
rights. These restrictions translate to certain responsibilities for
|
|
||||||
you if you distribute copies of the library or if you modify it.
|
|
||||||
|
|
||||||
For example, if you distribute copies of the library, whether gratis
|
|
||||||
or for a fee, you must give the recipients all the rights that we gave
|
|
||||||
you. You must make sure that they, too, receive or can get the source
|
|
||||||
code. If you link other code with the library, you must provide
|
|
||||||
complete object files to the recipients, so that they can relink them
|
|
||||||
with the library after making changes to the library and recompiling
|
|
||||||
it. And you must show them these terms so they know their rights.
|
|
||||||
|
|
||||||
We protect your rights with a two-step method: (1) we copyright the
|
|
||||||
library, and (2) we offer you this license, which gives you legal
|
|
||||||
permission to copy, distribute and/or modify the library.
|
|
||||||
|
|
||||||
To protect each distributor, we want to make it very clear that
|
|
||||||
there is no warranty for the free library. Also, if the library is
|
|
||||||
modified by someone else and passed on, the recipients should know
|
|
||||||
that what they have is not the original version, so that the original
|
|
||||||
author's reputation will not be affected by problems that might be
|
|
||||||
introduced by others.
|
|
||||||
|
|
||||||
Finally, software patents pose a constant threat to the existence of
|
|
||||||
any free program. We wish to make sure that a company cannot
|
|
||||||
effectively restrict the users of a free program by obtaining a
|
|
||||||
restrictive license from a patent holder. Therefore, we insist that
|
|
||||||
any patent license obtained for a version of the library must be
|
|
||||||
consistent with the full freedom of use specified in this license.
|
|
||||||
|
|
||||||
Most GNU software, including some libraries, is covered by the
|
|
||||||
ordinary GNU General Public License. This license, the GNU Lesser
|
|
||||||
General Public License, applies to certain designated libraries, and
|
|
||||||
is quite different from the ordinary General Public License. We use
|
|
||||||
this license for certain libraries in order to permit linking those
|
|
||||||
libraries into non-free programs.
|
|
||||||
|
|
||||||
When a program is linked with a library, whether statically or using
|
|
||||||
a shared library, the combination of the two is legally speaking a
|
|
||||||
combined work, a derivative of the original library. The ordinary
|
|
||||||
General Public License therefore permits such linking only if the
|
|
||||||
entire combination fits its criteria of freedom. The Lesser General
|
|
||||||
Public License permits more lax criteria for linking other code with
|
|
||||||
the library.
|
|
||||||
|
|
||||||
We call this license the "Lesser" General Public License because it
|
|
||||||
does Less to protect the user's freedom than the ordinary General
|
|
||||||
Public License. It also provides other free software developers Less
|
|
||||||
of an advantage over competing non-free programs. These disadvantages
|
|
||||||
are the reason we use the ordinary General Public License for many
|
|
||||||
libraries. However, the Lesser license provides advantages in certain
|
|
||||||
special circumstances.
|
|
||||||
|
|
||||||
For example, on rare occasions, there may be a special need to
|
|
||||||
encourage the widest possible use of a certain library, so that it becomes
|
|
||||||
a de-facto standard. To achieve this, non-free programs must be
|
|
||||||
allowed to use the library. A more frequent case is that a free
|
|
||||||
library does the same job as widely used non-free libraries. In this
|
|
||||||
case, there is little to gain by limiting the free library to free
|
|
||||||
software only, so we use the Lesser General Public License.
|
|
||||||
|
|
||||||
In other cases, permission to use a particular library in non-free
|
|
||||||
programs enables a greater number of people to use a large body of
|
|
||||||
free software. For example, permission to use the GNU C Library in
|
|
||||||
non-free programs enables many more people to use the whole GNU
|
|
||||||
operating system, as well as its variant, the GNU/Linux operating
|
|
||||||
system.
|
|
||||||
|
|
||||||
Although the Lesser General Public License is Less protective of the
|
|
||||||
users' freedom, it does ensure that the user of a program that is
|
|
||||||
linked with the Library has the freedom and the wherewithal to run
|
|
||||||
that program using a modified version of the Library.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow. Pay close attention to the difference between a
|
|
||||||
"work based on the library" and a "work that uses the library". The
|
|
||||||
former contains code derived from the library, whereas the latter must
|
|
||||||
be combined with the library in order to run.
|
|
||||||
|
|
||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. This License Agreement applies to any software library or other
|
|
||||||
program which contains a notice placed by the copyright holder or
|
|
||||||
other authorized party saying it may be distributed under the terms of
|
|
||||||
this Lesser General Public License (also called "this License").
|
|
||||||
Each licensee is addressed as "you".
|
|
||||||
|
|
||||||
A "library" means a collection of software functions and/or data
|
|
||||||
prepared so as to be conveniently linked with application programs
|
|
||||||
(which use some of those functions and data) to form executables.
|
|
||||||
|
|
||||||
The "Library", below, refers to any such software library or work
|
|
||||||
which has been distributed under these terms. A "work based on the
|
|
||||||
Library" means either the Library or any derivative work under
|
|
||||||
copyright law: that is to say, a work containing the Library or a
|
|
||||||
portion of it, either verbatim or with modifications and/or translated
|
|
||||||
straightforwardly into another language. (Hereinafter, translation is
|
|
||||||
included without limitation in the term "modification".)
|
|
||||||
|
|
||||||
"Source code" for a work means the preferred form of the work for
|
|
||||||
making modifications to it. For a library, complete source code means
|
|
||||||
all the source code for all modules it contains, plus any associated
|
|
||||||
interface definition files, plus the scripts used to control compilation
|
|
||||||
and installation of the library.
|
|
||||||
|
|
||||||
Activities other than copying, distribution and modification are not
|
|
||||||
covered by this License; they are outside its scope. The act of
|
|
||||||
running a program using the Library is not restricted, and output from
|
|
||||||
such a program is covered only if its contents constitute a work based
|
|
||||||
on the Library (independent of the use of the Library in a tool for
|
|
||||||
writing it). Whether that is true depends on what the Library does
|
|
||||||
and what the program that uses the Library does.
|
|
||||||
|
|
||||||
1. You may copy and distribute verbatim copies of the Library's
|
|
||||||
complete source code as you receive it, in any medium, provided that
|
|
||||||
you conspicuously and appropriately publish on each copy an
|
|
||||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
|
||||||
all the notices that refer to this License and to the absence of any
|
|
||||||
warranty; and distribute a copy of this License along with the
|
|
||||||
Library.
|
|
||||||
|
|
||||||
You may charge a fee for the physical act of transferring a copy,
|
|
||||||
and you may at your option offer warranty protection in exchange for a
|
|
||||||
fee.
|
|
||||||
|
|
||||||
2. You may modify your copy or copies of the Library or any portion
|
|
||||||
of it, thus forming a work based on the Library, and copy and
|
|
||||||
distribute such modifications or work under the terms of Section 1
|
|
||||||
above, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The modified work must itself be a software library.
|
|
||||||
|
|
||||||
b) You must cause the files modified to carry prominent notices
|
|
||||||
stating that you changed the files and the date of any change.
|
|
||||||
|
|
||||||
c) You must cause the whole of the work to be licensed at no
|
|
||||||
charge to all third parties under the terms of this License.
|
|
||||||
|
|
||||||
d) If a facility in the modified Library refers to a function or a
|
|
||||||
table of data to be supplied by an application program that uses
|
|
||||||
the facility, other than as an argument passed when the facility
|
|
||||||
is invoked, then you must make a good faith effort to ensure that,
|
|
||||||
in the event an application does not supply such function or
|
|
||||||
table, the facility still operates, and performs whatever part of
|
|
||||||
its purpose remains meaningful.
|
|
||||||
|
|
||||||
(For example, a function in a library to compute square roots has
|
|
||||||
a purpose that is entirely well-defined independent of the
|
|
||||||
application. Therefore, Subsection 2d requires that any
|
|
||||||
application-supplied function or table used by this function must
|
|
||||||
be optional: if the application does not supply it, the square
|
|
||||||
root function must still compute square roots.)
|
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
|
||||||
identifiable sections of that work are not derived from the Library,
|
|
||||||
and can be reasonably considered independent and separate works in
|
|
||||||
themselves, then this License, and its terms, do not apply to those
|
|
||||||
sections when you distribute them as separate works. But when you
|
|
||||||
distribute the same sections as part of a whole which is a work based
|
|
||||||
on the Library, the distribution of the whole must be on the terms of
|
|
||||||
this License, whose permissions for other licensees extend to the
|
|
||||||
entire whole, and thus to each and every part regardless of who wrote
|
|
||||||
it.
|
|
||||||
|
|
||||||
Thus, it is not the intent of this section to claim rights or contest
|
|
||||||
your rights to work written entirely by you; rather, the intent is to
|
|
||||||
exercise the right to control the distribution of derivative or
|
|
||||||
collective works based on the Library.
|
|
||||||
|
|
||||||
In addition, mere aggregation of another work not based on the Library
|
|
||||||
with the Library (or with a work based on the Library) on a volume of
|
|
||||||
a storage or distribution medium does not bring the other work under
|
|
||||||
the scope of this License.
|
|
||||||
|
|
||||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
|
||||||
License instead of this License to a given copy of the Library. To do
|
|
||||||
this, you must alter all the notices that refer to this License, so
|
|
||||||
that they refer to the ordinary GNU General Public License, version 2,
|
|
||||||
instead of to this License. (If a newer version than version 2 of the
|
|
||||||
ordinary GNU General Public License has appeared, then you can specify
|
|
||||||
that version instead if you wish.) Do not make any other change in
|
|
||||||
these notices.
|
|
||||||
|
|
||||||
Once this change is made in a given copy, it is irreversible for
|
|
||||||
that copy, so the ordinary GNU General Public License applies to all
|
|
||||||
subsequent copies and derivative works made from that copy.
|
|
||||||
|
|
||||||
This option is useful when you wish to copy part of the code of
|
|
||||||
the Library into a program that is not a library.
|
|
||||||
|
|
||||||
4. You may copy and distribute the Library (or a portion or
|
|
||||||
derivative of it, under Section 2) in object code or executable form
|
|
||||||
under the terms of Sections 1 and 2 above provided that you accompany
|
|
||||||
it with the complete corresponding machine-readable source code, which
|
|
||||||
must be distributed under the terms of Sections 1 and 2 above on a
|
|
||||||
medium customarily used for software interchange.
|
|
||||||
|
|
||||||
If distribution of object code is made by offering access to copy
|
|
||||||
from a designated place, then offering equivalent access to copy the
|
|
||||||
source code from the same place satisfies the requirement to
|
|
||||||
distribute the source code, even though third parties are not
|
|
||||||
compelled to copy the source along with the object code.
|
|
||||||
|
|
||||||
5. A program that contains no derivative of any portion of the
|
|
||||||
Library, but is designed to work with the Library by being compiled or
|
|
||||||
linked with it, is called a "work that uses the Library". Such a
|
|
||||||
work, in isolation, is not a derivative work of the Library, and
|
|
||||||
therefore falls outside the scope of this License.
|
|
||||||
|
|
||||||
However, linking a "work that uses the Library" with the Library
|
|
||||||
creates an executable that is a derivative of the Library (because it
|
|
||||||
contains portions of the Library), rather than a "work that uses the
|
|
||||||
library". The executable is therefore covered by this License.
|
|
||||||
Section 6 states terms for distribution of such executables.
|
|
||||||
|
|
||||||
When a "work that uses the Library" uses material from a header file
|
|
||||||
that is part of the Library, the object code for the work may be a
|
|
||||||
derivative work of the Library even though the source code is not.
|
|
||||||
Whether this is true is especially significant if the work can be
|
|
||||||
linked without the Library, or if the work is itself a library. The
|
|
||||||
threshold for this to be true is not precisely defined by law.
|
|
||||||
|
|
||||||
If such an object file uses only numerical parameters, data
|
|
||||||
structure layouts and accessors, and small macros and small inline
|
|
||||||
functions (ten lines or less in length), then the use of the object
|
|
||||||
file is unrestricted, regardless of whether it is legally a derivative
|
|
||||||
work. (Executables containing this object code plus portions of the
|
|
||||||
Library will still fall under Section 6.)
|
|
||||||
|
|
||||||
Otherwise, if the work is a derivative of the Library, you may
|
|
||||||
distribute the object code for the work under the terms of Section 6.
|
|
||||||
Any executables containing that work also fall under Section 6,
|
|
||||||
whether or not they are linked directly with the Library itself.
|
|
||||||
|
|
||||||
6. As an exception to the Sections above, you may also combine or
|
|
||||||
link a "work that uses the Library" with the Library to produce a
|
|
||||||
work containing portions of the Library, and distribute that work
|
|
||||||
under terms of your choice, provided that the terms permit
|
|
||||||
modification of the work for the customer's own use and reverse
|
|
||||||
engineering for debugging such modifications.
|
|
||||||
|
|
||||||
You must give prominent notice with each copy of the work that the
|
|
||||||
Library is used in it and that the Library and its use are covered by
|
|
||||||
this License. You must supply a copy of this License. If the work
|
|
||||||
during execution displays copyright notices, you must include the
|
|
||||||
copyright notice for the Library among them, as well as a reference
|
|
||||||
directing the user to the copy of this License. Also, you must do one
|
|
||||||
of these things:
|
|
||||||
|
|
||||||
a) Accompany the work with the complete corresponding
|
|
||||||
machine-readable source code for the Library including whatever
|
|
||||||
changes were used in the work (which must be distributed under
|
|
||||||
Sections 1 and 2 above); and, if the work is an executable linked
|
|
||||||
with the Library, with the complete machine-readable "work that
|
|
||||||
uses the Library", as object code and/or source code, so that the
|
|
||||||
user can modify the Library and then relink to produce a modified
|
|
||||||
executable containing the modified Library. (It is understood
|
|
||||||
that the user who changes the contents of definitions files in the
|
|
||||||
Library will not necessarily be able to recompile the application
|
|
||||||
to use the modified definitions.)
|
|
||||||
|
|
||||||
b) Use a suitable shared library mechanism for linking with the
|
|
||||||
Library. A suitable mechanism is one that (1) uses at run time a
|
|
||||||
copy of the library already present on the user's computer system,
|
|
||||||
rather than copying library functions into the executable, and (2)
|
|
||||||
will operate properly with a modified version of the library, if
|
|
||||||
the user installs one, as long as the modified version is
|
|
||||||
interface-compatible with the version that the work was made with.
|
|
||||||
|
|
||||||
c) Accompany the work with a written offer, valid for at
|
|
||||||
least three years, to give the same user the materials
|
|
||||||
specified in Subsection 6a, above, for a charge no more
|
|
||||||
than the cost of performing this distribution.
|
|
||||||
|
|
||||||
d) If distribution of the work is made by offering access to copy
|
|
||||||
from a designated place, offer equivalent access to copy the above
|
|
||||||
specified materials from the same place.
|
|
||||||
|
|
||||||
e) Verify that the user has already received a copy of these
|
|
||||||
materials or that you have already sent this user a copy.
|
|
||||||
|
|
||||||
For an executable, the required form of the "work that uses the
|
|
||||||
Library" must include any data and utility programs needed for
|
|
||||||
reproducing the executable from it. However, as a special exception,
|
|
||||||
the materials to be distributed need not include anything that is
|
|
||||||
normally distributed (in either source or binary form) with the major
|
|
||||||
components (compiler, kernel, and so on) of the operating system on
|
|
||||||
which the executable runs, unless that component itself accompanies
|
|
||||||
the executable.
|
|
||||||
|
|
||||||
It may happen that this requirement contradicts the license
|
|
||||||
restrictions of other proprietary libraries that do not normally
|
|
||||||
accompany the operating system. Such a contradiction means you cannot
|
|
||||||
use both them and the Library together in an executable that you
|
|
||||||
distribute.
|
|
||||||
|
|
||||||
7. You may place library facilities that are a work based on the
|
|
||||||
Library side-by-side in a single library together with other library
|
|
||||||
facilities not covered by this License, and distribute such a combined
|
|
||||||
library, provided that the separate distribution of the work based on
|
|
||||||
the Library and of the other library facilities is otherwise
|
|
||||||
permitted, and provided that you do these two things:
|
|
||||||
|
|
||||||
a) Accompany the combined library with a copy of the same work
|
|
||||||
based on the Library, uncombined with any other library
|
|
||||||
facilities. This must be distributed under the terms of the
|
|
||||||
Sections above.
|
|
||||||
|
|
||||||
b) Give prominent notice with the combined library of the fact
|
|
||||||
that part of it is a work based on the Library, and explaining
|
|
||||||
where to find the accompanying uncombined form of the same work.
|
|
||||||
|
|
||||||
8. You may not copy, modify, sublicense, link with, or distribute
|
|
||||||
the Library except as expressly provided under this License. Any
|
|
||||||
attempt otherwise to copy, modify, sublicense, link with, or
|
|
||||||
distribute the Library is void, and will automatically terminate your
|
|
||||||
rights under this License. However, parties who have received copies,
|
|
||||||
or rights, from you under this License will not have their licenses
|
|
||||||
terminated so long as such parties remain in full compliance.
|
|
||||||
|
|
||||||
9. You are not required to accept this License, since you have not
|
|
||||||
signed it. However, nothing else grants you permission to modify or
|
|
||||||
distribute the Library or its derivative works. These actions are
|
|
||||||
prohibited by law if you do not accept this License. Therefore, by
|
|
||||||
modifying or distributing the Library (or any work based on the
|
|
||||||
Library), you indicate your acceptance of this License to do so, and
|
|
||||||
all its terms and conditions for copying, distributing or modifying
|
|
||||||
the Library or works based on it.
|
|
||||||
|
|
||||||
10. Each time you redistribute the Library (or any work based on the
|
|
||||||
Library), the recipient automatically receives a license from the
|
|
||||||
original licensor to copy, distribute, link with or modify the Library
|
|
||||||
subject to these terms and conditions. You may not impose any further
|
|
||||||
restrictions on the recipients' exercise of the rights granted herein.
|
|
||||||
You are not responsible for enforcing compliance by third parties with
|
|
||||||
this License.
|
|
||||||
|
|
||||||
11. If, as a consequence of a court judgment or allegation of patent
|
|
||||||
infringement or for any other reason (not limited to patent issues),
|
|
||||||
conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot
|
|
||||||
distribute so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you
|
|
||||||
may not distribute the Library at all. For example, if a patent
|
|
||||||
license would not permit royalty-free redistribution of the Library by
|
|
||||||
all those who receive copies directly or indirectly through you, then
|
|
||||||
the only way you could satisfy both it and this License would be to
|
|
||||||
refrain entirely from distribution of the Library.
|
|
||||||
|
|
||||||
If any portion of this section is held invalid or unenforceable under any
|
|
||||||
particular circumstance, the balance of the section is intended to apply,
|
|
||||||
and the section as a whole is intended to apply in other circumstances.
|
|
||||||
|
|
||||||
It is not the purpose of this section to induce you to infringe any
|
|
||||||
patents or other property right claims or to contest validity of any
|
|
||||||
such claims; this section has the sole purpose of protecting the
|
|
||||||
integrity of the free software distribution system which is
|
|
||||||
implemented by public license practices. Many people have made
|
|
||||||
generous contributions to the wide range of software distributed
|
|
||||||
through that system in reliance on consistent application of that
|
|
||||||
system; it is up to the author/donor to decide if he or she is willing
|
|
||||||
to distribute software through any other system and a licensee cannot
|
|
||||||
impose that choice.
|
|
||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed to
|
|
||||||
be a consequence of the rest of this License.
|
|
||||||
|
|
||||||
12. If the distribution and/or use of the Library is restricted in
|
|
||||||
certain countries either by patents or by copyrighted interfaces, the
|
|
||||||
original copyright holder who places the Library under this License may add
|
|
||||||
an explicit geographical distribution limitation excluding those countries,
|
|
||||||
so that distribution is permitted only in or among countries not thus
|
|
||||||
excluded. In such case, this License incorporates the limitation as if
|
|
||||||
written in the body of this License.
|
|
||||||
|
|
||||||
13. The Free Software Foundation may publish revised and/or new
|
|
||||||
versions of the Lesser General Public License from time to time.
|
|
||||||
Such new versions will be similar in spirit to the present version,
|
|
||||||
but may differ in detail to address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the Library
|
|
||||||
specifies a version number of this License which applies to it and
|
|
||||||
"any later version", you have the option of following the terms and
|
|
||||||
conditions either of that version or of any later version published by
|
|
||||||
the Free Software Foundation. If the Library does not specify a
|
|
||||||
license version number, you may choose any version ever published by
|
|
||||||
the Free Software Foundation.
|
|
||||||
|
|
||||||
14. If you wish to incorporate parts of the Library into other free
|
|
||||||
programs whose distribution conditions are incompatible with these,
|
|
||||||
write to the author to ask for permission. For software which is
|
|
||||||
copyrighted by the Free Software Foundation, write to the Free
|
|
||||||
Software Foundation; we sometimes make exceptions for this. Our
|
|
||||||
decision will be guided by the two goals of preserving the free status
|
|
||||||
of all derivatives of our free software and of promoting the sharing
|
|
||||||
and reuse of software generally.
|
|
||||||
|
|
||||||
NO WARRANTY
|
|
||||||
|
|
||||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
|
||||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
|
||||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
|
||||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
|
||||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
|
||||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
|
||||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
|
||||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
|
||||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
|
||||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
|
||||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
|
||||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
|
||||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
|
||||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
|
||||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
|
||||||
DAMAGES.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Libraries
|
|
||||||
|
|
||||||
If you develop a new library, and you want it to be of the greatest
|
|
||||||
possible use to the public, we recommend making it free software that
|
|
||||||
everyone can redistribute and change. You can do so by permitting
|
|
||||||
redistribution under these terms (or, alternatively, under the terms of the
|
|
||||||
ordinary General Public License).
|
|
||||||
|
|
||||||
To apply these terms, attach the following notices to the library. It is
|
|
||||||
safest to attach them to the start of each source file to most effectively
|
|
||||||
convey the exclusion of warranty; and each file should have at least the
|
|
||||||
"copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the library's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or your
|
|
||||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
|
||||||
necessary. Here is a sample; alter the names:
|
|
||||||
|
|
||||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
|
||||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
|
||||||
|
|
||||||
<signature of Ty Coon>, 1 April 1990
|
|
||||||
Ty Coon, President of Vice
|
|
||||||
|
|
||||||
That's all there is to it!
|
|
||||||
|
|
||||||
|
|
39
Audio/ThirdParty/lvqcl/License/License.txt
vendored
39
Audio/ThirdParty/lvqcl/License/License.txt
vendored
|
@ -1,39 +0,0 @@
|
||||||
SoX resampler plugin for foobar2000 audio player
|
|
||||||
Copyright (C) lvqcl
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
|
|
||||||
This software uses code of SoX licensed under the terms of LGPLv2.1
|
|
||||||
Copyright (C) robs@users.sourceforge.net
|
|
||||||
Copyright (C) Chris Bagwell and SoX contributors
|
|
||||||
Copyright (C) Reuben Thomas
|
|
||||||
|
|
||||||
|
|
||||||
This software uses code of FFmpeg licensed under the terms of LGPLv2.1
|
|
||||||
Copyright (C) Fabrice Bellard
|
|
||||||
Copyright (C) Michael Niedermayer <michaelni@gmx.at>
|
|
||||||
Copyright (C) Alex Converse <alex dot converse at gmail dot com>
|
|
||||||
Copyright (C) Loren Merritt
|
|
||||||
Copyright (C) Vitor Sessak
|
|
||||||
Copyright (C) x264 project
|
|
||||||
|
|
||||||
|
|
||||||
This software uses code of General Purpose FFT Package
|
|
||||||
Copyright (C) Takuya OOURA
|
|
||||||
|
|
||||||
|
|
||||||
This software uses code of foobar2000 1.4 SDK
|
|
||||||
Copyright (C) 2001-2018, Peter Pawlowski
|
|
193
Audio/ThirdParty/lvqcl/lpc.c
vendored
193
Audio/ThirdParty/lvqcl/lpc.c
vendored
|
@ -1,193 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2013, 2018 lvqcl
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and distribute this software for any
|
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
|
||||||
* copyright notice and this permission notice appear in all copies.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <memory.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include "lpc.h"
|
|
||||||
|
|
||||||
static void apply_window(float *const data, const size_t data_len) {
|
|
||||||
#if 0
|
|
||||||
if (0) // subtract the mean
|
|
||||||
{
|
|
||||||
double mean = 0;
|
|
||||||
for(int i = 0; i < (int)data_len; i++)
|
|
||||||
mean += data[i];
|
|
||||||
mean /= data_len;
|
|
||||||
|
|
||||||
for(int i = 0; i < (int)data_len; i++)
|
|
||||||
data[i] -= (float)mean;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(1) // Welch window
|
|
||||||
{
|
|
||||||
const float n2 = (data_len + 1) / 2.0f;
|
|
||||||
for(int i = 0; i < (int)data_len; i++) {
|
|
||||||
float k = (i + 1 - n2) / n2;
|
|
||||||
data[data_len - 1 - i] *= 1.0f - k * k;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static float vorbis_lpc_from_data(float *data, float *lpci, int n, int m, double *aut, double *lpc) {
|
|
||||||
double error;
|
|
||||||
double epsilon;
|
|
||||||
int i, j;
|
|
||||||
|
|
||||||
/* autocorrelation, p+1 lag coefficients */
|
|
||||||
j = m + 1;
|
|
||||||
while(j--) {
|
|
||||||
double d = 0; /* double needed for accumulator depth */
|
|
||||||
for(i = j; i < n; i++) d += (double)data[i] * data[i - j];
|
|
||||||
aut[j] = d;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Generate lpc coefficients from autocorr values */
|
|
||||||
|
|
||||||
/* set our noise floor to about -100dB */
|
|
||||||
error = aut[0] * (1. + 1e-10);
|
|
||||||
epsilon = 1e-9 * aut[0] + 1e-10;
|
|
||||||
|
|
||||||
for(i = 0; i < m; i++) {
|
|
||||||
double r = -aut[i + 1];
|
|
||||||
|
|
||||||
if(error < epsilon) {
|
|
||||||
memset(lpc + i, 0, (m - i) * sizeof(*lpc));
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Sum up this iteration's reflection coefficient; note that in
|
|
||||||
Vorbis we don't save it. If anyone wants to recycle this code
|
|
||||||
and needs reflection coefficients, save the results of 'r' from
|
|
||||||
each iteration. */
|
|
||||||
|
|
||||||
for(j = 0; j < i; j++) r -= lpc[j] * aut[i - j];
|
|
||||||
r /= error;
|
|
||||||
|
|
||||||
/* Update LPC coefficients and total error */
|
|
||||||
|
|
||||||
lpc[i] = r;
|
|
||||||
for(j = 0; j < i / 2; j++) {
|
|
||||||
double tmp = lpc[j];
|
|
||||||
|
|
||||||
lpc[j] += r * lpc[i - 1 - j];
|
|
||||||
lpc[i - 1 - j] += r * tmp;
|
|
||||||
}
|
|
||||||
if(i & 1) lpc[j] += lpc[j] * r;
|
|
||||||
|
|
||||||
error *= 1. - r * r;
|
|
||||||
}
|
|
||||||
|
|
||||||
done:
|
|
||||||
|
|
||||||
/* slightly damp the filter */
|
|
||||||
{
|
|
||||||
double g = .99;
|
|
||||||
double damp = g;
|
|
||||||
for(j = 0; j < m; j++) {
|
|
||||||
lpc[j] *= damp;
|
|
||||||
damp *= g;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(j = 0; j < m; j++) lpci[j] = (float)lpc[j];
|
|
||||||
|
|
||||||
/* we need the error value to know how big an impulse to hit the
|
|
||||||
filter with later */
|
|
||||||
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void vorbis_lpc_predict(float *coeff, float *prime, int m, float *data, long n, float *work) {
|
|
||||||
/* in: coeff[0...m-1] LPC coefficients
|
|
||||||
prime[0...m-1] initial values (allocated size of n+m-1)
|
|
||||||
out: data[0...n-1] data samples */
|
|
||||||
|
|
||||||
long i, j, o, p;
|
|
||||||
float y;
|
|
||||||
|
|
||||||
if(!prime)
|
|
||||||
for(i = 0; i < m; i++)
|
|
||||||
work[i] = 0.f;
|
|
||||||
else
|
|
||||||
for(i = 0; i < m; i++)
|
|
||||||
work[i] = prime[i];
|
|
||||||
|
|
||||||
for(i = 0; i < n; i++) {
|
|
||||||
y = 0;
|
|
||||||
o = i;
|
|
||||||
p = m;
|
|
||||||
for(j = 0; j < m; j++)
|
|
||||||
y -= work[o++] * coeff[--p];
|
|
||||||
|
|
||||||
data[i] = work[o] = y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void lpc_extrapolate2(float *const data, const size_t data_len, const int nch, const int lpc_order, const size_t extra_bkwd, const size_t extra_fwd, void **extrapolate_buffer, size_t *extrapolate_buffer_size) {
|
|
||||||
const size_t tdata_size = sizeof(float) * (extra_bkwd + data_len + extra_fwd);
|
|
||||||
const size_t aut_size = sizeof(double) * (lpc_order + 1);
|
|
||||||
const size_t lpc_size = sizeof(double) * lpc_order;
|
|
||||||
const size_t lpci_size = sizeof(float) * lpc_order;
|
|
||||||
const size_t work_size = sizeof(float) * (extra_bkwd + lpc_order + extra_fwd);
|
|
||||||
|
|
||||||
const size_t new_size = tdata_size + aut_size + lpc_size + lpci_size + work_size;
|
|
||||||
|
|
||||||
if(new_size > *extrapolate_buffer_size) {
|
|
||||||
*extrapolate_buffer = realloc(*extrapolate_buffer, new_size);
|
|
||||||
*extrapolate_buffer_size = new_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
float *tdata = (float *)(*extrapolate_buffer); // for 1 channel only
|
|
||||||
|
|
||||||
double *aut = (double *)(*extrapolate_buffer + tdata_size);
|
|
||||||
double *lpc = (double *)(*extrapolate_buffer + tdata_size + aut_size);
|
|
||||||
float *lpci = (float *)(*extrapolate_buffer + tdata_size + aut_size + lpc_size);
|
|
||||||
float *work = (float *)(*extrapolate_buffer + tdata_size + aut_size + lpc_size + lpci_size);
|
|
||||||
|
|
||||||
for(int c = 0; c < nch; c++) {
|
|
||||||
if(extra_bkwd) {
|
|
||||||
for(int i = 0; i < (int)data_len; i++)
|
|
||||||
tdata[data_len - 1 - i] = data[i * nch + c];
|
|
||||||
} else {
|
|
||||||
for(int i = 0; i < (int)data_len; i++)
|
|
||||||
tdata[i] = data[i * nch + c];
|
|
||||||
}
|
|
||||||
|
|
||||||
apply_window(tdata, data_len);
|
|
||||||
vorbis_lpc_from_data(tdata, lpci, (int)data_len, lpc_order, aut, lpc);
|
|
||||||
|
|
||||||
// restore after apply_window
|
|
||||||
if(extra_bkwd) {
|
|
||||||
for(int i = 0; i < (int)data_len; i++)
|
|
||||||
tdata[data_len - 1 - i] = data[i * nch + c];
|
|
||||||
} else {
|
|
||||||
for(int i = 0; i < (int)data_len; i++)
|
|
||||||
tdata[i] = data[i * nch + c];
|
|
||||||
}
|
|
||||||
|
|
||||||
vorbis_lpc_predict(lpci, tdata + data_len - lpc_order, lpc_order, tdata + data_len, extra_fwd + extra_bkwd, work);
|
|
||||||
|
|
||||||
if(extra_bkwd) {
|
|
||||||
for(int i = 0; i < extra_bkwd; i++)
|
|
||||||
data[(-i - 1) * nch + c] = tdata[data_len + i];
|
|
||||||
} else {
|
|
||||||
for(int i = 0; i < extra_fwd; i++)
|
|
||||||
data[(i + data_len) * nch + c] = tdata[data_len + i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
48
Audio/ThirdParty/lvqcl/lpc.h
vendored
48
Audio/ThirdParty/lvqcl/lpc.h
vendored
|
@ -1,48 +0,0 @@
|
||||||
#ifndef MY_LPC_H
|
|
||||||
#define MY_LPC_H
|
|
||||||
|
|
||||||
/* data - beginning of the data
|
|
||||||
* data_len - length of data (in samples) that are base for extrapolation
|
|
||||||
* nch - number of (interleaved) channels
|
|
||||||
* lpc_order - LPC order
|
|
||||||
* extra_bkwd - number of samples to pre-extrapolate
|
|
||||||
* extra_fwd - number of samples to post-extrapolate
|
|
||||||
*
|
|
||||||
* D = data; N = num_channels; LEN = data_len*N; EX = extra*N
|
|
||||||
*
|
|
||||||
* memory layout when invdir == false:
|
|
||||||
*
|
|
||||||
* [||||||||||||||||||||||||||||||||][||||||||||||||||||||][
|
|
||||||
* ^ D[0] ^ D[LEN] ^ D[LEN+EX]
|
|
||||||
*
|
|
||||||
* memory layout when invdir == true:
|
|
||||||
* ][||||||||||||||||||||][||||||||||||||||||||||||||||||||][
|
|
||||||
* ^ D[0] ^ D[LEN]
|
|
||||||
* ^ D[-1*N-EX] ^ D[-1*N]
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
static const size_t LPC_ORDER = 32;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void lpc_extrapolate2(float * const data, const size_t data_len, const int nch, const int lpc_order, const size_t extra_bkwd, const size_t extra_fwd, void ** extrapolate_buffer, size_t * extrapolate_buffer_size);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static inline void lpc_extrapolate_bkwd(float * const data, const size_t data_len, const size_t prime_len, const int nch, const int lpc_order, const size_t extra_bkwd, void ** extrapolate_buffer, size_t * extrapolate_buffer_size)
|
|
||||||
{
|
|
||||||
(void)data_len;
|
|
||||||
lpc_extrapolate2(data, prime_len, nch, lpc_order, extra_bkwd, 0, extrapolate_buffer, extrapolate_buffer_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void lpc_extrapolate_fwd(float * const data, const size_t data_len, const size_t prime_len, const int nch, const int lpc_order, const size_t extra_fwd, void ** extrapolate_buffer, size_t * extrapolate_buffer_size)
|
|
||||||
{
|
|
||||||
lpc_extrapolate2(data + (data_len - prime_len)*nch, prime_len, nch, lpc_order, 0, extra_fwd, extrapolate_buffer, extrapolate_buffer_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
55
Audio/ThirdParty/lvqcl/util.h
vendored
55
Audio/ThirdParty/lvqcl/util.h
vendored
|
@ -1,55 +0,0 @@
|
||||||
/* Copyright (c) 2018 lvqcl. All rights reserved.
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU Lesser General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2.1 of the License, or (at
|
|
||||||
* your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
|
|
||||||
* General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
|
||||||
* along with this library; if not, write to the Free Software Foundation,
|
|
||||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef UTIL_H_
|
|
||||||
#define UTIL_H_
|
|
||||||
|
|
||||||
#ifndef min
|
|
||||||
#define min(a,b) (((a)<(b))?(a):(b))
|
|
||||||
#endif
|
|
||||||
#ifndef max
|
|
||||||
#define max(a,b) (((a)>(b))?(a):(b))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static inline unsigned local_gcd(unsigned a, unsigned b)
|
|
||||||
{
|
|
||||||
if (a == 0 || b == 0) return 0;
|
|
||||||
unsigned c = a % b;
|
|
||||||
while (c != 0) { a = b; b = c; c = a % b; }
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
In: *r1 and *r2: samplerates;
|
|
||||||
Out: *r1 and *r2: numbers of samples;
|
|
||||||
|
|
||||||
multiply r1 and r2 by n so that durations is 1/N th of second;
|
|
||||||
limit n so that r1 and r2 aren't bigger than M
|
|
||||||
*/
|
|
||||||
static void samples_len(unsigned* r1, unsigned* r2, unsigned N, unsigned M) // example: r1 = 44100, r2 = 48000, N = 20, M = 8192
|
|
||||||
{
|
|
||||||
if (r1 == 0 || r2 == 0 || *r1 == 0 || *r2 == 0) return;
|
|
||||||
unsigned v = local_gcd(*r1, *r2); // v = 300
|
|
||||||
*r1 /= v; *r2 /= v; // r1 = 147; r2 = 160 == 1/300th of second
|
|
||||||
unsigned n = (v + N-1) / N; // n = 300/20 = 15 times
|
|
||||||
unsigned z = max(*r1, *r2); // z = 160
|
|
||||||
if (z*n > M) n = M / z; // 160*15 = 2400 < 8192;; if M == 1024: n = 1024/160 = 6; 160*6 = 960
|
|
||||||
if (n < 1) n = 1;
|
|
||||||
*r1 *= n; *r2 *= n; // r1 = 147*15 = 2205 samples, r2 = 160*15 = 2400 samples
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
31
Audio/ThirdParty/r8bstate.cpp
vendored
Normal file
31
Audio/ThirdParty/r8bstate.cpp
vendored
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
//
|
||||||
|
// r8bstate.cpp
|
||||||
|
// CogAudio Framework
|
||||||
|
//
|
||||||
|
// Created by Christopher Snowhill on 6/24/22.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "r8bstate.h"
|
||||||
|
#include "r8bstate.hpp"
|
||||||
|
|
||||||
|
void *r8bstate_new(int channelCount, int bufferCapacity, double srcRate,
|
||||||
|
double dstRate) {
|
||||||
|
return (void *)new r8bstate(channelCount, bufferCapacity, srcRate, dstRate);
|
||||||
|
}
|
||||||
|
|
||||||
|
void r8bstate_delete(void *state) {
|
||||||
|
delete(r8bstate *)state;
|
||||||
|
}
|
||||||
|
|
||||||
|
double r8bstate_latency(void *state) {
|
||||||
|
return ((r8bstate *)state)->latency();
|
||||||
|
}
|
||||||
|
|
||||||
|
int r8bstate_resample(void *state, const float *input, size_t inCount, size_t *inDone,
|
||||||
|
float *output, size_t outMax) {
|
||||||
|
return ((r8bstate *)state)->resample(input, inCount, inDone, output, outMax);
|
||||||
|
}
|
||||||
|
|
||||||
|
int r8bstate_flush(void *state, float *output, size_t outMax) {
|
||||||
|
return ((r8bstate *)state)->flush(output, outMax);
|
||||||
|
}
|
165
Audio/ThirdParty/r8bstate.h
vendored
165
Audio/ThirdParty/r8bstate.h
vendored
|
@ -2,163 +2,32 @@
|
||||||
// r8bstate.h
|
// r8bstate.h
|
||||||
// CogAudio Framework
|
// CogAudio Framework
|
||||||
//
|
//
|
||||||
// Created by Christopher Snowhill on 3/3/22.
|
// Created by Christopher Snowhill on 6/24/22.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
#ifndef r8bstate_h
|
#ifndef r8bstate_h
|
||||||
#define r8bstate_h
|
#define r8bstate_h
|
||||||
|
|
||||||
#include <Accelerate/Accelerate.h>
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "r8bbase.h"
|
void *r8bstate_new(int channelCount, int bufferCapacity, double srcRate,
|
||||||
|
double dstRate);
|
||||||
|
void r8bstate_delete(void *);
|
||||||
|
|
||||||
#include "CDSPResampler.h"
|
double r8bstate_latency(void *);
|
||||||
|
|
||||||
struct r8bstate {
|
int r8bstate_resample(void *, const float *input, size_t inCount, size_t *inDone,
|
||||||
int channelCount;
|
float *output, size_t outMax);
|
||||||
int bufferCapacity;
|
|
||||||
size_t remainder;
|
|
||||||
uint64_t inProcessed;
|
|
||||||
uint64_t outProcessed;
|
|
||||||
double sampleRatio;
|
|
||||||
r8b::CFixedBuffer<double> InBuf;
|
|
||||||
r8b::CFixedBuffer<double> *OutBufs;
|
|
||||||
r8b::CDSPResampler24 **Resamps;
|
|
||||||
r8bstate(int _channelCount, int _bufferCapacity, double srcRate, double dstRate)
|
|
||||||
: channelCount(_channelCount), bufferCapacity(_bufferCapacity), inProcessed(0), outProcessed(0), remainder(0) {
|
|
||||||
InBuf.alloc(bufferCapacity);
|
|
||||||
OutBufs = new r8b::CFixedBuffer<double>[channelCount];
|
|
||||||
Resamps = new r8b::CDSPResampler24 *[channelCount];
|
|
||||||
for(int i = 0; i < channelCount; ++i) {
|
|
||||||
Resamps[i] = new r8b::CDSPResampler24(srcRate, dstRate, bufferCapacity);
|
|
||||||
}
|
|
||||||
sampleRatio = dstRate / srcRate;
|
|
||||||
}
|
|
||||||
|
|
||||||
~r8bstate() {
|
int r8bstate_flush(void *, float *output, size_t outMax);
|
||||||
delete[] OutBufs;
|
|
||||||
for(int i = 0; i < channelCount; ++i) {
|
|
||||||
delete Resamps[i];
|
|
||||||
}
|
|
||||||
delete[] Resamps;
|
|
||||||
}
|
|
||||||
|
|
||||||
double latency() {
|
#ifdef __cplusplus
|
||||||
return ((double)inProcessed * sampleRatio) - (double)outProcessed;
|
}
|
||||||
}
|
#endif
|
||||||
|
|
||||||
int resample(const float *input, size_t inCount, size_t *inDone, float *output, size_t outMax) {
|
|
||||||
int ret = 0;
|
|
||||||
int i;
|
|
||||||
if(inDone) *inDone = 0;
|
|
||||||
while(remainder > 0) {
|
|
||||||
size_t blockCount = remainder;
|
|
||||||
if(blockCount > outMax)
|
|
||||||
blockCount = outMax;
|
|
||||||
for(i = 0; i < channelCount; ++i) {
|
|
||||||
vDSP_vdpsp(&OutBufs[i][0], 1, output + i, channelCount, blockCount);
|
|
||||||
}
|
|
||||||
remainder -= blockCount;
|
|
||||||
if(remainder > 0) {
|
|
||||||
for(i = 0; i < channelCount; ++i) {
|
|
||||||
memmove(&OutBufs[i][0], &OutBufs[i][blockCount], remainder * sizeof(double));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
output += channelCount * blockCount;
|
|
||||||
outProcessed += blockCount;
|
|
||||||
outMax -= blockCount;
|
|
||||||
ret += blockCount;
|
|
||||||
if(!outMax)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
while(inCount > 0) {
|
|
||||||
size_t blockCount = inCount;
|
|
||||||
if(blockCount > bufferCapacity)
|
|
||||||
blockCount = bufferCapacity;
|
|
||||||
int outputDone = 0;
|
|
||||||
for(i = 0; i < channelCount; ++i) {
|
|
||||||
double *outputPointer;
|
|
||||||
vDSP_vspdp(input + i, channelCount, &InBuf[0], 1, blockCount);
|
|
||||||
outputDone = Resamps[i]->process(InBuf, (int)blockCount, outputPointer);
|
|
||||||
if(outputDone) {
|
|
||||||
if(outputDone > outMax) {
|
|
||||||
vDSP_vdpsp(outputPointer, 1, output + i, channelCount, outMax);
|
|
||||||
remainder = outputDone - outMax;
|
|
||||||
OutBufs[i].alloc((int)remainder);
|
|
||||||
memcpy(&OutBufs[i][0], outputPointer + outMax, remainder);
|
|
||||||
} else {
|
|
||||||
vDSP_vdpsp(outputPointer, 1, output + i, channelCount, outputDone);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
size_t outputActual = outputDone - remainder;
|
|
||||||
input += channelCount * blockCount;
|
|
||||||
output += channelCount * outputActual;
|
|
||||||
inCount -= blockCount;
|
|
||||||
if(inDone) *inDone += blockCount;
|
|
||||||
inProcessed += blockCount;
|
|
||||||
outProcessed += outputActual;
|
|
||||||
outMax -= outputActual;
|
|
||||||
ret += outputActual;
|
|
||||||
if(remainder)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int flush(float *output, size_t outMax) {
|
|
||||||
int ret = 0;
|
|
||||||
int i;
|
|
||||||
if(remainder > 0) {
|
|
||||||
size_t blockCount = remainder;
|
|
||||||
if(blockCount > outMax)
|
|
||||||
blockCount = outMax;
|
|
||||||
for(i = 0; i < channelCount; ++i) {
|
|
||||||
vDSP_vdpsp(&OutBufs[i][0], 1, output + i, channelCount, blockCount);
|
|
||||||
}
|
|
||||||
remainder -= blockCount;
|
|
||||||
if(remainder > 0) {
|
|
||||||
for(i = 0; i < channelCount; ++i) {
|
|
||||||
memmove(&OutBufs[i][0], &OutBufs[i][blockCount], remainder * sizeof(double));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
output += channelCount * blockCount;
|
|
||||||
outProcessed += blockCount;
|
|
||||||
outMax -= blockCount;
|
|
||||||
ret += blockCount;
|
|
||||||
if(!outMax)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
uint64_t outputWanted = ceil(inProcessed * sampleRatio);
|
|
||||||
memset(&InBuf[0], 0, sizeof(double) * bufferCapacity);
|
|
||||||
while(outProcessed < outputWanted) {
|
|
||||||
int outputDone = 0;
|
|
||||||
for(int i = 0; i < channelCount; ++i) {
|
|
||||||
double *outputPointer;
|
|
||||||
outputDone = Resamps[i]->process(InBuf, bufferCapacity, outputPointer);
|
|
||||||
if(outputDone) {
|
|
||||||
if(outputDone > (outputWanted - outProcessed))
|
|
||||||
outputDone = (int)(outputWanted - outProcessed);
|
|
||||||
if(outputDone > outMax) {
|
|
||||||
vDSP_vdpsp(outputPointer, 1, output + i, channelCount, outMax);
|
|
||||||
remainder = outputDone - outMax;
|
|
||||||
OutBufs[i].alloc((int)remainder);
|
|
||||||
memcpy(&OutBufs[i][0], outputPointer + outMax, remainder);
|
|
||||||
} else {
|
|
||||||
vDSP_vdpsp(outputPointer, 1, output + i, channelCount, outputDone);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
size_t outputActual = outputDone - remainder;
|
|
||||||
outProcessed += outputActual;
|
|
||||||
output += channelCount * outputActual;
|
|
||||||
outMax -= outputActual;
|
|
||||||
ret += outputActual;
|
|
||||||
if(remainder)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* r8bstate_h */
|
#endif /* r8bstate_h */
|
||||||
|
|
165
Audio/ThirdParty/r8bstate.hpp
vendored
Normal file
165
Audio/ThirdParty/r8bstate.hpp
vendored
Normal file
|
@ -0,0 +1,165 @@
|
||||||
|
//
|
||||||
|
// r8bstate.hpp
|
||||||
|
// CogAudio Framework
|
||||||
|
//
|
||||||
|
// Created by Christopher Snowhill on 3/3/22.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef r8bstate_hpp
|
||||||
|
#define r8bstate_hpp
|
||||||
|
|
||||||
|
#include <Accelerate/Accelerate.h>
|
||||||
|
|
||||||
|
#include "r8bbase.h"
|
||||||
|
|
||||||
|
#include "CDSPResampler.h"
|
||||||
|
|
||||||
|
struct r8bstate {
|
||||||
|
int channelCount;
|
||||||
|
int bufferCapacity;
|
||||||
|
size_t remainder;
|
||||||
|
uint64_t inProcessed;
|
||||||
|
uint64_t outProcessed;
|
||||||
|
double sampleRatio;
|
||||||
|
double dstRate;
|
||||||
|
r8b::CFixedBuffer<double> InBuf;
|
||||||
|
r8b::CFixedBuffer<double> *OutBufs;
|
||||||
|
r8b::CDSPResampler24 **Resamps;
|
||||||
|
r8bstate(int _channelCount, int _bufferCapacity, double srcRate, double _dstRate)
|
||||||
|
: channelCount(_channelCount), bufferCapacity(_bufferCapacity), inProcessed(0), outProcessed(0), remainder(0), dstRate(_dstRate) {
|
||||||
|
InBuf.alloc(bufferCapacity);
|
||||||
|
OutBufs = new r8b::CFixedBuffer<double>[channelCount];
|
||||||
|
Resamps = new r8b::CDSPResampler24 *[channelCount];
|
||||||
|
for(int i = 0; i < channelCount; ++i) {
|
||||||
|
Resamps[i] = new r8b::CDSPResampler24(srcRate, dstRate, bufferCapacity);
|
||||||
|
}
|
||||||
|
sampleRatio = dstRate / srcRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
~r8bstate() {
|
||||||
|
delete[] OutBufs;
|
||||||
|
for(int i = 0; i < channelCount; ++i) {
|
||||||
|
delete Resamps[i];
|
||||||
|
}
|
||||||
|
delete[] Resamps;
|
||||||
|
}
|
||||||
|
|
||||||
|
double latency() {
|
||||||
|
return (((double)inProcessed * sampleRatio) - (double)outProcessed) / dstRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
int resample(const float *input, size_t inCount, size_t *inDone, float *output, size_t outMax) {
|
||||||
|
int ret = 0;
|
||||||
|
int i;
|
||||||
|
if(inDone) *inDone = 0;
|
||||||
|
while(remainder > 0) {
|
||||||
|
size_t blockCount = remainder;
|
||||||
|
if(blockCount > outMax)
|
||||||
|
blockCount = outMax;
|
||||||
|
for(i = 0; i < channelCount; ++i) {
|
||||||
|
vDSP_vdpsp(&OutBufs[i][0], 1, output + i, channelCount, blockCount);
|
||||||
|
}
|
||||||
|
remainder -= blockCount;
|
||||||
|
if(remainder > 0) {
|
||||||
|
for(i = 0; i < channelCount; ++i) {
|
||||||
|
memmove(&OutBufs[i][0], &OutBufs[i][blockCount], remainder * sizeof(double));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
output += channelCount * blockCount;
|
||||||
|
outProcessed += blockCount;
|
||||||
|
outMax -= blockCount;
|
||||||
|
ret += blockCount;
|
||||||
|
if(!outMax)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
while(inCount > 0) {
|
||||||
|
size_t blockCount = inCount;
|
||||||
|
if(blockCount > bufferCapacity)
|
||||||
|
blockCount = bufferCapacity;
|
||||||
|
int outputDone = 0;
|
||||||
|
for(i = 0; i < channelCount; ++i) {
|
||||||
|
double *outputPointer;
|
||||||
|
vDSP_vspdp(input + i, channelCount, &InBuf[0], 1, blockCount);
|
||||||
|
outputDone = Resamps[i]->process(InBuf, (int)blockCount, outputPointer);
|
||||||
|
if(outputDone) {
|
||||||
|
if(outputDone > outMax) {
|
||||||
|
vDSP_vdpsp(outputPointer, 1, output + i, channelCount, outMax);
|
||||||
|
remainder = outputDone - outMax;
|
||||||
|
OutBufs[i].alloc((int)remainder);
|
||||||
|
memcpy(&OutBufs[i][0], outputPointer + outMax, remainder);
|
||||||
|
} else {
|
||||||
|
vDSP_vdpsp(outputPointer, 1, output + i, channelCount, outputDone);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
size_t outputActual = outputDone - remainder;
|
||||||
|
input += channelCount * blockCount;
|
||||||
|
output += channelCount * outputActual;
|
||||||
|
inCount -= blockCount;
|
||||||
|
if(inDone) *inDone += blockCount;
|
||||||
|
inProcessed += blockCount;
|
||||||
|
outProcessed += outputActual;
|
||||||
|
outMax -= outputActual;
|
||||||
|
ret += outputActual;
|
||||||
|
if(remainder)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int flush(float *output, size_t outMax) {
|
||||||
|
int ret = 0;
|
||||||
|
int i;
|
||||||
|
if(remainder > 0) {
|
||||||
|
size_t blockCount = remainder;
|
||||||
|
if(blockCount > outMax)
|
||||||
|
blockCount = outMax;
|
||||||
|
for(i = 0; i < channelCount; ++i) {
|
||||||
|
vDSP_vdpsp(&OutBufs[i][0], 1, output + i, channelCount, blockCount);
|
||||||
|
}
|
||||||
|
remainder -= blockCount;
|
||||||
|
if(remainder > 0) {
|
||||||
|
for(i = 0; i < channelCount; ++i) {
|
||||||
|
memmove(&OutBufs[i][0], &OutBufs[i][blockCount], remainder * sizeof(double));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
output += channelCount * blockCount;
|
||||||
|
outProcessed += blockCount;
|
||||||
|
outMax -= blockCount;
|
||||||
|
ret += blockCount;
|
||||||
|
if(!outMax)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
uint64_t outputWanted = ceil(inProcessed * sampleRatio);
|
||||||
|
memset(&InBuf[0], 0, sizeof(double) * bufferCapacity);
|
||||||
|
while(outProcessed < outputWanted) {
|
||||||
|
int outputDone = 0;
|
||||||
|
for(int i = 0; i < channelCount; ++i) {
|
||||||
|
double *outputPointer;
|
||||||
|
outputDone = Resamps[i]->process(InBuf, bufferCapacity, outputPointer);
|
||||||
|
if(outputDone) {
|
||||||
|
if(outputDone > (outputWanted - outProcessed))
|
||||||
|
outputDone = (int)(outputWanted - outProcessed);
|
||||||
|
if(outputDone > outMax) {
|
||||||
|
vDSP_vdpsp(outputPointer, 1, output + i, channelCount, outMax);
|
||||||
|
remainder = outputDone - outMax;
|
||||||
|
OutBufs[i].alloc((int)remainder);
|
||||||
|
memcpy(&OutBufs[i][0], outputPointer + outMax, remainder);
|
||||||
|
} else {
|
||||||
|
vDSP_vdpsp(outputPointer, 1, output + i, channelCount, outputDone);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
size_t outputActual = outputDone - remainder;
|
||||||
|
outProcessed += outputActual;
|
||||||
|
output += channelCount * outputActual;
|
||||||
|
outMax -= outputActual;
|
||||||
|
ret += outputActual;
|
||||||
|
if(remainder)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* r8bstate_h */
|
|
@ -11,15 +11,19 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
@interface VisualizationController : NSObject {
|
@interface VisualizationController : NSObject {
|
||||||
double sampleRate;
|
double sampleRate;
|
||||||
float visAudio[4096];
|
double latency;
|
||||||
|
float *visAudio;
|
||||||
|
int visAudioCursor, visAudioSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (VisualizationController *)sharedController;
|
+ (VisualizationController *)sharedController;
|
||||||
|
|
||||||
|
- (void)postLatency:(double)latency;
|
||||||
|
|
||||||
- (void)postSampleRate:(double)sampleRate;
|
- (void)postSampleRate:(double)sampleRate;
|
||||||
- (void)postVisPCM:(const float *)inPCM amount:(int)amount;
|
- (void)postVisPCM:(const float *)inPCM amount:(int)amount;
|
||||||
- (double)readSampleRate;
|
- (double)readSampleRate;
|
||||||
- (void)copyVisPCM:(float *)outPCM visFFT:(float *)outFFT;
|
- (void)copyVisPCM:(float *)outPCM visFFT:(float *)outFFT latencyOffset:(double)latency;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,8 @@ static VisualizationController *_sharedController = nil;
|
||||||
- (id)init {
|
- (id)init {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if(self) {
|
if(self) {
|
||||||
vDSP_vclr(visAudio, 1, 4096);
|
visAudio = NULL;
|
||||||
|
latency = 0;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
@ -37,32 +38,83 @@ static VisualizationController *_sharedController = nil;
|
||||||
|
|
||||||
- (void)postSampleRate:(double)sampleRate {
|
- (void)postSampleRate:(double)sampleRate {
|
||||||
@synchronized(self) {
|
@synchronized(self) {
|
||||||
self->sampleRate = sampleRate;
|
if(self->sampleRate != sampleRate) {
|
||||||
|
self->sampleRate = sampleRate;
|
||||||
|
int visAudioSize = (int)(sampleRate * 45.0);
|
||||||
|
void *visAudio = realloc(self->visAudio, visAudioSize * sizeof(float));
|
||||||
|
if(visAudio && visAudioSize) {
|
||||||
|
if(visAudioSize > self->visAudioSize) {
|
||||||
|
bzero(((float *)visAudio) + self->visAudioSize, sizeof(float) * (visAudioSize - self->visAudioSize));
|
||||||
|
}
|
||||||
|
self->visAudio = visAudio;
|
||||||
|
self->visAudioSize = visAudioSize;
|
||||||
|
visAudioCursor %= visAudioSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)postVisPCM:(const float *)inPCM amount:(int)amount {
|
- (void)postVisPCM:(const float *)inPCM amount:(int)amount {
|
||||||
int skipAmount = 0;
|
|
||||||
if(amount > 4096) {
|
|
||||||
skipAmount = amount - 4096;
|
|
||||||
amount = 4096;
|
|
||||||
}
|
|
||||||
@synchronized(self) {
|
@synchronized(self) {
|
||||||
cblas_scopy(4096 - amount, visAudio + amount, 1, visAudio, 1);
|
int samplesRead = 0;
|
||||||
cblas_scopy(amount, inPCM + skipAmount, 1, visAudio + 4096 - amount, 1);
|
while(amount > 0) {
|
||||||
|
int amountToCopy = (int)(visAudioSize - visAudioCursor);
|
||||||
|
if(amountToCopy > amount) amountToCopy = amount;
|
||||||
|
cblas_scopy(amountToCopy, inPCM + samplesRead, 1, visAudio + visAudioCursor, 1);
|
||||||
|
visAudioCursor = visAudioCursor + amountToCopy;
|
||||||
|
if(visAudioCursor >= visAudioSize) visAudioCursor -= visAudioSize;
|
||||||
|
amount -= amountToCopy;
|
||||||
|
samplesRead += amountToCopy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)postLatency:(double)latency {
|
||||||
|
self->latency = latency;
|
||||||
|
assert(latency < 45.0);
|
||||||
|
}
|
||||||
|
|
||||||
- (double)readSampleRate {
|
- (double)readSampleRate {
|
||||||
@synchronized(self) {
|
@synchronized(self) {
|
||||||
return sampleRate;
|
return sampleRate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)copyVisPCM:(float *)outPCM visFFT:(float *)outFFT {
|
- (void)copyVisPCM:(float *)outPCM visFFT:(float *)outFFT latencyOffset:(double)latency {
|
||||||
|
if(!outPCM && !outFFT) return;
|
||||||
|
|
||||||
|
float tempPCM[4096];
|
||||||
|
if(!outPCM) outPCM = &tempPCM[0];
|
||||||
|
|
||||||
@synchronized(self) {
|
@synchronized(self) {
|
||||||
cblas_scopy(4096, visAudio, 1, outPCM, 1);
|
if(!sampleRate) {
|
||||||
fft_calculate(visAudio, outFFT, 2048);
|
bzero(outPCM, 4096 * sizeof(float));
|
||||||
|
if(outFFT) {
|
||||||
|
bzero(outFFT, 2048 * sizeof(float));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int latencySamples = (int)(sampleRate * (self->latency + latency));
|
||||||
|
if(latencySamples < 4096) latencySamples = 4096;
|
||||||
|
int readCursor = visAudioCursor - latencySamples;
|
||||||
|
int samples = 4096;
|
||||||
|
int samplesRead = 0;
|
||||||
|
while(readCursor < 0)
|
||||||
|
readCursor += visAudioSize;
|
||||||
|
while(readCursor >= visAudioSize)
|
||||||
|
readCursor -= visAudioSize;
|
||||||
|
while(samples > 0) {
|
||||||
|
int samplesToRead = (int)(visAudioSize - readCursor);
|
||||||
|
if(samplesToRead > samples) samplesToRead = samples;
|
||||||
|
cblas_scopy(samplesToRead, visAudio + readCursor, 1, outPCM + samplesRead, 1);
|
||||||
|
samplesRead += samplesToRead;
|
||||||
|
readCursor += samplesToRead;
|
||||||
|
samples -= samplesToRead;
|
||||||
|
if(readCursor >= visAudioSize) readCursor -= visAudioSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(outFFT) {
|
||||||
|
fft_calculate(outPCM, outFFT, 2048);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
97
Audio/Visualization/VisualizationController.swift
Normal file
97
Audio/Visualization/VisualizationController.swift
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
//
|
||||||
|
// VisualizationController.swift
|
||||||
|
// CogAudio Framework
|
||||||
|
//
|
||||||
|
// Created by Christopher Snowhill on 6/30/22.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
@objc(VisualizationController)
|
||||||
|
class VisualizationController {
|
||||||
|
var serialQueue = DispatchQueue(label: "Visualization Queue")
|
||||||
|
var sampleRate = 44100.0
|
||||||
|
var latency = 0.0
|
||||||
|
var visAudio: [Float] = Array(repeating: 0.0, count: 44100 * 45)
|
||||||
|
var visAudioCursor = 0
|
||||||
|
var visAudioSize = 0
|
||||||
|
|
||||||
|
private static var sharedController: VisualizationController = {
|
||||||
|
let visualizationController = VisualizationController()
|
||||||
|
return visualizationController
|
||||||
|
}()
|
||||||
|
|
||||||
|
class func sharedVisualizationController() -> VisualizationController {
|
||||||
|
return sharedController
|
||||||
|
}
|
||||||
|
|
||||||
|
func postLatency(_ latency: Double) {
|
||||||
|
self.latency = latency
|
||||||
|
}
|
||||||
|
|
||||||
|
func postSampleRate(_ sampleRate: Double) {
|
||||||
|
serialQueue.sync {
|
||||||
|
if(self.sampleRate != sampleRate) {
|
||||||
|
self.sampleRate = sampleRate
|
||||||
|
visAudioSize = (Int)(sampleRate * 45.0)
|
||||||
|
visAudio = Array(repeating: 0.0, count: visAudioSize)
|
||||||
|
visAudioCursor = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func postVisPCM(_ inPCM: UnsafePointer<Float>?, amount: Int) {
|
||||||
|
serialQueue.sync {
|
||||||
|
let bufferPointer = UnsafeBufferPointer(start: inPCM, count: amount)
|
||||||
|
if let bptr = bufferPointer {
|
||||||
|
let dataArray = bptr.assumingMemoryBound(to: Float.self)
|
||||||
|
var j = self.visAudioCursor
|
||||||
|
var k = self.visAudioSize
|
||||||
|
for i in 0..<amount {
|
||||||
|
let x = Float(dataArray[i])
|
||||||
|
self.visAudio[j] = x
|
||||||
|
j++; if j >= k { j = 0 }
|
||||||
|
}
|
||||||
|
self.visAudioCursor = j
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func readSampleRate() -> Double {
|
||||||
|
serialQueue.sync {
|
||||||
|
return self.sampleRate
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func copyVisPCM(_ outPCM: UnsafeMutablePointer<Float>?, visFFT: UnsafeMutablePointer<Float>?, latencyoffset: Double) {
|
||||||
|
let outPCMCopy = Array<Float>(repeating: 0.0, count: 4096)
|
||||||
|
|
||||||
|
serialQueue.sync {
|
||||||
|
var latencySamples = (Int)(self.latency * self.sampleRate)
|
||||||
|
var j = self.visAudioCursor - latencySamples
|
||||||
|
var k = self.visAudioSize
|
||||||
|
if j < 0 { j += k }
|
||||||
|
for i in 0..4095 {
|
||||||
|
let x = self.visAudio[j]
|
||||||
|
outPCMCopy[i] = x
|
||||||
|
j++; if j >= k { j = 0 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let pcmPointer = UnsafeMutableBufferPointer(start: outPCM, count: 4096)
|
||||||
|
if let bptr = pcmPointer {
|
||||||
|
let dataArray = bptr.assumingMemoryBound(to: Float.self)
|
||||||
|
for i in 0..4095 {
|
||||||
|
let x = outPCMCopy[i]
|
||||||
|
dataArray[i] = x
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let fftPointer = UnsafeMutablePointer(start: visFFT, count: 2048)
|
||||||
|
if let bptr = fftPointer {
|
||||||
|
serialQueue.sync {
|
||||||
|
fft_calculate(outPCMCopy, bptr, 2048)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,157 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
|
|
||||||
<dependencies>
|
|
||||||
<deployment identifier="macosx"/>
|
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14313.18"/>
|
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
|
||||||
</dependencies>
|
|
||||||
<objects>
|
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="FileTreeViewController">
|
|
||||||
<connections>
|
|
||||||
<outlet property="fileTreeOutlineView" destination="69" id="141"/>
|
|
||||||
<outlet property="firstResponder" destination="69" id="140"/>
|
|
||||||
<outlet property="view" destination="55" id="103"/>
|
|
||||||
</connections>
|
|
||||||
</customObject>
|
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
|
||||||
<customObject id="9" userLabel="FileTreeDataSource" customClass="FileTreeDataSource">
|
|
||||||
<connections>
|
|
||||||
<outlet property="outlineView" destination="69" id="88"/>
|
|
||||||
<outlet property="pathControl" destination="65" id="109"/>
|
|
||||||
<outlet property="watcher" destination="31" id="34"/>
|
|
||||||
</connections>
|
|
||||||
</customObject>
|
|
||||||
<userDefaultsController representsSharedInstance="YES" id="27"/>
|
|
||||||
<customObject id="31" customClass="PathWatcher">
|
|
||||||
<connections>
|
|
||||||
<outlet property="delegate" destination="9" id="33"/>
|
|
||||||
</connections>
|
|
||||||
</customObject>
|
|
||||||
<customView id="55" userLabel="File Tree View">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="300" height="400"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<pathControl focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" id="65">
|
|
||||||
<rect key="frame" x="0.0" y="374" width="300" height="26"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<pathCell key="cell" selectable="YES" editable="YES" focusRingType="none" alignment="left" pathStyle="popUp" id="66">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="backgroundColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</pathCell>
|
|
||||||
<connections>
|
|
||||||
<binding destination="27" name="value" keyPath="values.fileTreeRootURL" id="108">
|
|
||||||
<dictionary key="options">
|
|
||||||
<string key="NSValueTransformerName">StringToURLTransformer</string>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</pathControl>
|
|
||||||
<box boxType="custom" borderType="line" title="Box" titlePosition="noTitle" id="147">
|
|
||||||
<rect key="frame" x="0.0" y="373" width="300" height="1"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
|
||||||
<view key="contentView" id="Dg2-ay-LZH">
|
|
||||||
<rect key="frame" x="1" y="1" width="298" height="0.0"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
</view>
|
|
||||||
<color key="borderColor" name="scrollBarColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="fillColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<font key="titleFont" metaFont="system"/>
|
|
||||||
</box>
|
|
||||||
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="23" horizontalPageScroll="10" verticalLineScroll="23" verticalPageScroll="10" usesPredominantAxisScrolling="NO" id="64">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="300" height="373"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="OYe-Aa-Spw">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="300" height="373"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<subviews>
|
|
||||||
<outlineView focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="sourceList" columnReordering="NO" autosaveColumns="NO" autosaveName="FileTree" rowHeight="18" indentationPerLevel="14" autoresizesOutlineColumn="YES" outlineTableColumn="70" id="69" customClass="FileTreeOutlineView">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="300" height="373"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxY="YES"/>
|
|
||||||
<size key="intercellSpacing" width="3" height="5"/>
|
|
||||||
<color key="backgroundColor" name="_sourceListBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<tableColumns>
|
|
||||||
<tableColumn editable="NO" width="297" minWidth="16" maxWidth="1000" id="70">
|
|
||||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
|
|
||||||
<font key="font" metaFont="smallSystem"/>
|
|
||||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" white="0.33333299" alpha="1" colorSpace="calibratedWhite"/>
|
|
||||||
</tableHeaderCell>
|
|
||||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="71" customClass="FileIconCell">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<connections>
|
|
||||||
<binding destination="27" name="fontSize" keyPath="values.fontSize" id="93"/>
|
|
||||||
</connections>
|
|
||||||
</textFieldCell>
|
|
||||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
|
||||||
</tableColumn>
|
|
||||||
</tableColumns>
|
|
||||||
<connections>
|
|
||||||
<binding destination="27" name="rowHeight" keyPath="values.fontSize" id="86">
|
|
||||||
<dictionary key="options">
|
|
||||||
<string key="NSValueTransformerName">FontSizetoLineHeightTransformer</string>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
<outlet property="dataSource" destination="9" id="87"/>
|
|
||||||
<outlet property="delegate" destination="94" id="98"/>
|
|
||||||
<outlet property="menu" destination="110" id="121"/>
|
|
||||||
</connections>
|
|
||||||
</outlineView>
|
|
||||||
</subviews>
|
|
||||||
<nil key="backgroundColor"/>
|
|
||||||
</clipView>
|
|
||||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="67">
|
|
||||||
<rect key="frame" x="0.0" y="362" width="306" height="15"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
</scroller>
|
|
||||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="68">
|
|
||||||
<rect key="frame" x="261" y="0.0" width="15" height="363"/>
|
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
|
||||||
</scroller>
|
|
||||||
<connections>
|
|
||||||
<outlet property="nextKeyView" destination="69" id="104"/>
|
|
||||||
</connections>
|
|
||||||
</scrollView>
|
|
||||||
</subviews>
|
|
||||||
</customView>
|
|
||||||
<customObject id="94" customClass="FileTreeController">
|
|
||||||
<connections>
|
|
||||||
<outlet property="controller" destination="-2" id="106"/>
|
|
||||||
<outlet property="dataSource" destination="9" id="137"/>
|
|
||||||
<outlet property="outlineView" destination="69" id="95"/>
|
|
||||||
</connections>
|
|
||||||
</customObject>
|
|
||||||
<menu title="Menu" id="110" userLabel="ContextualMenu">
|
|
||||||
<items>
|
|
||||||
<menuItem title="Add to Playlist" tag="1" id="119">
|
|
||||||
<connections>
|
|
||||||
<action selector="addToPlaylist:" target="94" id="122"/>
|
|
||||||
</connections>
|
|
||||||
</menuItem>
|
|
||||||
<menuItem title="Set as Playlist" tag="2" id="129">
|
|
||||||
<connections>
|
|
||||||
<action selector="setAsPlaylist:" target="94" id="130"/>
|
|
||||||
</connections>
|
|
||||||
</menuItem>
|
|
||||||
<menuItem isSeparatorItem="YES" id="128"/>
|
|
||||||
<menuItem title="Show in Finder" tag="3" id="112">
|
|
||||||
<connections>
|
|
||||||
<action selector="showEntryInFinder:" target="94" id="123"/>
|
|
||||||
</connections>
|
|
||||||
</menuItem>
|
|
||||||
<menuItem isSeparatorItem="YES" id="126"/>
|
|
||||||
<menuItem title="Set as Root" tag="4" id="124">
|
|
||||||
<connections>
|
|
||||||
<action selector="setAsRoot:" target="94" id="125"/>
|
|
||||||
</connections>
|
|
||||||
</menuItem>
|
|
||||||
</items>
|
|
||||||
<connections>
|
|
||||||
<outlet property="delegate" destination="69" id="139"/>
|
|
||||||
</connections>
|
|
||||||
</menu>
|
|
||||||
</objects>
|
|
||||||
</document>
|
|
|
@ -13,7 +13,7 @@
|
||||||
</customObject>
|
</customObject>
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<window title="Info Inspector" separatorStyle="none" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" visibleAtLaunch="NO" frameAutosaveName="InfoInspector" animationBehavior="default" titlebarAppearsTransparent="YES" id="1" customClass="NSPanel">
|
<window title="Info Inspector" separatorStyle="none" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" visibleAtLaunch="NO" animationBehavior="utilityWindow" frameAutosaveName="InfoInspector" titlebarAppearsTransparent="YES" id="1" customClass="NSPanel">
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" resizable="YES" utility="YES" nonactivatingPanel="YES" HUD="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" resizable="YES" utility="YES" nonactivatingPanel="YES" HUD="YES"/>
|
||||||
<rect key="contentRect" x="700" y="80" width="300" height="582"/>
|
<rect key="contentRect" x="700" y="80" width="300" height="582"/>
|
||||||
<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"/>
|
||||||
|
@ -125,7 +125,7 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="33" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="33" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="526" width="170" height="14"/>
|
<rect key="frame" x="113" y="526" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="34">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="34">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -137,7 +137,7 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="35" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="35" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="504" width="170" height="14"/>
|
<rect key="frame" x="113" y="504" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="36">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="36">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -149,7 +149,7 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="37" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="37" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="482" width="170" height="14"/>
|
<rect key="frame" x="113" y="482" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="38">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="38">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -161,7 +161,7 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="39" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="39" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="460" width="170" height="14"/>
|
<rect key="frame" x="113" y="460" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="40">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="40">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -173,7 +173,7 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="41" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="41" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="438" width="170" height="14"/>
|
<rect key="frame" x="113" y="438" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="42">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="42">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -185,7 +185,7 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="43" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="43" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="416" width="170" height="14"/>
|
<rect key="frame" x="113" y="416" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="44">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="44">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -197,7 +197,7 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="45" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="45" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="394" width="170" height="14"/>
|
<rect key="frame" x="113" y="394" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="46">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="46">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -209,19 +209,23 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="49" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="49" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="350" width="170" height="14"/>
|
<rect key="frame" x="113" y="350" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="50">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="50">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
<connections>
|
<connections>
|
||||||
<binding destination="-2" name="value" keyPath="valueToDisplay.sampleRate" id="116"/>
|
<binding destination="-2" name="value" keyPath="valueToDisplay.sampleRate" id="jhK-B4-LCu">
|
||||||
|
<dictionary key="options">
|
||||||
|
<string key="NSValueTransformerName">NumberHertzToStringTransformer</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="51" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="51" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="328" width="170" height="14"/>
|
<rect key="frame" x="113" y="328" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="52">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="52">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -233,7 +237,7 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="53" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="53" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="306" width="170" height="14"/>
|
<rect key="frame" x="113" y="306" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="54">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="54">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -245,7 +249,7 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="55" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="55" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="284" width="170" height="14"/>
|
<rect key="frame" x="113" y="284" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="56">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="56">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -266,7 +270,7 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ijS-y2-eCZ" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ijS-y2-eCZ" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="262" width="170" height="14"/>
|
<rect key="frame" x="113" y="262" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="Yby-OU-cqP">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="Yby-OU-cqP">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -287,7 +291,7 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="L4f-rE-CN3" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="L4f-rE-CN3" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="240" width="170" height="14"/>
|
<rect key="frame" x="113" y="240" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="v14-AG-B9D">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="v14-AG-B9D">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -308,7 +312,7 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="WOl-SC-4tu" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="WOl-SC-4tu" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="218" width="170" height="14"/>
|
<rect key="frame" x="113" y="218" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="UyE-Mc-e39">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="UyE-Mc-e39">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -329,7 +333,7 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2xx-It-i6I" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2xx-It-i6I" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="196" width="170" height="14"/>
|
<rect key="frame" x="113" y="196" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="rAo-AP-lVa">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="rAo-AP-lVa">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -351,7 +355,7 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="86" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="86" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="372" width="170" height="14"/>
|
<rect key="frame" x="113" y="372" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="87">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="87">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -360,20 +364,6 @@
|
||||||
<binding destination="-2" name="value" keyPath="valueToDisplay.filename" id="115"/>
|
<binding destination="-2" name="value" keyPath="valueToDisplay.filename" id="115"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<imageView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="95">
|
|
||||||
<rect key="frame" x="17" y="17" width="266" height="138"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
||||||
<imageCell key="cell" enabled="NO" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="96"/>
|
|
||||||
<connections>
|
|
||||||
<binding destination="-2" name="value" keyPath="valueToDisplay.albumArt" id="121">
|
|
||||||
<dictionary key="options">
|
|
||||||
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
|
||||||
<bool key="NSConditionallySetsEnabled" value="NO"/>
|
|
||||||
<string key="NSValueTransformerName">MissingAlbumArtTransformer</string>
|
|
||||||
</dictionary>
|
|
||||||
</binding>
|
|
||||||
</connections>
|
|
||||||
</imageView>
|
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="vB6-9J-5qg">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="vB6-9J-5qg">
|
||||||
<rect key="frame" x="18" y="548" width="87" height="14"/>
|
<rect key="frame" x="18" y="548" width="87" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
@ -386,7 +376,7 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="cj0-Tw-xpq" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="cj0-Tw-xpq" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="548" width="170" height="14"/>
|
<rect key="frame" x="113" y="548" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="B8w-o8-ZBw">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="B8w-o8-ZBw">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -407,7 +397,7 @@
|
||||||
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="WSs-wC-mWc" customClass="ToolTipTextField">
|
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="WSs-wC-mWc" customClass="ToolTipTextField">
|
||||||
<rect key="frame" x="113" y="174" width="170" height="14"/>
|
<rect key="frame" x="113" y="174" width="170" height="14"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" sendsActionOnEndEditing="YES" title="N/A" id="Ial-XI-91y">
|
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingMiddle" selectable="YES" sendsActionOnEndEditing="YES" title="N/A" id="Ial-XI-91y">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -417,6 +407,20 @@
|
||||||
<binding destination="-2" name="toolTip" keyPath="valueToDisplay.playCountInfo" id="ydF-ec-fBX"/>
|
<binding destination="-2" name="toolTip" keyPath="valueToDisplay.playCountInfo" id="ydF-ec-fBX"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
|
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="RWn-fb-0wT">
|
||||||
|
<rect key="frame" x="0.0" y="20" width="300" height="146"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES"/>
|
||||||
|
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="vwy-pi-T4L"/>
|
||||||
|
<connections>
|
||||||
|
<binding destination="-2" name="value" keyPath="valueToDisplay.albumArt" id="bmd-73-heg">
|
||||||
|
<dictionary key="options">
|
||||||
|
<bool key="NSAllowsEditingMultipleValuesSelection" value="NO"/>
|
||||||
|
<bool key="NSConditionallySetsEnabled" value="NO"/>
|
||||||
|
<string key="NSValueTransformerName">MissingAlbumArtTransformer</string>
|
||||||
|
</dictionary>
|
||||||
|
</binding>
|
||||||
|
</connections>
|
||||||
|
</imageView>
|
||||||
</subviews>
|
</subviews>
|
||||||
</view>
|
</view>
|
||||||
<point key="canvasLocation" x="136" y="131"/>
|
<point key="canvasLocation" x="136" y="131"/>
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -2,16 +2,15 @@
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
|
<key>com.apple.security.temporary-exception.mach-lookup.global-name</key>
|
||||||
|
<array>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)-spks</string>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)-spki</string>
|
||||||
|
</array>
|
||||||
<key>com.apple.security.app-sandbox</key>
|
<key>com.apple.security.app-sandbox</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>com.apple.security.assets.movies.read-only</key>
|
|
||||||
<true/>
|
|
||||||
<key>com.apple.security.assets.music.read-only</key>
|
|
||||||
<true/>
|
|
||||||
<key>com.apple.security.cs.allow-jit</key>
|
<key>com.apple.security.cs.allow-jit</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>com.apple.security.files.downloads.read-only</key>
|
|
||||||
<true/>
|
|
||||||
<key>com.apple.security.files.user-selected.read-write</key>
|
<key>com.apple.security.files.user-selected.read-write</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>com.apple.security.network.client</key>
|
<key>com.apple.security.network.client</key>
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
172A12330F5911D20078EF0C /* RepeatTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = 172A12320F5911D20078EF0C /* RepeatTransformers.m */; };
|
172A12330F5911D20078EF0C /* RepeatTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = 172A12320F5911D20078EF0C /* RepeatTransformers.m */; };
|
||||||
172A123C0F5912AE0078EF0C /* ShuffleTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = 172A123B0F5912AE0078EF0C /* ShuffleTransformers.m */; };
|
172A123C0F5912AE0078EF0C /* ShuffleTransformers.m in Sources */ = {isa = PBXBuildFile; fileRef = 172A123B0F5912AE0078EF0C /* ShuffleTransformers.m */; };
|
||||||
172A12A90F59AF8A0078EF0C /* NSString+CogSort.m in Sources */ = {isa = PBXBuildFile; fileRef = 172A12A80F59AF8A0078EF0C /* NSString+CogSort.m */; };
|
172A12A90F59AF8A0078EF0C /* NSString+CogSort.m in Sources */ = {isa = PBXBuildFile; fileRef = 172A12A80F59AF8A0078EF0C /* NSString+CogSort.m */; };
|
||||||
173855FF0E0CC81F00488CD4 /* FileTreeOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = 173855FE0E0CC81F00488CD4 /* FileTreeOutlineView.m */; };
|
|
||||||
1752C36C0F59E00100F85F28 /* PlaybackButtons.m in Sources */ = {isa = PBXBuildFile; fileRef = 1752C36B0F59E00100F85F28 /* PlaybackButtons.m */; };
|
1752C36C0F59E00100F85F28 /* PlaybackButtons.m in Sources */ = {isa = PBXBuildFile; fileRef = 1752C36B0F59E00100F85F28 /* PlaybackButtons.m */; };
|
||||||
1755E1F90BA0D2B600CA3560 /* PlaylistLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1755E1F70BA0D2B600CA3560 /* PlaylistLoader.m */; };
|
1755E1F90BA0D2B600CA3560 /* PlaylistLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1755E1F70BA0D2B600CA3560 /* PlaylistLoader.m */; };
|
||||||
1770429C0B8BC53600B86321 /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = 177042980B8BC53600B86321 /* AppController.m */; };
|
1770429C0B8BC53600B86321 /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = 177042980B8BC53600B86321 /* AppController.m */; };
|
||||||
|
@ -41,20 +40,8 @@
|
||||||
17818A990C0B27AC001C4916 /* shn.icns in Resources */ = {isa = PBXBuildFile; fileRef = 17818A920C0B27AC001C4916 /* shn.icns */; };
|
17818A990C0B27AC001C4916 /* shn.icns in Resources */ = {isa = PBXBuildFile; fileRef = 17818A920C0B27AC001C4916 /* shn.icns */; };
|
||||||
17818A9A0C0B27AC001C4916 /* wav.icns in Resources */ = {isa = PBXBuildFile; fileRef = 17818A930C0B27AC001C4916 /* wav.icns */; };
|
17818A9A0C0B27AC001C4916 /* wav.icns in Resources */ = {isa = PBXBuildFile; fileRef = 17818A930C0B27AC001C4916 /* wav.icns */; };
|
||||||
17818A9B0C0B27AC001C4916 /* wv.icns in Resources */ = {isa = PBXBuildFile; fileRef = 17818A940C0B27AC001C4916 /* wv.icns */; };
|
17818A9B0C0B27AC001C4916 /* wv.icns in Resources */ = {isa = PBXBuildFile; fileRef = 17818A940C0B27AC001C4916 /* wv.icns */; };
|
||||||
1784560F0F631E24007E8021 /* FileTreeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1784560E0F631E24007E8021 /* FileTreeViewController.m */; };
|
|
||||||
178456120F631E31007E8021 /* SideViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 178456110F631E31007E8021 /* SideViewController.m */; };
|
|
||||||
1791FF900CB43A2C0070BC5C /* MediaKeysApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 1791FF8E0CB43A2C0070BC5C /* MediaKeysApplication.m */; };
|
1791FF900CB43A2C0070BC5C /* MediaKeysApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 1791FF8E0CB43A2C0070BC5C /* MediaKeysApplication.m */; };
|
||||||
179790E10C087AB7001D6996 /* OpenURLPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = 179790DF0C087AB7001D6996 /* OpenURLPanel.m */; };
|
179790E10C087AB7001D6996 /* OpenURLPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = 179790DF0C087AB7001D6996 /* OpenURLPanel.m */; };
|
||||||
179D031E0E0CB2500064A77A /* ContainedNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 179D03090E0CB2500064A77A /* ContainedNode.m */; };
|
|
||||||
179D031F0E0CB2500064A77A /* ContainerNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 179D030B0E0CB2500064A77A /* ContainerNode.m */; };
|
|
||||||
179D03200E0CB2500064A77A /* DirectoryNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 179D030D0E0CB2500064A77A /* DirectoryNode.m */; };
|
|
||||||
179D03210E0CB2500064A77A /* FileIconCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 179D030F0E0CB2500064A77A /* FileIconCell.m */; };
|
|
||||||
179D03220E0CB2500064A77A /* FileNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 179D03110E0CB2500064A77A /* FileNode.m */; };
|
|
||||||
179D03230E0CB2500064A77A /* FileTreeDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 179D03130E0CB2500064A77A /* FileTreeDataSource.m */; };
|
|
||||||
179D03240E0CB2500064A77A /* FileTreeController.m in Sources */ = {isa = PBXBuildFile; fileRef = 179D03150E0CB2500064A77A /* FileTreeController.m */; };
|
|
||||||
179D03260E0CB2500064A77A /* PathNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 179D03190E0CB2500064A77A /* PathNode.m */; };
|
|
||||||
179D03270E0CB2500064A77A /* PathWatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 179D031B0E0CB2500064A77A /* PathWatcher.m */; };
|
|
||||||
179D03280E0CB2500064A77A /* SmartFolderNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 179D031D0E0CB2500064A77A /* SmartFolderNode.m */; };
|
|
||||||
17BB5CED0B8A86010009ACB1 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17BB5CEC0B8A86010009ACB1 /* AudioToolbox.framework */; };
|
17BB5CED0B8A86010009ACB1 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17BB5CEC0B8A86010009ACB1 /* AudioToolbox.framework */; };
|
||||||
17BB5CF90B8A86350009ACB1 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17BB5CF60B8A86350009ACB1 /* AudioUnit.framework */; };
|
17BB5CF90B8A86350009ACB1 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17BB5CF60B8A86350009ACB1 /* AudioUnit.framework */; };
|
||||||
17BB5CFA0B8A86350009ACB1 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17BB5CF70B8A86350009ACB1 /* CoreAudio.framework */; };
|
17BB5CFA0B8A86350009ACB1 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17BB5CF70B8A86350009ACB1 /* CoreAudio.framework */; };
|
||||||
|
@ -104,6 +91,8 @@
|
||||||
831B99BF27C23E88005A969B /* Cog.sdef in Resources */ = {isa = PBXBuildFile; fileRef = 831B99BE27C23E88005A969B /* Cog.sdef */; };
|
831B99BF27C23E88005A969B /* Cog.sdef in Resources */ = {isa = PBXBuildFile; fileRef = 831B99BE27C23E88005A969B /* Cog.sdef */; };
|
||||||
83229C9F283B0095004626A8 /* SpectrumWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 83229C9D283B0095004626A8 /* SpectrumWindowController.m */; };
|
83229C9F283B0095004626A8 /* SpectrumWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 83229C9D283B0095004626A8 /* SpectrumWindowController.m */; };
|
||||||
83229CA0283B0095004626A8 /* SpectrumWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 83229C9E283B0095004626A8 /* SpectrumWindow.xib */; };
|
83229CA0283B0095004626A8 /* SpectrumWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 83229C9E283B0095004626A8 /* SpectrumWindow.xib */; };
|
||||||
|
83256B68286661FC0036D9C0 /* libmpg123.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 83256B672866617F0036D9C0 /* libmpg123.0.dylib */; };
|
||||||
|
83256B69286661FC0036D9C0 /* libmpg123.0.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 83256B672866617F0036D9C0 /* libmpg123.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
832923AF279FAC400048201E /* Cog.q1.json in Resources */ = {isa = PBXBuildFile; fileRef = 832923AE279FAC400048201E /* Cog.q1.json */; };
|
832923AF279FAC400048201E /* Cog.q1.json in Resources */ = {isa = PBXBuildFile; fileRef = 832923AE279FAC400048201E /* Cog.q1.json */; };
|
||||||
83293070277886250010C07E /* OpenMPTOld.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8329306D277885790010C07E /* OpenMPTOld.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
83293070277886250010C07E /* OpenMPTOld.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8329306D277885790010C07E /* OpenMPTOld.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
832C1253180BD1E2005507C1 /* Cog.help in Resources */ = {isa = PBXBuildFile; fileRef = 832C1252180BD1E2005507C1 /* Cog.help */; };
|
832C1253180BD1E2005507C1 /* Cog.help in Resources */ = {isa = PBXBuildFile; fileRef = 832C1252180BD1E2005507C1 /* Cog.help */; };
|
||||||
|
@ -126,7 +115,6 @@
|
||||||
8355D6B8180613FB00D05687 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8355D6B7180613FB00D05687 /* Security.framework */; };
|
8355D6B8180613FB00D05687 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8355D6B7180613FB00D05687 /* Security.framework */; };
|
||||||
8359009D17FF06570060F3ED /* ArchiveSource.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8359FF3117FEF35D0060F3ED /* ArchiveSource.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
8359009D17FF06570060F3ED /* ArchiveSource.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8359FF3117FEF35D0060F3ED /* ArchiveSource.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
835A8FD327957310005B3C39 /* json.c in Sources */ = {isa = PBXBuildFile; fileRef = 835A8FC627957310005B3C39 /* json.c */; };
|
835A8FD327957310005B3C39 /* json.c in Sources */ = {isa = PBXBuildFile; fileRef = 835A8FC627957310005B3C39 /* json.c */; };
|
||||||
835EDD8A27A000E8001EDCCE /* gsx.wv in Resources */ = {isa = PBXBuildFile; fileRef = 835EDD8027A000E8001EDCCE /* gsx.wv */; };
|
|
||||||
835F00BB279BD1CD00055FCF /* SecondsFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 835F00B8279BD1CD00055FCF /* SecondsFormatter.m */; };
|
835F00BB279BD1CD00055FCF /* SecondsFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 835F00B8279BD1CD00055FCF /* SecondsFormatter.m */; };
|
||||||
835FAC7927BCDF2A00BA8562 /* AVIFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 835FAC7527BCDF2A00BA8562 /* AVIFDecoder.m */; };
|
835FAC7927BCDF2A00BA8562 /* AVIFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 835FAC7527BCDF2A00BA8562 /* AVIFDecoder.m */; };
|
||||||
835FAC7E27BCDF5B00BA8562 /* libaom.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 835FAC7C27BCDF5B00BA8562 /* libaom.a */; };
|
835FAC7E27BCDF5B00BA8562 /* libaom.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 835FAC7C27BCDF5B00BA8562 /* libaom.a */; };
|
||||||
|
@ -175,11 +163,15 @@
|
||||||
8384916C18083EAB00E7332D /* stopTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 8384915618083EAB00E7332D /* stopTemplate.pdf */; };
|
8384916C18083EAB00E7332D /* stopTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 8384915618083EAB00E7332D /* stopTemplate.pdf */; };
|
||||||
8384916D18083EAB00E7332D /* volume1Template.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 8384915718083EAB00E7332D /* volume1Template.pdf */; };
|
8384916D18083EAB00E7332D /* volume1Template.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 8384915718083EAB00E7332D /* volume1Template.pdf */; };
|
||||||
8384916E18083EAB00E7332D /* volume3Template.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 8384915818083EAB00E7332D /* volume3Template.pdf */; };
|
8384916E18083EAB00E7332D /* volume3Template.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 8384915818083EAB00E7332D /* volume3Template.pdf */; };
|
||||||
|
838F851E256B4E5E00C3E614 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 838F851D256B4E5E00C3E614 /* Sparkle.framework */; };
|
||||||
|
838F851F256B4E8B00C3E614 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 838F851D256B4E5E00C3E614 /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
|
83922FBA286B1AA900A0B039 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83922FB6286B1AA900A0B039 /* WebKit.framework */; };
|
||||||
83978E16285C58190076ED21 /* FirebaseCrashlytics in Frameworks */ = {isa = PBXBuildFile; productRef = 83978E15285C58190076ED21 /* FirebaseCrashlytics */; };
|
83978E16285C58190076ED21 /* FirebaseCrashlytics in Frameworks */ = {isa = PBXBuildFile; productRef = 83978E15285C58190076ED21 /* FirebaseCrashlytics */; };
|
||||||
83978E26285C596F0076ED21 /* FirebaseAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = 83978E25285C596F0076ED21 /* FirebaseAnalytics */; };
|
83978E26285C596F0076ED21 /* FirebaseAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = 83978E25285C596F0076ED21 /* FirebaseAnalytics */; };
|
||||||
83978E29285C5C0A0076ED21 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 83978E28285C5C0A0076ED21 /* GoogleService-Info.plist */; };
|
83978E29285C5C0A0076ED21 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 83978E28285C5C0A0076ED21 /* GoogleService-Info.plist */; };
|
||||||
83988F0E27BE0A5900A0E89A /* RedundantPlaylistDataStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 83988F0D27BE0A5900A0E89A /* RedundantPlaylistDataStore.m */; };
|
83988F0E27BE0A5900A0E89A /* RedundantPlaylistDataStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 83988F0D27BE0A5900A0E89A /* RedundantPlaylistDataStore.m */; };
|
||||||
8399D4E21805A55000B503B1 /* XmlContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8399D4E01805A55000B503B1 /* XmlContainer.m */; };
|
8399D4E21805A55000B503B1 /* XmlContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8399D4E01805A55000B503B1 /* XmlContainer.m */; };
|
||||||
|
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 */; };
|
||||||
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 */; };
|
||||||
|
@ -193,7 +185,6 @@
|
||||||
83BC5ABF20E4CE7A00631CD4 /* InfoInspector.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17D1B0D00F6320EA00694C57 /* InfoInspector.xib */; };
|
83BC5ABF20E4CE7A00631CD4 /* InfoInspector.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17D1B0D00F6320EA00694C57 /* InfoInspector.xib */; };
|
||||||
83BC5AC020E4CE7D00631CD4 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17342A980D5FD20B00E8D854 /* MainMenu.xib */; };
|
83BC5AC020E4CE7D00631CD4 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17342A980D5FD20B00E8D854 /* MainMenu.xib */; };
|
||||||
83BC5AC120E4CE8700631CD4 /* OpenURLPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17342ABD0D5FD36400E8D854 /* OpenURLPanel.xib */; };
|
83BC5AC120E4CE8700631CD4 /* OpenURLPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17342ABD0D5FD36400E8D854 /* OpenURLPanel.xib */; };
|
||||||
83BC5AC220E4CE8A00631CD4 /* FileTree.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17211A7C0D68B7C500911CA9 /* FileTree.xib */; };
|
|
||||||
83BC5AC320E4CE8D00631CD4 /* SpotlightPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 178456C00F6320B5007E8021 /* SpotlightPanel.xib */; };
|
83BC5AC320E4CE8D00631CD4 /* SpotlightPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 178456C00F6320B5007E8021 /* SpotlightPanel.xib */; };
|
||||||
83BC5AC420E4CE9000631CD4 /* Feedback.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17D1B1DA0F6330D400694C57 /* Feedback.xib */; };
|
83BC5AC420E4CE9000631CD4 /* Feedback.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17D1B1DA0F6330D400694C57 /* Feedback.xib */; };
|
||||||
83BCB8DE17FC971300760340 /* FFMPEG.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = B09E94350D747F7B0064F138 /* FFMPEG.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
83BCB8DE17FC971300760340 /* FFMPEG.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = B09E94350D747F7B0064F138 /* FFMPEG.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
|
@ -739,6 +730,7 @@
|
||||||
836EF0E027BB98A800BF35B2 /* libopus.0.dylib in CopyFiles */,
|
836EF0E027BB98A800BF35B2 /* libopus.0.dylib in CopyFiles */,
|
||||||
836EF0CB27BB91EE00BF35B2 /* libFLAC.8.dylib in CopyFiles */,
|
836EF0CB27BB91EE00BF35B2 /* libFLAC.8.dylib in CopyFiles */,
|
||||||
836EF0CA27BB91EB00BF35B2 /* libvorbis.0.dylib in CopyFiles */,
|
836EF0CA27BB91EB00BF35B2 /* libvorbis.0.dylib in CopyFiles */,
|
||||||
|
83256B69286661FC0036D9C0 /* libmpg123.0.dylib in CopyFiles */,
|
||||||
836EF0C927BB91E900BF35B2 /* libvorbisfile.3.dylib in CopyFiles */,
|
836EF0C927BB91E900BF35B2 /* libvorbisfile.3.dylib in CopyFiles */,
|
||||||
836EF0C827BB91E600BF35B2 /* libogg.0.dylib in CopyFiles */,
|
836EF0C827BB91E600BF35B2 /* libogg.0.dylib in CopyFiles */,
|
||||||
83AA7D07279EBCAF00087AA4 /* libswresample.4.dylib in CopyFiles */,
|
83AA7D07279EBCAF00087AA4 /* libswresample.4.dylib in CopyFiles */,
|
||||||
|
@ -748,6 +740,7 @@
|
||||||
83B72E3B279045B7006007A3 /* libfdk-aac.2.dylib in CopyFiles */,
|
83B72E3B279045B7006007A3 /* libfdk-aac.2.dylib in CopyFiles */,
|
||||||
8305963C277F013200EBFAAE /* File_Extractor.framework in CopyFiles */,
|
8305963C277F013200EBFAAE /* File_Extractor.framework in CopyFiles */,
|
||||||
ED69CBCA25BE32E80090B90D /* MASShortcut.framework in CopyFiles */,
|
ED69CBCA25BE32E80090B90D /* MASShortcut.framework in CopyFiles */,
|
||||||
|
838F851F256B4E8B00C3E614 /* Sparkle.framework in CopyFiles */,
|
||||||
17F561400C3BD4F30019975C /* CogAudio.framework in CopyFiles */,
|
17F561400C3BD4F30019975C /* CogAudio.framework in CopyFiles */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
@ -782,8 +775,6 @@
|
||||||
172A123B0F5912AE0078EF0C /* ShuffleTransformers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ShuffleTransformers.m; path = Window/ShuffleTransformers.m; sourceTree = "<group>"; };
|
172A123B0F5912AE0078EF0C /* ShuffleTransformers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ShuffleTransformers.m; path = Window/ShuffleTransformers.m; sourceTree = "<group>"; };
|
||||||
172A12A70F59AF8A0078EF0C /* NSString+CogSort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+CogSort.h"; sourceTree = "<group>"; };
|
172A12A70F59AF8A0078EF0C /* NSString+CogSort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+CogSort.h"; sourceTree = "<group>"; };
|
||||||
172A12A80F59AF8A0078EF0C /* NSString+CogSort.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+CogSort.m"; sourceTree = "<group>"; };
|
172A12A80F59AF8A0078EF0C /* NSString+CogSort.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+CogSort.m"; sourceTree = "<group>"; };
|
||||||
173855FD0E0CC81F00488CD4 /* FileTreeOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileTreeOutlineView.h; path = FileTree/FileTreeOutlineView.h; sourceTree = "<group>"; };
|
|
||||||
173855FE0E0CC81F00488CD4 /* FileTreeOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FileTreeOutlineView.m; path = FileTree/FileTreeOutlineView.m; sourceTree = "<group>"; };
|
|
||||||
1752C36A0F59E00100F85F28 /* PlaybackButtons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlaybackButtons.h; path = Window/PlaybackButtons.h; sourceTree = "<group>"; };
|
1752C36A0F59E00100F85F28 /* PlaybackButtons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlaybackButtons.h; path = Window/PlaybackButtons.h; sourceTree = "<group>"; };
|
||||||
1752C36B0F59E00100F85F28 /* PlaybackButtons.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PlaybackButtons.m; path = Window/PlaybackButtons.m; sourceTree = "<group>"; };
|
1752C36B0F59E00100F85F28 /* PlaybackButtons.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PlaybackButtons.m; path = Window/PlaybackButtons.m; sourceTree = "<group>"; };
|
||||||
1755E1F60BA0D2B600CA3560 /* PlaylistLoader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PlaylistLoader.h; sourceTree = "<group>"; };
|
1755E1F60BA0D2B600CA3560 /* PlaylistLoader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PlaylistLoader.h; sourceTree = "<group>"; };
|
||||||
|
@ -809,34 +800,10 @@
|
||||||
17818A920C0B27AC001C4916 /* shn.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = shn.icns; sourceTree = "<group>"; };
|
17818A920C0B27AC001C4916 /* shn.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = shn.icns; sourceTree = "<group>"; };
|
||||||
17818A930C0B27AC001C4916 /* wav.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = wav.icns; sourceTree = "<group>"; };
|
17818A930C0B27AC001C4916 /* wav.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = wav.icns; sourceTree = "<group>"; };
|
||||||
17818A940C0B27AC001C4916 /* wv.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = wv.icns; sourceTree = "<group>"; };
|
17818A940C0B27AC001C4916 /* wv.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = wv.icns; sourceTree = "<group>"; };
|
||||||
1784560D0F631E24007E8021 /* FileTreeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileTreeViewController.h; path = FileTree/FileTreeViewController.h; sourceTree = "<group>"; };
|
|
||||||
1784560E0F631E24007E8021 /* FileTreeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FileTreeViewController.m; path = FileTree/FileTreeViewController.m; sourceTree = "<group>"; };
|
|
||||||
178456100F631E31007E8021 /* SideViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SideViewController.h; sourceTree = "<group>"; };
|
|
||||||
178456110F631E31007E8021 /* SideViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SideViewController.m; sourceTree = "<group>"; };
|
|
||||||
1791FF8D0CB43A2C0070BC5C /* MediaKeysApplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaKeysApplication.h; sourceTree = "<group>"; };
|
1791FF8D0CB43A2C0070BC5C /* MediaKeysApplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaKeysApplication.h; sourceTree = "<group>"; };
|
||||||
1791FF8E0CB43A2C0070BC5C /* MediaKeysApplication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MediaKeysApplication.m; sourceTree = "<group>"; };
|
1791FF8E0CB43A2C0070BC5C /* MediaKeysApplication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MediaKeysApplication.m; sourceTree = "<group>"; };
|
||||||
179790DE0C087AB7001D6996 /* OpenURLPanel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = OpenURLPanel.h; sourceTree = "<group>"; };
|
179790DE0C087AB7001D6996 /* OpenURLPanel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = OpenURLPanel.h; sourceTree = "<group>"; };
|
||||||
179790DF0C087AB7001D6996 /* OpenURLPanel.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = OpenURLPanel.m; sourceTree = "<group>"; };
|
179790DF0C087AB7001D6996 /* OpenURLPanel.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = OpenURLPanel.m; sourceTree = "<group>"; };
|
||||||
179D03080E0CB2500064A77A /* ContainedNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ContainedNode.h; path = FileTree/ContainedNode.h; sourceTree = "<group>"; };
|
|
||||||
179D03090E0CB2500064A77A /* ContainedNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ContainedNode.m; path = FileTree/ContainedNode.m; sourceTree = "<group>"; };
|
|
||||||
179D030A0E0CB2500064A77A /* ContainerNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ContainerNode.h; path = FileTree/ContainerNode.h; sourceTree = "<group>"; };
|
|
||||||
179D030B0E0CB2500064A77A /* ContainerNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ContainerNode.m; path = FileTree/ContainerNode.m; sourceTree = "<group>"; };
|
|
||||||
179D030C0E0CB2500064A77A /* DirectoryNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryNode.h; path = FileTree/DirectoryNode.h; sourceTree = "<group>"; };
|
|
||||||
179D030D0E0CB2500064A77A /* DirectoryNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectoryNode.m; path = FileTree/DirectoryNode.m; sourceTree = "<group>"; };
|
|
||||||
179D030E0E0CB2500064A77A /* FileIconCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileIconCell.h; path = FileTree/FileIconCell.h; sourceTree = "<group>"; };
|
|
||||||
179D030F0E0CB2500064A77A /* FileIconCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FileIconCell.m; path = FileTree/FileIconCell.m; sourceTree = "<group>"; };
|
|
||||||
179D03100E0CB2500064A77A /* FileNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileNode.h; path = FileTree/FileNode.h; sourceTree = "<group>"; };
|
|
||||||
179D03110E0CB2500064A77A /* FileNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FileNode.m; path = FileTree/FileNode.m; sourceTree = "<group>"; };
|
|
||||||
179D03120E0CB2500064A77A /* FileTreeDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileTreeDataSource.h; path = FileTree/FileTreeDataSource.h; sourceTree = "<group>"; };
|
|
||||||
179D03130E0CB2500064A77A /* FileTreeDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FileTreeDataSource.m; path = FileTree/FileTreeDataSource.m; sourceTree = "<group>"; };
|
|
||||||
179D03140E0CB2500064A77A /* FileTreeController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileTreeController.h; path = FileTree/FileTreeController.h; sourceTree = "<group>"; };
|
|
||||||
179D03150E0CB2500064A77A /* FileTreeController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FileTreeController.m; path = FileTree/FileTreeController.m; sourceTree = "<group>"; };
|
|
||||||
179D03180E0CB2500064A77A /* PathNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PathNode.h; path = FileTree/PathNode.h; sourceTree = "<group>"; };
|
|
||||||
179D03190E0CB2500064A77A /* PathNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PathNode.m; path = FileTree/PathNode.m; sourceTree = "<group>"; };
|
|
||||||
179D031A0E0CB2500064A77A /* PathWatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PathWatcher.h; path = FileTree/PathWatcher.h; sourceTree = "<group>"; };
|
|
||||||
179D031B0E0CB2500064A77A /* PathWatcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PathWatcher.m; path = FileTree/PathWatcher.m; sourceTree = "<group>"; };
|
|
||||||
179D031C0E0CB2500064A77A /* SmartFolderNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SmartFolderNode.h; path = FileTree/SmartFolderNode.h; sourceTree = "<group>"; };
|
|
||||||
179D031D0E0CB2500064A77A /* SmartFolderNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SmartFolderNode.m; path = FileTree/SmartFolderNode.m; sourceTree = "<group>"; };
|
|
||||||
17BB5CEC0B8A86010009ACB1 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = "<absolute>"; };
|
17BB5CEC0B8A86010009ACB1 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = "<absolute>"; };
|
||||||
17BB5CF60B8A86350009ACB1 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; };
|
17BB5CF60B8A86350009ACB1 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; };
|
||||||
17BB5CF70B8A86350009ACB1 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
|
17BB5CF70B8A86350009ACB1 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
|
||||||
|
@ -891,7 +858,6 @@
|
||||||
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
|
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
|
||||||
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
|
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
|
||||||
32CA4F630368D1EE00C91783 /* Cog_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cog_Prefix.pch; sourceTree = "<group>"; };
|
32CA4F630368D1EE00C91783 /* Cog_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cog_Prefix.pch; sourceTree = "<group>"; };
|
||||||
3DDFC2462344EC6B000F1453 /* DEVELOPMENT_TEAM.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = DEVELOPMENT_TEAM.xcconfig; sourceTree = "<group>"; };
|
|
||||||
3DDFC2472344EC6B000F1453 /* Shared.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
3DDFC2472344EC6B000F1453 /* Shared.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
5604D4590D60349B004F5C5D /* SpotlightWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpotlightWindowController.m; path = Spotlight/SpotlightWindowController.m; sourceTree = "<group>"; };
|
5604D4590D60349B004F5C5D /* SpotlightWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpotlightWindowController.m; path = Spotlight/SpotlightWindowController.m; sourceTree = "<group>"; };
|
||||||
5604D45A0D60349B004F5C5D /* SpotlightWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpotlightWindowController.h; path = Spotlight/SpotlightWindowController.h; sourceTree = "<group>"; };
|
5604D45A0D60349B004F5C5D /* SpotlightWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpotlightWindowController.h; path = Spotlight/SpotlightWindowController.h; sourceTree = "<group>"; };
|
||||||
|
@ -923,6 +889,7 @@
|
||||||
83229C9C283B0095004626A8 /* SpectrumWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SpectrumWindowController.h; sourceTree = "<group>"; };
|
83229C9C283B0095004626A8 /* SpectrumWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SpectrumWindowController.h; sourceTree = "<group>"; };
|
||||||
83229C9D283B0095004626A8 /* SpectrumWindowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SpectrumWindowController.m; sourceTree = "<group>"; };
|
83229C9D283B0095004626A8 /* SpectrumWindowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SpectrumWindowController.m; sourceTree = "<group>"; };
|
||||||
83229C9E283B0095004626A8 /* SpectrumWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SpectrumWindow.xib; sourceTree = "<group>"; };
|
83229C9E283B0095004626A8 /* SpectrumWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SpectrumWindow.xib; sourceTree = "<group>"; };
|
||||||
|
83256B672866617F0036D9C0 /* libmpg123.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libmpg123.0.dylib; path = ThirdParty/mpg123/lib/libmpg123.0.dylib; sourceTree = "<group>"; };
|
||||||
832923AE279FAC400048201E /* Cog.q1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Cog.q1.json; sourceTree = "<group>"; };
|
832923AE279FAC400048201E /* Cog.q1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Cog.q1.json; sourceTree = "<group>"; };
|
||||||
83293065277885790010C07E /* OpenMPTOld.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OpenMPTOld.xcodeproj; path = Plugins/OpenMPT.old/OpenMPTOld.xcodeproj; sourceTree = "<group>"; };
|
83293065277885790010C07E /* OpenMPTOld.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OpenMPTOld.xcodeproj; path = Plugins/OpenMPT.old/OpenMPTOld.xcodeproj; sourceTree = "<group>"; };
|
||||||
832C1252180BD1E2005507C1 /* Cog.help */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Cog.help; sourceTree = "<group>"; };
|
832C1252180BD1E2005507C1 /* Cog.help */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Cog.help; sourceTree = "<group>"; };
|
||||||
|
@ -949,7 +916,6 @@
|
||||||
835C888B22CC1881001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = en; path = en.lproj/Credits.html; sourceTree = "<group>"; };
|
835C888B22CC1881001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = en; path = en.lproj/Credits.html; sourceTree = "<group>"; };
|
||||||
835C888C22CC1882001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
835C888C22CC1882001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
835C888D22CC1882001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
835C888D22CC1882001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
835EDD8027A000E8001EDCCE /* gsx.wv */ = {isa = PBXFileReference; lastKnownFileType = file; path = gsx.wv; sourceTree = "<group>"; };
|
|
||||||
835F00B4279BD1CD00055FCF /* SecondsFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecondsFormatter.h; sourceTree = "<group>"; };
|
835F00B4279BD1CD00055FCF /* SecondsFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecondsFormatter.h; sourceTree = "<group>"; };
|
||||||
835F00B8279BD1CD00055FCF /* SecondsFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SecondsFormatter.m; sourceTree = "<group>"; };
|
835F00B8279BD1CD00055FCF /* SecondsFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SecondsFormatter.m; sourceTree = "<group>"; };
|
||||||
835FAC6727BCDF2A00BA8562 /* aomdx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aomdx.h; sourceTree = "<group>"; };
|
835FAC6727BCDF2A00BA8562 /* aomdx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aomdx.h; sourceTree = "<group>"; };
|
||||||
|
@ -1021,13 +987,17 @@
|
||||||
8384915818083EAB00E7332D /* volume3Template.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = volume3Template.pdf; path = Images/volume3Template.pdf; sourceTree = "<group>"; };
|
8384915818083EAB00E7332D /* volume3Template.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = volume3Template.pdf; path = Images/volume3Template.pdf; sourceTree = "<group>"; };
|
||||||
83859520234FEB35004E9946 /* Cog.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Cog.entitlements; sourceTree = "<group>"; };
|
83859520234FEB35004E9946 /* Cog.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Cog.entitlements; sourceTree = "<group>"; };
|
||||||
838F84FF25687C5C00C3E614 /* Cog-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Cog-Bridging-Header.h"; sourceTree = "<group>"; };
|
838F84FF25687C5C00C3E614 /* Cog-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Cog-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||||
|
838F851D256B4E5E00C3E614 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = ThirdParty/Frameworks/Sparkle.framework; sourceTree = "<group>"; };
|
||||||
|
83922FB6286B1AA900A0B039 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
|
||||||
83978E28285C5C0A0076ED21 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
|
83978E28285C5C0A0076ED21 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
|
||||||
83988F0C27BE0A5900A0E89A /* RedundantPlaylistDataStore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RedundantPlaylistDataStore.h; sourceTree = "<group>"; };
|
83988F0C27BE0A5900A0E89A /* RedundantPlaylistDataStore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RedundantPlaylistDataStore.h; sourceTree = "<group>"; };
|
||||||
83988F0D27BE0A5900A0E89A /* RedundantPlaylistDataStore.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RedundantPlaylistDataStore.m; sourceTree = "<group>"; };
|
83988F0D27BE0A5900A0E89A /* RedundantPlaylistDataStore.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RedundantPlaylistDataStore.m; sourceTree = "<group>"; };
|
||||||
8399D4E01805A55000B503B1 /* XmlContainer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XmlContainer.m; sourceTree = "<group>"; };
|
8399D4E01805A55000B503B1 /* XmlContainer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XmlContainer.m; sourceTree = "<group>"; };
|
||||||
8399D4E11805A55000B503B1 /* XmlContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XmlContainer.h; sourceTree = "<group>"; };
|
8399D4E11805A55000B503B1 /* XmlContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XmlContainer.h; sourceTree = "<group>"; };
|
||||||
|
839B837E286D7F8D00F529EE /* NumberHertzToStringTransformer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = NumberHertzToStringTransformer.swift; path = Transformers/NumberHertzToStringTransformer.swift; sourceTree = "<group>"; };
|
||||||
839DA7CB274A2D4C001B18E5 /* NSDictionary+Merge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+Merge.h"; sourceTree = "<group>"; };
|
839DA7CB274A2D4C001B18E5 /* NSDictionary+Merge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+Merge.h"; sourceTree = "<group>"; };
|
||||||
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>"; };
|
||||||
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.59.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libavcodec.59.dylib; path = ThirdParty/ffmpeg/lib/libavcodec.59.dylib; sourceTree = "<group>"; };
|
83AA7D00279EBC8200087AA4 /* libavcodec.59.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libavcodec.59.dylib; path = ThirdParty/ffmpeg/lib/libavcodec.59.dylib; sourceTree = "<group>"; };
|
||||||
|
@ -1042,7 +1012,6 @@
|
||||||
83BC5AB420E4C91100631CD4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/InfoInspector.xib; sourceTree = "<group>"; };
|
83BC5AB420E4C91100631CD4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/InfoInspector.xib; sourceTree = "<group>"; };
|
||||||
83BC5AB520E4C91200631CD4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
83BC5AB520E4C91200631CD4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||||
83BC5AB620E4C91300631CD4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/OpenURLPanel.xib; sourceTree = "<group>"; };
|
83BC5AB620E4C91300631CD4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/OpenURLPanel.xib; sourceTree = "<group>"; };
|
||||||
83BC5AB720E4C91400631CD4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/FileTree.xib; sourceTree = "<group>"; };
|
|
||||||
83BC5AB820E4C91400631CD4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/SpotlightPanel.xib; sourceTree = "<group>"; };
|
83BC5AB820E4C91400631CD4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/SpotlightPanel.xib; sourceTree = "<group>"; };
|
||||||
83BC5AB920E4C91500631CD4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/Feedback.xib; sourceTree = "<group>"; };
|
83BC5AB920E4C91500631CD4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/Feedback.xib; sourceTree = "<group>"; };
|
||||||
83BC5AC620E4D04600631CD4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MainMenu.strings; sourceTree = "<group>"; };
|
83BC5AC620E4D04600631CD4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MainMenu.strings; sourceTree = "<group>"; };
|
||||||
|
@ -1051,8 +1020,6 @@
|
||||||
83BC5ACC20E4D07700631CD4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoInspector.strings; sourceTree = "<group>"; };
|
83BC5ACC20E4D07700631CD4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoInspector.strings; sourceTree = "<group>"; };
|
||||||
83BC5ACE20E4D09700631CD4 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/OpenURLPanel.strings; sourceTree = "<group>"; };
|
83BC5ACE20E4D09700631CD4 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/OpenURLPanel.strings; sourceTree = "<group>"; };
|
||||||
83BC5AD020E4D09800631CD4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/OpenURLPanel.strings; sourceTree = "<group>"; };
|
83BC5AD020E4D09800631CD4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/OpenURLPanel.strings; sourceTree = "<group>"; };
|
||||||
83BC5AD220E4D0B400631CD4 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/FileTree.strings; sourceTree = "<group>"; };
|
|
||||||
83BC5AD420E4D0B600631CD4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/FileTree.strings; sourceTree = "<group>"; };
|
|
||||||
83BC5AD620E4D0D800631CD4 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/SpotlightPanel.strings; sourceTree = "<group>"; };
|
83BC5AD620E4D0D800631CD4 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/SpotlightPanel.strings; sourceTree = "<group>"; };
|
||||||
83BC5AD820E4D0D900631CD4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/SpotlightPanel.strings; sourceTree = "<group>"; };
|
83BC5AD820E4D0D900631CD4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/SpotlightPanel.strings; sourceTree = "<group>"; };
|
||||||
83BC5ADA20E4D0E900631CD4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Feedback.strings; sourceTree = "<group>"; };
|
83BC5ADA20E4D0E900631CD4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Feedback.strings; sourceTree = "<group>"; };
|
||||||
|
@ -1098,13 +1065,16 @@
|
||||||
ED69CBC725BE32C00090B90D /* MASShortcut.framework in Frameworks */,
|
ED69CBC725BE32C00090B90D /* MASShortcut.framework in Frameworks */,
|
||||||
8355D6B8180613FB00D05687 /* Security.framework in Frameworks */,
|
8355D6B8180613FB00D05687 /* Security.framework in Frameworks */,
|
||||||
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
|
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
|
||||||
|
83256B68286661FC0036D9C0 /* libmpg123.0.dylib in Frameworks */,
|
||||||
17BB5CED0B8A86010009ACB1 /* AudioToolbox.framework in Frameworks */,
|
17BB5CED0B8A86010009ACB1 /* AudioToolbox.framework in Frameworks */,
|
||||||
835FAC7F27BCDF5B00BA8562 /* libavif.a in Frameworks */,
|
835FAC7F27BCDF5B00BA8562 /* libavif.a in Frameworks */,
|
||||||
|
83922FBA286B1AA900A0B039 /* WebKit.framework in Frameworks */,
|
||||||
835FAC7E27BCDF5B00BA8562 /* libaom.a in Frameworks */,
|
835FAC7E27BCDF5B00BA8562 /* libaom.a in Frameworks */,
|
||||||
837DC92B285B05710005C58A /* CoreData.framework in Frameworks */,
|
837DC92B285B05710005C58A /* CoreData.framework in Frameworks */,
|
||||||
83978E26285C596F0076ED21 /* FirebaseAnalytics in Frameworks */,
|
83978E26285C596F0076ED21 /* FirebaseAnalytics in Frameworks */,
|
||||||
17BB5CF90B8A86350009ACB1 /* AudioUnit.framework in Frameworks */,
|
17BB5CF90B8A86350009ACB1 /* AudioUnit.framework in Frameworks */,
|
||||||
17BB5CFA0B8A86350009ACB1 /* CoreAudio.framework in Frameworks */,
|
17BB5CFA0B8A86350009ACB1 /* CoreAudio.framework in Frameworks */,
|
||||||
|
838F851E256B4E5E00C3E614 /* Sparkle.framework in Frameworks */,
|
||||||
17BB5CFB0B8A86350009ACB1 /* CoreAudioKit.framework in Frameworks */,
|
17BB5CFB0B8A86350009ACB1 /* CoreAudioKit.framework in Frameworks */,
|
||||||
83978E16285C58190076ED21 /* FirebaseCrashlytics in Frameworks */,
|
83978E16285C58190076ED21 /* FirebaseCrashlytics in Frameworks */,
|
||||||
17BB5EA60B8A87850009ACB1 /* IOKit.framework in Frameworks */,
|
17BB5EA60B8A87850009ACB1 /* IOKit.framework in Frameworks */,
|
||||||
|
@ -1132,7 +1102,6 @@
|
||||||
8377C66027B8CF2300E8BC0F /* Visualization */,
|
8377C66027B8CF2300E8BC0F /* Visualization */,
|
||||||
8E75752A09F31D5A0080F1EE /* Playlist */,
|
8E75752A09F31D5A0080F1EE /* Playlist */,
|
||||||
8E07AAEA0AAC90DC00A4B32F /* Preferences */,
|
8E07AAEA0AAC90DC00A4B32F /* Preferences */,
|
||||||
17DDF6400E0CB6F100A2E4AD /* FileTree */,
|
|
||||||
830C37A227B95E6000E02BB0 /* Equalizer */,
|
830C37A227B95E6000E02BB0 /* Equalizer */,
|
||||||
17D1B0FE0F63252900694C57 /* InfoInspector */,
|
17D1B0FE0F63252900694C57 /* InfoInspector */,
|
||||||
569C52C50D5F2BD500BDBDC9 /* Spotlight */,
|
569C52C50D5F2BD500BDBDC9 /* Spotlight */,
|
||||||
|
@ -1148,6 +1117,7 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
ED69CBB825BE328C0090B90D /* MASShortcut.xcodeproj */,
|
ED69CBB825BE328C0090B90D /* MASShortcut.xcodeproj */,
|
||||||
|
838F851D256B4E5E00C3E614 /* Sparkle.framework */,
|
||||||
17F5612A0C3BD4DC0019975C /* CogAudio.xcodeproj */,
|
17F5612A0C3BD4DC0019975C /* CogAudio.xcodeproj */,
|
||||||
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
|
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
|
||||||
);
|
);
|
||||||
|
@ -1157,6 +1127,7 @@
|
||||||
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
|
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83256B672866617F0036D9C0 /* libmpg123.0.dylib */,
|
||||||
835FAC7C27BCDF5B00BA8562 /* libaom.a */,
|
835FAC7C27BCDF5B00BA8562 /* libaom.a */,
|
||||||
835FAC7D27BCDF5B00BA8562 /* libavif.a */,
|
835FAC7D27BCDF5B00BA8562 /* libavif.a */,
|
||||||
836EF0CD27BB94F100BF35B2 /* libopusfile.0.dylib */,
|
836EF0CD27BB94F100BF35B2 /* libopusfile.0.dylib */,
|
||||||
|
@ -1243,8 +1214,6 @@
|
||||||
83988F0D27BE0A5900A0E89A /* RedundantPlaylistDataStore.m */,
|
83988F0D27BE0A5900A0E89A /* RedundantPlaylistDataStore.m */,
|
||||||
8381A09027C5F72F00A1C530 /* SHA256Digest.h */,
|
8381A09027C5F72F00A1C530 /* SHA256Digest.h */,
|
||||||
8381A09127C5F72F00A1C530 /* SHA256Digest.m */,
|
8381A09127C5F72F00A1C530 /* SHA256Digest.m */,
|
||||||
178456100F631E31007E8021 /* SideViewController.h */,
|
|
||||||
178456110F631E31007E8021 /* SideViewController.m */,
|
|
||||||
8370D739277419D200245CE0 /* SQLiteStore.h */,
|
8370D739277419D200245CE0 /* SQLiteStore.h */,
|
||||||
8370D73C277419F700245CE0 /* SQLiteStore.m */,
|
8370D73C277419F700245CE0 /* SQLiteStore.m */,
|
||||||
17FAEBAA0F662985007C8707 /* ToolTipTextField.h */,
|
17FAEBAA0F662985007C8707 /* ToolTipTextField.h */,
|
||||||
|
@ -1394,37 +1363,6 @@
|
||||||
name = InfoInspector;
|
name = InfoInspector;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
17DDF6400E0CB6F100A2E4AD /* FileTree */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
1784560D0F631E24007E8021 /* FileTreeViewController.h */,
|
|
||||||
1784560E0F631E24007E8021 /* FileTreeViewController.m */,
|
|
||||||
179D03140E0CB2500064A77A /* FileTreeController.h */,
|
|
||||||
179D03150E0CB2500064A77A /* FileTreeController.m */,
|
|
||||||
173855FD0E0CC81F00488CD4 /* FileTreeOutlineView.h */,
|
|
||||||
173855FE0E0CC81F00488CD4 /* FileTreeOutlineView.m */,
|
|
||||||
179D03120E0CB2500064A77A /* FileTreeDataSource.h */,
|
|
||||||
179D03130E0CB2500064A77A /* FileTreeDataSource.m */,
|
|
||||||
179D03080E0CB2500064A77A /* ContainedNode.h */,
|
|
||||||
179D03090E0CB2500064A77A /* ContainedNode.m */,
|
|
||||||
179D030A0E0CB2500064A77A /* ContainerNode.h */,
|
|
||||||
179D030B0E0CB2500064A77A /* ContainerNode.m */,
|
|
||||||
179D030C0E0CB2500064A77A /* DirectoryNode.h */,
|
|
||||||
179D030D0E0CB2500064A77A /* DirectoryNode.m */,
|
|
||||||
179D030E0E0CB2500064A77A /* FileIconCell.h */,
|
|
||||||
179D030F0E0CB2500064A77A /* FileIconCell.m */,
|
|
||||||
179D03100E0CB2500064A77A /* FileNode.h */,
|
|
||||||
179D03110E0CB2500064A77A /* FileNode.m */,
|
|
||||||
179D03180E0CB2500064A77A /* PathNode.h */,
|
|
||||||
179D03190E0CB2500064A77A /* PathNode.m */,
|
|
||||||
179D031A0E0CB2500064A77A /* PathWatcher.h */,
|
|
||||||
179D031B0E0CB2500064A77A /* PathWatcher.m */,
|
|
||||||
179D031C0E0CB2500064A77A /* SmartFolderNode.h */,
|
|
||||||
179D031D0E0CB2500064A77A /* SmartFolderNode.m */,
|
|
||||||
);
|
|
||||||
name = FileTree;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
17E0D5D20F520E75005B6FED /* Window */ = {
|
17E0D5D20F520E75005B6FED /* Window */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -1470,6 +1408,7 @@
|
||||||
838F84FF25687C5C00C3E614 /* Cog-Bridging-Header.h */,
|
838F84FF25687C5C00C3E614 /* Cog-Bridging-Header.h */,
|
||||||
834B05E82859C006000B7DC0 /* TotalTimeTransformer.h */,
|
834B05E82859C006000B7DC0 /* TotalTimeTransformer.h */,
|
||||||
834B05E92859C006000B7DC0 /* TotalTimeTransformer.m */,
|
834B05E92859C006000B7DC0 /* TotalTimeTransformer.m */,
|
||||||
|
839B837E286D7F8D00F529EE /* NumberHertzToStringTransformer.swift */,
|
||||||
);
|
);
|
||||||
name = Transformers;
|
name = Transformers;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -1546,12 +1485,10 @@
|
||||||
8E7575D909F31E930080F1EE /* Localizable.strings */,
|
8E7575D909F31E930080F1EE /* Localizable.strings */,
|
||||||
832923AE279FAC400048201E /* Cog.q1.json */,
|
832923AE279FAC400048201E /* Cog.q1.json */,
|
||||||
831B99BE27C23E88005A969B /* Cog.sdef */,
|
831B99BE27C23E88005A969B /* Cog.sdef */,
|
||||||
835EDD8027A000E8001EDCCE /* gsx.wv */,
|
|
||||||
830C379F27B95E3000E02BB0 /* Equalizer.xib */,
|
830C379F27B95E3000E02BB0 /* Equalizer.xib */,
|
||||||
17D1B0D00F6320EA00694C57 /* InfoInspector.xib */,
|
17D1B0D00F6320EA00694C57 /* InfoInspector.xib */,
|
||||||
17342A980D5FD20B00E8D854 /* MainMenu.xib */,
|
17342A980D5FD20B00E8D854 /* MainMenu.xib */,
|
||||||
17342ABD0D5FD36400E8D854 /* OpenURLPanel.xib */,
|
17342ABD0D5FD36400E8D854 /* OpenURLPanel.xib */,
|
||||||
17211A7C0D68B7C500911CA9 /* FileTree.xib */,
|
|
||||||
178456C00F6320B5007E8021 /* SpotlightPanel.xib */,
|
178456C00F6320B5007E8021 /* SpotlightPanel.xib */,
|
||||||
17E41E060C130DFF00AC744D /* Credits.html */,
|
17E41E060C130DFF00AC744D /* Credits.html */,
|
||||||
17D1B1DA0F6330D400694C57 /* Feedback.xib */,
|
17D1B1DA0F6330D400694C57 /* Feedback.xib */,
|
||||||
|
@ -1562,6 +1499,7 @@
|
||||||
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
|
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83922FB6286B1AA900A0B039 /* WebKit.framework */,
|
||||||
837DC92A285B05710005C58A /* CoreData.framework */,
|
837DC92A285B05710005C58A /* CoreData.framework */,
|
||||||
8370D73E2775AE1300245CE0 /* libsqlite3.tbd */,
|
8370D73E2775AE1300245CE0 /* libsqlite3.tbd */,
|
||||||
83AB9031237CEFD300A433D5 /* MediaPlayer.framework */,
|
83AB9031237CEFD300A433D5 /* MediaPlayer.framework */,
|
||||||
|
@ -1575,7 +1513,6 @@
|
||||||
3DDFC2452344EC6A000F1453 /* Xcode-config */ = {
|
3DDFC2452344EC6A000F1453 /* Xcode-config */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
3DDFC2462344EC6B000F1453 /* DEVELOPMENT_TEAM.xcconfig */,
|
|
||||||
3DDFC2472344EC6B000F1453 /* Shared.xcconfig */,
|
3DDFC2472344EC6B000F1453 /* Shared.xcconfig */,
|
||||||
);
|
);
|
||||||
path = "Xcode-config";
|
path = "Xcode-config";
|
||||||
|
@ -1888,6 +1825,7 @@
|
||||||
8E07AAEA0AAC90DC00A4B32F /* Preferences */ = {
|
8E07AAEA0AAC90DC00A4B32F /* Preferences */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
839E3B53286595D700880EA2 /* GeneralPane.h */,
|
||||||
ED69CF0925BE74BB0090B90D /* Shortcuts.h */,
|
ED69CF0925BE74BB0090B90D /* Shortcuts.h */,
|
||||||
17D1B2610F633D2C00694C57 /* PreferencePanePlugin.h */,
|
17D1B2610F633D2C00694C57 /* PreferencePanePlugin.h */,
|
||||||
17D1B25B0F633A4F00694C57 /* PreferencePluginController.h */,
|
17D1B25B0F633A4F00694C57 /* PreferencePluginController.h */,
|
||||||
|
@ -2000,13 +1938,13 @@
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Cog" */;
|
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Cog" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
|
8384911C1807E9ED00E7332D /* Run version generator script */,
|
||||||
8D11072C0486CEB800E47090 /* Sources */,
|
8D11072C0486CEB800E47090 /* Sources */,
|
||||||
8D11072E0486CEB800E47090 /* Frameworks */,
|
8D11072E0486CEB800E47090 /* Frameworks */,
|
||||||
8D1107290486CEB800E47090 /* Resources */,
|
8D1107290486CEB800E47090 /* Resources */,
|
||||||
8E757AEC09F3265E0080F1EE /* CopyFiles */,
|
8E757AEC09F3265E0080F1EE /* CopyFiles */,
|
||||||
177FD1000B90CB570011C3B5 /* CopyFiles */,
|
177FD1000B90CB570011C3B5 /* CopyFiles */,
|
||||||
07DFC3930ECDF80100DA400D /* CopyFiles */,
|
07DFC3930ECDF80100DA400D /* CopyFiles */,
|
||||||
8384911C1807E9ED00E7332D /* Run version generator script */,
|
|
||||||
83978E27285C5A4C0076ED21 /* Run Crashlytics symbol upload */,
|
83978E27285C5A4C0076ED21 /* Run Crashlytics symbol upload */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
|
@ -2049,7 +1987,7 @@
|
||||||
83978E15285C58190076ED21 /* FirebaseCrashlytics */,
|
83978E15285C58190076ED21 /* FirebaseCrashlytics */,
|
||||||
83978E25285C596F0076ED21 /* FirebaseAnalytics */,
|
83978E25285C596F0076ED21 /* FirebaseAnalytics */,
|
||||||
);
|
);
|
||||||
productInstallPath = "/Applications";
|
productInstallPath = /Applications;
|
||||||
productName = Cog;
|
productName = Cog;
|
||||||
productReference = 1770424E0B8BC41800B86321 /* Cog.app */;
|
productReference = 1770424E0B8BC41800B86321 /* Cog.app */;
|
||||||
productType = "com.apple.product-type.application";
|
productType = "com.apple.product-type.application";
|
||||||
|
@ -2476,7 +2414,6 @@
|
||||||
836F462C28207FA4005B9B87 /* PauseNormal.png in Resources */,
|
836F462C28207FA4005B9B87 /* PauseNormal.png in Resources */,
|
||||||
83BC5AC420E4CE9000631CD4 /* Feedback.xib in Resources */,
|
83BC5AC420E4CE9000631CD4 /* Feedback.xib in Resources */,
|
||||||
83BC5AC320E4CE8D00631CD4 /* SpotlightPanel.xib in Resources */,
|
83BC5AC320E4CE8D00631CD4 /* SpotlightPanel.xib in Resources */,
|
||||||
83BC5AC220E4CE8A00631CD4 /* FileTree.xib in Resources */,
|
|
||||||
83BC5AC120E4CE8700631CD4 /* OpenURLPanel.xib in Resources */,
|
83BC5AC120E4CE8700631CD4 /* OpenURLPanel.xib in Resources */,
|
||||||
83BC5AC020E4CE7D00631CD4 /* MainMenu.xib in Resources */,
|
83BC5AC020E4CE7D00631CD4 /* MainMenu.xib in Resources */,
|
||||||
83BC5ABF20E4CE7A00631CD4 /* InfoInspector.xib in Resources */,
|
83BC5ABF20E4CE7A00631CD4 /* InfoInspector.xib in Resources */,
|
||||||
|
@ -2508,7 +2445,6 @@
|
||||||
17818A950C0B27AC001C4916 /* aiff.icns in Resources */,
|
17818A950C0B27AC001C4916 /* aiff.icns in Resources */,
|
||||||
8384916818083EAB00E7332D /* shuffleOffTemplate.pdf in Resources */,
|
8384916818083EAB00E7332D /* shuffleOffTemplate.pdf in Resources */,
|
||||||
836F462128207F43005B9B87 /* Plaque.png in Resources */,
|
836F462128207F43005B9B87 /* Plaque.png in Resources */,
|
||||||
835EDD8A27A000E8001EDCCE /* gsx.wv in Resources */,
|
|
||||||
17818A960C0B27AC001C4916 /* ape.icns in Resources */,
|
17818A960C0B27AC001C4916 /* ape.icns in Resources */,
|
||||||
17818A970C0B27AC001C4916 /* m3u.icns in Resources */,
|
17818A970C0B27AC001C4916 /* m3u.icns in Resources */,
|
||||||
17818A980C0B27AC001C4916 /* mpc.icns in Resources */,
|
17818A980C0B27AC001C4916 /* mpc.icns in Resources */,
|
||||||
|
@ -2555,10 +2491,14 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
);
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
inputPaths = (
|
inputPaths = (
|
||||||
|
"$(SRCROOT)/Info.plist.template",
|
||||||
);
|
);
|
||||||
name = "Run version generator script";
|
name = "Run version generator script";
|
||||||
outputPaths = (
|
outputPaths = (
|
||||||
|
"$(SRCROOT)/Info.plist",
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
|
@ -2628,23 +2568,12 @@
|
||||||
170B55940D6E5E7B006B9E92 /* StatusImageTransformer.m in Sources */,
|
170B55940D6E5E7B006B9E92 /* StatusImageTransformer.m in Sources */,
|
||||||
830C37FC27B9956C00E02BB0 /* analyzer.c in Sources */,
|
830C37FC27B9956C00E02BB0 /* analyzer.c in Sources */,
|
||||||
17249F0F0D82E17700F33392 /* ToggleQueueTitleTransformer.m in Sources */,
|
17249F0F0D82E17700F33392 /* ToggleQueueTitleTransformer.m in Sources */,
|
||||||
179D031E0E0CB2500064A77A /* ContainedNode.m in Sources */,
|
|
||||||
179D031F0E0CB2500064A77A /* ContainerNode.m in Sources */,
|
|
||||||
834B05EA2859C006000B7DC0 /* TotalTimeTransformer.m in Sources */,
|
834B05EA2859C006000B7DC0 /* TotalTimeTransformer.m in Sources */,
|
||||||
839DA7CF274A2D4C001B18E5 /* NSDictionary+Merge.m in Sources */,
|
839DA7CF274A2D4C001B18E5 /* NSDictionary+Merge.m in Sources */,
|
||||||
179D03200E0CB2500064A77A /* DirectoryNode.m in Sources */,
|
|
||||||
179D03210E0CB2500064A77A /* FileIconCell.m in Sources */,
|
|
||||||
179D03220E0CB2500064A77A /* FileNode.m in Sources */,
|
|
||||||
0A9CEA0B286152DF00E47168 /* DraggableView.swift in Sources */,
|
0A9CEA0B286152DF00E47168 /* DraggableView.swift in Sources */,
|
||||||
83988F0E27BE0A5900A0E89A /* RedundantPlaylistDataStore.m in Sources */,
|
83988F0E27BE0A5900A0E89A /* RedundantPlaylistDataStore.m in Sources */,
|
||||||
179D03230E0CB2500064A77A /* FileTreeDataSource.m in Sources */,
|
|
||||||
179D03240E0CB2500064A77A /* FileTreeController.m in Sources */,
|
|
||||||
8370D73D277419F700245CE0 /* SQLiteStore.m in Sources */,
|
8370D73D277419F700245CE0 /* SQLiteStore.m in Sources */,
|
||||||
179D03260E0CB2500064A77A /* PathNode.m in Sources */,
|
|
||||||
179D03270E0CB2500064A77A /* PathWatcher.m in Sources */,
|
|
||||||
179D03280E0CB2500064A77A /* SmartFolderNode.m in Sources */,
|
|
||||||
8381A09227C5F72F00A1C530 /* SHA256Digest.m in Sources */,
|
8381A09227C5F72F00A1C530 /* SHA256Digest.m in Sources */,
|
||||||
173855FF0E0CC81F00488CD4 /* FileTreeOutlineView.m in Sources */,
|
|
||||||
07D971E60ED1DAA800E7602E /* TagEditorController.m in Sources */,
|
07D971E60ED1DAA800E7602E /* TagEditorController.m in Sources */,
|
||||||
17E0D5EA0F520F02005B6FED /* MainWindow.m in Sources */,
|
17E0D5EA0F520F02005B6FED /* MainWindow.m in Sources */,
|
||||||
836D28A818086386005B7299 /* MiniModeMenuTitleTransformer.m in Sources */,
|
836D28A818086386005B7299 /* MiniModeMenuTitleTransformer.m in Sources */,
|
||||||
|
@ -2654,6 +2583,7 @@
|
||||||
17E0D5ED0F520F02005B6FED /* TimeField.m in Sources */,
|
17E0D5ED0F520F02005B6FED /* TimeField.m in Sources */,
|
||||||
17E0D6160F520F87005B6FED /* FontSizetoLineHeightTransformer.m in Sources */,
|
17E0D6160F520F87005B6FED /* FontSizetoLineHeightTransformer.m in Sources */,
|
||||||
17E0D6170F520F87005B6FED /* StringToURLTransformer.m in Sources */,
|
17E0D6170F520F87005B6FED /* StringToURLTransformer.m in Sources */,
|
||||||
|
839B837F286D7F8D00F529EE /* NumberHertzToStringTransformer.swift in Sources */,
|
||||||
17E0D61C0F520F9F005B6FED /* VolumeButton.m in Sources */,
|
17E0D61C0F520F9F005B6FED /* VolumeButton.m in Sources */,
|
||||||
17E0D61D0F520F9F005B6FED /* VolumeSlider.m in Sources */,
|
17E0D61D0F520F9F005B6FED /* VolumeSlider.m in Sources */,
|
||||||
172A12330F5911D20078EF0C /* RepeatTransformers.m in Sources */,
|
172A12330F5911D20078EF0C /* RepeatTransformers.m in Sources */,
|
||||||
|
@ -2666,8 +2596,6 @@
|
||||||
8307D30E28606148000FF8EB /* SandboxBroker.m in Sources */,
|
8307D30E28606148000FF8EB /* SandboxBroker.m in Sources */,
|
||||||
83229C9F283B0095004626A8 /* SpectrumWindowController.m in Sources */,
|
83229C9F283B0095004626A8 /* SpectrumWindowController.m in Sources */,
|
||||||
835F00BB279BD1CD00055FCF /* SecondsFormatter.m in Sources */,
|
835F00BB279BD1CD00055FCF /* SecondsFormatter.m in Sources */,
|
||||||
1784560F0F631E24007E8021 /* FileTreeViewController.m in Sources */,
|
|
||||||
178456120F631E31007E8021 /* SideViewController.m in Sources */,
|
|
||||||
17D1B1010F63255200694C57 /* InfoWindowController.m in Sources */,
|
17D1B1010F63255200694C57 /* InfoWindowController.m in Sources */,
|
||||||
835A8FD327957310005B3C39 /* json.c in Sources */,
|
835A8FD327957310005B3C39 /* json.c in Sources */,
|
||||||
17D1B25D0F633A4F00694C57 /* PreferencePluginController.m in Sources */,
|
17D1B25D0F633A4F00694C57 /* PreferencePluginController.m in Sources */,
|
||||||
|
@ -2850,16 +2778,6 @@
|
||||||
name = InfoPlist.strings;
|
name = InfoPlist.strings;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
17211A7C0D68B7C500911CA9 /* FileTree.xib */ = {
|
|
||||||
isa = PBXVariantGroup;
|
|
||||||
children = (
|
|
||||||
83BC5AB720E4C91400631CD4 /* Base */,
|
|
||||||
83BC5AD220E4D0B400631CD4 /* es */,
|
|
||||||
83BC5AD420E4D0B600631CD4 /* en */,
|
|
||||||
);
|
|
||||||
name = FileTree.xib;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
17342A980D5FD20B00E8D854 /* MainMenu.xib */ = {
|
17342A980D5FD20B00E8D854 /* MainMenu.xib */ = {
|
||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -2958,7 +2876,7 @@
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
HEADER_SEARCH_PATHS = ThirdParty/avif/include;
|
HEADER_SEARCH_PATHS = ThirdParty/avif/include;
|
||||||
INFOPLIST_FILE = Info.plist;
|
INFOPLIST_FILE = Info.plist;
|
||||||
INSTALL_PATH = "/Applications";
|
INSTALL_PATH = /Applications;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
|
@ -2967,13 +2885,13 @@
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/ThirdParty/avif/lib",
|
"$(PROJECT_DIR)/ThirdParty/avif/lib",
|
||||||
|
"$(PROJECT_DIR)/ThirdParty/mpg123/lib",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
OTHER_CFLAGS = (
|
OTHER_CFLAGS = (
|
||||||
"-D__MACOSX__",
|
"-D__MACOSX__",
|
||||||
"-DHAVE_CONFIG_H",
|
"-DHAVE_CONFIG_H",
|
||||||
);
|
);
|
||||||
OTHER_CODE_SIGN_FLAGS = "--deep -f";
|
|
||||||
OTHER_LDFLAGS = (
|
OTHER_LDFLAGS = (
|
||||||
"-weak_framework",
|
"-weak_framework",
|
||||||
CogAudio,
|
CogAudio,
|
||||||
|
@ -3011,7 +2929,7 @@
|
||||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||||
HEADER_SEARCH_PATHS = ThirdParty/avif/include;
|
HEADER_SEARCH_PATHS = ThirdParty/avif/include;
|
||||||
INFOPLIST_FILE = Info.plist;
|
INFOPLIST_FILE = Info.plist;
|
||||||
INSTALL_PATH = "/Applications";
|
INSTALL_PATH = /Applications;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
|
@ -3020,13 +2938,13 @@
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/ThirdParty/avif/lib",
|
"$(PROJECT_DIR)/ThirdParty/avif/lib",
|
||||||
|
"$(PROJECT_DIR)/ThirdParty/mpg123/lib",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
OTHER_CFLAGS = (
|
OTHER_CFLAGS = (
|
||||||
"-D__MACOSX__",
|
"-D__MACOSX__",
|
||||||
"-DHAVE_CONFIG_H",
|
"-DHAVE_CONFIG_H",
|
||||||
);
|
);
|
||||||
OTHER_CODE_SIGN_FLAGS = "--deep -f";
|
|
||||||
OTHER_LDFLAGS = (
|
OTHER_LDFLAGS = (
|
||||||
"-weak_framework",
|
"-weak_framework",
|
||||||
CogAudio,
|
CogAudio,
|
||||||
|
@ -3084,7 +3002,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
|
@ -3125,7 +3043,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SWIFT_COMPILATION_MODE = wholemodule;
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,113 @@
|
||||||
|
{
|
||||||
|
"pins" : [
|
||||||
|
{
|
||||||
|
"identity" : "abseil-cpp-swiftpm",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/firebase/abseil-cpp-SwiftPM.git",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "d302de612e3d57c6f4afaf087da18fba8eac72a7",
|
||||||
|
"version" : "0.20220203.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "boringssl-swiftpm",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/firebase/boringssl-SwiftPM.git",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "79db6516894a932d0ddaff3b05b9da1e4f6c4069",
|
||||||
|
"version" : "0.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "firebase-ios-sdk",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/firebase/firebase-ios-sdk",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "2eb177effe7baf1f13ad0c5f4eb8c71a98429fb5",
|
||||||
|
"version" : "9.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "googleappmeasurement",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/google/GoogleAppMeasurement.git",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "192cce3e0486aecfdb61102a9c694c78dc89dc48",
|
||||||
|
"version" : "9.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "googledatatransport",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/google/GoogleDataTransport.git",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "b905c49326b72211531ed9d7baa02d724828a8dc",
|
||||||
|
"version" : "9.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "googleutilities",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/google/GoogleUtilities.git",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "f4abe56ce62a779e64b525eb133c8fc2a84bbc1f",
|
||||||
|
"version" : "7.7.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "grpc-ios",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/grpc/grpc-ios.git",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "2af4f6e9c2b18beae228f50b1198c641be859d2b",
|
||||||
|
"version" : "1.44.2-grpc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "gtm-session-fetcher",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/google/gtm-session-fetcher.git",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "19605024d59eaefdb1f6a2cb11ebe75df4421126",
|
||||||
|
"version" : "2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "leveldb",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/firebase/leveldb.git",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "0706abcc6b0bd9cedfbb015ba840e4a780b5159b",
|
||||||
|
"version" : "1.22.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "nanopb",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/firebase/nanopb.git",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "819d0a2173aff699fb8c364b6fb906f7cdb1a692",
|
||||||
|
"version" : "2.30909.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "promises",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/google/promises.git",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "46c1e6b5ac09d8f82c991061c659f67e573d425d",
|
||||||
|
"version" : "2.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "swift-protobuf",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/apple/swift-protobuf.git",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "e1499bc69b9040b29184f7f2996f7bab467c1639",
|
||||||
|
"version" : "1.19.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version" : 2
|
||||||
|
}
|
|
@ -1,10 +1,28 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1400"
|
LastUpgradeVersion = "1400"
|
||||||
version = "1.3">
|
version = "1.7">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
buildImplicitDependencies = "YES">
|
buildImplicitDependencies = "YES">
|
||||||
|
<PreActions>
|
||||||
|
<ExecutionAction
|
||||||
|
ActionType = "Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction">
|
||||||
|
<ActionContent
|
||||||
|
title = "Run Script"
|
||||||
|
scriptText = ""${PROJECT_DIR}/Scripts/extract_libraries.sh" ">
|
||||||
|
<EnvironmentBuildable>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "8D1107260486CEB800E47090"
|
||||||
|
BuildableName = "Cog.app"
|
||||||
|
BlueprintName = "Cog"
|
||||||
|
ReferencedContainer = "container:Cog.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</EnvironmentBuildable>
|
||||||
|
</ActionContent>
|
||||||
|
</ExecutionAction>
|
||||||
|
</PreActions>
|
||||||
<BuildActionEntries>
|
<BuildActionEntries>
|
||||||
<BuildActionEntry
|
<BuildActionEntry
|
||||||
buildForTesting = "YES"
|
buildForTesting = "YES"
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
<attribute name="filename" optional="YES" attributeType="String"/>
|
<attribute name="filename" optional="YES" attributeType="String"/>
|
||||||
<attribute name="firstSeen" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
<attribute name="firstSeen" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
||||||
<attribute name="lastPlayed" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
<attribute name="lastPlayed" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
||||||
|
<attribute name="rating" optional="YES" attributeType="Float" defaultValueString="0.0" usesScalarValueType="YES"/>
|
||||||
<attribute name="title" optional="YES" attributeType="String"/>
|
<attribute name="title" optional="YES" attributeType="String"/>
|
||||||
</entity>
|
</entity>
|
||||||
<entity name="PlaylistEntry" representedClassName="PlaylistEntry" syncable="YES" codeGenerationType="class">
|
<entity name="PlaylistEntry" representedClassName="PlaylistEntry" syncable="YES" codeGenerationType="class">
|
||||||
|
@ -63,12 +64,13 @@
|
||||||
</entity>
|
</entity>
|
||||||
<entity name="SandboxToken" representedClassName="SandboxToken" syncable="YES" codeGenerationType="class">
|
<entity name="SandboxToken" representedClassName="SandboxToken" syncable="YES" codeGenerationType="class">
|
||||||
<attribute name="bookmark" optional="YES" attributeType="Binary"/>
|
<attribute name="bookmark" optional="YES" attributeType="Binary"/>
|
||||||
|
<attribute name="folder" optional="YES" attributeType="Boolean" defaultValueString="YES" usesScalarValueType="YES"/>
|
||||||
<attribute name="path" optional="YES" attributeType="String"/>
|
<attribute name="path" optional="YES" attributeType="String"/>
|
||||||
</entity>
|
</entity>
|
||||||
<elements>
|
<elements>
|
||||||
<element name="AlbumArtwork" positionX="0" positionY="207" width="128" height="59"/>
|
<element name="AlbumArtwork" positionX="0" positionY="207" width="128" height="59"/>
|
||||||
<element name="PlayCount" positionX="-18" positionY="171" width="128" height="134"/>
|
<element name="PlayCount" positionX="-18" positionY="171" width="128" height="149"/>
|
||||||
<element name="PlaylistEntry" positionX="-36" positionY="9" width="128" height="719"/>
|
<element name="PlaylistEntry" positionX="-36" positionY="9" width="128" height="719"/>
|
||||||
<element name="SandboxToken" positionX="-18" positionY="171" width="128" height="59"/>
|
<element name="SandboxToken" positionX="-18" positionY="171" width="128" height="74"/>
|
||||||
</elements>
|
</elements>
|
||||||
</model>
|
</model>
|
|
@ -326,9 +326,7 @@ void equalizerApplyPreset(AudioUnit au, const NSDictionary *preset) {
|
||||||
@implementation EqualizerSlider
|
@implementation EqualizerSlider
|
||||||
|
|
||||||
- (void)awakeFromNib {
|
- (void)awakeFromNib {
|
||||||
if(@available(macOS 10.12.2, *)) {
|
[self setTrackFillColor:[NSColor systemGrayColor]];
|
||||||
[self setTrackFillColor:[NSColor systemGrayColor]];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
//
|
|
||||||
// ContainedNode.h
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 10/15/07.
|
|
||||||
// Copyright 2007 __MyCompanyName__. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
|
|
||||||
#import "PathNode.h"
|
|
||||||
|
|
||||||
@interface ContainedNode : PathNode {
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,42 +0,0 @@
|
||||||
//
|
|
||||||
// ContainedNode.m
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 10/15/07.
|
|
||||||
// Copyright 2007 __MyCompanyName__. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "ContainedNode.h"
|
|
||||||
#import "CogAudio/AudioMetadataReader.h"
|
|
||||||
|
|
||||||
@implementation ContainedNode
|
|
||||||
|
|
||||||
- (BOOL)isLeaf {
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setURL:(NSURL *)u {
|
|
||||||
[super setURL:u];
|
|
||||||
|
|
||||||
if([u fragment]) {
|
|
||||||
NSDictionary *metadata = [AudioMetadataReader metadataForURL:u];
|
|
||||||
NSString *title = nil;
|
|
||||||
NSString *artist = nil;
|
|
||||||
if(metadata) {
|
|
||||||
title = [metadata valueForKey:@"title"];
|
|
||||||
artist = [metadata valueForKey:@"artist"];
|
|
||||||
}
|
|
||||||
|
|
||||||
if(title && [title length]) {
|
|
||||||
if(artist && [artist length]) {
|
|
||||||
display = [[u fragment] stringByAppendingFormat:@": %@ - %@", artist, title];
|
|
||||||
} else {
|
|
||||||
display = [[u fragment] stringByAppendingFormat:@": %@", title];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
display = [u fragment];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,16 +0,0 @@
|
||||||
//
|
|
||||||
// ContainerNode.h
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 10/15/07.
|
|
||||||
// Copyright 2007 __MyCompanyName__. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
|
|
||||||
#import "PathNode.h"
|
|
||||||
|
|
||||||
@interface ContainerNode : PathNode {
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,35 +0,0 @@
|
||||||
//
|
|
||||||
// ContainerNode.m
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 10/15/07.
|
|
||||||
// Copyright 2007 __MyCompanyName__. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "ContainerNode.h"
|
|
||||||
#import "CogAudio/AudioContainer.h"
|
|
||||||
|
|
||||||
#import "ContainedNode.h"
|
|
||||||
|
|
||||||
#import "Logging.h"
|
|
||||||
|
|
||||||
@implementation ContainerNode
|
|
||||||
|
|
||||||
- (BOOL)isLeaf {
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)updatePath {
|
|
||||||
NSArray *urls = [AudioContainer urlsForContainerURL:url];
|
|
||||||
|
|
||||||
NSMutableArray *paths = [[NSMutableArray alloc] init];
|
|
||||||
for(NSURL *u in urls) {
|
|
||||||
ContainedNode *node = [[ContainedNode alloc] initWithDataSource:dataSource url:u];
|
|
||||||
DLog(@"Node: %@", u);
|
|
||||||
[paths addObject:node];
|
|
||||||
}
|
|
||||||
|
|
||||||
[self setSubpaths:paths];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,15 +0,0 @@
|
||||||
//
|
|
||||||
// DirectoryNode.h
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 8/20/2006.
|
|
||||||
// Copyright 2006 Vincent Spader. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "PathNode.h"
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
|
|
||||||
@interface DirectoryNode : PathNode {
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,38 +0,0 @@
|
||||||
//
|
|
||||||
// DirectoryNode.m
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 8/20/2006.
|
|
||||||
// Copyright 2006 Vincent Spader. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "DirectoryNode.h"
|
|
||||||
|
|
||||||
#import "FileNode.h"
|
|
||||||
#import "SmartFolderNode.h"
|
|
||||||
|
|
||||||
#import "NSString+FinderCompare.h"
|
|
||||||
|
|
||||||
@implementation DirectoryNode
|
|
||||||
|
|
||||||
- (BOOL)isLeaf {
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)updatePath {
|
|
||||||
NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtURL:url
|
|
||||||
includingPropertiesForKeys:@[NSURLNameKey, NSURLIsDirectoryKey]
|
|
||||||
options:(NSDirectoryEnumerationSkipsSubdirectoryDescendants | NSDirectoryEnumerationSkipsPackageDescendants | NSDirectoryEnumerationSkipsHiddenFiles)
|
|
||||||
errorHandler:^BOOL(NSURL *url, NSError *error) {
|
|
||||||
return NO;
|
|
||||||
}];
|
|
||||||
NSMutableArray *fullPaths = [[NSMutableArray alloc] init];
|
|
||||||
|
|
||||||
for(NSURL *theUrl in enumerator) {
|
|
||||||
[fullPaths addObject:[theUrl path]];
|
|
||||||
}
|
|
||||||
|
|
||||||
[self processPaths:[fullPaths sortedArrayUsingSelector:@selector(finderCompare:)]];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,15 +0,0 @@
|
||||||
//
|
|
||||||
// FileIconTextCell.h
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 8/20/06.
|
|
||||||
// Copyright 2006 Vincent Spader. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "ImageTextCell.h"
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
|
|
||||||
@interface FileIconCell : ImageTextCell {
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,23 +0,0 @@
|
||||||
//
|
|
||||||
// FileIconTextCell.m
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 8/20/06.
|
|
||||||
// Copyright 2006 Vincent Spader. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "FileIconCell.h"
|
|
||||||
#import "PathNode.h"
|
|
||||||
|
|
||||||
@implementation FileIconCell
|
|
||||||
|
|
||||||
- (void)setObjectValue:(PathNode *)o {
|
|
||||||
if([o respondsToSelector:@selector(icon)] && [o respondsToSelector:@selector(display)]) {
|
|
||||||
[super setObjectValue:[o display]];
|
|
||||||
[super setImage:[o icon]];
|
|
||||||
} else {
|
|
||||||
[super setObjectValue:(id)o];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,15 +0,0 @@
|
||||||
//
|
|
||||||
// FileNode.h
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 8/20/2006.
|
|
||||||
// Copyright 2006 Vincent Spader. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "PathNode.h"
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
|
|
||||||
@interface FileNode : PathNode {
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,17 +0,0 @@
|
||||||
//
|
|
||||||
// FileNode.m
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 8/20/2006.
|
|
||||||
// Copyright 2006 Vincent Spader. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "FileNode.h"
|
|
||||||
|
|
||||||
@implementation FileNode
|
|
||||||
|
|
||||||
- (BOOL)isLeaf {
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,26 +0,0 @@
|
||||||
//
|
|
||||||
// FileTreeController.h
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 2/17/08.
|
|
||||||
// Copyright 2008 __MyCompanyName__. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "FileTreeDataSource.h"
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
|
|
||||||
@class SideViewController;
|
|
||||||
@interface FileTreeController : NSObject {
|
|
||||||
IBOutlet SideViewController *controller;
|
|
||||||
IBOutlet NSOutlineView *outlineView;
|
|
||||||
IBOutlet FileTreeDataSource *dataSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (IBAction)addToPlaylist:(id)sender;
|
|
||||||
- (IBAction)addToPlaylistExternal:(id)sender;
|
|
||||||
- (IBAction)setAsPlaylist:(id)sender;
|
|
||||||
- (IBAction)playPauseResume:(NSObject *)id;
|
|
||||||
- (IBAction)showEntryInFinder:(id)sender;
|
|
||||||
- (IBAction)setAsRoot:(id)sender;
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,85 +0,0 @@
|
||||||
//
|
|
||||||
// FileTreeController.m
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 2/17/08.
|
|
||||||
// Copyright 2008 __MyCompanyName__. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "FileTreeController.h"
|
|
||||||
#import "PlaylistController.h"
|
|
||||||
#import "SideViewController.h"
|
|
||||||
|
|
||||||
@implementation FileTreeController
|
|
||||||
|
|
||||||
- (IBAction)addToPlaylist:(id)sender {
|
|
||||||
[self doAddToPlaylist:sender origin:URLOriginInternal];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)doAddToPlaylist:(id)sender origin:(URLOrigin)origin {
|
|
||||||
NSUInteger index;
|
|
||||||
NSIndexSet *selectedIndexes = [outlineView selectedRowIndexes];
|
|
||||||
NSMutableArray *urls = [[NSMutableArray alloc] init];
|
|
||||||
|
|
||||||
for(index = [selectedIndexes firstIndex];
|
|
||||||
index != NSNotFound; index = [selectedIndexes indexGreaterThanIndex:index]) {
|
|
||||||
[urls addObject:[[outlineView itemAtRow:index] URL]];
|
|
||||||
}
|
|
||||||
|
|
||||||
[controller doAddToPlaylist:urls origin:origin];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)addToPlaylistExternal:(id)sender {
|
|
||||||
[self doAddToPlaylist:sender origin:URLOriginExternal];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (IBAction)setAsPlaylist:(id)sender {
|
|
||||||
[controller clear:sender];
|
|
||||||
[self addToPlaylist:sender];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (IBAction)playPauseResume:(NSObject *)id {
|
|
||||||
[controller playPauseResume:id];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (IBAction)showEntryInFinder:(id)sender {
|
|
||||||
NSUInteger index;
|
|
||||||
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
|
|
||||||
NSIndexSet *selectedIndexes = [outlineView selectedRowIndexes];
|
|
||||||
|
|
||||||
for(index = [selectedIndexes firstIndex];
|
|
||||||
index != NSNotFound; index = [selectedIndexes indexGreaterThanIndex:index]) {
|
|
||||||
NSURL *url = [[outlineView itemAtRow:index] URL];
|
|
||||||
[ws selectFile:[url path] inFileViewerRootedAtPath:[url path]];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (IBAction)setAsRoot:(id)sender {
|
|
||||||
NSUInteger index = [[outlineView selectedRowIndexes] firstIndex];
|
|
||||||
|
|
||||||
if(index != NSNotFound) {
|
|
||||||
[dataSource changeURL:[[outlineView itemAtRow:index] URL]];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
|
|
||||||
SEL action = [menuItem action];
|
|
||||||
|
|
||||||
if([outlineView numberOfSelectedRows] == 0)
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
if(action == @selector(setAsRoot:)) {
|
|
||||||
BOOL isDir;
|
|
||||||
NSInteger row = [outlineView selectedRow];
|
|
||||||
|
|
||||||
if([outlineView numberOfSelectedRows] > 1)
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
// Only let directories be Set as Root
|
|
||||||
[[NSFileManager defaultManager] fileExistsAtPath:[[[outlineView itemAtRow:row] URL] path] isDirectory:&isDir];
|
|
||||||
return isDir;
|
|
||||||
}
|
|
||||||
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
@end
|
|
|
@ -1,24 +0,0 @@
|
||||||
//
|
|
||||||
// FileTreeDataSource.h
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 10/14/07.
|
|
||||||
// Copyright 2007 __MyCompanyName__. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
|
|
||||||
@class PathNode;
|
|
||||||
@class PathWatcher;
|
|
||||||
|
|
||||||
@interface FileTreeDataSource : NSObject <NSOutlineViewDataSource>
|
|
||||||
|
|
||||||
@property(nonatomic, weak) IBOutlet NSOutlineView *outlineView;
|
|
||||||
@property(nonatomic, weak) IBOutlet NSPathControl *pathControl;
|
|
||||||
@property(nonatomic, weak) IBOutlet PathWatcher *watcher;
|
|
||||||
|
|
||||||
- (void)changeURL:(NSURL *)rootURL;
|
|
||||||
|
|
||||||
- (void)reloadPathNode:(PathNode *)item;
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,197 +0,0 @@
|
||||||
//
|
|
||||||
// FileTreeDataSource.m
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 10/14/07.
|
|
||||||
// Copyright 2007 __MyCompanyName__. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "FileTreeDataSource.h"
|
|
||||||
|
|
||||||
#import "DirectoryNode.h"
|
|
||||||
#import "PathWatcher.h"
|
|
||||||
|
|
||||||
#import "Logging.h"
|
|
||||||
|
|
||||||
#import "SandboxBroker.h"
|
|
||||||
|
|
||||||
static void *kFileTreeDataSourceContext = &kFileTreeDataSourceContext;
|
|
||||||
|
|
||||||
static NSURL *defaultMusicDirectory(void) {
|
|
||||||
return [[NSFileManager defaultManager] URLForDirectory:NSMusicDirectory
|
|
||||||
inDomain:NSUserDomainMask
|
|
||||||
appropriateForURL:nil
|
|
||||||
create:NO
|
|
||||||
error:nil];
|
|
||||||
}
|
|
||||||
|
|
||||||
@interface FileTreeDataSource ()
|
|
||||||
|
|
||||||
@property NSURL *rootURL;
|
|
||||||
|
|
||||||
@property const void *sbHandle;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation FileTreeDataSource {
|
|
||||||
PathNode *rootNode;
|
|
||||||
const void *_sbHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ (void)initialize {
|
|
||||||
NSString *path = [defaultMusicDirectory() absoluteString];
|
|
||||||
NSDictionary *userDefaultsValuesDict = @{ @"fileTreeRootURL": path };
|
|
||||||
[[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsValuesDict];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)awakeFromNib {
|
|
||||||
_sbHandle = NULL;
|
|
||||||
[self.pathControl setTarget:self];
|
|
||||||
[self.pathControl setAction:@selector(pathControlAction:)];
|
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self
|
|
||||||
forKeyPath:@"values.fileTreeRootURL"
|
|
||||||
options:NSKeyValueObservingOptionNew |
|
|
||||||
NSKeyValueObservingOptionInitial
|
|
||||||
context:kFileTreeDataSourceContext];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)observeValueForKeyPath:(NSString *)keyPath
|
|
||||||
ofObject:(id)object
|
|
||||||
change:(NSDictionary *)change
|
|
||||||
context:(void *)context {
|
|
||||||
if(context == kFileTreeDataSourceContext) {
|
|
||||||
if([keyPath isEqualToString:@"values.fileTreeRootURL"]) {
|
|
||||||
NSString *url =
|
|
||||||
[[[NSUserDefaultsController sharedUserDefaultsController] defaults] objectForKey:@"fileTreeRootURL"];
|
|
||||||
DLog(@"File tree root URL: %@\n", url);
|
|
||||||
self.rootURL = [NSURL URLWithString:url];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)changeURL:(NSURL *)url {
|
|
||||||
if(url != nil) {
|
|
||||||
[[[NSUserDefaultsController sharedUserDefaultsController] defaults] setObject:[url absoluteString]
|
|
||||||
forKey:@"fileTreeRootURL"];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)pathControlAction:(id)sender {
|
|
||||||
NSPathControlItem *item = [self.pathControl clickedPathItem];
|
|
||||||
if(item != nil && item.URL != nil) {
|
|
||||||
[self changeURL:item.URL];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSURL *)rootURL {
|
|
||||||
return [rootNode URL];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setRootURL:(NSURL *)rootURL {
|
|
||||||
SandboxBroker *sharedSandboxBroker = [SandboxBroker sharedSandboxBroker];
|
|
||||||
if(self.sbHandle) [sharedSandboxBroker endFolderAccess:self.sbHandle];
|
|
||||||
self.sbHandle = [sharedSandboxBroker beginFolderAccess:rootURL];
|
|
||||||
|
|
||||||
if(![[NSFileManager defaultManager] fileExistsAtPath:[rootURL path]]) {
|
|
||||||
rootURL = defaultMusicDirectory();
|
|
||||||
}
|
|
||||||
|
|
||||||
rootNode = [[DirectoryNode alloc] initWithDataSource:self url:rootURL];
|
|
||||||
|
|
||||||
[self.watcher setPath:[rootURL path]];
|
|
||||||
|
|
||||||
[self reloadPathNode:rootNode];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (const void *)sbHandle {
|
|
||||||
return _sbHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setSbHandle:(const void *)sbHandle {
|
|
||||||
_sbHandle = sbHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)dealloc {
|
|
||||||
if(self.sbHandle) [[SandboxBroker sharedSandboxBroker] endFolderAccess:self.sbHandle];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (PathNode *)nodeForPath:(NSString *)path {
|
|
||||||
NSString *relativePath = [[path stringByReplacingOccurrencesOfString:[[[self rootURL] path] stringByAppendingString:@"/"]
|
|
||||||
withString:@""
|
|
||||||
options:NSAnchoredSearch
|
|
||||||
range:NSMakeRange(0, [path length])] stringByStandardizingPath];
|
|
||||||
PathNode *node = rootNode;
|
|
||||||
DLog(@"Root | Relative | Path: %@ | %@ | %@", [[self rootURL] path], relativePath, path);
|
|
||||||
for(NSString *c in [relativePath pathComponents]) {
|
|
||||||
DLog(@"COMPONENT: %@", c);
|
|
||||||
BOOL found = NO;
|
|
||||||
for(PathNode *subnode in [node subpaths]) {
|
|
||||||
if([[[[subnode URL] path] lastPathComponent] isEqualToString:c]) {
|
|
||||||
node = subnode;
|
|
||||||
found = YES;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!found) {
|
|
||||||
DLog(@"Not found!");
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)pathDidChange:(NSString *)path {
|
|
||||||
DLog(@"PATH DID CHANGE: %@", path);
|
|
||||||
// Need to find the corresponding node...and call [node reloadPath], then [self reloadPathNode:node]
|
|
||||||
PathNode *node = [self nodeForPath:path];
|
|
||||||
DLog(@"NODE IS: %@", node);
|
|
||||||
[node updatePath];
|
|
||||||
[self reloadPathNode:node];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
|
|
||||||
PathNode *n = (item == nil ? rootNode : item);
|
|
||||||
|
|
||||||
return (int)[[n subpaths] count];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
|
|
||||||
PathNode *n = (item == nil ? rootNode : item);
|
|
||||||
|
|
||||||
return ![n isLeaf];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
|
|
||||||
PathNode *n = (item == nil ? rootNode : item);
|
|
||||||
|
|
||||||
return [n subpaths][(NSUInteger)index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
|
|
||||||
PathNode *n = (item == nil ? rootNode : item);
|
|
||||||
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id<NSPasteboardWriting>)outlineView:(NSOutlineView *)outlineView pasteboardWriterForItem:(id)item {
|
|
||||||
NSPasteboardItem *paste = [[NSPasteboardItem alloc] init];
|
|
||||||
if(@available(macOS 10.13, *)) {
|
|
||||||
[paste setData:[[item URL] dataRepresentation] forType:NSPasteboardTypeFileURL];
|
|
||||||
} else {
|
|
||||||
[paste setPropertyList:@[[item URL]] forType:NSFilenamesPboardType];
|
|
||||||
}
|
|
||||||
return paste;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)reloadPathNode:(PathNode *)item {
|
|
||||||
if(item == rootNode) {
|
|
||||||
[self.outlineView reloadData];
|
|
||||||
} else {
|
|
||||||
[self.outlineView reloadItem:item reloadChildren:YES];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,16 +0,0 @@
|
||||||
//
|
|
||||||
// FileTreeOutlineView.h
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 6/21/08.
|
|
||||||
// Copyright 2008 __MyCompanyName__. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
|
|
||||||
@interface FileTreeOutlineView : NSOutlineView {
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)keyDown:(NSEvent *)e;
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,66 +0,0 @@
|
||||||
//
|
|
||||||
// FileTreeOutlineView.m
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 6/21/08.
|
|
||||||
// Copyright 2008 __MyCompanyName__. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "FileTreeOutlineView.h"
|
|
||||||
#import "FileTreeController.h"
|
|
||||||
#import "FileTreeViewController.h"
|
|
||||||
#import "PlaybackController.h"
|
|
||||||
|
|
||||||
@implementation FileTreeOutlineView
|
|
||||||
|
|
||||||
- (void)awakeFromNib {
|
|
||||||
[self setDoubleAction:@selector(addToPlaylistExternal:)];
|
|
||||||
[self setTarget:[self delegate]];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)keyDown:(NSEvent *)e {
|
|
||||||
unsigned int modifiers = [e modifierFlags] & (NSEventModifierFlagCommand | NSEventModifierFlagShift | NSEventModifierFlagControl | NSEventModifierFlagOption);
|
|
||||||
NSString *characters = [e characters];
|
|
||||||
unichar c;
|
|
||||||
|
|
||||||
if([characters length] == 1) {
|
|
||||||
c = [characters characterAtIndex:0];
|
|
||||||
|
|
||||||
if(modifiers == 0 && (c == NSEnterCharacter || c == NSCarriageReturnCharacter)) {
|
|
||||||
[(FileTreeController *)[self delegate] addToPlaylistExternal:self];
|
|
||||||
|
|
||||||
return;
|
|
||||||
} else if(modifiers == 0 && c == ' ') {
|
|
||||||
[(FileTreeController *)[self delegate] playPauseResume:self];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[super keyDown:e];
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// enables right-click selection for "Show in Finder" contextual menu
|
|
||||||
- (NSMenu *)menuForEvent:(NSEvent *)event {
|
|
||||||
// Find which row is under the cursor
|
|
||||||
[[self window] makeFirstResponder:self];
|
|
||||||
NSPoint menuPoint = [self convertPoint:[event locationInWindow] fromView:nil];
|
|
||||||
NSInteger iRow = [self rowAtPoint:menuPoint];
|
|
||||||
NSMenu *contextMenu = [self menu];
|
|
||||||
|
|
||||||
/* Update the file tree selection before showing menu
|
|
||||||
Preserves the selection if the row under the mouse is selected (to allow for
|
|
||||||
multiple items to be selected), otherwise selects the row under the mouse */
|
|
||||||
BOOL currentRowIsSelected = [[self selectedRowIndexes] containsIndex:iRow];
|
|
||||||
|
|
||||||
if(iRow == -1) {
|
|
||||||
[self deselectAll:self];
|
|
||||||
} else if(!currentRowIsSelected) {
|
|
||||||
[self selectRowIndexes:[NSIndexSet indexSetWithIndex:iRow] byExtendingSelection:NO];
|
|
||||||
}
|
|
||||||
|
|
||||||
return contextMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,23 +0,0 @@
|
||||||
//
|
|
||||||
// SideBarController.h
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 6/21/08.
|
|
||||||
// Copyright 2008 __MyCompanyName__. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "SideViewController.h"
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
|
|
||||||
@class PlaylistLoader;
|
|
||||||
@class PlaybackController;
|
|
||||||
@class FileTreeOutlineView;
|
|
||||||
@interface FileTreeViewController : SideViewController {
|
|
||||||
IBOutlet PlaylistLoader *playlistLoader;
|
|
||||||
IBOutlet PlaybackController *playbackController;
|
|
||||||
IBOutlet FileTreeOutlineView *fileTreeOutlineView;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (FileTreeOutlineView *)outlineView;
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,44 +0,0 @@
|
||||||
//
|
|
||||||
// SplitViewController.m
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 6/20/08.
|
|
||||||
// Copyright 2008 __MyCompanyName__. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "FileTreeViewController.h"
|
|
||||||
#import "PlaybackController.h"
|
|
||||||
#import "PlaylistLoader.h"
|
|
||||||
|
|
||||||
@implementation FileTreeViewController
|
|
||||||
|
|
||||||
- (id)init {
|
|
||||||
return [super initWithNibName:@"FileTree" bundle:[NSBundle mainBundle]];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)addToPlaylistInternal:(NSArray *)urls {
|
|
||||||
[self doAddToPlaylist:urls origin:URLOriginInternal];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)addToPlaylistExternal:(NSArray *)urls {
|
|
||||||
[self doAddToPlaylist:urls origin:URLOriginExternal];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)doAddToPlaylist:(NSArray *)urls origin:(URLOrigin)origin {
|
|
||||||
[playlistLoader willInsertURLs:urls origin:origin];
|
|
||||||
[playlistLoader didInsertURLs:[playlistLoader addURLs:urls sort:YES] origin:origin];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)clear:(id)sender {
|
|
||||||
[playlistLoader clear:sender];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)playPauseResume:(NSObject *)id {
|
|
||||||
[playbackController playPauseResume:id];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (FileTreeOutlineView *)outlineView {
|
|
||||||
return fileTreeOutlineView;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,43 +0,0 @@
|
||||||
//
|
|
||||||
// Node.h
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 8/20/2006.
|
|
||||||
// Copyright 2006 Vincent Spader. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
|
|
||||||
@class FileTreeDataSource;
|
|
||||||
|
|
||||||
@interface PathNode : NSObject {
|
|
||||||
FileTreeDataSource *dataSource;
|
|
||||||
|
|
||||||
NSURL *url;
|
|
||||||
NSString *display; // The pretty path to display.
|
|
||||||
|
|
||||||
NSImage *icon;
|
|
||||||
|
|
||||||
NSArray *subpaths;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)initWithDataSource:(FileTreeDataSource *)ds url:(NSURL *)u;
|
|
||||||
|
|
||||||
- (NSURL *)URL;
|
|
||||||
- (void)setURL:(NSURL *)url;
|
|
||||||
|
|
||||||
- (void)processPaths:(NSArray *)contents;
|
|
||||||
|
|
||||||
- (NSArray *)subpaths;
|
|
||||||
- (void)setSubpaths:(NSArray *)s;
|
|
||||||
|
|
||||||
- (NSString *)display;
|
|
||||||
- (void)setDisplay:(NSString *)s;
|
|
||||||
|
|
||||||
- (NSImage *)icon;
|
|
||||||
|
|
||||||
- (BOOL)isLeaf;
|
|
||||||
|
|
||||||
- (void)updatePath;
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,155 +0,0 @@
|
||||||
//
|
|
||||||
// Node.m
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 8/20/2006.
|
|
||||||
// Copyright 2006 Vincent Spader. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "PathNode.h"
|
|
||||||
|
|
||||||
#import "CogAudio/AudioPlayer.h"
|
|
||||||
|
|
||||||
#import "FileTreeDataSource.h"
|
|
||||||
|
|
||||||
#import "ContainerNode.h"
|
|
||||||
#import "DirectoryNode.h"
|
|
||||||
#import "FileNode.h"
|
|
||||||
#import "SmartFolderNode.h"
|
|
||||||
|
|
||||||
#import "Logging.h"
|
|
||||||
|
|
||||||
@implementation PathNode
|
|
||||||
|
|
||||||
// From http://developer.apple.com/documentation/Cocoa/Conceptual/LowLevelFileMgmt/Tasks/ResolvingAliases.html
|
|
||||||
// Updated 2018-06-28
|
|
||||||
NSURL *resolveAliases(NSURL *url) {
|
|
||||||
CFErrorRef error;
|
|
||||||
CFDataRef bookmarkRef = CFURLCreateBookmarkDataFromFile(kCFAllocatorDefault, (__bridge CFURLRef)url, &error);
|
|
||||||
if(bookmarkRef) {
|
|
||||||
Boolean isStale;
|
|
||||||
CFURLRef urlRef = CFURLCreateByResolvingBookmarkData(kCFAllocatorDefault, bookmarkRef, kCFURLBookmarkResolutionWithSecurityScope, NULL, NULL, &isStale, &error);
|
|
||||||
CFRelease(bookmarkRef);
|
|
||||||
|
|
||||||
if(urlRef) {
|
|
||||||
if(!isStale) {
|
|
||||||
return (NSURL *)CFBridgingRelease(urlRef);
|
|
||||||
} else {
|
|
||||||
CFRelease(urlRef);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// DLog(@"Not resolved");
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id)initWithDataSource:(FileTreeDataSource *)ds url:(NSURL *)u {
|
|
||||||
self = [super init];
|
|
||||||
|
|
||||||
if(self) {
|
|
||||||
dataSource = ds;
|
|
||||||
[self setURL:u];
|
|
||||||
}
|
|
||||||
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setURL:(NSURL *)u {
|
|
||||||
url = u;
|
|
||||||
|
|
||||||
display = [[NSFileManager defaultManager] displayNameAtPath:[u path]];
|
|
||||||
|
|
||||||
icon = [[NSWorkspace sharedWorkspace] iconForFile:[url path]];
|
|
||||||
|
|
||||||
[icon setSize:NSMakeSize(16.0, 16.0)];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSURL *)URL {
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)updatePath {
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)processPaths:(NSArray *)contents {
|
|
||||||
NSMutableArray *newSubpathsDirs = [[NSMutableArray alloc] init];
|
|
||||||
NSMutableArray *newSubpaths = [[NSMutableArray alloc] init];
|
|
||||||
|
|
||||||
for(NSString *s in contents) {
|
|
||||||
if([s characterAtIndex:0] == '.') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
NSURL *u = [NSURL fileURLWithPath:s];
|
|
||||||
NSString *displayName = [[NSFileManager defaultManager] displayNameAtPath:[u path]];
|
|
||||||
|
|
||||||
PathNode *newNode;
|
|
||||||
|
|
||||||
// DLog(@"Before: %@", u);
|
|
||||||
u = resolveAliases(u);
|
|
||||||
// DLog(@"After: %@", u);
|
|
||||||
|
|
||||||
BOOL isDir;
|
|
||||||
|
|
||||||
if([[s pathExtension] caseInsensitiveCompare:@"savedSearch"] == NSOrderedSame) {
|
|
||||||
DLog(@"Smart folder!");
|
|
||||||
newNode = [[SmartFolderNode alloc] initWithDataSource:dataSource url:u];
|
|
||||||
isDir = NO;
|
|
||||||
} else {
|
|
||||||
[[NSFileManager defaultManager] fileExistsAtPath:[u path] isDirectory:&isDir];
|
|
||||||
|
|
||||||
if(!isDir && ![[AudioPlayer fileTypes] containsObject:[[u pathExtension] lowercaseString]]) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isDir) {
|
|
||||||
newNode = [[DirectoryNode alloc] initWithDataSource:dataSource url:u];
|
|
||||||
} else if([[AudioPlayer containerTypes] containsObject:[[u pathExtension] lowercaseString]]) {
|
|
||||||
newNode = [[ContainerNode alloc] initWithDataSource:dataSource url:u];
|
|
||||||
} else {
|
|
||||||
newNode = [[FileNode alloc] initWithDataSource:dataSource url:u];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[newNode setDisplay:displayName];
|
|
||||||
|
|
||||||
if(isDir)
|
|
||||||
[newSubpathsDirs addObject:newNode];
|
|
||||||
else
|
|
||||||
[newSubpaths addObject:newNode];
|
|
||||||
}
|
|
||||||
|
|
||||||
[newSubpathsDirs addObjectsFromArray:newSubpaths];
|
|
||||||
[self setSubpaths:newSubpathsDirs];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSArray *)subpaths {
|
|
||||||
if(subpaths == nil) {
|
|
||||||
[self updatePath];
|
|
||||||
}
|
|
||||||
|
|
||||||
return subpaths;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setSubpaths:(NSArray *)s {
|
|
||||||
subpaths = s;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)isLeaf {
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setDisplay:(NSString *)s {
|
|
||||||
display = s;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)display {
|
|
||||||
return display;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSImage *)icon {
|
|
||||||
return icon;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,30 +0,0 @@
|
||||||
//
|
|
||||||
// PathWatcher.h
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 2/17/08.
|
|
||||||
// Copyright 2008 __MyCompanyName__. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
#include <CoreServices/CoreServices.h>
|
|
||||||
|
|
||||||
@interface PathWatcher : NSObject {
|
|
||||||
FSEventStreamRef stream;
|
|
||||||
FSEventStreamContext *context;
|
|
||||||
|
|
||||||
IBOutlet id delegate;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setDelegate:(id)d;
|
|
||||||
- (id)delegate;
|
|
||||||
|
|
||||||
- (void)setPath:(NSString *)path; // Set the path to watch
|
|
||||||
- (void)cleanUp;
|
|
||||||
@end
|
|
||||||
|
|
||||||
@protocol PathWatcherDelegate
|
|
||||||
|
|
||||||
- (void)pathDidChange:(NSString *)path;
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,82 +0,0 @@
|
||||||
//
|
|
||||||
// PathWatcher.m
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 2/17/08.
|
|
||||||
// Copyright 2008 __MyCompanyName__. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "PathWatcher.h"
|
|
||||||
|
|
||||||
static void myFSEventCallback(
|
|
||||||
ConstFSEventStreamRef streamRef,
|
|
||||||
void *clientCallBackInfo,
|
|
||||||
size_t numEvents,
|
|
||||||
void *eventPaths,
|
|
||||||
const FSEventStreamEventFlags eventFlags[],
|
|
||||||
const FSEventStreamEventId eventIds[]) {
|
|
||||||
int i;
|
|
||||||
char **paths = eventPaths;
|
|
||||||
PathWatcher *pathWatcher = (__bridge PathWatcher *)clientCallBackInfo;
|
|
||||||
|
|
||||||
printf("Callback called\n");
|
|
||||||
for(i = 0; i < numEvents; i++) {
|
|
||||||
NSString *pathString = [[NSString alloc] initWithUTF8String:paths[i]];
|
|
||||||
[[pathWatcher delegate] pathDidChange:pathString];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@implementation PathWatcher
|
|
||||||
|
|
||||||
- (void)cleanUp {
|
|
||||||
if(stream) {
|
|
||||||
FSEventStreamStop(stream);
|
|
||||||
FSEventStreamInvalidate(stream);
|
|
||||||
FSEventStreamRelease(stream);
|
|
||||||
stream = NULL;
|
|
||||||
}
|
|
||||||
if(context) {
|
|
||||||
free(context);
|
|
||||||
context = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setPath:(NSString *)path {
|
|
||||||
[self cleanUp];
|
|
||||||
|
|
||||||
// Create FSEvent stream
|
|
||||||
NSArray *pathsToWatch = @[path];
|
|
||||||
|
|
||||||
context = (FSEventStreamContext *)malloc(sizeof(FSEventStreamContext));
|
|
||||||
context->version = 0;
|
|
||||||
context->info = (__bridge void *)self;
|
|
||||||
context->retain = NULL;
|
|
||||||
context->release = NULL;
|
|
||||||
|
|
||||||
// Create the stream, passing in a callback
|
|
||||||
stream = FSEventStreamCreate(NULL,
|
|
||||||
&myFSEventCallback,
|
|
||||||
context,
|
|
||||||
(__bridge CFArrayRef)pathsToWatch,
|
|
||||||
kFSEventStreamEventIdSinceNow, // Or a previous event ID
|
|
||||||
1.0, // latency in seconds
|
|
||||||
kFSEventStreamCreateFlagNone // Watch this and all its subdirectories
|
|
||||||
);
|
|
||||||
|
|
||||||
FSEventStreamScheduleWithRunLoop(stream, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
|
|
||||||
|
|
||||||
FSEventStreamStart(stream);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setDelegate:(id)d {
|
|
||||||
delegate = d;
|
|
||||||
}
|
|
||||||
- (id)delegate {
|
|
||||||
return delegate;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)dealloc {
|
|
||||||
[self cleanUp];
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,17 +0,0 @@
|
||||||
//
|
|
||||||
// SmartFolderNode.h
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 9/25/06.
|
|
||||||
// Copyright 2006 __MyCompanyName__. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
|
||||||
|
|
||||||
#import "PathNode.h"
|
|
||||||
|
|
||||||
@interface SmartFolderNode : PathNode {
|
|
||||||
MDQueryRef _query;
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,90 +0,0 @@
|
||||||
//
|
|
||||||
// SmartFolderNode.m
|
|
||||||
// Cog
|
|
||||||
//
|
|
||||||
// Created by Vincent Spader on 9/25/06.
|
|
||||||
// Copyright 2006 __MyCompanyName__. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import "SmartFolderNode.h"
|
|
||||||
#import "DirectoryNode.h"
|
|
||||||
#import "FileNode.h"
|
|
||||||
#import "FileTreeDataSource.h"
|
|
||||||
|
|
||||||
#import "Logging.h"
|
|
||||||
|
|
||||||
@implementation SmartFolderNode
|
|
||||||
|
|
||||||
- (BOOL)isLeaf {
|
|
||||||
return NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)updatePath {
|
|
||||||
NSDictionary *doc = [NSDictionary dictionaryWithContentsOfFile:[url path]];
|
|
||||||
NSString *rawQuery = [doc objectForKey:@"RawQuery"];
|
|
||||||
NSArray *searchPaths = [[doc objectForKey:@"SearchCriteria"] objectForKey:@"CurrentFolderPath"];
|
|
||||||
|
|
||||||
// Ugh, Carbon from now on...
|
|
||||||
MDQueryRef query = MDQueryCreate(kCFAllocatorDefault, (CFStringRef)rawQuery, NULL, NULL);
|
|
||||||
_query = query;
|
|
||||||
|
|
||||||
MDQuerySetSearchScope(query, (CFArrayRef)searchPaths, 0);
|
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(queryFinished:) name:(NSString *)kMDQueryDidFinishNotification object:(__bridge id)query];
|
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(queryUpdate:) name:(NSString *)kMDQueryDidUpdateNotification object:(__bridge id)query];
|
|
||||||
|
|
||||||
DLog(@"Making query!");
|
|
||||||
MDQueryExecute(query, kMDQueryWantsUpdates);
|
|
||||||
|
|
||||||
// Note: This is asynchronous!
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)setSubpaths:(id)s {
|
|
||||||
subpaths = s;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (unsigned int)countOfSubpaths {
|
|
||||||
return (unsigned int)[[self subpaths] count];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (PathNode *)objectInSubpathsAtIndex:(unsigned int)index {
|
|
||||||
return [[self subpaths] objectAtIndex:index];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)queryFinished:(NSNotification *)notification {
|
|
||||||
DLog(@"Query finished!");
|
|
||||||
MDQueryRef query = (__bridge MDQueryRef)[notification object];
|
|
||||||
|
|
||||||
NSMutableArray *results = [NSMutableArray array];
|
|
||||||
|
|
||||||
MDQueryDisableUpdates(query);
|
|
||||||
int c = (int)MDQueryGetResultCount(query);
|
|
||||||
|
|
||||||
int i;
|
|
||||||
for(i = 0; i < c; i++) {
|
|
||||||
MDItemRef item = (MDItemRef)MDQueryGetResultAtIndex(query, i);
|
|
||||||
|
|
||||||
NSString *itemPath = (NSString *)CFBridgingRelease(MDItemCopyAttribute(item, kMDItemPath));
|
|
||||||
|
|
||||||
[results addObject:itemPath];
|
|
||||||
}
|
|
||||||
|
|
||||||
MDQueryEnableUpdates(query);
|
|
||||||
|
|
||||||
DLog(@"Query update!");
|
|
||||||
|
|
||||||
[self processPaths:[results sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]];
|
|
||||||
|
|
||||||
[dataSource reloadPathNode:self];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)queryUpdate:(NSNotification *)notification {
|
|
||||||
DLog(@"Query update!");
|
|
||||||
[self queryFinished:notification];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)dealloc {
|
|
||||||
CFRelease(_query);
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -9,6 +9,7 @@
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
830E1DA1263B90CB005B01D2 /* rad2.h in Headers */ = {isa = PBXBuildFile; fileRef = 830E1D9F263B90CB005B01D2 /* rad2.h */; };
|
830E1DA1263B90CB005B01D2 /* rad2.h in Headers */ = {isa = PBXBuildFile; fileRef = 830E1D9F263B90CB005B01D2 /* rad2.h */; };
|
||||||
830E1DA2263B90CB005B01D2 /* rad2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 830E1DA0263B90CB005B01D2 /* rad2.cpp */; };
|
830E1DA2263B90CB005B01D2 /* rad2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 830E1DA0263B90CB005B01D2 /* rad2.cpp */; };
|
||||||
|
83747B7C2862D4B70021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747B7A2862D4B70021245F /* Shared.xcconfig */; };
|
||||||
83D3C578201C66E3005564CB /* adplug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83D3C505201C66C1005564CB /* adplug.cpp */; };
|
83D3C578201C66E3005564CB /* adplug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83D3C505201C66C1005564CB /* adplug.cpp */; };
|
||||||
83D3C579201C66E3005564CB /* mtk.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D3C506201C66C2005564CB /* mtk.h */; };
|
83D3C579201C66E3005564CB /* mtk.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D3C506201C66C2005564CB /* mtk.h */; };
|
||||||
83D3C57A201C66E3005564CB /* psi.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D3C507201C66C2005564CB /* psi.h */; };
|
83D3C57A201C66E3005564CB /* psi.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D3C507201C66C2005564CB /* psi.h */; };
|
||||||
|
@ -150,6 +151,7 @@
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
830E1D9F263B90CB005B01D2 /* rad2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rad2.h; path = adplug/src/rad2.h; sourceTree = "<group>"; };
|
830E1D9F263B90CB005B01D2 /* rad2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rad2.h; path = adplug/src/rad2.h; sourceTree = "<group>"; };
|
||||||
830E1DA0263B90CB005B01D2 /* rad2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rad2.cpp; path = adplug/src/rad2.cpp; sourceTree = "<group>"; };
|
830E1DA0263B90CB005B01D2 /* rad2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rad2.cpp; path = adplug/src/rad2.cpp; sourceTree = "<group>"; };
|
||||||
|
83747B7A2862D4B70021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
83D3C4D4201C654F005564CB /* libAdPlug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = libAdPlug.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
83D3C4D4201C654F005564CB /* libAdPlug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = libAdPlug.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
83D3C4D8201C6550005564CB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
83D3C4D8201C6550005564CB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
83D3C505201C66C1005564CB /* adplug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = adplug.cpp; path = adplug/src/adplug.cpp; sourceTree = "<group>"; };
|
83D3C505201C66C1005564CB /* adplug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = adplug.cpp; path = adplug/src/adplug.cpp; sourceTree = "<group>"; };
|
||||||
|
@ -285,9 +287,19 @@
|
||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
|
83747B792862D4B70021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747B7A2862D4B70021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
83D3C4CA201C654F005564CB = {
|
83D3C4CA201C654F005564CB = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747B792862D4B70021245F /* Xcode-config */,
|
||||||
83D3C4D6201C654F005564CB /* AdPlug */,
|
83D3C4D6201C654F005564CB /* AdPlug */,
|
||||||
83D3C609201C6788005564CB /* Frameworks */,
|
83D3C609201C6788005564CB /* Frameworks */,
|
||||||
83D3C4D5201C654F005564CB /* Products */,
|
83D3C4D5201C654F005564CB /* Products */,
|
||||||
|
@ -550,8 +562,7 @@
|
||||||
ORGANIZATIONNAME = "Christopher Snowhill";
|
ORGANIZATIONNAME = "Christopher Snowhill";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
83D3C4D3201C654F005564CB = {
|
83D3C4D3201C654F005564CB = {
|
||||||
DevelopmentTeam = "";
|
ProvisioningStyle = Manual;
|
||||||
ProvisioningStyle = Automatic;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -594,6 +605,7 @@
|
||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
83747B7C2862D4B70021245F /* Shared.xcconfig in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -678,6 +690,7 @@
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
83D3C4DA201C6550005564CB /* Debug */ = {
|
83D3C4DA201C6550005564CB /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747B7A2862D4B70021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
@ -708,7 +721,6 @@
|
||||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGN_IDENTITY = "Mac Developer";
|
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
|
@ -730,7 +742,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
@ -741,6 +753,7 @@
|
||||||
};
|
};
|
||||||
83D3C4DB201C6550005564CB /* Release */ = {
|
83D3C4DB201C6550005564CB /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747B7A2862D4B70021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
@ -771,7 +784,6 @@
|
||||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGN_IDENTITY = "Mac Developer";
|
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
|
@ -787,7 +799,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
@ -798,11 +810,8 @@
|
||||||
83D3C4DD201C6550005564CB /* Debug */ = {
|
83D3C4DD201C6550005564CB /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -820,7 +829,6 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.libAdPlug;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.libAdPlug;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
|
@ -828,11 +836,8 @@
|
||||||
83D3C4DE201C6550005564CB /* Release */ = {
|
83D3C4DE201C6550005564CB /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -846,7 +851,6 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.libAdPlug;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.libAdPlug;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
|
|
@ -720,7 +720,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.7;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
OBJROOT = ../../build;
|
OBJROOT = ../../build;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
PREBINDING = NO;
|
PREBINDING = NO;
|
||||||
|
@ -762,7 +762,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.7;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
OBJROOT = ../../build;
|
OBJROOT = ../../build;
|
||||||
PREBINDING = NO;
|
PREBINDING = NO;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
|
|
@ -129,6 +129,7 @@
|
||||||
8359008D17FEF40E0060F3ED /* unrar_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8359000117FEF40E0060F3ED /* unrar_misc.cpp */; };
|
8359008D17FEF40E0060F3ED /* unrar_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8359000117FEF40E0060F3ED /* unrar_misc.cpp */; };
|
||||||
8359009F17FF073E0060F3ED /* 7zStream.c in Sources */ = {isa = PBXBuildFile; fileRef = 8359009E17FF073E0060F3ED /* 7zStream.c */; };
|
8359009F17FF073E0060F3ED /* 7zStream.c in Sources */ = {isa = PBXBuildFile; fileRef = 8359009E17FF073E0060F3ED /* 7zStream.c */; };
|
||||||
8359FF4A17FEF39F0060F3ED /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8359FF4817FEF39F0060F3ED /* InfoPlist.strings */; };
|
8359FF4A17FEF39F0060F3ED /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8359FF4817FEF39F0060F3ED /* InfoPlist.strings */; };
|
||||||
|
83747BE32862D78F0021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747BE12862D78E0021245F /* Shared.xcconfig */; };
|
||||||
83756F621D23A95B003A7676 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83756F611D23A95B003A7676 /* CoreServices.framework */; };
|
83756F621D23A95B003A7676 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83756F611D23A95B003A7676 /* CoreServices.framework */; };
|
||||||
83C2109719CD81F50093C461 /* headers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83C2108E19CD81F50093C461 /* headers.cpp */; };
|
83C2109719CD81F50093C461 /* headers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83C2108E19CD81F50093C461 /* headers.cpp */; };
|
||||||
83C2109819CD81F50093C461 /* headers5.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 83C2108F19CD81F50093C461 /* headers5.hpp */; };
|
83C2109819CD81F50093C461 /* headers5.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 83C2108F19CD81F50093C461 /* headers5.hpp */; };
|
||||||
|
@ -270,6 +271,7 @@
|
||||||
8359FFFB17FEF40E0060F3ED /* unpack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unpack.cpp; sourceTree = "<group>"; };
|
8359FFFB17FEF40E0060F3ED /* unpack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unpack.cpp; sourceTree = "<group>"; };
|
||||||
8359FFFC17FEF40E0060F3ED /* unpack.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = unpack.hpp; sourceTree = "<group>"; };
|
8359FFFC17FEF40E0060F3ED /* unpack.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = unpack.hpp; sourceTree = "<group>"; };
|
||||||
8359FFFF17FEF40E0060F3ED /* unrar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unrar.cpp; sourceTree = "<group>"; };
|
8359FFFF17FEF40E0060F3ED /* unrar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unrar.cpp; sourceTree = "<group>"; };
|
||||||
|
83747BE12862D78E0021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
83756F611D23A95B003A7676 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; };
|
83756F611D23A95B003A7676 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; };
|
||||||
83C2108E19CD81F50093C461 /* headers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = headers.cpp; sourceTree = "<group>"; };
|
83C2108E19CD81F50093C461 /* headers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = headers.cpp; sourceTree = "<group>"; };
|
||||||
83C2108F19CD81F50093C461 /* headers5.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = headers5.hpp; sourceTree = "<group>"; };
|
83C2108F19CD81F50093C461 /* headers5.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = headers5.hpp; sourceTree = "<group>"; };
|
||||||
|
@ -301,6 +303,7 @@
|
||||||
8359FF3217FEF39F0060F3ED = {
|
8359FF3217FEF39F0060F3ED = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747BE02862D78E0021245F /* Xcode-config */,
|
||||||
8359FF4517FEF39F0060F3ED /* File_Extractor */,
|
8359FF4517FEF39F0060F3ED /* File_Extractor */,
|
||||||
8359FF3E17FEF39F0060F3ED /* Frameworks */,
|
8359FF3E17FEF39F0060F3ED /* Frameworks */,
|
||||||
8359FF3D17FEF39F0060F3ED /* Products */,
|
8359FF3D17FEF39F0060F3ED /* Products */,
|
||||||
|
@ -513,6 +516,15 @@
|
||||||
path = unrar;
|
path = unrar;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
83747BE02862D78E0021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747BE12862D78E0021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXHeadersBuildPhase section */
|
/* Begin PBXHeadersBuildPhase section */
|
||||||
|
@ -624,7 +636,7 @@
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
8359FF3B17FEF39F0060F3ED = {
|
8359FF3B17FEF39F0060F3ED = {
|
||||||
DevelopmentTeam = "";
|
DevelopmentTeam = "";
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -654,6 +666,7 @@
|
||||||
files = (
|
files = (
|
||||||
8359004817FEF40E0060F3ED /* readme.txt in Resources */,
|
8359004817FEF40E0060F3ED /* readme.txt in Resources */,
|
||||||
8359FF4A17FEF39F0060F3ED /* InfoPlist.strings in Resources */,
|
8359FF4A17FEF39F0060F3ED /* InfoPlist.strings in Resources */,
|
||||||
|
83747BE32862D78F0021245F /* Shared.xcconfig in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -746,6 +759,7 @@
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
8359FF6217FEF39F0060F3ED /* Debug */ = {
|
8359FF6217FEF39F0060F3ED /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BE12862D78E0021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -793,7 +807,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
|
@ -801,6 +815,7 @@
|
||||||
};
|
};
|
||||||
8359FF6317FEF39F0060F3ED /* Release */ = {
|
8359FF6317FEF39F0060F3ED /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BE12862D78E0021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -841,7 +856,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
@ -849,11 +864,8 @@
|
||||||
8359FF6517FEF39F0060F3ED /* Debug */ = {
|
8359FF6517FEF39F0060F3ED /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -867,7 +879,6 @@
|
||||||
INSTALL_PATH = "@rpath";
|
INSTALL_PATH = "@rpath";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.fileextractor;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.fileextractor;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
|
@ -877,11 +888,8 @@
|
||||||
8359FF6617FEF39F0060F3ED /* Release */ = {
|
8359FF6617FEF39F0060F3ED /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -895,7 +903,6 @@
|
||||||
INSTALL_PATH = "@rpath";
|
INSTALL_PATH = "@rpath";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.fileextractor;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.fileextractor;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
|
|
|
@ -112,6 +112,7 @@
|
||||||
8370B7AE17F615FE001A4D7A /* Spc_Filter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8370B70B17F615FE001A4D7A /* Spc_Filter.h */; };
|
8370B7AE17F615FE001A4D7A /* Spc_Filter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8370B70B17F615FE001A4D7A /* Spc_Filter.h */; };
|
||||||
8370B7AF17F615FE001A4D7A /* Spc_Sfm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8370B70C17F615FE001A4D7A /* Spc_Sfm.cpp */; };
|
8370B7AF17F615FE001A4D7A /* Spc_Sfm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8370B70C17F615FE001A4D7A /* Spc_Sfm.cpp */; };
|
||||||
8370B7B017F615FE001A4D7A /* Spc_Sfm.h in Headers */ = {isa = PBXBuildFile; fileRef = 8370B70D17F615FE001A4D7A /* Spc_Sfm.h */; };
|
8370B7B017F615FE001A4D7A /* Spc_Sfm.h in Headers */ = {isa = PBXBuildFile; fileRef = 8370B70D17F615FE001A4D7A /* Spc_Sfm.h */; };
|
||||||
|
83747B812862D4DB0021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747B7F2862D4DB0021245F /* Shared.xcconfig */; };
|
||||||
83FC5D5E181B47FB00B917E5 /* dsp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83FC5D3B181B47FB00B917E5 /* dsp.cpp */; };
|
83FC5D5E181B47FB00B917E5 /* dsp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83FC5D3B181B47FB00B917E5 /* dsp.cpp */; };
|
||||||
83FC5D5F181B47FB00B917E5 /* dsp.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 83FC5D3C181B47FB00B917E5 /* dsp.hpp */; };
|
83FC5D5F181B47FB00B917E5 /* dsp.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 83FC5D3C181B47FB00B917E5 /* dsp.hpp */; };
|
||||||
83FC5D78181B47FB00B917E5 /* smp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83FC5D57181B47FB00B917E5 /* smp.cpp */; };
|
83FC5D78181B47FB00B917E5 /* smp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83FC5D57181B47FB00B917E5 /* smp.cpp */; };
|
||||||
|
@ -236,6 +237,7 @@
|
||||||
8370B70B17F615FE001A4D7A /* Spc_Filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Spc_Filter.h; path = gme/Spc_Filter.h; sourceTree = "<group>"; };
|
8370B70B17F615FE001A4D7A /* Spc_Filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Spc_Filter.h; path = gme/Spc_Filter.h; sourceTree = "<group>"; };
|
||||||
8370B70C17F615FE001A4D7A /* Spc_Sfm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Spc_Sfm.cpp; path = gme/Spc_Sfm.cpp; sourceTree = "<group>"; };
|
8370B70C17F615FE001A4D7A /* Spc_Sfm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Spc_Sfm.cpp; path = gme/Spc_Sfm.cpp; sourceTree = "<group>"; };
|
||||||
8370B70D17F615FE001A4D7A /* Spc_Sfm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Spc_Sfm.h; path = gme/Spc_Sfm.h; sourceTree = "<group>"; };
|
8370B70D17F615FE001A4D7A /* Spc_Sfm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Spc_Sfm.h; path = gme/Spc_Sfm.h; sourceTree = "<group>"; };
|
||||||
|
83747B7F2862D4DB0021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
83FC5D3B181B47FB00B917E5 /* dsp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dsp.cpp; sourceTree = "<group>"; };
|
83FC5D3B181B47FB00B917E5 /* dsp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dsp.cpp; sourceTree = "<group>"; };
|
||||||
83FC5D3C181B47FB00B917E5 /* dsp.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = dsp.hpp; sourceTree = "<group>"; };
|
83FC5D3C181B47FB00B917E5 /* dsp.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = dsp.hpp; sourceTree = "<group>"; };
|
||||||
83FC5D57181B47FB00B917E5 /* smp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = smp.cpp; sourceTree = "<group>"; };
|
83FC5D57181B47FB00B917E5 /* smp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = smp.cpp; sourceTree = "<group>"; };
|
||||||
|
@ -279,6 +281,7 @@
|
||||||
0867D691FE84028FC02AAC07 /* GME */ = {
|
0867D691FE84028FC02AAC07 /* GME */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747B7E2862D4DB0021245F /* Xcode-config */,
|
||||||
17C8F1850CBED267008D969D /* Headers */,
|
17C8F1850CBED267008D969D /* Headers */,
|
||||||
17C8F1860CBED26C008D969D /* Source */,
|
17C8F1860CBED26C008D969D /* Source */,
|
||||||
089C1665FE841158C02AAC07 /* Resources */,
|
089C1665FE841158C02AAC07 /* Resources */,
|
||||||
|
@ -460,6 +463,15 @@
|
||||||
path = ext;
|
path = ext;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
83747B7E2862D4DB0021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747B7F2862D4DB0021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
83FC5D35181B47FB00B917E5 /* higan */ = {
|
83FC5D35181B47FB00B917E5 /* higan */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -619,7 +631,7 @@
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
8DC2EF4F0486A6940098B216 = {
|
8DC2EF4F0486A6940098B216 = {
|
||||||
DevelopmentTeam = "";
|
DevelopmentTeam = "";
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -649,6 +661,7 @@
|
||||||
files = (
|
files = (
|
||||||
83489CE22783CAC100BDCEA2 /* emu2413_NESpatches.txt in Resources */,
|
83489CE22783CAC100BDCEA2 /* emu2413_NESpatches.txt in Resources */,
|
||||||
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,
|
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,
|
||||||
|
83747B812862D4DB0021245F /* Shared.xcconfig in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -730,12 +743,9 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -754,7 +764,6 @@
|
||||||
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
|
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.gme;
|
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.gme;
|
||||||
PRODUCT_NAME = GME;
|
PRODUCT_NAME = GME;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SHARED_PRECOMPS_DIR = "";
|
SHARED_PRECOMPS_DIR = "";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
|
@ -769,11 +778,8 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -790,7 +796,6 @@
|
||||||
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
|
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.gme;
|
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.gme;
|
||||||
PRODUCT_NAME = GME;
|
PRODUCT_NAME = GME;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SHARED_PRECOMPS_DIR = "";
|
SHARED_PRECOMPS_DIR = "";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
|
@ -801,6 +806,7 @@
|
||||||
};
|
};
|
||||||
1DEB91B208733DA50010E9CD /* Debug */ = {
|
1DEB91B208733DA50010E9CD /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747B7F2862D4DB0021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -836,7 +842,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
OBJROOT = ../../build;
|
OBJROOT = ../../build;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
@ -846,6 +852,7 @@
|
||||||
};
|
};
|
||||||
1DEB91B308733DA50010E9CD /* Release */ = {
|
1DEB91B308733DA50010E9CD /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747B7F2862D4DB0021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -879,7 +886,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
OBJROOT = ../../build;
|
OBJROOT = ../../build;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SYMROOT = ../../build;
|
SYMROOT = ../../build;
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
834379A017F97CF600584396 /* Globals.h in Headers */ = {isa = PBXBuildFile; fileRef = 8343798617F97CF600584396 /* Globals.h */; settings = {ATTRIBUTES = (Private, ); }; };
|
834379A017F97CF600584396 /* Globals.h in Headers */ = {isa = PBXBuildFile; fileRef = 8343798617F97CF600584396 /* Globals.h */; settings = {ATTRIBUTES = (Private, ); }; };
|
||||||
834379A117F97CF600584396 /* Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8343798717F97CF600584396 /* Sound.cpp */; };
|
834379A117F97CF600584396 /* Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8343798717F97CF600584396 /* Sound.cpp */; };
|
||||||
834379A217F97CF600584396 /* Sound.h in Headers */ = {isa = PBXBuildFile; fileRef = 8343798817F97CF600584396 /* Sound.h */; settings = {ATTRIBUTES = (Private, ); }; };
|
834379A217F97CF600584396 /* Sound.h in Headers */ = {isa = PBXBuildFile; fileRef = 8343798817F97CF600584396 /* Sound.h */; settings = {ATTRIBUTES = (Private, ); }; };
|
||||||
|
83747B902862D5040021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747B8E2862D5040021245F /* Shared.xcconfig */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
@ -67,6 +68,7 @@
|
||||||
8343798617F97CF600584396 /* Globals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Globals.h; sourceTree = "<group>"; };
|
8343798617F97CF600584396 /* Globals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Globals.h; sourceTree = "<group>"; };
|
||||||
8343798717F97CF600584396 /* Sound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Sound.cpp; sourceTree = "<group>"; };
|
8343798717F97CF600584396 /* Sound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Sound.cpp; sourceTree = "<group>"; };
|
||||||
8343798817F97CF600584396 /* Sound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sound.h; sourceTree = "<group>"; };
|
8343798817F97CF600584396 /* Sound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sound.h; sourceTree = "<group>"; };
|
||||||
|
83747B8E2862D5040021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
@ -83,6 +85,7 @@
|
||||||
8343792B17F97BDB00584396 = {
|
8343792B17F97BDB00584396 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747B8D2862D5040021245F /* Xcode-config */,
|
||||||
8343793E17F97BDB00584396 /* HighlyAdvanced */,
|
8343793E17F97BDB00584396 /* HighlyAdvanced */,
|
||||||
8343793717F97BDB00584396 /* Frameworks */,
|
8343793717F97BDB00584396 /* Frameworks */,
|
||||||
8343793617F97BDB00584396 /* Products */,
|
8343793617F97BDB00584396 /* Products */,
|
||||||
|
@ -182,6 +185,15 @@
|
||||||
path = vbam/gba;
|
path = vbam/gba;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
83747B8D2862D5040021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747B8E2862D5040021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXHeadersBuildPhase section */
|
/* Begin PBXHeadersBuildPhase section */
|
||||||
|
@ -240,7 +252,7 @@
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
8343793417F97BDB00584396 = {
|
8343793417F97BDB00584396 = {
|
||||||
DevelopmentTeam = "";
|
DevelopmentTeam = "";
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -269,6 +281,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
8343794317F97BDB00584396 /* InfoPlist.strings in Resources */,
|
8343794317F97BDB00584396 /* InfoPlist.strings in Resources */,
|
||||||
|
83747B902862D5040021245F /* Shared.xcconfig in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -309,6 +322,7 @@
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
8343795B17F97BDB00584396 /* Debug */ = {
|
8343795B17F97BDB00584396 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747B8E2862D5040021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -355,7 +369,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
|
@ -363,6 +377,7 @@
|
||||||
};
|
};
|
||||||
8343795C17F97BDB00584396 /* Release */ = {
|
8343795C17F97BDB00584396 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747B8E2862D5040021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -402,7 +417,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
@ -410,11 +425,8 @@
|
||||||
8343795E17F97BDB00584396 /* Debug */ = {
|
8343795E17F97BDB00584396 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -427,7 +439,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.highlyadvanced;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.highlyadvanced;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
|
@ -437,11 +448,8 @@
|
||||||
8343795F17F97BDB00584396 /* Release */ = {
|
8343795F17F97BDB00584396 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -451,7 +459,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.highlyadvanced;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.highlyadvanced;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
8360EF6A17F92DB0005208A4 /* spucore.h in Headers */ = {isa = PBXBuildFile; fileRef = 8360EF5717F92DB0005208A4 /* spucore.h */; };
|
8360EF6A17F92DB0005208A4 /* spucore.h in Headers */ = {isa = PBXBuildFile; fileRef = 8360EF5717F92DB0005208A4 /* spucore.h */; };
|
||||||
8360EF6B17F92DB0005208A4 /* vfs.c in Sources */ = {isa = PBXBuildFile; fileRef = 8360EF5817F92DB0005208A4 /* vfs.c */; };
|
8360EF6B17F92DB0005208A4 /* vfs.c in Sources */ = {isa = PBXBuildFile; fileRef = 8360EF5817F92DB0005208A4 /* vfs.c */; };
|
||||||
8360EF6C17F92DB0005208A4 /* vfs.h in Headers */ = {isa = PBXBuildFile; fileRef = 8360EF5917F92DB0005208A4 /* vfs.h */; };
|
8360EF6C17F92DB0005208A4 /* vfs.h in Headers */ = {isa = PBXBuildFile; fileRef = 8360EF5917F92DB0005208A4 /* vfs.h */; };
|
||||||
|
83747BA42862D5390021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747BA22862D5390021245F /* Shared.xcconfig */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
@ -49,6 +50,7 @@
|
||||||
8360EF5717F92DB0005208A4 /* spucore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spucore.h; path = Core/spucore.h; sourceTree = "<group>"; };
|
8360EF5717F92DB0005208A4 /* spucore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spucore.h; path = Core/spucore.h; sourceTree = "<group>"; };
|
||||||
8360EF5817F92DB0005208A4 /* vfs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vfs.c; path = Core/vfs.c; sourceTree = "<group>"; };
|
8360EF5817F92DB0005208A4 /* vfs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vfs.c; path = Core/vfs.c; sourceTree = "<group>"; };
|
||||||
8360EF5917F92DB0005208A4 /* vfs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vfs.h; path = Core/vfs.h; sourceTree = "<group>"; };
|
8360EF5917F92DB0005208A4 /* vfs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vfs.h; path = Core/vfs.h; sourceTree = "<group>"; };
|
||||||
|
83747BA22862D5390021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
@ -65,6 +67,7 @@
|
||||||
8360EF0617F92C91005208A4 = {
|
8360EF0617F92C91005208A4 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747BA12862D5390021245F /* Xcode-config */,
|
||||||
8360EF1917F92C91005208A4 /* HighlyExperimental */,
|
8360EF1917F92C91005208A4 /* HighlyExperimental */,
|
||||||
8360EF1217F92C91005208A4 /* Frameworks */,
|
8360EF1217F92C91005208A4 /* Frameworks */,
|
||||||
8360EF1117F92C91005208A4 /* Products */,
|
8360EF1117F92C91005208A4 /* Products */,
|
||||||
|
@ -128,6 +131,15 @@
|
||||||
name = "Supporting Files";
|
name = "Supporting Files";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
83747BA12862D5390021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747BA22862D5390021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXHeadersBuildPhase section */
|
/* Begin PBXHeadersBuildPhase section */
|
||||||
|
@ -179,7 +191,7 @@
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
8360EF0F17F92C91005208A4 = {
|
8360EF0F17F92C91005208A4 = {
|
||||||
DevelopmentTeam = "";
|
DevelopmentTeam = "";
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -208,6 +220,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
8360EF1E17F92C91005208A4 /* InfoPlist.strings in Resources */,
|
8360EF1E17F92C91005208A4 /* InfoPlist.strings in Resources */,
|
||||||
|
83747BA42862D5390021245F /* Shared.xcconfig in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -246,6 +259,7 @@
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
8360EF3617F92C91005208A4 /* Debug */ = {
|
8360EF3617F92C91005208A4 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BA22862D5390021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -293,13 +307,14 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
8360EF3717F92C91005208A4 /* Release */ = {
|
8360EF3717F92C91005208A4 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BA22862D5390021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -340,18 +355,15 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
8360EF3917F92C91005208A4 /* Debug */ = {
|
8360EF3917F92C91005208A4 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -367,7 +379,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.highlyexperimental;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.highlyexperimental;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
};
|
};
|
||||||
|
@ -376,11 +387,8 @@
|
||||||
8360EF3A17F92C91005208A4 /* Release */ = {
|
8360EF3A17F92C91005208A4 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -395,7 +403,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.highlyexperimental;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.highlyexperimental;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
8343792417F96EA600584396 /* qsound.h in Headers */ = {isa = PBXBuildFile; fileRef = 8343791B17F96EA600584396 /* qsound.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
8343792417F96EA600584396 /* qsound.h in Headers */ = {isa = PBXBuildFile; fileRef = 8343791B17F96EA600584396 /* qsound.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
8343792517F96EA600584396 /* z80.c in Sources */ = {isa = PBXBuildFile; fileRef = 8343791C17F96EA600584396 /* z80.c */; };
|
8343792517F96EA600584396 /* z80.c in Sources */ = {isa = PBXBuildFile; fileRef = 8343791C17F96EA600584396 /* z80.c */; };
|
||||||
8343792617F96EA600584396 /* z80.h in Headers */ = {isa = PBXBuildFile; fileRef = 8343791D17F96EA600584396 /* z80.h */; };
|
8343792617F96EA600584396 /* z80.h in Headers */ = {isa = PBXBuildFile; fileRef = 8343791D17F96EA600584396 /* z80.h */; };
|
||||||
|
83747B952862D5160021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747B932862D5160021245F /* Shared.xcconfig */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
@ -33,6 +34,7 @@
|
||||||
8343791B17F96EA600584396 /* qsound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = qsound.h; path = Core/qsound.h; sourceTree = "<group>"; };
|
8343791B17F96EA600584396 /* qsound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = qsound.h; path = Core/qsound.h; sourceTree = "<group>"; };
|
||||||
8343791C17F96EA600584396 /* z80.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = z80.c; path = Core/z80.c; sourceTree = "<group>"; };
|
8343791C17F96EA600584396 /* z80.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = z80.c; path = Core/z80.c; sourceTree = "<group>"; };
|
||||||
8343791D17F96EA600584396 /* z80.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = z80.h; path = Core/z80.h; sourceTree = "<group>"; };
|
8343791D17F96EA600584396 /* z80.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = z80.h; path = Core/z80.h; sourceTree = "<group>"; };
|
||||||
|
83747B932862D5160021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
@ -49,6 +51,7 @@
|
||||||
834378D417F96E2600584396 = {
|
834378D417F96E2600584396 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747B922862D5160021245F /* Xcode-config */,
|
||||||
834378E717F96E2600584396 /* HighlyQuixotic */,
|
834378E717F96E2600584396 /* HighlyQuixotic */,
|
||||||
834378E017F96E2600584396 /* Frameworks */,
|
834378E017F96E2600584396 /* Frameworks */,
|
||||||
834378DF17F96E2600584396 /* Products */,
|
834378DF17F96E2600584396 /* Products */,
|
||||||
|
@ -104,6 +107,15 @@
|
||||||
name = "Supporting Files";
|
name = "Supporting Files";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
83747B922862D5160021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747B932862D5160021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXHeadersBuildPhase section */
|
/* Begin PBXHeadersBuildPhase section */
|
||||||
|
@ -151,7 +163,7 @@
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
834378DD17F96E2600584396 = {
|
834378DD17F96E2600584396 = {
|
||||||
DevelopmentTeam = "";
|
DevelopmentTeam = "";
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -180,6 +192,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
834378EC17F96E2600584396 /* InfoPlist.strings in Resources */,
|
834378EC17F96E2600584396 /* InfoPlist.strings in Resources */,
|
||||||
|
83747B952862D5160021245F /* Shared.xcconfig in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -214,6 +227,7 @@
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
8343790417F96E2600584396 /* Debug */ = {
|
8343790417F96E2600584396 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747B932862D5160021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -263,7 +277,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
|
@ -272,6 +286,7 @@
|
||||||
};
|
};
|
||||||
8343790517F96E2600584396 /* Release */ = {
|
8343790517F96E2600584396 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747B932862D5160021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -317,7 +332,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
|
@ -326,11 +341,8 @@
|
||||||
8343790717F96E2600584396 /* Debug */ = {
|
8343790717F96E2600584396 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -339,7 +351,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.highlyquixotic;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.highlyquixotic;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
};
|
};
|
||||||
|
@ -348,11 +359,8 @@
|
||||||
8343790817F96E2600584396 /* Release */ = {
|
8343790817F96E2600584396 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -361,7 +369,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.highlyquixotic;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.highlyquixotic;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
834378CC17F9666D00584396 /* m68kops.c in Sources */ = {isa = PBXBuildFile; fileRef = 834378C217F9666D00584396 /* m68kops.c */; };
|
834378CC17F9666D00584396 /* m68kops.c in Sources */ = {isa = PBXBuildFile; fileRef = 834378C217F9666D00584396 /* m68kops.c */; };
|
||||||
834378CD17F9666D00584396 /* m68kops.h in Headers */ = {isa = PBXBuildFile; fileRef = 834378C317F9666D00584396 /* m68kops.h */; };
|
834378CD17F9666D00584396 /* m68kops.h in Headers */ = {isa = PBXBuildFile; fileRef = 834378C317F9666D00584396 /* m68kops.h */; };
|
||||||
834378CE17F9666D00584396 /* macros.h in Headers */ = {isa = PBXBuildFile; fileRef = 834378C417F9666D00584396 /* macros.h */; };
|
834378CE17F9666D00584396 /* macros.h in Headers */ = {isa = PBXBuildFile; fileRef = 834378C417F9666D00584396 /* macros.h */; };
|
||||||
|
83747B9A2862D5230021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747B982862D5230021245F /* Shared.xcconfig */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
@ -51,6 +52,7 @@
|
||||||
834378C217F9666D00584396 /* m68kops.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = m68kops.c; sourceTree = "<group>"; };
|
834378C217F9666D00584396 /* m68kops.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = m68kops.c; sourceTree = "<group>"; };
|
||||||
834378C317F9666D00584396 /* m68kops.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = m68kops.h; sourceTree = "<group>"; };
|
834378C317F9666D00584396 /* m68kops.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = m68kops.h; sourceTree = "<group>"; };
|
||||||
834378C417F9666D00584396 /* macros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = macros.h; sourceTree = "<group>"; };
|
834378C417F9666D00584396 /* macros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = macros.h; sourceTree = "<group>"; };
|
||||||
|
83747B982862D5230021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
@ -67,6 +69,7 @@
|
||||||
8343786417F9658E00584396 = {
|
8343786417F9658E00584396 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747B972862D5230021245F /* Xcode-config */,
|
||||||
8343787717F9658E00584396 /* HighlyTheoretical */,
|
8343787717F9658E00584396 /* HighlyTheoretical */,
|
||||||
8343787017F9658E00584396 /* Frameworks */,
|
8343787017F9658E00584396 /* Frameworks */,
|
||||||
8343786F17F9658E00584396 /* Products */,
|
8343786F17F9658E00584396 /* Products */,
|
||||||
|
@ -140,6 +143,15 @@
|
||||||
path = Core/m68k;
|
path = Core/m68k;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
83747B972862D5230021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747B982862D5230021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXHeadersBuildPhase section */
|
/* Begin PBXHeadersBuildPhase section */
|
||||||
|
@ -193,7 +205,7 @@
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
8343786D17F9658E00584396 = {
|
8343786D17F9658E00584396 = {
|
||||||
DevelopmentTeam = "";
|
DevelopmentTeam = "";
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -222,6 +234,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
8343787C17F9658E00584396 /* InfoPlist.strings in Resources */,
|
8343787C17F9658E00584396 /* InfoPlist.strings in Resources */,
|
||||||
|
83747B9A2862D5230021245F /* Shared.xcconfig in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -259,6 +272,7 @@
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
8343789417F9658E00584396 /* Debug */ = {
|
8343789417F9658E00584396 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747B982862D5230021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -311,7 +325,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
|
@ -319,6 +333,7 @@
|
||||||
};
|
};
|
||||||
8343789517F9658E00584396 /* Release */ = {
|
8343789517F9658E00584396 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747B982862D5230021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -367,7 +382,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
@ -375,11 +390,8 @@
|
||||||
8343789717F9658E00584396 /* Debug */ = {
|
8343789717F9658E00584396 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -388,7 +400,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.highlytheoretical;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.highlytheoretical;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
|
@ -398,11 +409,8 @@
|
||||||
8343789817F9658E00584396 /* Release */ = {
|
8343789817F9658E00584396 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -411,7 +419,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.highlytheoretical;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.highlytheoretical;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
836FB592182054B700B3AD2D /* hvl_replay.h in Headers */ = {isa = PBXBuildFile; fileRef = 836FB58E182054B700B3AD2D /* hvl_replay.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
836FB592182054B700B3AD2D /* hvl_replay.h in Headers */ = {isa = PBXBuildFile; fileRef = 836FB58E182054B700B3AD2D /* hvl_replay.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
836FB593182054B700B3AD2D /* blip_buf.c in Sources */ = {isa = PBXBuildFile; fileRef = 836FB58F182054B700B3AD2D /* blip_buf.c */; };
|
836FB593182054B700B3AD2D /* blip_buf.c in Sources */ = {isa = PBXBuildFile; fileRef = 836FB58F182054B700B3AD2D /* blip_buf.c */; };
|
||||||
836FB594182054B700B3AD2D /* blip_buf.h in Headers */ = {isa = PBXBuildFile; fileRef = 836FB590182054B700B3AD2D /* blip_buf.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
836FB594182054B700B3AD2D /* blip_buf.h in Headers */ = {isa = PBXBuildFile; fileRef = 836FB590182054B700B3AD2D /* blip_buf.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
|
83747BB32862D55A0021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747BB12862D55A0021245F /* Shared.xcconfig */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
@ -23,6 +24,7 @@
|
||||||
836FB58E182054B700B3AD2D /* hvl_replay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hvl_replay.h; sourceTree = "<group>"; };
|
836FB58E182054B700B3AD2D /* hvl_replay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hvl_replay.h; sourceTree = "<group>"; };
|
||||||
836FB58F182054B700B3AD2D /* blip_buf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = blip_buf.c; sourceTree = "<group>"; };
|
836FB58F182054B700B3AD2D /* blip_buf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = blip_buf.c; sourceTree = "<group>"; };
|
||||||
836FB590182054B700B3AD2D /* blip_buf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blip_buf.h; sourceTree = "<group>"; };
|
836FB590182054B700B3AD2D /* blip_buf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blip_buf.h; sourceTree = "<group>"; };
|
||||||
|
83747BB12862D55A0021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
@ -39,6 +41,7 @@
|
||||||
836FB54C182053D700B3AD2D = {
|
836FB54C182053D700B3AD2D = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747BB02862D55A0021245F /* Xcode-config */,
|
||||||
836FB55F182053D700B3AD2D /* HivelyPlayer */,
|
836FB55F182053D700B3AD2D /* HivelyPlayer */,
|
||||||
836FB558182053D700B3AD2D /* Frameworks */,
|
836FB558182053D700B3AD2D /* Frameworks */,
|
||||||
836FB557182053D700B3AD2D /* Products */,
|
836FB557182053D700B3AD2D /* Products */,
|
||||||
|
@ -89,6 +92,15 @@
|
||||||
name = "Supporting Files";
|
name = "Supporting Files";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
83747BB02862D55A0021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747BB12862D55A0021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXHeadersBuildPhase section */
|
/* Begin PBXHeadersBuildPhase section */
|
||||||
|
@ -133,7 +145,7 @@
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
836FB555182053D700B3AD2D = {
|
836FB555182053D700B3AD2D = {
|
||||||
DevelopmentTeam = "";
|
DevelopmentTeam = "";
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -162,6 +174,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
836FB564182053D700B3AD2D /* InfoPlist.strings in Resources */,
|
836FB564182053D700B3AD2D /* InfoPlist.strings in Resources */,
|
||||||
|
83747BB32862D55A0021245F /* Shared.xcconfig in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -194,6 +207,7 @@
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
836FB57C182053D700B3AD2D /* Debug */ = {
|
836FB57C182053D700B3AD2D /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BB12862D55A0021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -240,7 +254,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
|
@ -249,6 +263,7 @@
|
||||||
};
|
};
|
||||||
836FB57D182053D700B3AD2D /* Release */ = {
|
836FB57D182053D700B3AD2D /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BB12862D55A0021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -289,7 +304,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
|
@ -298,11 +313,8 @@
|
||||||
836FB57F182053D700B3AD2D /* Debug */ = {
|
836FB57F182053D700B3AD2D /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -310,7 +322,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.hivelyplayer;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.hivelyplayer;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
};
|
};
|
||||||
|
@ -319,11 +330,8 @@
|
||||||
836FB580182053D700B3AD2D /* Release */ = {
|
836FB580182053D700B3AD2D /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -331,7 +339,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.hivelyplayer;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.hivelyplayer;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
83747BBD2862D5760021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747BBB2862D5760021245F /* Shared.xcconfig */; };
|
||||||
83A16EF019F48A2E00842DBC /* huffman.c in Sources */ = {isa = PBXBuildFile; fileRef = 83A16EED19F48A2E00842DBC /* huffman.c */; };
|
83A16EF019F48A2E00842DBC /* huffman.c in Sources */ = {isa = PBXBuildFile; fileRef = 83A16EED19F48A2E00842DBC /* huffman.c */; };
|
||||||
83A16EF119F48A2E00842DBC /* mpc_bits_reader.c in Sources */ = {isa = PBXBuildFile; fileRef = 83A16EEE19F48A2E00842DBC /* mpc_bits_reader.c */; };
|
83A16EF119F48A2E00842DBC /* mpc_bits_reader.c in Sources */ = {isa = PBXBuildFile; fileRef = 83A16EEE19F48A2E00842DBC /* mpc_bits_reader.c */; };
|
||||||
83A16EF219F48A2E00842DBC /* mpc_demux.c in Sources */ = {isa = PBXBuildFile; fileRef = 83A16EEF19F48A2E00842DBC /* mpc_demux.c */; };
|
83A16EF219F48A2E00842DBC /* mpc_demux.c in Sources */ = {isa = PBXBuildFile; fileRef = 83A16EEF19F48A2E00842DBC /* mpc_demux.c */; };
|
||||||
|
@ -38,6 +39,7 @@
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
833F683F1CDBCAB300AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
833F683F1CDBCAB300AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
835C889222CC1885001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
835C889222CC1885001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
|
83747BBB2862D5760021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
83A16EED19F48A2E00842DBC /* huffman.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = huffman.c; path = Files/src/huffman.c; sourceTree = "<group>"; };
|
83A16EED19F48A2E00842DBC /* huffman.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = huffman.c; path = Files/src/huffman.c; sourceTree = "<group>"; };
|
||||||
83A16EEE19F48A2E00842DBC /* mpc_bits_reader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mpc_bits_reader.c; path = Files/src/mpc_bits_reader.c; sourceTree = "<group>"; };
|
83A16EEE19F48A2E00842DBC /* mpc_bits_reader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mpc_bits_reader.c; path = Files/src/mpc_bits_reader.c; sourceTree = "<group>"; };
|
||||||
83A16EEF19F48A2E00842DBC /* mpc_demux.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mpc_demux.c; path = Files/src/mpc_demux.c; sourceTree = "<group>"; };
|
83A16EEF19F48A2E00842DBC /* mpc_demux.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mpc_demux.c; path = Files/src/mpc_demux.c; sourceTree = "<group>"; };
|
||||||
|
@ -89,6 +91,7 @@
|
||||||
0867D691FE84028FC02AAC07 /* MPCDec */ = {
|
0867D691FE84028FC02AAC07 /* MPCDec */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747BBA2862D5760021245F /* Xcode-config */,
|
||||||
8E6096BB09F314B2006D8BD7 /* Headers */,
|
8E6096BB09F314B2006D8BD7 /* Headers */,
|
||||||
8E6096BA09F314AD006D8BD7 /* Source */,
|
8E6096BA09F314AD006D8BD7 /* Source */,
|
||||||
089C1665FE841158C02AAC07 /* Resources */,
|
089C1665FE841158C02AAC07 /* Resources */,
|
||||||
|
@ -130,6 +133,15 @@
|
||||||
name = "Other Frameworks";
|
name = "Other Frameworks";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
83747BBA2862D5760021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747BBB2862D5760021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
83A16F1619F48FB800842DBC /* mpcdec */ = {
|
83A16F1619F48FB800842DBC /* mpcdec */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -233,7 +245,7 @@
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
8DC2EF4F0486A6940098B216 = {
|
8DC2EF4F0486A6940098B216 = {
|
||||||
DevelopmentTeam = "";
|
DevelopmentTeam = "";
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -262,6 +274,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,
|
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,
|
||||||
|
83747BBD2862D5760021245F /* Shared.xcconfig in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -306,12 +319,9 @@
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -325,7 +335,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.mpcdec;
|
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.mpcdec;
|
||||||
PRODUCT_NAME = mpcdec;
|
PRODUCT_NAME = mpcdec;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
|
@ -337,11 +346,8 @@
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -352,7 +358,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.mpcdec;
|
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.mpcdec;
|
||||||
PRODUCT_NAME = mpcdec;
|
PRODUCT_NAME = mpcdec;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
USER_HEADER_SEARCH_PATHS = Files/include/;
|
USER_HEADER_SEARCH_PATHS = Files/include/;
|
||||||
|
@ -362,6 +367,7 @@
|
||||||
};
|
};
|
||||||
1DEB91B208733DA50010E9CD /* Debug */ = {
|
1DEB91B208733DA50010E9CD /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BBB2862D5760021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -396,7 +402,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SYMROOT = ../../build;
|
SYMROOT = ../../build;
|
||||||
|
@ -405,6 +411,7 @@
|
||||||
};
|
};
|
||||||
1DEB91B308733DA50010E9CD /* Release */ = {
|
1DEB91B308733DA50010E9CD /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BBB2862D5760021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -437,7 +444,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SYMROOT = ../../build;
|
SYMROOT = ../../build;
|
||||||
};
|
};
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
831132EA21F9565F001F678F /* OPL.h in Headers */ = {isa = PBXBuildFile; fileRef = 831132E521F9565F001F678F /* OPL.h */; };
|
831132EA21F9565F001F678F /* OPL.h in Headers */ = {isa = PBXBuildFile; fileRef = 831132E521F9565F001F678F /* OPL.h */; };
|
||||||
831132EB21F9565F001F678F /* Load_c67.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 831132E621F9565F001F678F /* Load_c67.cpp */; };
|
831132EB21F9565F001F678F /* Load_c67.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 831132E621F9565F001F678F /* Load_c67.cpp */; };
|
||||||
831132EC21F9565F001F678F /* OPL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 831132E721F9565F001F678F /* OPL.cpp */; };
|
831132EC21F9565F001F678F /* OPL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 831132E721F9565F001F678F /* OPL.cpp */; };
|
||||||
|
83747BC72862D58D0021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747BC52862D58D0021245F /* Shared.xcconfig */; };
|
||||||
83AA7D1D2519B619004C5298 /* mptOSError.h in Headers */ = {isa = PBXBuildFile; fileRef = 83AA7D1B2519B618004C5298 /* mptOSError.h */; };
|
83AA7D1D2519B619004C5298 /* mptOSError.h in Headers */ = {isa = PBXBuildFile; fileRef = 83AA7D1B2519B618004C5298 /* mptOSError.h */; };
|
||||||
83AA7D1E2519B619004C5298 /* mptOSException.h in Headers */ = {isa = PBXBuildFile; fileRef = 83AA7D1C2519B618004C5298 /* mptOSException.h */; };
|
83AA7D1E2519B619004C5298 /* mptOSException.h in Headers */ = {isa = PBXBuildFile; fileRef = 83AA7D1C2519B618004C5298 /* mptOSException.h */; };
|
||||||
83AA7D252519B643004C5298 /* Dither.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83AA7D212519B643004C5298 /* Dither.cpp */; };
|
83AA7D252519B643004C5298 /* Dither.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83AA7D212519B643004C5298 /* Dither.cpp */; };
|
||||||
|
@ -303,6 +304,7 @@
|
||||||
831132E521F9565F001F678F /* OPL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPL.h; sourceTree = "<group>"; };
|
831132E521F9565F001F678F /* OPL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPL.h; sourceTree = "<group>"; };
|
||||||
831132E621F9565F001F678F /* Load_c67.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Load_c67.cpp; sourceTree = "<group>"; };
|
831132E621F9565F001F678F /* Load_c67.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Load_c67.cpp; sourceTree = "<group>"; };
|
||||||
831132E721F9565F001F678F /* OPL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OPL.cpp; sourceTree = "<group>"; };
|
831132E721F9565F001F678F /* OPL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OPL.cpp; sourceTree = "<group>"; };
|
||||||
|
83747BC52862D58D0021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
83AA7D1B2519B618004C5298 /* mptOSError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mptOSError.h; sourceTree = "<group>"; };
|
83AA7D1B2519B618004C5298 /* mptOSError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mptOSError.h; sourceTree = "<group>"; };
|
||||||
83AA7D1C2519B618004C5298 /* mptOSException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mptOSException.h; sourceTree = "<group>"; };
|
83AA7D1C2519B618004C5298 /* mptOSException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mptOSException.h; sourceTree = "<group>"; };
|
||||||
83AA7D212519B643004C5298 /* Dither.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Dither.cpp; sourceTree = "<group>"; };
|
83AA7D212519B643004C5298 /* Dither.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Dither.cpp; sourceTree = "<group>"; };
|
||||||
|
@ -579,9 +581,19 @@
|
||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
|
83747BC42862D58D0021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747BC52862D58D0021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
83E5EFB31FFEF7CC00659F0F = {
|
83E5EFB31FFEF7CC00659F0F = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747BC42862D58D0021245F /* Xcode-config */,
|
||||||
83E5EFBF1FFEF7CC00659F0F /* OpenMPT */,
|
83E5EFBF1FFEF7CC00659F0F /* OpenMPT */,
|
||||||
83E5EFBE1FFEF7CC00659F0F /* Products */,
|
83E5EFBE1FFEF7CC00659F0F /* Products */,
|
||||||
83E5FE641FFEFFA400659F0F /* Frameworks */,
|
83E5FE641FFEFFA400659F0F /* Frameworks */,
|
||||||
|
@ -1156,8 +1168,7 @@
|
||||||
ORGANIZATIONNAME = "Christopher Snowhill";
|
ORGANIZATIONNAME = "Christopher Snowhill";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
83E5EFBC1FFEF7CC00659F0F = {
|
83E5EFBC1FFEF7CC00659F0F = {
|
||||||
DevelopmentTeam = "";
|
ProvisioningStyle = Manual;
|
||||||
ProvisioningStyle = Automatic;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1185,6 +1196,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
831132E221F955F4001F678F /* LICENSE in Resources */,
|
831132E221F955F4001F678F /* LICENSE in Resources */,
|
||||||
|
83747BC72862D58D0021245F /* Shared.xcconfig in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -1339,6 +1351,7 @@
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
83E5EFC31FFEF7CC00659F0F /* Debug */ = {
|
83E5EFC31FFEF7CC00659F0F /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BC52862D58D0021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
@ -1369,7 +1382,6 @@
|
||||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGN_IDENTITY = "Mac Developer";
|
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
|
@ -1400,7 +1412,7 @@
|
||||||
OpenMPT/include,
|
OpenMPT/include,
|
||||||
OpenMPT/build/svn_version,
|
OpenMPT/build/svn_version,
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
@ -1412,6 +1424,7 @@
|
||||||
};
|
};
|
||||||
83E5EFC41FFEF7CC00659F0F /* Release */ = {
|
83E5EFC41FFEF7CC00659F0F /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BC52862D58D0021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
@ -1442,7 +1455,6 @@
|
||||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGN_IDENTITY = "Mac Developer";
|
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
|
@ -1469,7 +1481,7 @@
|
||||||
OpenMPT/include,
|
OpenMPT/include,
|
||||||
OpenMPT/build/svn_version,
|
OpenMPT/build/svn_version,
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
USE_HEADERMAP = YES;
|
USE_HEADERMAP = YES;
|
||||||
|
@ -1481,11 +1493,8 @@
|
||||||
83E5EFC61FFEF7CC00659F0F /* Debug */ = {
|
83E5EFC61FFEF7CC00659F0F /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -1496,7 +1505,6 @@
|
||||||
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.libOpenMPTOld;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.libOpenMPTOld;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
|
@ -1504,11 +1512,8 @@
|
||||||
83E5EFC71FFEF7CC00659F0F /* Release */ = {
|
83E5EFC71FFEF7CC00659F0F /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -1519,7 +1524,6 @@
|
||||||
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.libOpenMPTOld;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.libOpenMPTOld;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
|
|
@ -184,6 +184,7 @@
|
||||||
831132EA21F9565F001F678F /* OPL.h in Headers */ = {isa = PBXBuildFile; fileRef = 831132E521F9565F001F678F /* OPL.h */; };
|
831132EA21F9565F001F678F /* OPL.h in Headers */ = {isa = PBXBuildFile; fileRef = 831132E521F9565F001F678F /* OPL.h */; };
|
||||||
831132EB21F9565F001F678F /* Load_c67.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 831132E621F9565F001F678F /* Load_c67.cpp */; };
|
831132EB21F9565F001F678F /* Load_c67.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 831132E621F9565F001F678F /* Load_c67.cpp */; };
|
||||||
831132EC21F9565F001F678F /* OPL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 831132E721F9565F001F678F /* OPL.cpp */; };
|
831132EC21F9565F001F678F /* OPL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 831132E721F9565F001F678F /* OPL.cpp */; };
|
||||||
|
83747BC22862D5820021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747BC02862D5820021245F /* Shared.xcconfig */; };
|
||||||
83AA7D322519B694004C5298 /* TinyFFT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83AA7D2E2519B694004C5298 /* TinyFFT.cpp */; };
|
83AA7D322519B694004C5298 /* TinyFFT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83AA7D2E2519B694004C5298 /* TinyFFT.cpp */; };
|
||||||
83AA7D332519B694004C5298 /* SampleFormatSFZ.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83AA7D2F2519B694004C5298 /* SampleFormatSFZ.cpp */; };
|
83AA7D332519B694004C5298 /* SampleFormatSFZ.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83AA7D2F2519B694004C5298 /* SampleFormatSFZ.cpp */; };
|
||||||
83AA7D342519B694004C5298 /* SampleFormatBRR.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83AA7D302519B694004C5298 /* SampleFormatBRR.cpp */; };
|
83AA7D342519B694004C5298 /* SampleFormatBRR.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83AA7D302519B694004C5298 /* SampleFormatBRR.cpp */; };
|
||||||
|
@ -591,6 +592,7 @@
|
||||||
831132E521F9565F001F678F /* OPL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPL.h; sourceTree = "<group>"; };
|
831132E521F9565F001F678F /* OPL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OPL.h; sourceTree = "<group>"; };
|
||||||
831132E621F9565F001F678F /* Load_c67.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Load_c67.cpp; sourceTree = "<group>"; };
|
831132E621F9565F001F678F /* Load_c67.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Load_c67.cpp; sourceTree = "<group>"; };
|
||||||
831132E721F9565F001F678F /* OPL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OPL.cpp; sourceTree = "<group>"; };
|
831132E721F9565F001F678F /* OPL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OPL.cpp; sourceTree = "<group>"; };
|
||||||
|
83747BC02862D5820021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
83AA7D2E2519B694004C5298 /* TinyFFT.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyFFT.cpp; sourceTree = "<group>"; };
|
83AA7D2E2519B694004C5298 /* TinyFFT.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyFFT.cpp; sourceTree = "<group>"; };
|
||||||
83AA7D2F2519B694004C5298 /* SampleFormatSFZ.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SampleFormatSFZ.cpp; sourceTree = "<group>"; };
|
83AA7D2F2519B694004C5298 /* SampleFormatSFZ.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SampleFormatSFZ.cpp; sourceTree = "<group>"; };
|
||||||
83AA7D302519B694004C5298 /* SampleFormatBRR.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SampleFormatBRR.cpp; sourceTree = "<group>"; };
|
83AA7D302519B694004C5298 /* SampleFormatBRR.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SampleFormatBRR.cpp; sourceTree = "<group>"; };
|
||||||
|
@ -1326,9 +1328,19 @@
|
||||||
path = base;
|
path = base;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
83747BBF2862D5820021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747BC02862D5820021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
83E5EFB31FFEF7CC00659F0F = {
|
83E5EFB31FFEF7CC00659F0F = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747BBF2862D5820021245F /* Xcode-config */,
|
||||||
83E5EFBF1FFEF7CC00659F0F /* OpenMPT */,
|
83E5EFBF1FFEF7CC00659F0F /* OpenMPT */,
|
||||||
83E5EFBE1FFEF7CC00659F0F /* Products */,
|
83E5EFBE1FFEF7CC00659F0F /* Products */,
|
||||||
83E5FE641FFEFFA400659F0F /* Frameworks */,
|
83E5FE641FFEFFA400659F0F /* Frameworks */,
|
||||||
|
@ -2001,8 +2013,7 @@
|
||||||
ORGANIZATIONNAME = "Christopher Snowhill";
|
ORGANIZATIONNAME = "Christopher Snowhill";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
83E5EFBC1FFEF7CC00659F0F = {
|
83E5EFBC1FFEF7CC00659F0F = {
|
||||||
DevelopmentTeam = "";
|
ProvisioningStyle = Manual;
|
||||||
ProvisioningStyle = Automatic;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -2030,6 +2041,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
831132E221F955F4001F678F /* LICENSE in Resources */,
|
831132E221F955F4001F678F /* LICENSE in Resources */,
|
||||||
|
83747BC22862D5820021245F /* Shared.xcconfig in Resources */,
|
||||||
830996BF27787E9A00857684 /* .clang-format in Resources */,
|
830996BF27787E9A00857684 /* .clang-format in Resources */,
|
||||||
830996CF27787E9A00857684 /* LICENSE.BSD-3-Clause.txt in Resources */,
|
830996CF27787E9A00857684 /* LICENSE.BSD-3-Clause.txt in Resources */,
|
||||||
830996AC27787E9A00857684 /* LICENSE.BSL-1.0.txt in Resources */,
|
830996AC27787E9A00857684 /* LICENSE.BSL-1.0.txt in Resources */,
|
||||||
|
@ -2183,6 +2195,7 @@
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
83E5EFC31FFEF7CC00659F0F /* Debug */ = {
|
83E5EFC31FFEF7CC00659F0F /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BC02862D5820021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
@ -2213,7 +2226,6 @@
|
||||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGN_IDENTITY = "Mac Developer";
|
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
|
@ -2258,6 +2270,7 @@
|
||||||
};
|
};
|
||||||
83E5EFC41FFEF7CC00659F0F /* Release */ = {
|
83E5EFC41FFEF7CC00659F0F /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BC02862D5820021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
@ -2288,7 +2301,6 @@
|
||||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGN_IDENTITY = "Mac Developer";
|
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
|
@ -2329,11 +2341,8 @@
|
||||||
83E5EFC61FFEF7CC00659F0F /* Debug */ = {
|
83E5EFC61FFEF7CC00659F0F /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -2343,7 +2352,6 @@
|
||||||
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.libOpenMPT;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.libOpenMPT;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
|
@ -2351,11 +2359,8 @@
|
||||||
83E5EFC71FFEF7CC00659F0F /* Release */ = {
|
83E5EFC71FFEF7CC00659F0F /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -2365,7 +2370,6 @@
|
||||||
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.libOpenMPT;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.libOpenMPT;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
830109F91A09BC0A0004F8D8 /* codecvt.h in Headers */ = {isa = PBXBuildFile; fileRef = 830109F71A09BC0A0004F8D8 /* codecvt.h */; };
|
830109F91A09BC0A0004F8D8 /* codecvt.h in Headers */ = {isa = PBXBuildFile; fileRef = 830109F71A09BC0A0004F8D8 /* codecvt.h */; };
|
||||||
830109FA1A09BC0A0004F8D8 /* wstring_convert.h in Headers */ = {isa = PBXBuildFile; fileRef = 830109F81A09BC0A0004F8D8 /* wstring_convert.h */; };
|
830109FA1A09BC0A0004F8D8 /* wstring_convert.h in Headers */ = {isa = PBXBuildFile; fileRef = 830109F81A09BC0A0004F8D8 /* wstring_convert.h */; };
|
||||||
|
83747B8B2862D4F90021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747B892862D4F90021245F /* Shared.xcconfig */; };
|
||||||
83848FBC1807623F00E7332D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83848FBB1807623F00E7332D /* Cocoa.framework */; };
|
83848FBC1807623F00E7332D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83848FBB1807623F00E7332D /* Cocoa.framework */; };
|
||||||
83848FC61807623F00E7332D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 83848FC41807623F00E7332D /* InfoPlist.strings */; };
|
83848FC61807623F00E7332D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 83848FC41807623F00E7332D /* InfoPlist.strings */; };
|
||||||
838490251807649A00E7332D /* Channel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 838490011807649A00E7332D /* Channel.cpp */; };
|
838490251807649A00E7332D /* Channel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 838490011807649A00E7332D /* Channel.cpp */; };
|
||||||
|
@ -46,6 +47,7 @@
|
||||||
830109F71A09BC0A0004F8D8 /* codecvt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = codecvt.h; sourceTree = "<group>"; };
|
830109F71A09BC0A0004F8D8 /* codecvt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = codecvt.h; sourceTree = "<group>"; };
|
||||||
830109F81A09BC0A0004F8D8 /* wstring_convert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wstring_convert.h; sourceTree = "<group>"; };
|
830109F81A09BC0A0004F8D8 /* wstring_convert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wstring_convert.h; sourceTree = "<group>"; };
|
||||||
833F68301CDBCAB100AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
833F68301CDBCAB100AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
|
83747B892862D4F90021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
83848FB81807623F00E7332D /* SSEQPlayer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SSEQPlayer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
83848FB81807623F00E7332D /* SSEQPlayer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SSEQPlayer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
83848FBB1807623F00E7332D /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
|
83848FBB1807623F00E7332D /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
|
||||||
83848FBE1807623F00E7332D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
83848FBE1807623F00E7332D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||||
|
@ -97,9 +99,19 @@
|
||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
|
83747B882862D4F90021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747B892862D4F90021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
83848FAE1807623F00E7332D = {
|
83848FAE1807623F00E7332D = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747B882862D4F90021245F /* Xcode-config */,
|
||||||
83848FC11807623F00E7332D /* SSEQPlayer */,
|
83848FC11807623F00E7332D /* SSEQPlayer */,
|
||||||
83848FBA1807623F00E7332D /* Frameworks */,
|
83848FBA1807623F00E7332D /* Frameworks */,
|
||||||
83848FB91807623F00E7332D /* Products */,
|
83848FB91807623F00E7332D /* Products */,
|
||||||
|
@ -242,7 +254,7 @@
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
83848FB71807623F00E7332D = {
|
83848FB71807623F00E7332D = {
|
||||||
DevelopmentTeam = "";
|
DevelopmentTeam = "";
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -271,6 +283,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
83848FC61807623F00E7332D /* InfoPlist.strings in Resources */,
|
83848FC61807623F00E7332D /* InfoPlist.strings in Resources */,
|
||||||
|
83747B8B2862D4F90021245F /* Shared.xcconfig in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -314,6 +327,7 @@
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
83848FDE1807623F00E7332D /* Debug */ = {
|
83848FDE1807623F00E7332D /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747B892862D4F90021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -360,7 +374,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
|
@ -368,6 +382,7 @@
|
||||||
};
|
};
|
||||||
83848FDF1807623F00E7332D /* Release */ = {
|
83848FDF1807623F00E7332D /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747B892862D4F90021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -407,7 +422,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
@ -415,11 +430,8 @@
|
||||||
83848FE11807623F00E7332D /* Debug */ = {
|
83848FE11807623F00E7332D /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -427,7 +439,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.sseqplayer;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.sseqplayer;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
|
@ -437,11 +448,8 @@
|
||||||
83848FE21807623F00E7332D /* Release */ = {
|
83848FE21807623F00E7332D /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -449,7 +457,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.sseqplayer;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.sseqplayer;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
59FDCD700A2922E1006C1800 /* shn_reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59FDCD690A2922E1006C1800 /* shn_reader.cpp */; };
|
59FDCD700A2922E1006C1800 /* shn_reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59FDCD690A2922E1006C1800 /* shn_reader.cpp */; };
|
||||||
59FDCD710A2922E1006C1800 /* sulawalaw.c in Sources */ = {isa = PBXBuildFile; fileRef = 59FDCD6A0A2922E1006C1800 /* sulawalaw.c */; };
|
59FDCD710A2922E1006C1800 /* sulawalaw.c in Sources */ = {isa = PBXBuildFile; fileRef = 59FDCD6A0A2922E1006C1800 /* sulawalaw.c */; };
|
||||||
59FDCD720A2922E1006C1800 /* vario.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59FDCD6B0A2922E1006C1800 /* vario.cpp */; };
|
59FDCD720A2922E1006C1800 /* vario.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59FDCD6B0A2922E1006C1800 /* vario.cpp */; };
|
||||||
|
83747BCC2862D5970021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747BCA2862D5970021245F /* Shared.xcconfig */; };
|
||||||
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; };
|
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
|
@ -37,6 +38,7 @@
|
||||||
59FDCD6B0A2922E1006C1800 /* vario.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vario.cpp; path = Files/shorten/src/vario.cpp; sourceTree = "<group>"; };
|
59FDCD6B0A2922E1006C1800 /* vario.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vario.cpp; path = Files/shorten/src/vario.cpp; sourceTree = "<group>"; };
|
||||||
833F683E1CDBCAB300AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
833F683E1CDBCAB300AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
835C889522CC1888001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
835C889522CC1888001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
|
83747BCA2862D5970021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
||||||
8DC2EF5B0486A6940098B216 /* Shorten.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shorten.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
8DC2EF5B0486A6940098B216 /* Shorten.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shorten.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
@ -63,6 +65,7 @@
|
||||||
0867D691FE84028FC02AAC07 /* Shorten */ = {
|
0867D691FE84028FC02AAC07 /* Shorten */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747BC92862D5970021245F /* Xcode-config */,
|
||||||
8E756C6B09F3171C0080F1EE /* Headers */,
|
8E756C6B09F3171C0080F1EE /* Headers */,
|
||||||
8E756C6A09F317170080F1EE /* Source */,
|
8E756C6A09F317170080F1EE /* Source */,
|
||||||
089C1665FE841158C02AAC07 /* Resources */,
|
089C1665FE841158C02AAC07 /* Resources */,
|
||||||
|
@ -104,6 +107,15 @@
|
||||||
name = "Other Frameworks";
|
name = "Other Frameworks";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
83747BC92862D5970021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747BCA2862D5970021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
8E756C6A09F317170080F1EE /* Source */ = {
|
8E756C6A09F317170080F1EE /* Source */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -177,7 +189,7 @@
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
8DC2EF4F0486A6940098B216 = {
|
8DC2EF4F0486A6940098B216 = {
|
||||||
DevelopmentTeam = "";
|
DevelopmentTeam = "";
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -206,6 +218,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,
|
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,
|
||||||
|
83747BCC2862D5970021245F /* Shared.xcconfig in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -245,12 +258,9 @@
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -264,7 +274,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.shorten;
|
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.shorten;
|
||||||
PRODUCT_NAME = Shorten;
|
PRODUCT_NAME = Shorten;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
|
@ -276,11 +285,8 @@
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -294,7 +300,6 @@
|
||||||
OTHER_CFLAGS = "-DHAVE_CONFIG_H";
|
OTHER_CFLAGS = "-DHAVE_CONFIG_H";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.shorten;
|
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.shorten;
|
||||||
PRODUCT_NAME = Shorten;
|
PRODUCT_NAME = Shorten;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SHARED_PRECOMPS_DIR = "$(CACHE_ROOT)/SharedPrecompiledHeaders";
|
SHARED_PRECOMPS_DIR = "$(CACHE_ROOT)/SharedPrecompiledHeaders";
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
|
@ -305,6 +310,7 @@
|
||||||
};
|
};
|
||||||
1DEB91B208733DA50010E9CD /* Debug */ = {
|
1DEB91B208733DA50010E9CD /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BCA2862D5970021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -346,7 +352,7 @@
|
||||||
../../include,
|
../../include,
|
||||||
include,
|
include,
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SYMROOT = ../../build;
|
SYMROOT = ../../build;
|
||||||
|
@ -355,6 +361,7 @@
|
||||||
};
|
};
|
||||||
1DEB91B308733DA50010E9CD /* Release */ = {
|
1DEB91B308733DA50010E9CD /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BCA2862D5970021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -394,7 +401,7 @@
|
||||||
../../include,
|
../../include,
|
||||||
include,
|
include,
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SYMROOT = ../../build;
|
SYMROOT = ../../build;
|
||||||
};
|
};
|
||||||
|
|
|
@ -148,6 +148,7 @@
|
||||||
32AE5AFF14E70ED700420CA0 /* taglib_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A5914E70ED600420CA0 /* taglib_config.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
32AE5AFF14E70ED700420CA0 /* taglib_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A5914E70ED600420CA0 /* taglib_config.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
32AE5B0014E70F4700420CA0 /* tlist.tcc in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A4614E70ED600420CA0 /* tlist.tcc */; settings = {ATTRIBUTES = (Public, ); }; };
|
32AE5B0014E70F4700420CA0 /* tlist.tcc in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A4614E70ED600420CA0 /* tlist.tcc */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
32AE5B0114E70F4A00420CA0 /* tmap.tcc in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A4814E70ED600420CA0 /* tmap.tcc */; settings = {ATTRIBUTES = (Public, ); }; };
|
32AE5B0114E70F4A00420CA0 /* tmap.tcc in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A4814E70ED600420CA0 /* tmap.tcc */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
|
83747BD42862D5B00021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747BD22862D5B00021245F /* Shared.xcconfig */; };
|
||||||
83790D241809E8CA0073CF51 /* opusfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83790D201809E8CA0073CF51 /* opusfile.cpp */; };
|
83790D241809E8CA0073CF51 /* opusfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83790D201809E8CA0073CF51 /* opusfile.cpp */; };
|
||||||
83790D261809E8CA0073CF51 /* opusproperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83790D221809E8CA0073CF51 /* opusproperties.cpp */; };
|
83790D261809E8CA0073CF51 /* opusproperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83790D221809E8CA0073CF51 /* opusproperties.cpp */; };
|
||||||
83942C67269116530058BD3B /* flacfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59BF14E70ED600420CA0 /* flacfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
83942C67269116530058BD3B /* flacfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59BF14E70ED600420CA0 /* flacfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
|
@ -360,6 +361,7 @@
|
||||||
32AE5A5914E70ED600420CA0 /* taglib_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = taglib_config.h; path = taglib/taglib_config.h; sourceTree = "<group>"; };
|
32AE5A5914E70ED600420CA0 /* taglib_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = taglib_config.h; path = taglib/taglib_config.h; sourceTree = "<group>"; };
|
||||||
833F683D1CDBCAB300AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
833F683D1CDBCAB300AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
835C889822CC1889001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
835C889822CC1889001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
|
83747BD22862D5B00021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
83790D201809E8CA0073CF51 /* opusfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opusfile.cpp; sourceTree = "<group>"; };
|
83790D201809E8CA0073CF51 /* opusfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opusfile.cpp; sourceTree = "<group>"; };
|
||||||
83790D211809E8CA0073CF51 /* opusfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opusfile.h; sourceTree = "<group>"; };
|
83790D211809E8CA0073CF51 /* opusfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opusfile.h; sourceTree = "<group>"; };
|
||||||
83790D221809E8CA0073CF51 /* opusproperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opusproperties.cpp; sourceTree = "<group>"; };
|
83790D221809E8CA0073CF51 /* opusproperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opusproperties.cpp; sourceTree = "<group>"; };
|
||||||
|
@ -508,6 +510,7 @@
|
||||||
0867D691FE84028FC02AAC07 /* TagLib */ = {
|
0867D691FE84028FC02AAC07 /* TagLib */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747BD12862D5B00021245F /* Xcode-config */,
|
||||||
8E75700C09F318D70080F1EE /* Source */,
|
8E75700C09F318D70080F1EE /* Source */,
|
||||||
089C1665FE841158C02AAC07 /* Resources */,
|
089C1665FE841158C02AAC07 /* Resources */,
|
||||||
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */,
|
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */,
|
||||||
|
@ -887,6 +890,15 @@
|
||||||
path = wavpack;
|
path = wavpack;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
83747BD12862D5B00021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747BD22862D5B00021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
83790D1F1809E8CA0073CF51 /* opus */ = {
|
83790D1F1809E8CA0073CF51 /* opus */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -1200,7 +1212,7 @@
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
8DC2EF4F0486A6940098B216 = {
|
8DC2EF4F0486A6940098B216 = {
|
||||||
DevelopmentTeam = "";
|
DevelopmentTeam = "";
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1229,6 +1241,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,
|
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,
|
||||||
|
83747BD42862D5B00021245F /* Shared.xcconfig in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -1363,11 +1376,8 @@
|
||||||
1DEB91AE08733DA50010E9CD /* Debug */ = {
|
1DEB91AE08733DA50010E9CD /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -1384,7 +1394,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.taglib;
|
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.taglib;
|
||||||
PRODUCT_NAME = TagLib;
|
PRODUCT_NAME = TagLib;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
ZERO_LINK = YES;
|
ZERO_LINK = YES;
|
||||||
|
@ -1394,11 +1403,8 @@
|
||||||
1DEB91AF08733DA50010E9CD /* Release */ = {
|
1DEB91AF08733DA50010E9CD /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -1413,7 +1419,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.taglib;
|
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.taglib;
|
||||||
PRODUCT_NAME = TagLib;
|
PRODUCT_NAME = TagLib;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
};
|
};
|
||||||
|
@ -1421,6 +1426,7 @@
|
||||||
};
|
};
|
||||||
1DEB91B208733DA50010E9CD /* Debug */ = {
|
1DEB91B208733DA50010E9CD /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BD22862D5B00021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -1457,7 +1463,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
OTHER_CFLAGS = "-DHAVE_CONFIG_H";
|
OTHER_CFLAGS = "-DHAVE_CONFIG_H";
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
@ -1468,6 +1474,7 @@
|
||||||
};
|
};
|
||||||
1DEB91B308733DA50010E9CD /* Release */ = {
|
1DEB91B308733DA50010E9CD /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BD22862D5B00021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -1502,7 +1509,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
OTHER_CFLAGS = "-DHAVE_CONFIG_H";
|
OTHER_CFLAGS = "-DHAVE_CONFIG_H";
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
8310BA4D1D7377DC0055CEC5 /* pack_dsd.c in Sources */ = {isa = PBXBuildFile; fileRef = 8310BA471D7377DC0055CEC5 /* pack_dsd.c */; };
|
8310BA4D1D7377DC0055CEC5 /* pack_dsd.c in Sources */ = {isa = PBXBuildFile; fileRef = 8310BA471D7377DC0055CEC5 /* pack_dsd.c */; };
|
||||||
8310BA4E1D7377DC0055CEC5 /* pack_floats.c in Sources */ = {isa = PBXBuildFile; fileRef = 8310BA481D7377DC0055CEC5 /* pack_floats.c */; };
|
8310BA4E1D7377DC0055CEC5 /* pack_floats.c in Sources */ = {isa = PBXBuildFile; fileRef = 8310BA481D7377DC0055CEC5 /* pack_floats.c */; };
|
||||||
8310BA4F1D7377DC0055CEC5 /* pack_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 8310BA491D7377DC0055CEC5 /* pack_utils.c */; };
|
8310BA4F1D7377DC0055CEC5 /* pack_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 8310BA491D7377DC0055CEC5 /* pack_utils.c */; };
|
||||||
|
83747BDE2862D5C50021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747BDC2862D5C50021245F /* Shared.xcconfig */; };
|
||||||
83DD1DD017FA038A00249519 /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 83DD1DCD17FA038A00249519 /* utils.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
83DD1DD017FA038A00249519 /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 83DD1DCD17FA038A00249519 /* utils.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
83DD1DD117FA038A00249519 /* wavpack_local.h in Headers */ = {isa = PBXBuildFile; fileRef = 83DD1DCE17FA038A00249519 /* wavpack_local.h */; };
|
83DD1DD117FA038A00249519 /* wavpack_local.h in Headers */ = {isa = PBXBuildFile; fileRef = 83DD1DCE17FA038A00249519 /* wavpack_local.h */; };
|
||||||
83DD1DD217FA038A00249519 /* wavpack_version.h in Headers */ = {isa = PBXBuildFile; fileRef = 83DD1DCF17FA038A00249519 /* wavpack_version.h */; };
|
83DD1DD217FA038A00249519 /* wavpack_version.h in Headers */ = {isa = PBXBuildFile; fileRef = 83DD1DCF17FA038A00249519 /* wavpack_version.h */; };
|
||||||
|
@ -68,6 +69,7 @@
|
||||||
8310BA491D7377DC0055CEC5 /* pack_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pack_utils.c; path = Files/pack_utils.c; sourceTree = "<group>"; };
|
8310BA491D7377DC0055CEC5 /* pack_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pack_utils.c; path = Files/pack_utils.c; sourceTree = "<group>"; };
|
||||||
833F683A1CDBCAB200AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
833F683A1CDBCAB200AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
835C889B22CC188A001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
835C889B22CC188A001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
|
83747BDC2862D5C50021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
83DD1DCD17FA038A00249519 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utils.h; path = Files/utils.h; sourceTree = "<group>"; };
|
83DD1DCD17FA038A00249519 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utils.h; path = Files/utils.h; sourceTree = "<group>"; };
|
||||||
83DD1DCE17FA038A00249519 /* wavpack_local.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wavpack_local.h; path = Files/wavpack_local.h; sourceTree = "<group>"; };
|
83DD1DCE17FA038A00249519 /* wavpack_local.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wavpack_local.h; path = Files/wavpack_local.h; sourceTree = "<group>"; };
|
||||||
83DD1DCF17FA038A00249519 /* wavpack_version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wavpack_version.h; path = Files/wavpack_version.h; sourceTree = "<group>"; };
|
83DD1DCF17FA038A00249519 /* wavpack_version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wavpack_version.h; path = Files/wavpack_version.h; sourceTree = "<group>"; };
|
||||||
|
@ -110,6 +112,7 @@
|
||||||
0867D691FE84028FC02AAC07 /* WavPack */ = {
|
0867D691FE84028FC02AAC07 /* WavPack */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747BDB2862D5C50021245F /* Xcode-config */,
|
||||||
8E7574A909F31B9A0080F1EE /* Headers */,
|
8E7574A909F31B9A0080F1EE /* Headers */,
|
||||||
8E7574A809F31B940080F1EE /* Source */,
|
8E7574A809F31B940080F1EE /* Source */,
|
||||||
089C1665FE841158C02AAC07 /* Resources */,
|
089C1665FE841158C02AAC07 /* Resources */,
|
||||||
|
@ -152,6 +155,15 @@
|
||||||
name = "Other Frameworks";
|
name = "Other Frameworks";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
83747BDB2862D5C50021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747BDC2862D5C50021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
8E7574A809F31B940080F1EE /* Source */ = {
|
8E7574A809F31B940080F1EE /* Source */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -249,7 +261,7 @@
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
8DC2EF4F0486A6940098B216 = {
|
8DC2EF4F0486A6940098B216 = {
|
||||||
DevelopmentTeam = "";
|
DevelopmentTeam = "";
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -278,6 +290,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,
|
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,
|
||||||
|
83747BDE2862D5C50021245F /* Shared.xcconfig in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -336,12 +349,9 @@
|
||||||
1DEB91AE08733DA50010E9CD /* Debug */ = {
|
1DEB91AE08733DA50010E9CD /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -371,7 +381,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.wavpack;
|
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.wavpack;
|
||||||
PRODUCT_NAME = WavPack;
|
PRODUCT_NAME = WavPack;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
|
@ -382,11 +391,8 @@
|
||||||
1DEB91AF08733DA50010E9CD /* Release */ = {
|
1DEB91AF08733DA50010E9CD /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -413,7 +419,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.wavpack;
|
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.lib.wavpack;
|
||||||
PRODUCT_NAME = WavPack;
|
PRODUCT_NAME = WavPack;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
WRAPPER_EXTENSION = framework;
|
WRAPPER_EXTENSION = framework;
|
||||||
|
@ -422,6 +427,7 @@
|
||||||
};
|
};
|
||||||
1DEB91B208733DA50010E9CD /* Debug */ = {
|
1DEB91B208733DA50010E9CD /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BDC2862D5C50021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -457,7 +463,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SYMROOT = ../../build;
|
SYMROOT = ../../build;
|
||||||
|
@ -466,6 +472,7 @@
|
||||||
};
|
};
|
||||||
1DEB91B308733DA50010E9CD /* Release */ = {
|
1DEB91B308733DA50010E9CD /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BDC2862D5C50021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -499,7 +506,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SYMROOT = ../../build;
|
SYMROOT = ../../build;
|
||||||
};
|
};
|
||||||
|
|
|
@ -351,7 +351,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
@ -403,7 +403,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
|
|
@ -722,7 +722,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.8;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
|
@ -767,7 +767,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.8;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
8333B6721DCC498B004C140D /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 8333B6711DCC498B004C140D /* libz.tbd */; };
|
8333B6721DCC498B004C140D /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 8333B6711DCC498B004C140D /* libz.tbd */; };
|
||||||
|
83747BAE2862D54D0021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747BAC2862D54D0021245F /* Shared.xcconfig */; };
|
||||||
8379B58A1AA4237E00F28A95 /* barray.c in Sources */ = {isa = PBXBuildFile; fileRef = 8379B5881AA4237E00F28A95 /* barray.c */; };
|
8379B58A1AA4237E00F28A95 /* barray.c in Sources */ = {isa = PBXBuildFile; fileRef = 8379B5881AA4237E00F28A95 /* barray.c */; };
|
||||||
8379B58B1AA4237E00F28A95 /* barray.h in Headers */ = {isa = PBXBuildFile; fileRef = 8379B5891AA4237E00F28A95 /* barray.h */; };
|
8379B58B1AA4237E00F28A95 /* barray.h in Headers */ = {isa = PBXBuildFile; fileRef = 8379B5891AA4237E00F28A95 /* barray.h */; };
|
||||||
83AA660627B7CB490098D4B8 /* hvqm.c in Sources */ = {isa = PBXBuildFile; fileRef = 83AA660427B7CB490098D4B8 /* hvqm.c */; };
|
83AA660627B7CB490098D4B8 /* hvqm.c in Sources */ = {isa = PBXBuildFile; fileRef = 83AA660427B7CB490098D4B8 /* hvqm.c */; };
|
||||||
|
@ -205,6 +206,7 @@
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
8333B6711DCC498B004C140D /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
|
8333B6711DCC498B004C140D /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
|
||||||
|
83747BAC2862D54D0021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
8379B5881AA4237E00F28A95 /* barray.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = barray.c; sourceTree = "<group>"; };
|
8379B5881AA4237E00F28A95 /* barray.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = barray.c; sourceTree = "<group>"; };
|
||||||
8379B5891AA4237E00F28A95 /* barray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = barray.h; sourceTree = "<group>"; };
|
8379B5891AA4237E00F28A95 /* barray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = barray.h; sourceTree = "<group>"; };
|
||||||
83AA660427B7CB490098D4B8 /* hvqm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hvqm.c; sourceTree = "<group>"; };
|
83AA660427B7CB490098D4B8 /* hvqm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hvqm.c; sourceTree = "<group>"; };
|
||||||
|
@ -414,9 +416,19 @@
|
||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
|
83747BAB2862D54C0021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747BAC2862D54D0021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
83C8B61818AF57770071B040 = {
|
83C8B61818AF57770071B040 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747BAB2862D54C0021245F /* Xcode-config */,
|
||||||
83C8B62B18AF57770071B040 /* lazyusf2 */,
|
83C8B62B18AF57770071B040 /* lazyusf2 */,
|
||||||
83C8B62418AF57770071B040 /* Frameworks */,
|
83C8B62418AF57770071B040 /* Frameworks */,
|
||||||
83C8B62318AF57770071B040 /* Products */,
|
83C8B62318AF57770071B040 /* Products */,
|
||||||
|
@ -961,7 +973,7 @@
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
83C8B62118AF57770071B040 = {
|
83C8B62118AF57770071B040 = {
|
||||||
DevelopmentTeam = "";
|
DevelopmentTeam = "";
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -989,6 +1001,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
83CA15911A988138005E7ED4 /* interpreter_tlb.def in Resources */,
|
83CA15911A988138005E7ED4 /* interpreter_tlb.def in Resources */,
|
||||||
|
83747BAE2862D54D0021245F /* Shared.xcconfig in Resources */,
|
||||||
83CA15901A988138005E7ED4 /* interpreter_special.def in Resources */,
|
83CA15901A988138005E7ED4 /* interpreter_special.def in Resources */,
|
||||||
83CA15641A988138005E7ED4 /* api_export.ver in Resources */,
|
83CA15641A988138005E7ED4 /* api_export.ver in Resources */,
|
||||||
83CA158C1A988138005E7ED4 /* interpreter_cop0.def in Resources */,
|
83CA158C1A988138005E7ED4 /* interpreter_cop0.def in Resources */,
|
||||||
|
@ -1080,6 +1093,7 @@
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
83C8B64818AF57770071B040 /* Debug */ = {
|
83C8B64818AF57770071B040 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BAC2862D54D0021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -1127,7 +1141,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
|
@ -1135,6 +1149,7 @@
|
||||||
};
|
};
|
||||||
83C8B64918AF57770071B040 /* Release */ = {
|
83C8B64918AF57770071B040 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BAC2862D54D0021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -1175,7 +1190,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
@ -1183,11 +1198,8 @@
|
||||||
83C8B64B18AF57770071B040 /* Debug */ = {
|
83C8B64B18AF57770071B040 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -1201,7 +1213,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.lazyusf2;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.lazyusf2;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
USER_HEADER_SEARCH_PATHS = lazyusf2;
|
USER_HEADER_SEARCH_PATHS = lazyusf2;
|
||||||
|
@ -1212,11 +1223,8 @@
|
||||||
83C8B64C18AF57770071B040 /* Release */ = {
|
83C8B64C18AF57770071B040 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -1231,7 +1239,6 @@
|
||||||
INSTALL_PATH = "@loader_path/../Frameworks";
|
INSTALL_PATH = "@loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.lazyusf2;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.lazyusf2;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
USER_HEADER_SEARCH_PATHS = lazyusf2;
|
USER_HEADER_SEARCH_PATHS = lazyusf2;
|
||||||
|
|
|
@ -299,7 +299,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
@ -357,7 +357,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
83747FEA2862E8FA0021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747FE82862E8FA0021245F /* Shared.xcconfig */; };
|
||||||
83D3C693201D3870005564CB /* binio.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D3C692201D3870005564CB /* binio.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
83D3C693201D3870005564CB /* binio.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D3C692201D3870005564CB /* binio.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
83D3C69B201D388C005564CB /* binfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83D3C694201D388B005564CB /* binfile.cpp */; };
|
83D3C69B201D388C005564CB /* binfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83D3C694201D388B005564CB /* binfile.cpp */; };
|
||||||
83D3C69C201D388C005564CB /* binwrap.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D3C695201D388B005564CB /* binwrap.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
83D3C69C201D388C005564CB /* binwrap.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D3C695201D388B005564CB /* binwrap.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
|
@ -18,6 +19,7 @@
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
83747FE82862E8FA0021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
83D3C67B201D37D8005564CB /* libbinio.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = libbinio.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
83D3C67B201D37D8005564CB /* libbinio.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = libbinio.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
83D3C67F201D37D8005564CB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
83D3C67F201D37D8005564CB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
83D3C692201D3870005564CB /* binio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = binio.h; sourceTree = "<group>"; };
|
83D3C692201D3870005564CB /* binio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = binio.h; sourceTree = "<group>"; };
|
||||||
|
@ -41,9 +43,19 @@
|
||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
|
83747FE72862E8FA0021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747FE82862E8FA0021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
83D3C671201D37D8005564CB = {
|
83D3C671201D37D8005564CB = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747FE72862E8FA0021245F /* Xcode-config */,
|
||||||
83D3C67D201D37D8005564CB /* libbinio */,
|
83D3C67D201D37D8005564CB /* libbinio */,
|
||||||
83D3C67C201D37D8005564CB /* Products */,
|
83D3C67C201D37D8005564CB /* Products */,
|
||||||
);
|
);
|
||||||
|
@ -118,8 +130,7 @@
|
||||||
ORGANIZATIONNAME = "Christopher Snowhill";
|
ORGANIZATIONNAME = "Christopher Snowhill";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
83D3C67A201D37D8005564CB = {
|
83D3C67A201D37D8005564CB = {
|
||||||
DevelopmentTeam = "";
|
ProvisioningStyle = Manual;
|
||||||
ProvisioningStyle = Automatic;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -146,6 +157,7 @@
|
||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
83747FEA2862E8FA0021245F /* Shared.xcconfig in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -168,6 +180,7 @@
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
83D3C681201D37D8005564CB /* Debug */ = {
|
83D3C681201D37D8005564CB /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747FE82862E8FA0021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
@ -198,7 +211,6 @@
|
||||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGN_IDENTITY = "Mac Developer";
|
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
|
@ -220,7 +232,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
@ -231,6 +243,7 @@
|
||||||
};
|
};
|
||||||
83D3C682201D37D8005564CB /* Release */ = {
|
83D3C682201D37D8005564CB /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747FE82862E8FA0021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
@ -261,7 +274,6 @@
|
||||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGN_IDENTITY = "Mac Developer";
|
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
|
@ -277,7 +289,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
@ -288,11 +300,8 @@
|
||||||
83D3C684201D37D8005564CB /* Debug */ = {
|
83D3C684201D37D8005564CB /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
|
@ -302,7 +311,6 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks @loader_path/../Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks @loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.libbinio;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.libbinio;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
|
@ -310,11 +318,8 @@
|
||||||
83D3C685201D37D8005564CB /* Release */ = {
|
83D3C685201D37D8005564CB /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
|
@ -324,7 +329,6 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks @loader_path/../Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/Frameworks @loader_path/../Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.libbinio;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.libbinio;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
|
|
@ -432,7 +432,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
@ -531,7 +531,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
|
|
@ -420,7 +420,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
@ -519,7 +519,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
|
|
@ -198,6 +198,7 @@
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
8354900726186D9E004988A7 /* mos652x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mos652x.cpp; sourceTree = "<group>"; };
|
8354900726186D9E004988A7 /* mos652x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mos652x.cpp; sourceTree = "<group>"; };
|
||||||
8354900826186D9E004988A7 /* mos652x.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mos652x.h; sourceTree = "<group>"; };
|
8354900826186D9E004988A7 /* mos652x.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mos652x.h; sourceTree = "<group>"; };
|
||||||
|
83747BCF2862D5A30021245F /* Shared.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
EDBE8EF925E7E641001EB4A4 /* sidplayfp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = sidplayfp.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
EDBE8EF925E7E641001EB4A4 /* sidplayfp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = sidplayfp.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
EDBE8F1225E7E79F001EB4A4 /* sidrandom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sidrandom.h; path = sidplayfp/src/sidrandom.h; sourceTree = "<group>"; };
|
EDBE8F1225E7E79F001EB4A4 /* sidrandom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sidrandom.h; path = sidplayfp/src/sidrandom.h; sourceTree = "<group>"; };
|
||||||
EDBE8F1325E7E79F001EB4A4 /* reloc65.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = reloc65.cpp; path = sidplayfp/src/reloc65.cpp; sourceTree = "<group>"; };
|
EDBE8F1325E7E79F001EB4A4 /* reloc65.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = reloc65.cpp; path = sidplayfp/src/reloc65.cpp; sourceTree = "<group>"; };
|
||||||
|
@ -454,9 +455,19 @@
|
||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
|
83747BCE2862D5A30021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747BCF2862D5A30021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
EDBE8EEF25E7E641001EB4A4 = {
|
EDBE8EEF25E7E641001EB4A4 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747BCE2862D5A30021245F /* Xcode-config */,
|
||||||
EDBE911625E7E7F9001EB4A4 /* Info.plist */,
|
EDBE911625E7E7F9001EB4A4 /* Info.plist */,
|
||||||
EDBE8F1125E7E782001EB4A4 /* generated */,
|
EDBE8F1125E7E782001EB4A4 /* generated */,
|
||||||
EDBE8F1025E7E76A001EB4A4 /* libsidplay */,
|
EDBE8F1025E7E76A001EB4A4 /* libsidplay */,
|
||||||
|
@ -1248,6 +1259,7 @@
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
EDBE8EFF25E7E641001EB4A4 /* Debug */ = {
|
EDBE8EFF25E7E641001EB4A4 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BCF2862D5A30021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
@ -1299,7 +1311,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
@ -1311,6 +1323,7 @@
|
||||||
};
|
};
|
||||||
EDBE8F0025E7E641001EB4A4 /* Release */ = {
|
EDBE8F0025E7E641001EB4A4 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BCF2862D5A30021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
@ -1356,7 +1369,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
@ -1369,7 +1382,6 @@
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_WARN_DOCUMENTATION_COMMENTS = NO;
|
CLANG_WARN_DOCUMENTATION_COMMENTS = NO;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEFINES_MODULE = NO;
|
DEFINES_MODULE = NO;
|
||||||
|
@ -1405,7 +1417,6 @@
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_WARN_DOCUMENTATION_COMMENTS = NO;
|
CLANG_WARN_DOCUMENTATION_COMMENTS = NO;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEFINES_MODULE = NO;
|
DEFINES_MODULE = NO;
|
||||||
|
|
|
@ -120,6 +120,7 @@
|
||||||
83299FC31E7657ED003A3242 /* timing.c in Sources */ = {isa = PBXBuildFile; fileRef = 83299FC11E7657ED003A3242 /* timing.c */; };
|
83299FC31E7657ED003A3242 /* timing.c in Sources */ = {isa = PBXBuildFile; fileRef = 83299FC11E7657ED003A3242 /* timing.c */; };
|
||||||
8333B6631DCC440C004C140D /* sharkport.c in Sources */ = {isa = PBXBuildFile; fileRef = 8333B6611DCC440C004C140D /* sharkport.c */; };
|
8333B6631DCC440C004C140D /* sharkport.c in Sources */ = {isa = PBXBuildFile; fileRef = 8333B6611DCC440C004C140D /* sharkport.c */; };
|
||||||
8333B6671DCC4451004C140D /* tile-cache.c in Sources */ = {isa = PBXBuildFile; fileRef = 8333B6651DCC4451004C140D /* tile-cache.c */; };
|
8333B6671DCC4451004C140D /* tile-cache.c in Sources */ = {isa = PBXBuildFile; fileRef = 8333B6651DCC4451004C140D /* tile-cache.c */; };
|
||||||
|
83747BA92862D5430021245F /* Shared.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83747BA72862D5430021245F /* Shared.xcconfig */; };
|
||||||
837612EE1DD6AA2B001EED3D /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 837612ED1DD6AA2B001EED3D /* LICENSE */; };
|
837612EE1DD6AA2B001EED3D /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 837612ED1DD6AA2B001EED3D /* LICENSE */; };
|
||||||
837CEA73234875D700E62A4A /* audio-mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = 837CEA70234875D700E62A4A /* audio-mixer.c */; };
|
837CEA73234875D700E62A4A /* audio-mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = 837CEA70234875D700E62A4A /* audio-mixer.c */; };
|
||||||
83C9A7D02632122C00725A49 /* gpio.c in Sources */ = {isa = PBXBuildFile; fileRef = 83C9A7CC2632122C00725A49 /* gpio.c */; };
|
83C9A7D02632122C00725A49 /* gpio.c in Sources */ = {isa = PBXBuildFile; fileRef = 83C9A7CC2632122C00725A49 /* gpio.c */; };
|
||||||
|
@ -301,6 +302,7 @@
|
||||||
83299FC11E7657ED003A3242 /* timing.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = timing.c; sourceTree = "<group>"; };
|
83299FC11E7657ED003A3242 /* timing.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = timing.c; sourceTree = "<group>"; };
|
||||||
8333B6611DCC440C004C140D /* sharkport.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sharkport.c; sourceTree = "<group>"; };
|
8333B6611DCC440C004C140D /* sharkport.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sharkport.c; sourceTree = "<group>"; };
|
||||||
8333B6651DCC4451004C140D /* tile-cache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "tile-cache.c"; sourceTree = "<group>"; };
|
8333B6651DCC4451004C140D /* tile-cache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "tile-cache.c"; sourceTree = "<group>"; };
|
||||||
|
83747BA72862D5430021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||||
837612ED1DD6AA2B001EED3D /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
|
837612ED1DD6AA2B001EED3D /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
|
||||||
837CEA70234875D700E62A4A /* audio-mixer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "audio-mixer.c"; sourceTree = "<group>"; };
|
837CEA70234875D700E62A4A /* audio-mixer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "audio-mixer.c"; sourceTree = "<group>"; };
|
||||||
83C9A7CC2632122C00725A49 /* gpio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gpio.c; sourceTree = "<group>"; };
|
83C9A7CC2632122C00725A49 /* gpio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gpio.c; sourceTree = "<group>"; };
|
||||||
|
@ -697,6 +699,15 @@
|
||||||
path = windows;
|
path = windows;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
83747BA62862D5430021245F /* Xcode-config */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
83747BA72862D5430021245F /* Shared.xcconfig */,
|
||||||
|
);
|
||||||
|
name = "Xcode-config";
|
||||||
|
path = "../../Xcode-config";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
837CEA6E234875D700E62A4A /* extra */ = {
|
837CEA6E234875D700E62A4A /* extra */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -739,6 +750,7 @@
|
||||||
83CA24091D7BC47C00F2EA53 = {
|
83CA24091D7BC47C00F2EA53 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
83747BA62862D5430021245F /* Xcode-config */,
|
||||||
83CA24151D7BC47C00F2EA53 /* mGBA */,
|
83CA24151D7BC47C00F2EA53 /* mGBA */,
|
||||||
83CA24141D7BC47C00F2EA53 /* Products */,
|
83CA24141D7BC47C00F2EA53 /* Products */,
|
||||||
);
|
);
|
||||||
|
@ -1099,7 +1111,7 @@
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
83CA24121D7BC47C00F2EA53 = {
|
83CA24121D7BC47C00F2EA53 = {
|
||||||
DevelopmentTeam = "";
|
DevelopmentTeam = "";
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1127,6 +1139,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
837612EE1DD6AA2B001EED3D /* LICENSE in Resources */,
|
837612EE1DD6AA2B001EED3D /* LICENSE in Resources */,
|
||||||
|
83747BA92862D5430021245F /* Shared.xcconfig in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -1204,6 +1217,7 @@
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
83CA24191D7BC47C00F2EA53 /* Debug */ = {
|
83CA24191D7BC47C00F2EA53 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BA72862D5430021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -1254,7 +1268,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
@ -1265,6 +1279,7 @@
|
||||||
};
|
};
|
||||||
83CA241A1D7BC47C00F2EA53 /* Release */ = {
|
83CA241A1D7BC47C00F2EA53 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 83747BA72862D5430021245F /* Shared.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
|
@ -1309,7 +1324,7 @@
|
||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.12;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
@ -1320,11 +1335,8 @@
|
||||||
83CA241C1D7BC47C00F2EA53 /* Debug */ = {
|
83CA241C1D7BC47C00F2EA53 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -1349,7 +1361,6 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.mGBA;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.mGBA;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
|
@ -1357,11 +1368,8 @@
|
||||||
83CA241D1D7BC47C00F2EA53 /* Release */ = {
|
83CA241D1D7BC47C00F2EA53 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_IDENTITY = "";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 1;
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
FRAMEWORK_VERSION = A;
|
FRAMEWORK_VERSION = A;
|
||||||
|
@ -1385,7 +1393,6 @@
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.mGBA;
|
PRODUCT_BUNDLE_IDENTIFIER = net.kode54.mGBA;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue