Equalizer: Add option for presets to track the music genre tags
This commit is contained in:
parent
147de11d89
commit
83ad969d9b
8 changed files with 175 additions and 46 deletions
|
@ -62,6 +62,7 @@ NSString *CogPlaybackDidStopNotficiation = @"CogPlaybackDidStopNotficiation";
|
||||||
[NSNumber numberWithDouble:100.0], @"volume",
|
[NSNumber numberWithDouble:100.0], @"volume",
|
||||||
[NSNumber numberWithBool:NO], @"GraphicEQenable",
|
[NSNumber numberWithBool:NO], @"GraphicEQenable",
|
||||||
[NSNumber numberWithInt:-1], @"GraphicEQpreset",
|
[NSNumber numberWithInt:-1], @"GraphicEQpreset",
|
||||||
|
[NSNumber numberWithBool:NO], @"GraphicEQtrackgenre",
|
||||||
nil];
|
nil];
|
||||||
|
|
||||||
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultsDictionary];
|
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultsDictionary];
|
||||||
|
@ -667,6 +668,8 @@ NSDictionary * makeRGInfo(PlaylistEntry *pe)
|
||||||
|
|
||||||
CFRelease(classData);
|
CFRelease(classData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
equalizerLoadPreset(eq);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_eqWasOpen)
|
if (_eqWasOpen)
|
||||||
|
@ -677,6 +680,11 @@ NSDictionary * makeRGInfo(PlaylistEntry *pe)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)audioPlayer:(AudioPlayer *)player refreshEqualizer:(AudioUnit)eq
|
||||||
|
{
|
||||||
|
equalizerLoadPreset(eq);
|
||||||
|
}
|
||||||
|
|
||||||
- (void)audioPlayer:(AudioPlayer *)player removeEqualizer:(AudioUnit)eq
|
- (void)audioPlayer:(AudioPlayer *)player removeEqualizer:(AudioUnit)eq
|
||||||
{
|
{
|
||||||
if (eq == _eq)
|
if (eq == _eq)
|
||||||
|
@ -738,6 +746,8 @@ NSDictionary * makeRGInfo(PlaylistEntry *pe)
|
||||||
|
|
||||||
[playlistController setCurrentEntry:pe];
|
[playlistController setCurrentEntry:pe];
|
||||||
|
|
||||||
|
equalizerApplyGenre([pe genre]);
|
||||||
|
|
||||||
lastPosition = -10;
|
lastPosition = -10;
|
||||||
|
|
||||||
[self setPosition:0];
|
[self setPosition:0];
|
||||||
|
|
|
@ -96,6 +96,10 @@
|
||||||
- (void)notifyStreamChanged:(id)userInfo;
|
- (void)notifyStreamChanged:(id)userInfo;
|
||||||
- (void)notifyStreamChangedMainThread:(id)userInfo;
|
- (void)notifyStreamChangedMainThread:(id)userInfo;
|
||||||
|
|
||||||
|
- (void)beginEqualizer:(AudioUnit)eq;
|
||||||
|
- (void)refreshEqualizer:(AudioUnit)eq;
|
||||||
|
- (void)endEqualizer:(AudioUnit)eq;
|
||||||
|
|
||||||
- (BOOL)endOfInputReached:(BufferChain *)sender;
|
- (BOOL)endOfInputReached:(BufferChain *)sender;
|
||||||
- (void)setShouldContinue:(BOOL)s;
|
- (void)setShouldContinue:(BOOL)s;
|
||||||
//- (BufferChain *)bufferChain;
|
//- (BufferChain *)bufferChain;
|
||||||
|
@ -113,6 +117,7 @@
|
||||||
- (void)audioPlayer:(AudioPlayer *)player didBeginStream:(id)userInfo;
|
- (void)audioPlayer:(AudioPlayer *)player didBeginStream:(id)userInfo;
|
||||||
- (void)audioPlayer:(AudioPlayer *)player didChangeStatus:(id)status userInfo:(id)userInfo;
|
- (void)audioPlayer:(AudioPlayer *)player didChangeStatus:(id)status userInfo:(id)userInfo;
|
||||||
- (void)audioPlayer:(AudioPlayer *)player displayEqualizer:(AudioUnit)eq;
|
- (void)audioPlayer:(AudioPlayer *)player displayEqualizer:(AudioUnit)eq;
|
||||||
|
- (void)audioPlayer:(AudioPlayer *)player refreshEqualizer:(AudioUnit)eq;
|
||||||
- (void)audioPlayer:(AudioPlayer *)player removeEqualizer:(AudioUnit)eq;
|
- (void)audioPlayer:(AudioPlayer *)player removeEqualizer:(AudioUnit)eq;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -269,6 +269,11 @@
|
||||||
[self sendDelegateMethod:@selector(audioPlayer:displayEqualizer:) withVoid:eq waitUntilDone:YES];
|
[self sendDelegateMethod:@selector(audioPlayer:displayEqualizer:) withVoid:eq waitUntilDone:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)refreshEqualizer:(AudioUnit)eq
|
||||||
|
{
|
||||||
|
[self sendDelegateMethod:@selector(audioPlayer:refreshEqualizer:) withVoid:eq waitUntilDone:YES];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)endEqualizer:(AudioUnit)eq
|
- (void)endEqualizer:(AudioUnit)eq
|
||||||
{
|
{
|
||||||
[self sendDelegateMethod:@selector(audioPlayer:removeEqualizer:) withVoid:eq waitUntilDone:YES];
|
[self sendDelegateMethod:@selector(audioPlayer:removeEqualizer:) withVoid:eq waitUntilDone:YES];
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)beginEqualizer:(AudioUnit)eq;
|
- (void)beginEqualizer:(AudioUnit)eq;
|
||||||
|
- (void)refreshEqualizer:(AudioUnit)eq;
|
||||||
- (void)endEqualizer:(AudioUnit)eq;
|
- (void)endEqualizer:(AudioUnit)eq;
|
||||||
|
|
||||||
- (double)amountPlayed;
|
- (double)amountPlayed;
|
||||||
|
|
|
@ -162,6 +162,11 @@
|
||||||
[controller beginEqualizer:eq];
|
[controller beginEqualizer:eq];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)refreshEqualizer:(AudioUnit)eq
|
||||||
|
{
|
||||||
|
[controller refreshEqualizer:eq];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)endEqualizer:(AudioUnit)eq
|
- (void)endEqualizer:(AudioUnit)eq
|
||||||
{
|
{
|
||||||
[controller endEqualizer:eq];
|
[controller endEqualizer:eq];
|
||||||
|
|
|
@ -154,6 +154,7 @@ static OSStatus renderCallback( void *inRefCon, AudioUnitRenderActionFlags *ioAc
|
||||||
|
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.outputDevice" options:0 context:NULL];
|
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.outputDevice" options:0 context:NULL];
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.GraphicEQenable" options:0 context:NULL];
|
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.GraphicEQenable" options:0 context:NULL];
|
||||||
|
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.GraphicEQpreset" options:0 context:NULL];
|
||||||
}
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
@ -179,6 +180,10 @@ default_device_changed(AudioObjectID inObjectID, UInt32 inNumberAddresses, const
|
||||||
|
|
||||||
[self setEqualizerEnabled:enabled];
|
[self setEqualizerEnabled:enabled];
|
||||||
}
|
}
|
||||||
|
else if ([keyPath isEqualToString:@"values.GraphicEQpreset"]) {
|
||||||
|
if (_eq)
|
||||||
|
[outputController refreshEqualizer:_eq];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)signalEndOfStream
|
- (void)signalEndOfStream
|
||||||
|
@ -726,6 +731,7 @@ default_device_changed(AudioObjectID inObjectID, UInt32 inNumberAddresses, const
|
||||||
|
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeyPath:@"values.outputDevice"];
|
[[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeyPath:@"values.outputDevice"];
|
||||||
[[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeyPath:@"values.GraphicEQenable"];
|
[[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeyPath:@"values.GraphicEQenable"];
|
||||||
|
[[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeyPath:@"values.GraphicEQpreset"];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)pause
|
- (void)pause
|
||||||
|
|
|
@ -14,6 +14,10 @@
|
||||||
#import <AudioUnit/AudioUnit.h>
|
#import <AudioUnit/AudioUnit.h>
|
||||||
#import <AudioToolbox/AudioToolbox.h>
|
#import <AudioToolbox/AudioToolbox.h>
|
||||||
|
|
||||||
|
void equalizerApplyGenre(NSString *genre);
|
||||||
|
void equalizerLoadPreset(AudioUnit au);
|
||||||
|
void equalizerApplyPreset(AudioUnit au, NSDictionary * preset);
|
||||||
|
|
||||||
@interface AUPluginUI : NSObject
|
@interface AUPluginUI : NSObject
|
||||||
{
|
{
|
||||||
AudioUnit au;
|
AudioUnit au;
|
||||||
|
|
|
@ -14,7 +14,10 @@
|
||||||
|
|
||||||
#import "json.h"
|
#import "json.h"
|
||||||
|
|
||||||
|
static NSString * equalizerGenre = @"";
|
||||||
|
static const NSString * equalizerDefaultGenre = @"Flat";
|
||||||
static NSArray * equalizer_presets_processed = nil;
|
static NSArray * equalizer_presets_processed = nil;
|
||||||
|
static NSDictionary * equalizer_presets_by_name = nil;
|
||||||
static json_value * equalizer_presets = NULL;
|
static json_value * equalizer_presets = NULL;
|
||||||
|
|
||||||
static const float winamp_equalizer_bands[10] = { 70, 180, 320, 600, 1000, 3000, 6000, 12000, 14000, 16000 };
|
static const float winamp_equalizer_bands[10] = { 70, 180, 320, 600, 1000, 3000, 6000, 12000, 14000, 16000 };
|
||||||
|
@ -145,6 +148,7 @@ static void loadPresets()
|
||||||
{
|
{
|
||||||
// Got the array of presets
|
// Got the array of presets
|
||||||
NSMutableArray * array = [[NSMutableArray alloc] init];
|
NSMutableArray * array = [[NSMutableArray alloc] init];
|
||||||
|
NSMutableDictionary * dict = [[NSMutableDictionary alloc] init];
|
||||||
|
|
||||||
size_t count = equalizer_presets->u.object.values[1].value->u.array.length;
|
size_t count = equalizer_presets->u.object.values[1].value->u.array.length;
|
||||||
json_value ** values = equalizer_presets->u.object.values[1].value->u.array.values;
|
json_value ** values = equalizer_presets->u.object.values[1].value->u.array.values;
|
||||||
|
@ -168,12 +172,15 @@ static void loadPresets()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[array addObject:[NSDictionary dictionaryWithDictionary:equalizerItem]];
|
NSDictionary *outItem = [NSDictionary dictionaryWithDictionary:equalizerItem];
|
||||||
|
[array addObject:outItem];
|
||||||
|
[dict setObject:outItem forKey:[outItem objectForKey:@"name"]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
equalizer_presets_processed = [NSArray arrayWithArray:array];
|
equalizer_presets_processed = [NSArray arrayWithArray:array];
|
||||||
|
equalizer_presets_by_name = [NSDictionary dictionaryWithDictionary:dict];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[fileHandle closeFile];
|
[fileHandle closeFile];
|
||||||
|
@ -185,6 +192,76 @@ static void loadPresets()
|
||||||
CFRelease(appUrlRef);
|
CFRelease(appUrlRef);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void equalizerApplyGenre(NSString *genre) {
|
||||||
|
equalizerGenre = genre;
|
||||||
|
if ([[[NSUserDefaultsController sharedUserDefaultsController] defaults] boolForKey:@"GraphicEQtrackgenre"]) {
|
||||||
|
NSDictionary * preset = [equalizer_presets_by_name objectForKey:genre];
|
||||||
|
if (!preset) {
|
||||||
|
// Find a match
|
||||||
|
if (genre && ![genre isEqualToString:@""])
|
||||||
|
{
|
||||||
|
NSUInteger matchLength = 0;
|
||||||
|
NSString *lowerCaseGenre = [genre lowercaseString];
|
||||||
|
for (NSString *key in [equalizer_presets_by_name allKeys]) {
|
||||||
|
NSString *lowerCaseKey = [key lowercaseString];
|
||||||
|
if ([lowerCaseGenre containsString:lowerCaseKey]) {
|
||||||
|
if ([key length] > matchLength)
|
||||||
|
{
|
||||||
|
matchLength = [key length];
|
||||||
|
preset = [equalizer_presets_by_name objectForKey:key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!preset) {
|
||||||
|
preset = [equalizer_presets_by_name objectForKey:equalizerDefaultGenre];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (preset) {
|
||||||
|
NSInteger index = [equalizer_presets_processed indexOfObject:preset];
|
||||||
|
[[[NSUserDefaultsController sharedUserDefaultsController] defaults] setInteger:index forKey:@"GraphicEQpreset"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void equalizerLoadPreset(AudioUnit au) {
|
||||||
|
NSInteger index = [[[NSUserDefaultsController sharedUserDefaultsController] defaults] integerForKey:@"GraphicEQpreset"];
|
||||||
|
if (index >= 0 && index < [equalizer_presets_processed count]) {
|
||||||
|
NSDictionary * preset = [equalizer_presets_processed objectAtIndex:index];
|
||||||
|
equalizerApplyPreset(au, preset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void equalizerApplyPreset(AudioUnit au, NSDictionary * preset) {
|
||||||
|
if (au && preset) {
|
||||||
|
AudioUnitParameterValue paramValue = 0;
|
||||||
|
if (AudioUnitGetParameter(au, kGraphicEQParam_NumberOfBands, kAudioUnitScope_Global, 0, ¶mValue))
|
||||||
|
return;
|
||||||
|
|
||||||
|
size_t numberOfBands = paramValue ? 31 : 10;
|
||||||
|
|
||||||
|
if (numberOfBands == 31) {
|
||||||
|
float presetValues[31];
|
||||||
|
interpolateBandsTo31(presetValues, preset);
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < 31; ++i)
|
||||||
|
{
|
||||||
|
AudioUnitSetParameter(au, i, kAudioUnitScope_Global, 0, presetValues[i], 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (numberOfBands == 10) {
|
||||||
|
float presetValues[10];
|
||||||
|
interpolateBandsTo10(presetValues, preset);
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < 10; ++i)
|
||||||
|
{
|
||||||
|
AudioUnitSetParameter(au, i, kAudioUnitScope_Global, 0, presetValues[i], 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@interface AUPluginUI (Private)
|
@interface AUPluginUI (Private)
|
||||||
- (BOOL)test_cocoa_view_support;
|
- (BOOL)test_cocoa_view_support;
|
||||||
- (int)create_cocoa_view;
|
- (int)create_cocoa_view;
|
||||||
|
@ -389,21 +466,14 @@ static void loadPresets()
|
||||||
[self setAutodisplay:YES];
|
[self setAutodisplay:YES];
|
||||||
[self setOneShot:YES];
|
[self setOneShot:YES];
|
||||||
|
|
||||||
if (front)
|
|
||||||
{
|
|
||||||
[self orderFront:self];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
[self orderWindow:NSWindowBelow relativeTo:window];
|
|
||||||
|
|
||||||
[self setReleasedWhenClosed:NO];
|
[self setReleasedWhenClosed:NO];
|
||||||
|
|
||||||
NSRect topRect = NSMakeRect(0, 0, req_width, 32);
|
NSRect topRect = NSMakeRect(0, 0, req_width, 40);
|
||||||
|
|
||||||
topView = [[NSView alloc] initWithFrame:topRect];
|
topView = [[NSView alloc] initWithFrame:topRect];
|
||||||
|
|
||||||
NSRect topFrame = NSMakeRect(0, req_height, req_width, req_height);
|
NSRect topFrame = NSMakeRect(0, req_height, req_width, topRect.size.height);
|
||||||
NSRect newFrame = NSMakeRect(0, 0, req_width, topRect.size.height);
|
NSRect newFrame = NSMakeRect(0, 0, req_width, req_height);
|
||||||
|
|
||||||
topRect = NSMakeRect(0, 0, req_width, req_height + topRect.size.height);
|
topRect = NSMakeRect(0, 0, req_width, req_height + topRect.size.height);
|
||||||
|
|
||||||
|
@ -416,16 +486,26 @@ static void loadPresets()
|
||||||
[topView setFrame:topFrame];
|
[topView setFrame:topFrame];
|
||||||
[auView setFrame:newFrame];
|
[auView setFrame:newFrame];
|
||||||
|
|
||||||
BOOL enabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"GraphicEQenable"];
|
BOOL enabled = [[[NSUserDefaultsController sharedUserDefaultsController] defaults] boolForKey:@"GraphicEQenable"];
|
||||||
|
|
||||||
NSButton *button = [NSButton checkboxWithTitle:@"Enabled" target:self action:@selector(toggleEnable:)];
|
NSButton *button = [NSButton checkboxWithTitle:@"Enabled" target:self action:@selector(toggleEnable:)];
|
||||||
[button setState:enabled ? NSControlStateValueOn : NSControlStateValueOff];
|
[button setState:enabled ? NSControlStateValueOn : NSControlStateValueOff];
|
||||||
|
|
||||||
NSRect buttonFrame = [button frame];
|
NSRect buttonFrame = [button frame];
|
||||||
buttonFrame.origin = NSMakePoint( 18, 4 );
|
buttonFrame.origin = NSMakePoint( 18, 7 );
|
||||||
[button setFrame:buttonFrame];
|
[button setFrame:buttonFrame];
|
||||||
|
|
||||||
[topView addSubview:button];
|
[topView addSubview:button];
|
||||||
|
|
||||||
|
enabled = [[[NSUserDefaultsController sharedUserDefaultsController] defaults] boolForKey:@"GraphicEQtrackgenre"];
|
||||||
|
NSButton *trackButton = [NSButton checkboxWithTitle:@"Tracking genre tags" target:self action:@selector(toggleTracking:)];
|
||||||
|
[trackButton setState:enabled ? NSControlStateValueOn : NSControlStateValueOff];
|
||||||
|
|
||||||
|
NSRect trackButtonFrame = [trackButton frame];
|
||||||
|
trackButtonFrame.origin = NSMakePoint(buttonFrame.origin.x + buttonFrame.size.width + 4, 7);
|
||||||
|
[trackButton setFrame:trackButtonFrame];
|
||||||
|
|
||||||
|
[topView addSubview:trackButton];
|
||||||
|
|
||||||
loadPresets();
|
loadPresets();
|
||||||
|
|
||||||
|
@ -444,16 +524,17 @@ static void loadPresets()
|
||||||
[array addObject:@"Custom"];
|
[array addObject:@"Custom"];
|
||||||
[presetButton addItemsWithTitles:array];
|
[presetButton addItemsWithTitles:array];
|
||||||
|
|
||||||
NSInteger presetSelected = [[NSUserDefaults standardUserDefaults] integerForKey:@"GraphicEQpreset"];
|
NSInteger presetSelected = [[[NSUserDefaultsController sharedUserDefaultsController] defaults] integerForKey:@"GraphicEQpreset"];
|
||||||
if (presetSelected < 0 || presetSelected >= [equalizer_presets_processed count])
|
if (presetSelected < 0 || presetSelected >= [equalizer_presets_processed count])
|
||||||
presetSelected = [equalizer_presets_processed count];
|
presetSelected = [equalizer_presets_processed count];
|
||||||
|
|
||||||
[presetButton selectItemAtIndex:presetSelected];
|
[presetButton selectItemAtIndex:presetSelected];
|
||||||
|
equalizerLoadPreset(au);
|
||||||
|
|
||||||
NSTextField * presetLabel = [NSTextField labelWithString:@"Preset:"];
|
NSTextField * presetLabel = [NSTextField labelWithString:@"Preset:"];
|
||||||
|
|
||||||
NSRect labelFrame = [presetLabel frame];
|
NSRect labelFrame = [presetLabel frame];
|
||||||
labelFrame.origin = NSMakePoint(popupFrame.origin.x - labelFrame.size.width - 2, 6);
|
labelFrame.origin = NSMakePoint(popupFrame.origin.x - labelFrame.size.width - 2, 7);
|
||||||
[presetLabel setFrame:labelFrame];
|
[presetLabel setFrame:labelFrame];
|
||||||
[topView addSubview:presetLabel];
|
[topView addSubview:presetLabel];
|
||||||
|
|
||||||
|
@ -481,6 +562,15 @@ static void loadPresets()
|
||||||
param.mParameterID = i;
|
param.mParameterID = i;
|
||||||
AUListenerAddParameter(listenerRef, (__bridge void *)self, ¶m);
|
AUListenerAddParameter(listenerRef, (__bridge void *)self, ¶m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:@"values.GraphicEQpreset" options:0 context:nil];
|
||||||
|
|
||||||
|
if (front)
|
||||||
|
{
|
||||||
|
[self orderFront:self];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
[self orderWindow:NSWindowBelow relativeTo:window];
|
||||||
}
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
@ -491,6 +581,19 @@ static void loadPresets()
|
||||||
if (listenerRef) {
|
if (listenerRef) {
|
||||||
AUListenerDispose(listenerRef);
|
AUListenerDispose(listenerRef);
|
||||||
}
|
}
|
||||||
|
[[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeyPath:@"values.GraphicEQpreset"];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
|
||||||
|
{
|
||||||
|
if ([keyPath isEqualToString:@"values.GraphicEQpreset"]) {
|
||||||
|
NSInteger index = [[[NSUserDefaultsController sharedUserDefaultsController] defaults] integerForKey:@"GraphicEQpreset"];
|
||||||
|
|
||||||
|
if (index < 0 || index > [equalizer_presets_processed count])
|
||||||
|
index = [equalizer_presets_processed count];
|
||||||
|
|
||||||
|
[presetButton selectItemAtIndex:index];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSRect)splitView:(NSSplitView *)splitView effectiveRect:(NSRect)proposedEffectiveRect forDrawnRect:(NSRect)drawnRect ofDividerAtIndex:(NSInteger)dividerIndex
|
- (NSRect)splitView:(NSSplitView *)splitView effectiveRect:(NSRect)proposedEffectiveRect forDrawnRect:(NSRect)drawnRect ofDividerAtIndex:(NSInteger)dividerIndex
|
||||||
|
@ -502,51 +605,41 @@ static void loadPresets()
|
||||||
{
|
{
|
||||||
BOOL enabled = [sender state] == NSControlStateValueOn;
|
BOOL enabled = [sender state] == NSControlStateValueOn;
|
||||||
|
|
||||||
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"GraphicEQenable"];
|
[[[NSUserDefaultsController sharedUserDefaultsController] defaults] setBool:enabled forKey:@"GraphicEQenable"];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) toggleTracking:(id)sender
|
||||||
|
{
|
||||||
|
BOOL enabled = [sender state] == NSControlStateValueOn;
|
||||||
|
|
||||||
|
[[[NSUserDefaultsController sharedUserDefaultsController] defaults] setBool:enabled forKey:@"GraphicEQtrackgenre"];
|
||||||
|
|
||||||
|
equalizerApplyGenre(equalizerGenre);
|
||||||
|
|
||||||
|
[self changePreset:presetButton];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) changePreset:(id)sender
|
- (void) changePreset:(id)sender
|
||||||
{
|
{
|
||||||
AudioUnitParameterValue paramValue = 0;
|
|
||||||
if (AudioUnitGetParameter(au, kGraphicEQParam_NumberOfBands, kAudioUnitScope_Global, 0, ¶mValue))
|
|
||||||
return;
|
|
||||||
|
|
||||||
NSInteger index = [sender indexOfSelectedItem];
|
NSInteger index = [sender indexOfSelectedItem];
|
||||||
|
|
||||||
size_t numberOfBands = paramValue ? 31 : 10;
|
|
||||||
|
|
||||||
if (index < [equalizer_presets_processed count])
|
if (index < [equalizer_presets_processed count])
|
||||||
{
|
{
|
||||||
NSDictionary * preset = [equalizer_presets_processed objectAtIndex:index];
|
NSDictionary * preset = [equalizer_presets_processed objectAtIndex:index];
|
||||||
|
|
||||||
if (numberOfBands == 31) {
|
|
||||||
float presetValues[31];
|
|
||||||
interpolateBandsTo31(presetValues, preset);
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < 31; ++i)
|
|
||||||
{
|
|
||||||
AudioUnitSetParameter(au, i, kAudioUnitScope_Global, 0, presetValues[i], 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (numberOfBands == 10) {
|
|
||||||
float presetValues[10];
|
|
||||||
interpolateBandsTo10(presetValues, preset);
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < 10; ++i)
|
|
||||||
{
|
|
||||||
AudioUnitSetParameter(au, i, kAudioUnitScope_Global, 0, presetValues[i], 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NSEvent * event = [NSEvent mouseEventWithType:NSEventTypeLeftMouseDown
|
equalizerApplyPreset(au, preset);
|
||||||
location:NSMakePoint(0, 0) modifierFlags:0 timestamp:0 windowNumber:[self windowNumber] context:nil eventNumber:0 clickCount:1 pressure:1.0];
|
|
||||||
|
|
||||||
[auView mouseDown:event];
|
NSEvent * event = [NSEvent mouseEventWithType:NSEventTypeLeftMouseDown location:NSMakePoint(0, 0) modifierFlags:0 timestamp:0 windowNumber:[self windowNumber] context:nil eventNumber:0 clickCount:1 pressure:1.0];
|
||||||
|
|
||||||
[[NSUserDefaults standardUserDefaults] setInteger:index forKey:@"GraphicEQpreset"];
|
[auView mouseDown:event];
|
||||||
|
[auView mouseUp:event];
|
||||||
|
|
||||||
|
[[[NSUserDefaultsController sharedUserDefaultsController] defaults] setInteger:index forKey:@"GraphicEQpreset"];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
[[NSUserDefaults standardUserDefaults] setInteger:-1 forKey:@"GraphicEQpreset"];
|
{
|
||||||
|
[[[NSUserDefaultsController sharedUserDefaultsController] defaults] setInteger:-1 forKey:@"GraphicEQpreset"];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
Loading…
Reference in a new issue