HDCD Decoding: Add HDCD indicator

CQTexperiment
Christopher Snowhill 2022-01-20 23:53:45 -08:00
parent 3a2d360d24
commit 26e0e0cead
12 changed files with 109 additions and 1 deletions

View File

@ -42,6 +42,7 @@ extern NSDictionary * makeRGInfo(PlaylistEntry *pe);
IBOutlet NSArrayController *outputDevices;
NSTimer *positionTimer;
NSTimer *hdcdLogoTimer;
AudioPlayer *audioPlayer;

View File

@ -8,6 +8,9 @@
#import "PlaylistEntry.h"
#import "PlaylistLoader.h"
#import "MainWindow.h"
#import "MiniWindow.h"
#import <MediaPlayer/MPNowPlayingInfoCenter.h>
#import <MediaPlayer/MPRemoteCommandCenter.h>
#import <MediaPlayer/MPRemoteCommand.h>
@ -114,6 +117,12 @@ NSString *CogPlaybackDidStopNotficiation = @"CogPlaybackDidStopNotficiation";
[self setPlaybackStatus: CogStatusPaused];
[self sendMetaData];
if (hdcdLogoTimer)
{
[hdcdLogoTimer invalidate];
hdcdLogoTimer = nil;
}
}
- (IBAction)resume:(id)sender
@ -131,6 +140,8 @@ NSString *CogPlaybackDidStopNotficiation = @"CogPlaybackDidStopNotficiation";
[audioPlayer stop];
[self sendMetaData];
[self removeHDCD:nil];
}
//called by double-clicking on table
@ -766,7 +777,7 @@ NSDictionary * makeRGInfo(PlaylistEntry *pe)
lastPosition = -10;
[self setPosition:0];
[[NSNotificationCenter defaultCenter] postNotificationName:CogPlaybackDidBeginNotficiation object:pe];
}
@ -775,6 +786,7 @@ NSDictionary * makeRGInfo(PlaylistEntry *pe)
int status = [s intValue];
if (status == CogStatusStopped || status == CogStatusPaused)
{
[self removeHDCD:nil];
if (positionTimer)
{
[positionTimer invalidate];
@ -836,6 +848,32 @@ NSDictionary * makeRGInfo(PlaylistEntry *pe)
[self sendMetaData];
}
- (void)audioPlayer:(AudioPlayer *)player sustainHDCD:(id)userInfo
{
MainWindow * mainWindow = (MainWindow *) appController.mainWindow;
[mainWindow showHDCDLogo:YES];
MiniWindow * miniWindow = (MiniWindow *) appController.miniWindow;
[miniWindow showHDCDLogo:YES];
if (hdcdLogoTimer)
{
[hdcdLogoTimer invalidate];
hdcdLogoTimer = nil;
}
hdcdLogoTimer = [NSTimer timerWithTimeInterval:10.0 target:self selector:@selector(removeHDCD:) userInfo:nil repeats:NO];
}
- (void)removeHDCD:(id)sender
{
MainWindow * mainWindow = (MainWindow *) appController.mainWindow;
[mainWindow showHDCDLogo:NO];
MiniWindow * miniWindow = (MiniWindow *) appController.miniWindow;
[miniWindow showHDCDLogo:NO];
[hdcdLogoTimer invalidate];
hdcdLogoTimer = nil;
}
- (void)playlistDidChange:(PlaylistController *)p
{
[audioPlayer resetNextStreams];

View File

@ -119,6 +119,7 @@
- (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 sustainHDCD:(id)userInfo;
@end

View File

@ -518,6 +518,11 @@
[self sendDelegateMethod:@selector(audioPlayer:didChangeStatus:userInfo:) withObject:[NSNumber numberWithInt:status] withObject:[bufferChain userInfo] waitUntilDone:wait];
}
- (void)sustainHDCD
{
[self sendDelegateMethod:@selector(audioPlayer:sustainHDCD:) withObject:[bufferChain userInfo] waitUntilDone:NO];
}
- (void)setPlaybackStatus:(int)status
{
[self setPlaybackStatus:status waitUntilDone:NO];

View File

@ -246,6 +246,7 @@
{
OutputNode * outputNode = (OutputNode *) [controller output];
[outputNode sustainHDCD];
[controller sustainHDCD];
}
@end

View File

@ -826,8 +826,13 @@
</connections>
</button>
</toolbarItem>
<toolbarItem implicitItemIdentifier="2DE885D7-56DA-4F25-BD36-0BBA2655C596" explicitItemIdentifier="hdcd" label="HDCD Indicator" paletteLabel="HDCD Indicator" tag="-1" image="hdcdLogoTemplate" bordered="YES" id="ZH9-ZU-skw">
<size key="minSize" width="70" height="25"/>
<size key="maxSize" width="70" height="25"/>
</toolbarItem>
</allowedToolbarItems>
<defaultToolbarItems>
<toolbarItem reference="ZH9-ZU-skw"/>
<toolbarItem reference="1539"/>
<toolbarItem reference="1552"/>
<toolbarItem reference="1636"/>
@ -856,6 +861,7 @@
<outlet property="delegate" destination="226" id="481"/>
<outlet property="initialFirstResponder" destination="207" id="720"/>
<outlet property="playlistView" destination="206" id="mah-wo-1nd"/>
<outlet property="mainToolbar" destination="1523" id="J2X-YK-xV0"/>
</connections>
<point key="canvasLocation" x="130" y="131"/>
</window>
@ -1020,8 +1026,13 @@
</toolbarItem>
<toolbarItem implicitItemIdentifier="NSToolbarSeparatorItem" id="2225"/>
<toolbarItem implicitItemIdentifier="NSToolbarCustomizeToolbarItem" id="2229"/>
<toolbarItem implicitItemIdentifier="F1A8365A-DBF5-4BB9-A2B3-3964BFA1B15D" explicitItemIdentifier="hdcd" label="HDCD Indicator" paletteLabel="HDCD Indicator" tag="-1" image="hdcdLogoTemplate" bordered="YES" id="qfu-F9-bOZ">
<size key="minSize" width="70" height="25"/>
<size key="maxSize" width="70" height="25"/>
</toolbarItem>
</allowedToolbarItems>
<defaultToolbarItems>
<toolbarItem reference="qfu-F9-bOZ"/>
<toolbarItem reference="2272"/>
<toolbarItem reference="2228"/>
<toolbarItem reference="2429"/>
@ -1042,6 +1053,7 @@
</dictionary>
</binding>
<outlet property="playbackController" destination="705" id="vo7-mK-yQe"/>
<outlet property="miniToolbar" destination="2222" id="Up2-7z-HqA"/>
</connections>
<point key="canvasLocation" x="45" y="444"/>
</window>
@ -2135,6 +2147,7 @@ Gw
</customObject>
</objects>
<resources>
<image name="hdcdLogoTemplate" width="656" height="225"/>
<image name="imageCell:1801:image" width="17" height="17">
<mutableData key="keyedArchiveRepresentation">
YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05T

View File

@ -171,6 +171,7 @@
83E5E54C18087CA5001F3284 /* miniModeOffTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 83E5E54A18087CA5001F3284 /* miniModeOffTemplate.pdf */; };
83E5E54D18087CA5001F3284 /* miniModeOnTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 83E5E54B18087CA5001F3284 /* miniModeOnTemplate.pdf */; };
83E88FD227945204003D6FE5 /* AUPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 83E88FD027945204003D6FE5 /* AUPlayerView.m */; };
83ED3AD1279A91C000904199 /* hdcdLogoTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 83ED3AC7279A91C000904199 /* hdcdLogoTemplate.pdf */; };
83F9D8071A884C54007ABEC2 /* SilenceDecoder.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 83F9D7F61A884B46007ABEC2 /* SilenceDecoder.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
@ -1008,6 +1009,7 @@
83E5EFAC1FFEF78100659F0F /* OpenMPT.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OpenMPT.xcodeproj; path = Plugins/OpenMPT/OpenMPT.xcodeproj; sourceTree = "<group>"; };
83E88FD027945204003D6FE5 /* AUPlayerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AUPlayerView.m; path = Window/AUPlayerView.m; sourceTree = "<group>"; };
83E88FD127945204003D6FE5 /* AUPlayerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AUPlayerView.h; path = Window/AUPlayerView.h; sourceTree = "<group>"; };
83ED3AC7279A91C000904199 /* hdcdLogoTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = hdcdLogoTemplate.pdf; path = Images/hdcdLogoTemplate.pdf; sourceTree = "<group>"; };
83F9D7F11A884B44007ABEC2 /* SilenceDecoder.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SilenceDecoder.xcodeproj; path = Plugins/SilenceDecoder/SilenceDecoder.xcodeproj; sourceTree = "<group>"; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8E07AB760AAC930B00A4B32F /* PreferencesController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PreferencesController.h; path = Preferences/PreferencesController.h; sourceTree = "<group>"; };
@ -1200,6 +1202,7 @@
177EC02D0B8BC2E60000BC8C /* Images */ = {
isa = PBXGroup;
children = (
83ED3AC7279A91C000904199 /* hdcdLogoTemplate.pdf */,
83E5E54A18087CA5001F3284 /* miniModeOffTemplate.pdf */,
83E5E54B18087CA5001F3284 /* miniModeOnTemplate.pdf */,
8384916F180843B200E7332D /* pauseDockBadgeColorful.png */,
@ -2399,6 +2402,7 @@
17D1B2810CF8B2830028F5B5 /* song.icns in Resources */,
17D1B2820CF8B2830028F5B5 /* vg.icns in Resources */,
17D1B2830CF8B2830028F5B5 /* xm.icns in Resources */,
83ED3AD1279A91C000904199 /* hdcdLogoTemplate.pdf in Resources */,
83849172180843B200E7332D /* pauseDockBadgeColorful.png in Resources */,
8384916318083EAB00E7332D /* repeatModeAlbumTemplate.pdf in Resources */,
8384916B18083EAB00E7332D /* stopDockBadge.png in Resources */,

BIN
Images/hdcdLogoTemplate.pdf Normal file

Binary file not shown.

View File

@ -10,6 +10,11 @@
@interface MainWindow : NSWindow {
IBOutlet NSView *playlistView;
IBOutlet NSToolbar *mainToolbar;
NSImage *hdcdLogo;
}
- (void)showHDCDLogo:(BOOL)show;
@end

View File

@ -27,6 +27,23 @@
[super awakeFromNib];
[playlistView setNextResponder:self];
hdcdLogo = [NSImage imageNamed:@"hdcdLogoTemplate"];
[self showHDCDLogo:NO];
}
- (void)showHDCDLogo:(BOOL)show
{
for (NSToolbarItem * toolbarItem in [mainToolbar items])
{
if ([[toolbarItem itemIdentifier] isEqualToString:@"hdcd"]) {
if (show)
[toolbarItem setImage:hdcdLogo];
else
[toolbarItem setImage:nil];
}
}
}
@end

View File

@ -11,6 +11,10 @@
@interface MiniWindow : NSWindow {
IBOutlet PlaybackController *playbackController;
IBOutlet NSToolbar *miniToolbar;
NSImage *hdcdLogo;
}
- (void)showHDCDLogo:(BOOL)show;
@end

View File

@ -25,11 +25,18 @@
[self setContentMinSize:NSMakeSize(325, 1)];
[self setContentMaxSize:NSMakeSize(CGFLOAT_MAX, 1)];
[self setCollectionBehavior:NSWindowCollectionBehaviorFullScreenAuxiliary];
hdcdLogo = [NSImage imageNamed:@"hdcdLogoTemplate"];
}
return self;
}
- (void)awakeFromNib
{
[self showHDCDLogo:NO];
}
- (void)toggleToolbarShown:(id)sender {
// Mini window IS the toolbar, no point in hiding it.
// Do nothing!
@ -76,5 +83,17 @@
}
}
- (void)showHDCDLogo:(BOOL)show
{
for (NSToolbarItem * toolbarItem in [miniToolbar items])
{
if ([[toolbarItem itemIdentifier] isEqualToString:@"hdcd"]) {
if (show)
[toolbarItem setImage:hdcdLogo];
else
[toolbarItem setImage:nil];
}
}
}
@end