From a39ce34ee98c327697661276980e34c579024f6b Mon Sep 17 00:00:00 2001 From: areff Date: Tue, 12 Feb 2008 22:12:27 +0000 Subject: [PATCH] Added fade to pause, key shift-cmd-p, changed volume controls around a bit, still needs fixing --- Application/PlaybackController.h | 4 +- Application/PlaybackController.m | 73 +++++- Audio/AudioPlayer.m | 3 +- Playlist/PlaylistView.h | 2 +- Playlist/PlaylistView.m | 5 + .../English.lproj/Preferences.nib/classes.nib | 233 ++++++++++++------ .../English.lproj/Preferences.nib/info.nib | 34 +-- .../Preferences.nib/keyedobjects.nib | Bin 16196 -> 16913 bytes 8 files changed, 236 insertions(+), 118 deletions(-) diff --git a/Application/PlaybackController.h b/Application/PlaybackController.h index 7cbd25b71..55bf1b86d 100644 --- a/Application/PlaybackController.h +++ b/Application/PlaybackController.h @@ -58,14 +58,14 @@ - (IBAction)seek:(id)sender; - (IBAction)seekForward:(id)sender; - (IBAction)seekBackward:(id)sender; +- (IBAction)fadeOut:(id)sender withTime:(double)time; - (void)initDefaults; +- (void)audioFader:(NSTimer *)audioTimer; - (void)updateTimeField:(double)pos; - (void)playEntryAtIndex:(int)i; - (void)playEntry:(PlaylistEntry *)pe; -- (int)status; - @end diff --git a/Application/PlaybackController.m b/Application/PlaybackController.m index eaa39a345..597eb97cc 100644 --- a/Application/PlaybackController.m +++ b/Application/PlaybackController.m @@ -1,6 +1,6 @@ #import "PlaybackController.h" #import "PlaylistView.h" - +#import #import "CogAudio/Status.h" #import "PlaylistController.h" @@ -53,8 +53,14 @@ - (void)awakeFromNib { - currentVolume = 100.0; [volumeSlider setDoubleValue:pow(10.0, log10(0.5)/4.0)*100]; + + double percent; + percent = (float)[volumeSlider doubleValue]/[volumeSlider maxValue];//100.0; + percent = percent * percent * percent * percent; + + currentVolume = ((float)[volumeSlider doubleValue]/100.0)*[volumeSlider maxValue];//percent * 1000;//0;//[volumeSlider doubleValue]; + [positionSlider setEnabled:NO]; } @@ -265,16 +271,57 @@ [audioPlayer setVolume:currentVolume]; } +/* selector for NSTimer - gets passed the Timer object itself + and the appropriate userInfo, which in this case is an NSNumber + containing the current volume before we start fading. */ +- (void)audioFader:(NSTimer *)audioTimer +{ + double volume = currentVolume; + NSArray *origValues = [audioTimer userInfo]; + id originalVolume = [origValues objectAtIndex:0]; + id origSliderVolume = [origValues objectAtIndex:1]; + + if (volume > 0) + { + [self volumeDown:self]; + } + else // volume is at 0 or below, we are ready to release the timer and move on + { + [audioPlayer pause]; + currentVolume = [originalVolume doubleValue]; + [audioPlayer setVolume:currentVolume]; + [volumeSlider setDoubleValue:[origSliderVolume doubleValue]]; + [audioTimer invalidate]; + } + +} + +- (IBAction)fadeOut:(id)sender withTime:(double)time +{ + id origCurrentVolume = [NSNumber numberWithDouble: currentVolume]; + id origSliderVolume = [NSNumber numberWithDouble: [volumeSlider doubleValue]]; + + NSArray *originalValues = [NSArray arrayWithObjects:origCurrentVolume,origSliderVolume,nil]; + NSTimer *fadeTimer; + + NSLog(@"currentVolume here%f", [volumeSlider doubleValue]); + fadeTimer = [NSTimer scheduledTimerWithTimeInterval:time + target:self + selector:@selector(audioFader:) + userInfo:originalValues + repeats:YES]; +} + - (IBAction)volumeDown:(id)sender { double percent; - [volumeSlider setDoubleValue:([volumeSlider doubleValue] - 5)]; - percent = (float)[volumeSlider doubleValue]/100.0; + percent = (float)[volumeSlider doubleValue]/[volumeSlider maxValue];//100.0; percent = percent * percent * percent * percent; - currentVolume = percent * 100.0; + currentVolume = (percent * [volumeSlider maxValue]) + [volumeSlider doubleValue];//100.0; + NSLog(@"currentVolume %f", currentVolume); [audioPlayer setVolume:currentVolume]; } @@ -285,11 +332,16 @@ [volumeSlider setDoubleValue:([volumeSlider doubleValue] + 5)]; - percent = (float)[volumeSlider doubleValue]/[volumeSlider maxValue]; + percent = (float)[volumeSlider doubleValue]/[volumeSlider maxValue];//100.0; percent = percent * percent * percent * percent; - currentVolume = percent * [volumeSlider maxValue]; - + currentVolume = (percent * [volumeSlider maxValue]) + [volumeSlider doubleValue];//100.0); + if (currentVolume > 400) + currentVolume = 400; + + NSLog(@"%f", currentVolume); + + [audioPlayer setVolume:currentVolume]; } @@ -362,11 +414,6 @@ } -- (int)status -{ - return playbackStatus; -} - - (void)audioPlayer:(AudioPlayer *)player statusChanged:(id)s { int status = [s intValue]; diff --git a/Audio/AudioPlayer.m b/Audio/AudioPlayer.m index 4567738c6..d88041aea 100644 --- a/Audio/AudioPlayer.m +++ b/Audio/AudioPlayer.m @@ -1,4 +1,4 @@ -// + // AudioController.m // Cog // @@ -137,6 +137,7 @@ [output setVolume:v]; } + //This is called by the delegate DURING a requestNextStream request. - (void)setNextStream:(NSURL *)url { diff --git a/Playlist/PlaylistView.h b/Playlist/PlaylistView.h index b4bd385ff..156dff78c 100644 --- a/Playlist/PlaylistView.h +++ b/Playlist/PlaylistView.h @@ -14,7 +14,7 @@ @interface PlaylistView : NSTableView { IBOutlet PlaybackController *playbackController; IBOutlet PlaylistController *playlistController; - + NSMenu *headerContextMenu; } diff --git a/Playlist/PlaylistView.m b/Playlist/PlaylistView.m index a837d1631..79e8ea239 100644 --- a/Playlist/PlaylistView.m +++ b/Playlist/PlaylistView.m @@ -200,6 +200,11 @@ { [playlistController clearFilterPredicate:self]; } + // shift+command+p - fade to pause + else if (modifiers == (NSCommandKeyMask | NSShiftKeyMask) && c == 0x70) + { + [playbackController fadeOut:self withTime:0.4]; + } else { [super keyDown:e]; diff --git a/Preferences/General/English.lproj/Preferences.nib/classes.nib b/Preferences/General/English.lproj/Preferences.nib/classes.nib index df89aa4c5..d5982ce21 100644 --- a/Preferences/General/English.lproj/Preferences.nib/classes.nib +++ b/Preferences/General/English.lproj/Preferences.nib/classes.nib @@ -1,76 +1,157 @@ -{ - IBClasses = ( - { - CLASS = AppcastArrayController; - LANGUAGE = ObjC; - SUPERCLASS = NSArrayController; - }, - { - ACTIONS = {openSheet = id; }; - CLASS = FileDrawerPane; - LANGUAGE = ObjC; - OUTLETS = {rootPathTextView = NSTextField; }; - SUPERCLASS = PreferencePane; - }, - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, - {CLASS = HotKeyControl; LANGUAGE = ObjC; SUPERCLASS = NDHotKeyControl; }, - { - ACTIONS = { - grabNextHotKey = id; - grabPlayHotKey = id; - grabPrevHotKey = id; - hotKeyChanged = id; - }; - CLASS = HotKeyPane; - LANGUAGE = ObjC; - OUTLETS = { - nextHotKeyControl = HotKeyControl; - playHotKeyControl = HotKeyControl; - prevHotKeyControl = HotKeyControl; - }; - SUPERCLASS = PreferencePane; - }, - {CLASS = NDHotKeyControl; LANGUAGE = ObjC; SUPERCLASS = NSTextField; }, - { - ACTIONS = {takeDeviceID = id; }; - CLASS = OutputPane; - LANGUAGE = ObjC; - OUTLETS = {outputDevices = OutputsArrayController; }; - SUPERCLASS = PreferencePane; - }, - { - CLASS = OutputsArrayController; - LANGUAGE = ObjC; - SUPERCLASS = NSArrayController; - }, - { - CLASS = PrefPaneController; - LANGUAGE = ObjC; - OUTLETS = { - fileDrawerPane = FileDrawerPane; - hotKeyPane = HotKeyPane; - outputPane = OutputPane; - remoteView = NSView; - scrobblerView = NSView; - updatesView = NSView; - }; - SUPERCLASS = NSObject; - }, - { - CLASS = PreferencePane; - LANGUAGE = ObjC; - OUTLETS = {view = NSView; }; - SUPERCLASS = NSObject; - }, - { - ACTIONS = {takeBool = id; }; - CLASS = RemotePane; - LANGUAGE = ObjC; - OUTLETS = {onlyOnActive = NSButton; }; - SUPERCLASS = PreferencePane; - }, - {CLASS = ScrobblerPane; LANGUAGE = ObjC; SUPERCLASS = PreferencePane; }, - {CLASS = UpdatesPane; LANGUAGE = ObjC; SUPERCLASS = PreferencePane; } - ); - IBVersion = 1; -} \ No newline at end of file + + + + + IBClasses + + + CLASS + AppcastArrayController + LANGUAGE + ObjC + SUPERCLASS + NSArrayController + + + CLASS + HotKeyControl + LANGUAGE + ObjC + SUPERCLASS + NDHotKeyControl + + + ACTIONS + + grabNextHotKey + id + grabPlayHotKey + id + grabPrevHotKey + id + hotKeyChanged + id + + CLASS + HotKeyPane + LANGUAGE + ObjC + OUTLETS + + nextHotKeyControl + HotKeyControl + playHotKeyControl + HotKeyControl + prevHotKeyControl + HotKeyControl + + SUPERCLASS + PreferencePane + + + CLASS + PrefPaneController + LANGUAGE + ObjC + OUTLETS + + fileDrawerPane + FileDrawerPane + hotKeyPane + HotKeyPane + outputPane + OutputPane + remoteView + NSView + scrobblerView + NSView + updatesView + NSView + + SUPERCLASS + NSObject + + + CLASS + OutputsArrayController + LANGUAGE + ObjC + SUPERCLASS + NSArrayController + + + CLASS + FirstResponder + LANGUAGE + ObjC + SUPERCLASS + NSObject + + + CLASS + NSObject + LANGUAGE + ObjC + + + ACTIONS + + openSheet + id + + CLASS + FileDrawerPane + LANGUAGE + ObjC + OUTLETS + + rootPathTextView + NSTextField + + SUPERCLASS + PreferencePane + + + CLASS + NDHotKeyControl + LANGUAGE + ObjC + SUPERCLASS + NSTextField + + + CLASS + PreferencePane + LANGUAGE + ObjC + OUTLETS + + view + NSView + + SUPERCLASS + NSObject + + + ACTIONS + + takeDeviceID + id + + CLASS + OutputPane + LANGUAGE + ObjC + OUTLETS + + outputDevices + OutputsArrayController + + SUPERCLASS + PreferencePane + + + IBVersion + 1 + + diff --git a/Preferences/General/English.lproj/Preferences.nib/info.nib b/Preferences/General/English.lproj/Preferences.nib/info.nib index dbf0d4b4f..ed1752370 100644 --- a/Preferences/General/English.lproj/Preferences.nib/info.nib +++ b/Preferences/General/English.lproj/Preferences.nib/info.nib @@ -1,36 +1,20 @@ - + - IBDocumentLocation - 291 101 356 534 0 0 1680 1028 - IBEditorPositions - - 10 - 171 910 506 102 0 0 1680 1028 - 11 - 677 567 452 151 0 0 1680 1028 - 43 - 166 683 452 116 0 0 1680 1028 - 50 - 660 357 452 124 0 0 1680 1028 - 58 - 641 480 452 101 0 0 1680 1028 - 85 - 758 836 452 116 0 0 1680 1028 - IBFramework Version - 446.1 + 629 + IBLastKnownRelativeProjectPath + ../../General.xcodeproj + IBOldestOS + 5 IBOpenObjects - 50 - 11 10 - 58 - 85 - 43 IBSystem Version - 8P2137 + 9B18 + targetFramework + IBCocoaFramework diff --git a/Preferences/General/English.lproj/Preferences.nib/keyedobjects.nib b/Preferences/General/English.lproj/Preferences.nib/keyedobjects.nib index a5d45d537e57800c2e2185ec0170b0869195a9e1..64a4acf1684bc0f36d2e5777798fc15e4090f9d2 100644 GIT binary patch literal 16913 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 literal 16196 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