From 9887423c33d78b2e71f5f60086eba2585ffcb1e8 Mon Sep 17 00:00:00 2001 From: vspader Date: Fri, 20 Jan 2006 15:22:03 +0000 Subject: [PATCH] New Core --- Cog.xcodeproj/project.pbxproj | 363 +++++++++++++------- English.lproj/MainMenu.nib/classes.nib | 32 +- English.lproj/MainMenu.nib/info.nib | 10 +- English.lproj/MainMenu.nib/keyedobjects.nib | Bin 47386 -> 46757 bytes Playlist/PlaylistController.h | 36 +- Playlist/PlaylistController.m | 243 +++++-------- Playlist/PlaylistView.h | 4 +- Playlist/PlaylistView.m | 8 +- 8 files changed, 375 insertions(+), 321 deletions(-) diff --git a/Cog.xcodeproj/project.pbxproj b/Cog.xcodeproj/project.pbxproj index cae3f6555..1a8a1d6b4 100644 --- a/Cog.xcodeproj/project.pbxproj +++ b/Cog.xcodeproj/project.pbxproj @@ -11,29 +11,28 @@ 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; - 8E0EBF0F084BA776003A6E64 /* DBLog.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E0EBF0D084BA776003A6E64 /* DBLog.c */; }; 8E10DBF0084BBCF00013815C /* Credits.html in Resources */ = {isa = PBXBuildFile; fileRef = 8E10DBEF084BBCF00013815C /* Credits.html */; }; - 8E14E47C084CF1A200246BCC /* AACFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E14E47A084CF1A200246BCC /* AACFile.m */; }; 8E267D0E0837F7A6004ACBC5 /* FeedbackController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E267D050837F7A6004ACBC5 /* FeedbackController.m */; }; 8E267D100837F7A6004ACBC5 /* FeedbackSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E267D070837F7A6004ACBC5 /* FeedbackSocket.m */; }; 8E267D120837F7A6004ACBC5 /* MacPADSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E267D0A0837F7A6004ACBC5 /* MacPADSocket.m */; }; 8E267D140837F7A6004ACBC5 /* UpdateController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E267D0C0837F7A6004ACBC5 /* UpdateController.m */; }; - 8E28710B0836934A0013CE39 /* VirtualRingBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E2871090836934A0013CE39 /* VirtualRingBuffer.m */; }; - 8E45227C0832898A00F8BA7C /* Sound.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E45227B0832898A00F8BA7C /* Sound.m */; }; 8E47218D08318D7A001F89FA /* DNDArrayController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E47218608318D7A001F89FA /* DNDArrayController.m */; }; 8E47218E08318D7A001F89FA /* PlaylistController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E47218808318D7A001F89FA /* PlaylistController.m */; }; 8E47218F08318D7A001F89FA /* PlaylistEntry.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E47218A08318D7A001F89FA /* PlaylistEntry.m */; }; 8E47219008318D7A001F89FA /* PlaylistView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E47218C08318D7A001F89FA /* PlaylistView.m */; }; 8E4721D308319294001F89FA /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E4721D208319294001F89FA /* AppController.m */; }; - 8E4721D6083192C2001F89FA /* SoundController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E4721D5083192C2001F89FA /* SoundController.m */; }; 8E5A90B1084CBC2F00AE6D62 /* Changelog in Resources */ = {isa = PBXBuildFile; fileRef = 8E5A90B0084CBC2F00AE6D62 /* Changelog */; }; 8E6F2A1908480D010011F126 /* wheel.icns in Resources */ = {isa = PBXBuildFile; fileRef = 8E6F2A1808480D010011F126 /* wheel.icns */; }; + 8E73EF760961084E00B8C998 /* Ogg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E73EF750961084E00B8C998 /* Ogg.framework */; }; + 8E73EF780961086200B8C998 /* Vorbis.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E73EF770961086200B8C998 /* Vorbis.framework */; }; + 8E73EF98096108DC00B8C998 /* Vorbis.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E73EF770961086200B8C998 /* Vorbis.framework */; }; + 8E73EF99096108DC00B8C998 /* Ogg.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E73EF750961084E00B8C998 /* Ogg.framework */; }; 8E7FA05608731B49005E8B5F /* TODO in Resources */ = {isa = PBXBuildFile; fileRef = 8E7FA05508731B49005E8B5F /* TODO */; }; 8E7FA05A08731B6F005E8B5F /* COMPILE in Resources */ = {isa = PBXBuildFile; fileRef = 8E7FA05908731B6F005E8B5F /* COMPILE */; }; 8E81BC33083673ED0025A375 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E81BC31083673ED0025A375 /* AudioToolbox.framework */; }; 8E81BC34083673ED0025A375 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E81BC32083673ED0025A375 /* AudioUnit.framework */; }; - 8E8BAE5408548BD500E9F14D /* WavPackFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E8BAE5208548BD500E9F14D /* WavPackFile.m */; }; - 8E8BAE5808548BE800E9F14D /* ShnFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E8BAE5608548BE800E9F14D /* ShnFile.m */; }; + 8E888D5809795247007E984F /* Shuffle.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E888D5609795247007E984F /* Shuffle.h */; }; + 8E888D5909795247007E984F /* Shuffle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E888D5709795247007E984F /* Shuffle.m */; }; 8E8F3F9C0855499500BCF803 /* README in Resources */ = {isa = PBXBuildFile; fileRef = 8E8F3F9B0855499500BCF803 /* README */; }; 8EAB752D0856205B0021C2BF /* repeat_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EAB75290856205B0021C2BF /* repeat_on.png */; }; 8EAB752E0856205B0021C2BF /* repeat_off.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EAB752A0856205B0021C2BF /* repeat_off.png */; }; @@ -56,16 +55,55 @@ 8EAFD28F08465E5600107BA5 /* remove_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EAFD27B08465E5600107BA5 /* remove_gray.png */; }; 8EAFD29408465E5600107BA5 /* stop_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EAFD28008465E5600107BA5 /* stop_blue.png */; }; 8EAFD29508465E5600107BA5 /* stop_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EAFD28108465E5600107BA5 /* stop_gray.png */; }; + 8EB090780976953C00DB1521 /* DBLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB090720976953C00DB1521 /* DBLog.m */; }; + 8EB090790976953C00DB1521 /* DBLog.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB090730976953C00DB1521 /* DBLog.h */; }; + 8EB0907A0976953C00DB1521 /* Semaphore.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB090740976953C00DB1521 /* Semaphore.h */; }; + 8EB0907B0976953C00DB1521 /* Semaphore.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB090750976953C00DB1521 /* Semaphore.m */; }; + 8EB0907C0976953C00DB1521 /* VirtualRingBuffer.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB090760976953C00DB1521 /* VirtualRingBuffer.h */; }; + 8EB0907D0976953C00DB1521 /* VirtualRingBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB090770976953C00DB1521 /* VirtualRingBuffer.m */; }; + 8EB090A70976955800DB1521 /* BufferChain.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB0907E0976955800DB1521 /* BufferChain.h */; }; + 8EB090A80976955800DB1521 /* BufferChain.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB0907F0976955800DB1521 /* BufferChain.m */; }; + 8EB090A90976955800DB1521 /* ConverterNode.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB090800976955800DB1521 /* ConverterNode.h */; }; + 8EB090AA0976955800DB1521 /* ConverterNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB090810976955800DB1521 /* ConverterNode.m */; }; + 8EB090AB0976955800DB1521 /* InputNode.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB090820976955800DB1521 /* InputNode.h */; }; + 8EB090AC0976955800DB1521 /* InputNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB090830976955800DB1521 /* InputNode.m */; }; + 8EB090AD0976955800DB1521 /* Node.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB090840976955800DB1521 /* Node.h */; }; + 8EB090AE0976955800DB1521 /* Node.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB090850976955800DB1521 /* Node.m */; }; + 8EB090AF0976955800DB1521 /* OutputCoreAudio.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB090860976955800DB1521 /* OutputCoreAudio.h */; }; + 8EB090B00976955800DB1521 /* OutputCoreAudio.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB090870976955800DB1521 /* OutputCoreAudio.m */; }; + 8EB090B10976955800DB1521 /* OutputNode.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB090880976955800DB1521 /* OutputNode.h */; }; + 8EB090B20976955800DB1521 /* OutputNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB090890976955800DB1521 /* OutputNode.m */; }; + 8EB090B30976955800DB1521 /* SoundController.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB0908A0976955800DB1521 /* SoundController.h */; }; + 8EB090B40976955800DB1521 /* SoundController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB0908B0976955800DB1521 /* SoundController.m */; }; + 8EB090B50976955800DB1521 /* AACFile.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB0908D0976955800DB1521 /* AACFile.h */; }; + 8EB090B60976955800DB1521 /* AACFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB0908E0976955800DB1521 /* AACFile.m */; }; + 8EB090B70976955800DB1521 /* FlacFile.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB0908F0976955800DB1521 /* FlacFile.h */; }; + 8EB090B80976955800DB1521 /* FlacFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB090900976955800DB1521 /* FlacFile.m */; }; + 8EB090B90976955800DB1521 /* MonkeysFile.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB090910976955800DB1521 /* MonkeysFile.h */; }; + 8EB090BA0976955800DB1521 /* MonkeysFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8EB090920976955800DB1521 /* MonkeysFile.mm */; }; + 8EB090BB0976955800DB1521 /* MPEGFile.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB090930976955800DB1521 /* MPEGFile.h */; }; + 8EB090BC0976955800DB1521 /* MPEGFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8EB090940976955800DB1521 /* MPEGFile.mm */; }; + 8EB090BD0976955800DB1521 /* MusepackFile.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB090950976955800DB1521 /* MusepackFile.h */; }; + 8EB090BE0976955800DB1521 /* MusepackFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB090960976955800DB1521 /* MusepackFile.m */; }; + 8EB090BF0976955800DB1521 /* ShnFile.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB090970976955800DB1521 /* ShnFile.h */; }; + 8EB090C00976955800DB1521 /* ShnFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB090980976955800DB1521 /* ShnFile.m */; }; + 8EB090C10976955800DB1521 /* SoundFile.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB090990976955800DB1521 /* SoundFile.h */; }; + 8EB090C20976955800DB1521 /* SoundFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8EB0909A0976955800DB1521 /* SoundFile.mm */; }; + 8EB090C30976955800DB1521 /* VorbisFile.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB0909B0976955800DB1521 /* VorbisFile.h */; }; + 8EB090C40976955800DB1521 /* VorbisFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB0909C0976955800DB1521 /* VorbisFile.m */; }; + 8EB090C50976955800DB1521 /* WaveFile.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB0909D0976955800DB1521 /* WaveFile.h */; }; + 8EB090C60976955800DB1521 /* WaveFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB0909E0976955800DB1521 /* WaveFile.m */; }; + 8EB090C70976955800DB1521 /* WavPackFile.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EB0909F0976955800DB1521 /* WavPackFile.h */; }; + 8EB090C80976955800DB1521 /* WavPackFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EB090A00976955800DB1521 /* WavPackFile.m */; }; + 8EB090C90976955800DB1521 /* SOUNDTODO in Resources */ = {isa = PBXBuildFile; fileRef = 8EB090A10976955800DB1521 /* SOUNDTODO */; }; 8EC4BB7E0872E2FB00ACF986 /* ClickField.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EC4BB760872E2FB00ACF986 /* ClickField.m */; }; 8EC4BB800872E2FB00ACF986 /* InfoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EC4BB780872E2FB00ACF986 /* InfoView.m */; }; 8EC4BB820872E2FB00ACF986 /* TrackingCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EC4BB7A0872E2FB00ACF986 /* TrackingCell.m */; }; 8EC4BB840872E2FB00ACF986 /* TrackingSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EC4BB7C0872E2FB00ACF986 /* TrackingSlider.m */; }; 8EC4BCC20872EEB800ACF986 /* WavPack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EC4BCC10872EEB800ACF986 /* WavPack.framework */; }; - 8EC4BCCF0872EEFC00ACF986 /* Vorbis.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EC4BCCE0872EEFC00ACF986 /* Vorbis.framework */; }; 8EC4BCD30872EF0C00ACF986 /* TagLib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EC4BCD20872EF0C00ACF986 /* TagLib.framework */; }; 8EC4BCD70872EF1600ACF986 /* SndFile.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EC4BCD60872EF1600ACF986 /* SndFile.framework */; }; 8EC4BCDB0872EF1F00ACF986 /* Shorten.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EC4BCDA0872EF1F00ACF986 /* Shorten.framework */; }; - 8EC4BCDF0872EF3100ACF986 /* Ogg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EC4BCDE0872EF3100ACF986 /* Ogg.framework */; }; 8EC4BCE30872EF3A00ACF986 /* MPCDec.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EC4BCE20872EF3A00ACF986 /* MPCDec.framework */; }; 8EC4BCE70872EF4400ACF986 /* MAC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EC4BCE60872EF4400ACF986 /* MAC.framework */; }; 8EC4BCEB0872EF4D00ACF986 /* FLAC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EC4BCEA0872EF4D00ACF986 /* FLAC.framework */; }; @@ -76,22 +114,16 @@ 8EC4BD330872EF6A00ACF986 /* FLAC.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EC4BCEA0872EF4D00ACF986 /* FLAC.framework */; }; 8EC4BD340872EF6A00ACF986 /* MAC.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EC4BCE60872EF4400ACF986 /* MAC.framework */; }; 8EC4BD350872EF6A00ACF986 /* MPCDec.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EC4BCE20872EF3A00ACF986 /* MPCDec.framework */; }; - 8EC4BD360872EF6A00ACF986 /* Ogg.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EC4BCDE0872EF3100ACF986 /* Ogg.framework */; }; 8EC4BD370872EF6A00ACF986 /* Shorten.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EC4BCDA0872EF1F00ACF986 /* Shorten.framework */; }; 8EC4BD380872EF6A00ACF986 /* SndFile.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EC4BCD60872EF1600ACF986 /* SndFile.framework */; }; 8EC4BD390872EF6A00ACF986 /* TagLib.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EC4BCD20872EF0C00ACF986 /* TagLib.framework */; }; - 8EC4BD3A0872EF6A00ACF986 /* Vorbis.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EC4BCCE0872EEFC00ACF986 /* Vorbis.framework */; }; 8EC4BD3B0872EF6A00ACF986 /* WavPack.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EC4BCC10872EEB800ACF986 /* WavPack.framework */; }; 8EDCBDCB0840617B00F5C7E3 /* Cog.scriptTerminology in Resources */ = {isa = PBXBuildFile; fileRef = 8EDCBDCA0840617B00F5C7E3 /* Cog.scriptTerminology */; }; 8EDCBDCD0840618900F5C7E3 /* Cog.scriptSuite in Resources */ = {isa = PBXBuildFile; fileRef = 8EDCBDCC0840618900F5C7E3 /* Cog.scriptSuite */; }; 8EE90D3908830662002238C8 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8EE90D3708830662002238C8 /* Localizable.strings */; }; - 8EF6FA73082DA526006F7BE6 /* FlacFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6FA66082DA526006F7BE6 /* FlacFile.m */; }; - 8EF6FA74082DA526006F7BE6 /* MonkeysFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6FA68082DA526006F7BE6 /* MonkeysFile.m */; }; - 8EF6FA75082DA526006F7BE6 /* MPEGFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6FA6A082DA526006F7BE6 /* MPEGFile.m */; }; - 8EF6FA76082DA526006F7BE6 /* MusepackFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6FA6C082DA526006F7BE6 /* MusepackFile.m */; }; - 8EF6FA77082DA526006F7BE6 /* SoundFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6FA6E082DA526006F7BE6 /* SoundFile.m */; }; - 8EF6FA78082DA526006F7BE6 /* VorbisFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6FA70082DA526006F7BE6 /* VorbisFile.m */; }; - 8EF6FA79082DA526006F7BE6 /* WaveFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6FA72082DA526006F7BE6 /* WaveFile.m */; }; + 8EEBB7130977DF6800D5D854 /* PlaybackController.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EEBB7110977DF6800D5D854 /* PlaybackController.h */; }; + 8EEBB7140977DF6800D5D854 /* PlaybackController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EEBB7120977DF6800D5D854 /* PlaybackController.m */; }; + 8EECB4510979945E005080E6 /* Status.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EECB4500979945E005080E6 /* Status.h */; }; 8EF7BCF10874708F0012C2F4 /* volume_high.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EF7BCEF0874708F0012C2F4 /* volume_high.png */; }; 8EF7BCF20874708F0012C2F4 /* volume_low.png in Resources */ = {isa = PBXBuildFile; fileRef = 8EF7BCF00874708F0012C2F4 /* volume_low.png */; }; /* End PBXBuildFile section */ @@ -155,17 +187,40 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( + 8E73EF98096108DC00B8C998 /* Vorbis.framework in CopyFiles */, + 8E73EF99096108DC00B8C998 /* Ogg.framework in CopyFiles */, 8EC4BD310872EF6A00ACF986 /* DecMPA.framework in CopyFiles */, 8EC4BD320872EF6A00ACF986 /* FAAD2.framework in CopyFiles */, 8EC4BD330872EF6A00ACF986 /* FLAC.framework in CopyFiles */, 8EC4BD340872EF6A00ACF986 /* MAC.framework in CopyFiles */, 8EC4BD350872EF6A00ACF986 /* MPCDec.framework in CopyFiles */, - 8EC4BD360872EF6A00ACF986 /* Ogg.framework in CopyFiles */, 8EC4BD370872EF6A00ACF986 /* Shorten.framework in CopyFiles */, 8EC4BD380872EF6A00ACF986 /* SndFile.framework in CopyFiles */, 8EC4BD390872EF6A00ACF986 /* TagLib.framework in CopyFiles */, - 8EC4BD3A0872EF6A00ACF986 /* Vorbis.framework in CopyFiles */, 8EC4BD3B0872EF6A00ACF986 /* WavPack.framework in CopyFiles */, + 8EB090790976953C00DB1521 /* DBLog.h in CopyFiles */, + 8EB0907A0976953C00DB1521 /* Semaphore.h in CopyFiles */, + 8EB0907C0976953C00DB1521 /* VirtualRingBuffer.h in CopyFiles */, + 8EB090A70976955800DB1521 /* BufferChain.h in CopyFiles */, + 8EB090A90976955800DB1521 /* ConverterNode.h in CopyFiles */, + 8EB090AB0976955800DB1521 /* InputNode.h in CopyFiles */, + 8EB090AD0976955800DB1521 /* Node.h in CopyFiles */, + 8EB090AF0976955800DB1521 /* OutputCoreAudio.h in CopyFiles */, + 8EB090B10976955800DB1521 /* OutputNode.h in CopyFiles */, + 8EB090B30976955800DB1521 /* SoundController.h in CopyFiles */, + 8EB090B50976955800DB1521 /* AACFile.h in CopyFiles */, + 8EB090B70976955800DB1521 /* FlacFile.h in CopyFiles */, + 8EB090B90976955800DB1521 /* MonkeysFile.h in CopyFiles */, + 8EB090BB0976955800DB1521 /* MPEGFile.h in CopyFiles */, + 8EB090BD0976955800DB1521 /* MusepackFile.h in CopyFiles */, + 8EB090BF0976955800DB1521 /* ShnFile.h in CopyFiles */, + 8EB090C10976955800DB1521 /* SoundFile.h in CopyFiles */, + 8EB090C30976955800DB1521 /* VorbisFile.h in CopyFiles */, + 8EB090C50976955800DB1521 /* WaveFile.h in CopyFiles */, + 8EB090C70976955800DB1521 /* WavPackFile.h in CopyFiles */, + 8EEBB7130977DF6800D5D854 /* PlaybackController.h in CopyFiles */, + 8E888D5809795247007E984F /* Shuffle.h in CopyFiles */, + 8EECB4510979945E005080E6 /* Status.h in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -182,11 +237,7 @@ 32CA4F630368D1EE00C91783 /* Cog_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cog_Prefix.pch; sourceTree = ""; }; 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 8D1107320486CEB800E47090 /* Cog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Cog.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 8E0EBF0C084BA776003A6E64 /* DBLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBLog.h; sourceTree = ""; }; - 8E0EBF0D084BA776003A6E64 /* DBLog.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = DBLog.c; sourceTree = ""; }; 8E10DBEF084BBCF00013815C /* Credits.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Credits.html; sourceTree = ""; }; - 8E14E479084CF1A200246BCC /* AACFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AACFile.h; sourceTree = ""; }; - 8E14E47A084CF1A200246BCC /* AACFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AACFile.m; sourceTree = ""; }; 8E267D040837F7A6004ACBC5 /* FeedbackController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FeedbackController.h; sourceTree = ""; }; 8E267D050837F7A6004ACBC5 /* FeedbackController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = FeedbackController.m; sourceTree = ""; }; 8E267D060837F7A6004ACBC5 /* FeedbackSocket.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FeedbackSocket.h; sourceTree = ""; }; @@ -195,12 +246,6 @@ 8E267D0A0837F7A6004ACBC5 /* MacPADSocket.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MacPADSocket.m; sourceTree = ""; }; 8E267D0B0837F7A6004ACBC5 /* UpdateController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = UpdateController.h; sourceTree = ""; }; 8E267D0C0837F7A6004ACBC5 /* UpdateController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = UpdateController.m; sourceTree = ""; }; - 8E2871080836934A0013CE39 /* VirtualRingBuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VirtualRingBuffer.h; sourceTree = ""; }; - 8E2871090836934A0013CE39 /* VirtualRingBuffer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VirtualRingBuffer.m; sourceTree = ""; }; - 8E2C5C2D08A67867008DA854 /* Controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Controller.h; sourceTree = ""; }; - 8E2C5C2E08A67867008DA854 /* Controller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Controller.m; sourceTree = ""; }; - 8E45227A0832898A00F8BA7C /* Sound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sound.h; sourceTree = ""; }; - 8E45227B0832898A00F8BA7C /* Sound.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = Sound.m; sourceTree = ""; }; 8E47218508318D7A001F89FA /* DNDArrayController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DNDArrayController.h; path = Playlist/DNDArrayController.h; sourceTree = ""; }; 8E47218608318D7A001F89FA /* DNDArrayController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = DNDArrayController.m; path = Playlist/DNDArrayController.m; sourceTree = ""; }; 8E47218708318D7A001F89FA /* PlaylistController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PlaylistController.h; path = Playlist/PlaylistController.h; sourceTree = ""; }; @@ -211,30 +256,18 @@ 8E47218C08318D7A001F89FA /* PlaylistView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = PlaylistView.m; path = Playlist/PlaylistView.m; sourceTree = ""; }; 8E4721D108319294001F89FA /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = ""; }; 8E4721D208319294001F89FA /* AppController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AppController.m; sourceTree = ""; }; - 8E4721D4083192C2001F89FA /* SoundController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SoundController.h; sourceTree = ""; }; - 8E4721D5083192C2001F89FA /* SoundController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = SoundController.m; sourceTree = ""; }; 8E546D6808843E7B00E356EE /* French */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = French; path = French.lproj/MainMenu.nib; sourceTree = ""; }; 8E546D6908843E8500E356EE /* French */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = French; path = French.lproj/Localizable.strings; sourceTree = ""; }; 8E5A90B0084CBC2F00AE6D62 /* Changelog */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Changelog; sourceTree = ""; }; 8E6F2A1808480D010011F126 /* wheel.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = wheel.icns; path = Icons/wheel.icns; sourceTree = ""; }; - 8E7D4F0B08A0709C00EBB15A /* OutputCoreAudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OutputCoreAudio.h; sourceTree = ""; }; - 8E7D4F0C08A0709C00EBB15A /* OutputCoreAudio.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OutputCoreAudio.m; sourceTree = ""; }; - 8E7D4F0F08A070AC00EBB15A /* OutputController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OutputController.h; sourceTree = ""; }; - 8E7D4F1008A070AC00EBB15A /* OutputController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OutputController.m; sourceTree = ""; }; - 8E7D4F1308A070BB00EBB15A /* InputController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputController.h; sourceTree = ""; }; - 8E7D4F1408A070BB00EBB15A /* InputController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InputController.m; sourceTree = ""; }; - 8E7D4F1808A070D600EBB15A /* Converter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Converter.h; sourceTree = ""; }; - 8E7D4F1908A070D600EBB15A /* Converter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Converter.m; sourceTree = ""; }; - 8E7D4F5A08A0734300EBB15A /* Semaphore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Semaphore.h; sourceTree = ""; }; - 8E7D4F5B08A0734300EBB15A /* Semaphore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Semaphore.m; sourceTree = ""; }; + 8E73EF750961084E00B8C998 /* Ogg.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Ogg.framework; path = Libraries/Ogg/build/Deployment/Ogg.framework; sourceTree = ""; }; + 8E73EF770961086200B8C998 /* Vorbis.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Vorbis.framework; path = Libraries/Vorbis/build/Deployment/Vorbis.framework; sourceTree = ""; }; 8E7FA05508731B49005E8B5F /* TODO */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TODO; sourceTree = ""; }; 8E7FA05908731B6F005E8B5F /* COMPILE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = COMPILE; sourceTree = ""; }; 8E81BC31083673ED0025A375 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; 8E81BC32083673ED0025A375 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = ""; }; - 8E8BAE5108548BD500E9F14D /* WavPackFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WavPackFile.h; sourceTree = ""; }; - 8E8BAE5208548BD500E9F14D /* WavPackFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WavPackFile.m; sourceTree = ""; }; - 8E8BAE5508548BE800E9F14D /* ShnFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShnFile.h; sourceTree = ""; }; - 8E8BAE5608548BE800E9F14D /* ShnFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShnFile.m; sourceTree = ""; }; + 8E888D5609795247007E984F /* Shuffle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Shuffle.h; sourceTree = ""; }; + 8E888D5709795247007E984F /* Shuffle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Shuffle.m; sourceTree = ""; }; 8E8F3F9B0855499500BCF803 /* README */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = README; sourceTree = ""; }; 8EAB75290856205B0021C2BF /* repeat_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = repeat_on.png; path = Icons/repeat_on.png; sourceTree = ""; }; 8EAB752A0856205B0021C2BF /* repeat_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = repeat_off.png; path = Icons/repeat_off.png; sourceTree = ""; }; @@ -257,6 +290,47 @@ 8EAFD27B08465E5600107BA5 /* remove_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = remove_gray.png; path = Icons/remove_gray.png; sourceTree = ""; }; 8EAFD28008465E5600107BA5 /* stop_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = stop_blue.png; path = Icons/stop_blue.png; sourceTree = ""; }; 8EAFD28108465E5600107BA5 /* stop_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = stop_gray.png; path = Icons/stop_gray.png; sourceTree = ""; }; + 8EB090720976953C00DB1521 /* DBLog.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = DBLog.m; path = Utils/DBLog.m; sourceTree = ""; }; + 8EB090730976953C00DB1521 /* DBLog.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DBLog.h; path = Utils/DBLog.h; sourceTree = ""; }; + 8EB090740976953C00DB1521 /* Semaphore.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Semaphore.h; path = Utils/Semaphore.h; sourceTree = ""; }; + 8EB090750976953C00DB1521 /* Semaphore.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = Semaphore.m; path = Utils/Semaphore.m; sourceTree = ""; }; + 8EB090760976953C00DB1521 /* VirtualRingBuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VirtualRingBuffer.h; path = Utils/VirtualRingBuffer.h; sourceTree = ""; }; + 8EB090770976953C00DB1521 /* VirtualRingBuffer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = VirtualRingBuffer.m; path = Utils/VirtualRingBuffer.m; sourceTree = ""; }; + 8EB0907E0976955800DB1521 /* BufferChain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = BufferChain.h; path = Sound/BufferChain.h; sourceTree = ""; }; + 8EB0907F0976955800DB1521 /* BufferChain.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = BufferChain.m; path = Sound/BufferChain.m; sourceTree = ""; }; + 8EB090800976955800DB1521 /* ConverterNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ConverterNode.h; path = Sound/ConverterNode.h; sourceTree = ""; }; + 8EB090810976955800DB1521 /* ConverterNode.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = ConverterNode.m; path = Sound/ConverterNode.m; sourceTree = ""; }; + 8EB090820976955800DB1521 /* InputNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = InputNode.h; path = Sound/InputNode.h; sourceTree = ""; }; + 8EB090830976955800DB1521 /* InputNode.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = InputNode.m; path = Sound/InputNode.m; sourceTree = ""; }; + 8EB090840976955800DB1521 /* Node.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Node.h; path = Sound/Node.h; sourceTree = ""; }; + 8EB090850976955800DB1521 /* Node.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = Node.m; path = Sound/Node.m; sourceTree = ""; }; + 8EB090860976955800DB1521 /* OutputCoreAudio.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = OutputCoreAudio.h; path = Sound/OutputCoreAudio.h; sourceTree = ""; }; + 8EB090870976955800DB1521 /* OutputCoreAudio.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = OutputCoreAudio.m; path = Sound/OutputCoreAudio.m; sourceTree = ""; }; + 8EB090880976955800DB1521 /* OutputNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = OutputNode.h; path = Sound/OutputNode.h; sourceTree = ""; }; + 8EB090890976955800DB1521 /* OutputNode.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = OutputNode.m; path = Sound/OutputNode.m; sourceTree = ""; }; + 8EB0908A0976955800DB1521 /* SoundController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SoundController.h; path = Sound/SoundController.h; sourceTree = ""; }; + 8EB0908B0976955800DB1521 /* SoundController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = SoundController.m; path = Sound/SoundController.m; sourceTree = ""; }; + 8EB0908D0976955800DB1521 /* AACFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AACFile.h; sourceTree = ""; }; + 8EB0908E0976955800DB1521 /* AACFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AACFile.m; sourceTree = ""; }; + 8EB0908F0976955800DB1521 /* FlacFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FlacFile.h; sourceTree = ""; }; + 8EB090900976955800DB1521 /* FlacFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = FlacFile.m; sourceTree = ""; }; + 8EB090910976955800DB1521 /* MonkeysFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MonkeysFile.h; sourceTree = ""; }; + 8EB090920976955800DB1521 /* MonkeysFile.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = MonkeysFile.mm; sourceTree = ""; }; + 8EB090930976955800DB1521 /* MPEGFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MPEGFile.h; sourceTree = ""; }; + 8EB090940976955800DB1521 /* MPEGFile.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = MPEGFile.mm; sourceTree = ""; }; + 8EB090950976955800DB1521 /* MusepackFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MusepackFile.h; sourceTree = ""; }; + 8EB090960976955800DB1521 /* MusepackFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MusepackFile.m; sourceTree = ""; }; + 8EB090970976955800DB1521 /* ShnFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ShnFile.h; sourceTree = ""; }; + 8EB090980976955800DB1521 /* ShnFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ShnFile.m; sourceTree = ""; }; + 8EB090990976955800DB1521 /* SoundFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SoundFile.h; sourceTree = ""; }; + 8EB0909A0976955800DB1521 /* SoundFile.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = SoundFile.mm; sourceTree = ""; }; + 8EB0909B0976955800DB1521 /* VorbisFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VorbisFile.h; sourceTree = ""; }; + 8EB0909C0976955800DB1521 /* VorbisFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VorbisFile.m; sourceTree = ""; }; + 8EB0909D0976955800DB1521 /* WaveFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WaveFile.h; sourceTree = ""; }; + 8EB0909E0976955800DB1521 /* WaveFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = WaveFile.m; sourceTree = ""; }; + 8EB0909F0976955800DB1521 /* WavPackFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WavPackFile.h; sourceTree = ""; }; + 8EB090A00976955800DB1521 /* WavPackFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = WavPackFile.m; sourceTree = ""; }; + 8EB090A10976955800DB1521 /* SOUNDTODO */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = SOUNDTODO; path = Sound/SOUNDTODO; sourceTree = ""; }; 8EC4BB750872E2FB00ACF986 /* ClickField.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ClickField.h; path = Custom/ClickField.h; sourceTree = ""; }; 8EC4BB760872E2FB00ACF986 /* ClickField.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = ClickField.m; path = Custom/ClickField.m; sourceTree = ""; }; 8EC4BB770872E2FB00ACF986 /* InfoView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = InfoView.h; path = Custom/InfoView.h; sourceTree = ""; }; @@ -266,11 +340,9 @@ 8EC4BB7B0872E2FB00ACF986 /* TrackingSlider.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = TrackingSlider.h; path = Custom/TrackingSlider.h; sourceTree = ""; }; 8EC4BB7C0872E2FB00ACF986 /* TrackingSlider.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = TrackingSlider.m; path = Custom/TrackingSlider.m; sourceTree = ""; }; 8EC4BCC10872EEB800ACF986 /* WavPack.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WavPack.framework; path = Libraries/WavPack/build/Deployment/WavPack.framework; sourceTree = ""; }; - 8EC4BCCE0872EEFC00ACF986 /* Vorbis.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Vorbis.framework; path = Libraries/Vorbis/build/Deployment/Vorbis.framework; sourceTree = ""; }; 8EC4BCD20872EF0C00ACF986 /* TagLib.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = TagLib.framework; path = Libraries/TagLib/build/Deployment/TagLib.framework; sourceTree = ""; }; 8EC4BCD60872EF1600ACF986 /* SndFile.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SndFile.framework; path = Libraries/SndFile/build/Deployment/SndFile.framework; sourceTree = ""; }; 8EC4BCDA0872EF1F00ACF986 /* Shorten.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Shorten.framework; path = Libraries/Shorten/build/Deployment/Shorten.framework; sourceTree = ""; }; - 8EC4BCDE0872EF3100ACF986 /* Ogg.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Ogg.framework; path = Libraries/Ogg/build/Deployment/Ogg.framework; sourceTree = ""; }; 8EC4BCE20872EF3A00ACF986 /* MPCDec.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MPCDec.framework; path = Libraries/MPCDec/build/Deployment/MPCDec.framework; sourceTree = ""; }; 8EC4BCE60872EF4400ACF986 /* MAC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MAC.framework; path = Libraries/MAC/build/Deployment/MAC.framework; sourceTree = ""; }; 8EC4BCEA0872EF4D00ACF986 /* FLAC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FLAC.framework; path = Libraries/FLAC/build/Deployment/FLAC.framework; sourceTree = ""; }; @@ -279,20 +351,9 @@ 8EDCBDCA0840617B00F5C7E3 /* Cog.scriptTerminology */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.scriptTerminology; path = Cog.scriptTerminology; sourceTree = ""; }; 8EDCBDCC0840618900F5C7E3 /* Cog.scriptSuite */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.scriptSuite; path = Cog.scriptSuite; sourceTree = ""; }; 8EE90D3808830662002238C8 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/Localizable.strings; sourceTree = ""; }; - 8EF6FA65082DA526006F7BE6 /* FlacFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FlacFile.h; sourceTree = ""; }; - 8EF6FA66082DA526006F7BE6 /* FlacFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = FlacFile.m; sourceTree = ""; }; - 8EF6FA67082DA526006F7BE6 /* MonkeysFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MonkeysFile.h; sourceTree = ""; }; - 8EF6FA68082DA526006F7BE6 /* MonkeysFile.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = MonkeysFile.m; sourceTree = ""; }; - 8EF6FA69082DA526006F7BE6 /* MPEGFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MPEGFile.h; sourceTree = ""; }; - 8EF6FA6A082DA526006F7BE6 /* MPEGFile.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = MPEGFile.m; sourceTree = ""; }; - 8EF6FA6B082DA526006F7BE6 /* MusepackFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MusepackFile.h; sourceTree = ""; }; - 8EF6FA6C082DA526006F7BE6 /* MusepackFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MusepackFile.m; sourceTree = ""; }; - 8EF6FA6D082DA526006F7BE6 /* SoundFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SoundFile.h; sourceTree = ""; }; - 8EF6FA6E082DA526006F7BE6 /* SoundFile.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = SoundFile.m; sourceTree = ""; }; - 8EF6FA6F082DA526006F7BE6 /* VorbisFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VorbisFile.h; sourceTree = ""; }; - 8EF6FA70082DA526006F7BE6 /* VorbisFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VorbisFile.m; sourceTree = ""; }; - 8EF6FA71082DA526006F7BE6 /* WaveFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WaveFile.h; sourceTree = ""; }; - 8EF6FA72082DA526006F7BE6 /* WaveFile.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = WaveFile.m; sourceTree = ""; }; + 8EEBB7110977DF6800D5D854 /* PlaybackController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PlaybackController.h; sourceTree = ""; }; + 8EEBB7120977DF6800D5D854 /* PlaybackController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PlaybackController.m; sourceTree = ""; }; + 8EECB4500979945E005080E6 /* Status.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Status.h; sourceTree = ""; }; 8EF7BCEF0874708F0012C2F4 /* volume_high.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = volume_high.png; path = Icons/volume_high.png; sourceTree = ""; }; 8EF7BCF00874708F0012C2F4 /* volume_low.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = volume_low.png; path = Icons/volume_low.png; sourceTree = ""; }; /* End PBXFileReference section */ @@ -306,16 +367,16 @@ 8E81BC33083673ED0025A375 /* AudioToolbox.framework in Frameworks */, 8E81BC34083673ED0025A375 /* AudioUnit.framework in Frameworks */, 8EC4BCC20872EEB800ACF986 /* WavPack.framework in Frameworks */, - 8EC4BCCF0872EEFC00ACF986 /* Vorbis.framework in Frameworks */, 8EC4BCD30872EF0C00ACF986 /* TagLib.framework in Frameworks */, 8EC4BCD70872EF1600ACF986 /* SndFile.framework in Frameworks */, 8EC4BCDB0872EF1F00ACF986 /* Shorten.framework in Frameworks */, - 8EC4BCDF0872EF3100ACF986 /* Ogg.framework in Frameworks */, 8EC4BCE30872EF3A00ACF986 /* MPCDec.framework in Frameworks */, 8EC4BCE70872EF4400ACF986 /* MAC.framework in Frameworks */, 8EC4BCEB0872EF4D00ACF986 /* FLAC.framework in Frameworks */, 8EC4BCEF0872EF5600ACF986 /* FAAD2.framework in Frameworks */, 8EC4BCF30872EF6300ACF986 /* DecMPA.framework in Frameworks */, + 8E73EF760961084E00B8C998 /* Ogg.framework in Frameworks */, + 8E73EF780961086200B8C998 /* Vorbis.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -325,20 +386,17 @@ 080E96DDFE201D6D7F000001 /* Classes */ = { isa = PBXGroup; children = ( - 8E7D4F0A08A0708600EBB15A /* New */, + 8EB090700976952700DB1521 /* Utils */, 8E267D030837F7A6004ACBC5 /* Feedback */, 8E267D080837F7A6004ACBC5 /* Updates */, 8E47215C08318D12001F89FA /* Playlist */, - 8EF6FA64082DA525006F7BE6 /* SoundFile */, 8E6529F8083D93AF00A7AF1B /* Custom */, - 8E2871080836934A0013CE39 /* VirtualRingBuffer.h */, - 8E2871090836934A0013CE39 /* VirtualRingBuffer.m */, + 8EB09046097693D700DB1521 /* Sound */, 8E4721D108319294001F89FA /* AppController.h */, 8E4721D208319294001F89FA /* AppController.m */, - 8E4721D4083192C2001F89FA /* SoundController.h */, - 8E4721D5083192C2001F89FA /* SoundController.m */, - 8E45227A0832898A00F8BA7C /* Sound.h */, - 8E45227B0832898A00F8BA7C /* Sound.m */, + 8EEBB7110977DF6800D5D854 /* PlaybackController.h */, + 8EEBB7120977DF6800D5D854 /* PlaybackController.m */, + 8E7FA05508731B49005E8B5F /* TODO */, ); name = Classes; sourceTree = ""; @@ -346,16 +404,16 @@ 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { isa = PBXGroup; children = ( + 8E73EF770961086200B8C998 /* Vorbis.framework */, + 8E73EF750961084E00B8C998 /* Ogg.framework */, 8EC4BCF20872EF6300ACF986 /* DecMPA.framework */, 8EC4BCEE0872EF5600ACF986 /* FAAD2.framework */, 8EC4BCEA0872EF4D00ACF986 /* FLAC.framework */, 8EC4BCE60872EF4400ACF986 /* MAC.framework */, 8EC4BCE20872EF3A00ACF986 /* MPCDec.framework */, - 8EC4BCDE0872EF3100ACF986 /* Ogg.framework */, 8EC4BCDA0872EF1F00ACF986 /* Shorten.framework */, 8EC4BCD60872EF1600ACF986 /* SndFile.framework */, 8EC4BCD20872EF0C00ACF986 /* TagLib.framework */, - 8EC4BCCE0872EEFC00ACF986 /* Vorbis.framework */, 8EC4BCC10872EEB800ACF986 /* WavPack.framework */, ); name = "Linked Frameworks"; @@ -399,8 +457,6 @@ children = ( 32CA4F630368D1EE00C91783 /* Cog_Prefix.pch */, 29B97316FDCFA39411CA2CEA /* main.m */, - 8E0EBF0C084BA776003A6E64 /* DBLog.h */, - 8E0EBF0D084BA776003A6E64 /* DBLog.c */, ); name = "Other Sources"; sourceTree = ""; @@ -418,7 +474,6 @@ 8E10DBEF084BBCF00013815C /* Credits.html */, 8E5A90B0084CBC2F00AE6D62 /* Changelog */, 8E8F3F9B0855499500BCF803 /* README */, - 8E7FA05508731B49005E8B5F /* TODO */, 8E7FA05908731B6F005E8B5F /* COMPILE */, ); name = Resources; @@ -466,6 +521,8 @@ 8E47218A08318D7A001F89FA /* PlaylistEntry.m */, 8E47218B08318D7A001F89FA /* PlaylistView.h */, 8E47218C08318D7A001F89FA /* PlaylistView.m */, + 8E888D5609795247007E984F /* Shuffle.h */, + 8E888D5709795247007E984F /* Shuffle.m */, ); name = Playlist; sourceTree = ""; @@ -485,25 +542,6 @@ name = Custom; sourceTree = ""; }; - 8E7D4F0A08A0708600EBB15A /* New */ = { - isa = PBXGroup; - children = ( - 8E7D4F1808A070D600EBB15A /* Converter.h */, - 8E7D4F1908A070D600EBB15A /* Converter.m */, - 8E7D4F0B08A0709C00EBB15A /* OutputCoreAudio.h */, - 8E7D4F0C08A0709C00EBB15A /* OutputCoreAudio.m */, - 8E7D4F0F08A070AC00EBB15A /* OutputController.h */, - 8E7D4F1008A070AC00EBB15A /* OutputController.m */, - 8E7D4F1308A070BB00EBB15A /* InputController.h */, - 8E7D4F1408A070BB00EBB15A /* InputController.m */, - 8E7D4F5A08A0734300EBB15A /* Semaphore.h */, - 8E7D4F5B08A0734300EBB15A /* Semaphore.m */, - 8E2C5C2D08A67867008DA854 /* Controller.h */, - 8E2C5C2E08A67867008DA854 /* Controller.m */, - ); - name = New; - sourceTree = ""; - }; 8EAFD26D08465E4500107BA5 /* Icons */ = { isa = PBXGroup; children = ( @@ -535,31 +573,77 @@ name = Icons; sourceTree = ""; }; - 8EF6FA64082DA525006F7BE6 /* SoundFile */ = { + 8EB09046097693D700DB1521 /* Sound */ = { isa = PBXGroup; children = ( - 8E14E479084CF1A200246BCC /* AACFile.h */, - 8E14E47A084CF1A200246BCC /* AACFile.m */, - 8EF6FA65082DA526006F7BE6 /* FlacFile.h */, - 8EF6FA66082DA526006F7BE6 /* FlacFile.m */, - 8EF6FA67082DA526006F7BE6 /* MonkeysFile.h */, - 8EF6FA68082DA526006F7BE6 /* MonkeysFile.m */, - 8EF6FA69082DA526006F7BE6 /* MPEGFile.h */, - 8EF6FA6A082DA526006F7BE6 /* MPEGFile.m */, - 8EF6FA6B082DA526006F7BE6 /* MusepackFile.h */, - 8EF6FA6C082DA526006F7BE6 /* MusepackFile.m */, - 8EF6FA6F082DA526006F7BE6 /* VorbisFile.h */, - 8EF6FA70082DA526006F7BE6 /* VorbisFile.m */, - 8EF6FA71082DA526006F7BE6 /* WaveFile.h */, - 8EF6FA72082DA526006F7BE6 /* WaveFile.m */, - 8E8BAE5108548BD500E9F14D /* WavPackFile.h */, - 8E8BAE5208548BD500E9F14D /* WavPackFile.m */, - 8E8BAE5508548BE800E9F14D /* ShnFile.h */, - 8E8BAE5608548BE800E9F14D /* ShnFile.m */, - 8EF6FA6D082DA526006F7BE6 /* SoundFile.h */, - 8EF6FA6E082DA526006F7BE6 /* SoundFile.m */, + 8EB090CE0976957700DB1521 /* Chain */, + 8EB0908C0976955800DB1521 /* SoundFile */, + 8EB090800976955800DB1521 /* ConverterNode.h */, + 8EB090810976955800DB1521 /* ConverterNode.m */, + 8EB090820976955800DB1521 /* InputNode.h */, + 8EB090830976955800DB1521 /* InputNode.m */, + 8EB090880976955800DB1521 /* OutputNode.h */, + 8EB090890976955800DB1521 /* OutputNode.m */, + 8EB090860976955800DB1521 /* OutputCoreAudio.h */, + 8EB090870976955800DB1521 /* OutputCoreAudio.m */, + 8EB0908A0976955800DB1521 /* SoundController.h */, + 8EB0908B0976955800DB1521 /* SoundController.m */, + 8EB090A10976955800DB1521 /* SOUNDTODO */, ); - path = SoundFile; + name = Sound; + sourceTree = ""; + }; + 8EB090700976952700DB1521 /* Utils */ = { + isa = PBXGroup; + children = ( + 8EB090720976953C00DB1521 /* DBLog.m */, + 8EB090730976953C00DB1521 /* DBLog.h */, + 8EB090740976953C00DB1521 /* Semaphore.h */, + 8EB090750976953C00DB1521 /* Semaphore.m */, + 8EB090760976953C00DB1521 /* VirtualRingBuffer.h */, + 8EB090770976953C00DB1521 /* VirtualRingBuffer.m */, + 8EECB4500979945E005080E6 /* Status.h */, + ); + name = Utils; + sourceTree = ""; + }; + 8EB0908C0976955800DB1521 /* SoundFile */ = { + isa = PBXGroup; + children = ( + 8EB0908D0976955800DB1521 /* AACFile.h */, + 8EB0908E0976955800DB1521 /* AACFile.m */, + 8EB0908F0976955800DB1521 /* FlacFile.h */, + 8EB090900976955800DB1521 /* FlacFile.m */, + 8EB090910976955800DB1521 /* MonkeysFile.h */, + 8EB090920976955800DB1521 /* MonkeysFile.mm */, + 8EB090930976955800DB1521 /* MPEGFile.h */, + 8EB090940976955800DB1521 /* MPEGFile.mm */, + 8EB090950976955800DB1521 /* MusepackFile.h */, + 8EB090960976955800DB1521 /* MusepackFile.m */, + 8EB090970976955800DB1521 /* ShnFile.h */, + 8EB090980976955800DB1521 /* ShnFile.m */, + 8EB090990976955800DB1521 /* SoundFile.h */, + 8EB0909A0976955800DB1521 /* SoundFile.mm */, + 8EB0909B0976955800DB1521 /* VorbisFile.h */, + 8EB0909C0976955800DB1521 /* VorbisFile.m */, + 8EB0909D0976955800DB1521 /* WaveFile.h */, + 8EB0909E0976955800DB1521 /* WaveFile.m */, + 8EB0909F0976955800DB1521 /* WavPackFile.h */, + 8EB090A00976955800DB1521 /* WavPackFile.m */, + ); + name = SoundFile; + path = Sound/SoundFile; + sourceTree = ""; + }; + 8EB090CE0976957700DB1521 /* Chain */ = { + isa = PBXGroup; + children = ( + 8EB0907E0976955800DB1521 /* BufferChain.h */, + 8EB0907F0976955800DB1521 /* BufferChain.m */, + 8EB090840976955800DB1521 /* Node.h */, + 8EB090850976955800DB1521 /* Node.m */, + ); + name = Chain; sourceTree = ""; }; /* End PBXGroup section */ @@ -678,6 +762,7 @@ 8EF7BCF10874708F0012C2F4 /* volume_high.png in Resources */, 8EF7BCF20874708F0012C2F4 /* volume_low.png in Resources */, 8EE90D3908830662002238C8 /* Localizable.strings in Resources */, + 8EB090C90976955800DB1521 /* SOUNDTODO in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -689,33 +774,41 @@ buildActionMask = 2147483647; files = ( 8D11072D0486CEB800E47090 /* main.m in Sources */, - 8EF6FA73082DA526006F7BE6 /* FlacFile.m in Sources */, - 8EF6FA74082DA526006F7BE6 /* MonkeysFile.m in Sources */, - 8EF6FA75082DA526006F7BE6 /* MPEGFile.m in Sources */, - 8EF6FA76082DA526006F7BE6 /* MusepackFile.m in Sources */, - 8EF6FA77082DA526006F7BE6 /* SoundFile.m in Sources */, - 8EF6FA78082DA526006F7BE6 /* VorbisFile.m in Sources */, - 8EF6FA79082DA526006F7BE6 /* WaveFile.m in Sources */, 8E47218D08318D7A001F89FA /* DNDArrayController.m in Sources */, 8E47218E08318D7A001F89FA /* PlaylistController.m in Sources */, 8E47218F08318D7A001F89FA /* PlaylistEntry.m in Sources */, 8E47219008318D7A001F89FA /* PlaylistView.m in Sources */, 8E4721D308319294001F89FA /* AppController.m in Sources */, - 8E4721D6083192C2001F89FA /* SoundController.m in Sources */, - 8E45227C0832898A00F8BA7C /* Sound.m in Sources */, - 8E28710B0836934A0013CE39 /* VirtualRingBuffer.m in Sources */, 8E267D0E0837F7A6004ACBC5 /* FeedbackController.m in Sources */, 8E267D100837F7A6004ACBC5 /* FeedbackSocket.m in Sources */, 8E267D120837F7A6004ACBC5 /* MacPADSocket.m in Sources */, 8E267D140837F7A6004ACBC5 /* UpdateController.m in Sources */, - 8E0EBF0F084BA776003A6E64 /* DBLog.c in Sources */, - 8E14E47C084CF1A200246BCC /* AACFile.m in Sources */, - 8E8BAE5408548BD500E9F14D /* WavPackFile.m in Sources */, - 8E8BAE5808548BE800E9F14D /* ShnFile.m in Sources */, 8EC4BB7E0872E2FB00ACF986 /* ClickField.m in Sources */, 8EC4BB800872E2FB00ACF986 /* InfoView.m in Sources */, 8EC4BB820872E2FB00ACF986 /* TrackingCell.m in Sources */, 8EC4BB840872E2FB00ACF986 /* TrackingSlider.m in Sources */, + 8EB090780976953C00DB1521 /* DBLog.m in Sources */, + 8EB0907B0976953C00DB1521 /* Semaphore.m in Sources */, + 8EB0907D0976953C00DB1521 /* VirtualRingBuffer.m in Sources */, + 8EB090A80976955800DB1521 /* BufferChain.m in Sources */, + 8EB090AA0976955800DB1521 /* ConverterNode.m in Sources */, + 8EB090AC0976955800DB1521 /* InputNode.m in Sources */, + 8EB090AE0976955800DB1521 /* Node.m in Sources */, + 8EB090B00976955800DB1521 /* OutputCoreAudio.m in Sources */, + 8EB090B20976955800DB1521 /* OutputNode.m in Sources */, + 8EB090B40976955800DB1521 /* SoundController.m in Sources */, + 8EB090B60976955800DB1521 /* AACFile.m in Sources */, + 8EB090B80976955800DB1521 /* FlacFile.m in Sources */, + 8EB090BA0976955800DB1521 /* MonkeysFile.mm in Sources */, + 8EB090BC0976955800DB1521 /* MPEGFile.mm in Sources */, + 8EB090BE0976955800DB1521 /* MusepackFile.m in Sources */, + 8EB090C00976955800DB1521 /* ShnFile.m in Sources */, + 8EB090C20976955800DB1521 /* SoundFile.mm in Sources */, + 8EB090C40976955800DB1521 /* VorbisFile.m in Sources */, + 8EB090C60976955800DB1521 /* WaveFile.m in Sources */, + 8EB090C80976955800DB1521 /* WavPackFile.m in Sources */, + 8EEBB7140977DF6800D5D854 /* PlaybackController.m in Sources */, + 8E888D5909795247007E984F /* Shuffle.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -768,6 +861,8 @@ "$(SRCROOT)/Libraries/WavPack/build/Deployment", "$(SRCROOT)/../Cog/Libraries/FLAC/build/Deployment", "$(SRCROOT)/Libraries/Vorbis/build/Deployment", + "$(SRCROOT)/Libraries/Vorbis/build/Release", + "$(SRCROOT)/Libraries/Ogg/build/Release", ); GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; @@ -810,6 +905,8 @@ "$(SRCROOT)/Libraries/FLAC/build/Deployment", "$(SRCROOT)/Libraries/FAAD2/build/Deployment", "$(SRCROOT)/Libraries/DecMPA/build/Deployment", + "$(SRCROOT)/Libraries/Vorbis/build/Release", + "$(SRCROOT)/Libraries/Ogg/build/Release", ); GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; @@ -863,6 +960,8 @@ "$(SRCROOT)/Libraries/MAC/build/Development", "$(SRCROOT)/../Cog/Libraries/FLAC/build/Deployment", "$(SRCROOT)/Libraries/Vorbis/build/Deployment", + "$(SRCROOT)/Libraries/Vorbis/build/Release", + "$(SRCROOT)/Libraries/Ogg/build/Release", ); GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = 3; diff --git a/English.lproj/MainMenu.nib/classes.nib b/English.lproj/MainMenu.nib/classes.nib index 6ba06bcda..c2d2fe599 100644 --- a/English.lproj/MainMenu.nib/classes.nib +++ b/English.lproj/MainMenu.nib/classes.nib @@ -54,6 +54,33 @@ {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, {CLASS = InfoController; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, {CLASS = InfoView; LANGUAGE = ObjC; SUPERCLASS = NSView; }, + { + ACTIONS = { + changeVolume = id; + next = id; + pause = id; + pauseResume = id; + play = id; + playPauseResume = id; + prev = id; + resume = id; + seek = id; + stop = id; + toggleShowTimeRemaining = id; + }; + CLASS = PlaybackController; + LANGUAGE = ObjC; + OUTLETS = { + bitrateField = NSTextField; + lengthField = NSTextField; + playButton = NSButton; + playlistController = PlaylistController; + playlistView = PlaylistView; + positionSlider = TrackingSlider; + timeField = NSTextField; + }; + SUPERCLASS = NSObject; + }, { ACTIONS = {takeRepeatFromObject = id; takeShuffleFromObject = id; }; CLASS = PlaylistController; @@ -64,7 +91,10 @@ { CLASS = PlaylistView; LANGUAGE = ObjC; - OUTLETS = {playlistController = PlaylistController; soundController = SoundController; }; + OUTLETS = { + playbackController = PlaybackController; + playlistController = PlaylistController; + }; SUPERCLASS = NSTableView; }, { diff --git a/English.lproj/MainMenu.nib/info.nib b/English.lproj/MainMenu.nib/info.nib index 251b1913d..f4e82fabc 100644 --- a/English.lproj/MainMenu.nib/info.nib +++ b/English.lproj/MainMenu.nib/info.nib @@ -3,18 +3,18 @@ IBDocumentLocation - 95 143 356 240 0 0 1280 938 + 48 89 617 240 0 0 1024 746 IBEditorPositions 29 - 335 861 346 44 0 0 1280 938 + 243 676 346 44 0 0 1024 746 463 - 464 511 352 268 0 0 1280 938 + 336 385 352 268 0 0 1024 746 513 475 157 109 106 0 0 1024 746 IBFramework Version - 439.0 + 443.0 IBLockedObjects 484 @@ -33,6 +33,6 @@ 29 IBSystem Version - 8C46 + 8G32 diff --git a/English.lproj/MainMenu.nib/keyedobjects.nib b/English.lproj/MainMenu.nib/keyedobjects.nib index 60e64e46d9536a8e39de909b866f0beeab2c81e9..64a31c811bea1f05c1a75b566a1c34f0768ac991 100644 GIT binary patch delta 31042 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 [shuffleList count]) + { + if (repeat == YES) + { + [self addShuffledListToBack]; + } + else + { + return nil; + } + } + + return [shuffleList objectAtIndex:i]; + } + else + { + int i; + i = [currentEntry index]; + i += (offset-1); + + if (i < 0) + { + if (repeat == YES) + i += [[self arrangedObjects] count]; + else + return nil; + } + else if (i >= [[self arrangedObjects] count]) + { + if (repeat == YES) + i -= [[self arrangedObjects] count]; + else + return nil; + } + + return [[self arrangedObjects] objectAtIndex:i]; + } +} + - (void)next { PlaylistEntry *pe; - pe = [self nextEntry]; + pe = [self entryAtOffset:1]; if (pe == nil) return; - if (shuffle == YES) - { - [shuffleList removeObject:pe]; - } - [self setCurrentEntry:pe addToHistory:YES]; - [self setNextEntry:nil]; + [self setCurrentEntry:pe]; } - (void)prev { PlaylistEntry *pe; - pe = [self prevEntry]; + pe = [self entryAtOffset:-1]; if (pe == nil) return; - - if (pe != [history objectAtIndex:1]) - DBLog(@"History inconcistency"); - [history removeObjectAtIndex:0]; - [self setCurrentEntry:pe addToHistory:NO]; - [self setPrevEntry:nil]; - - //If one goes back, and goes forward, one shall receive unto thee a new song if (shuffle == YES) - [self generateShuffleList]; -} - -- (PlaylistEntry *)prevEntry -{ - if (prevEntry == nil) - [self getPrevEntry]; + shuffleIndex--; - return prevEntry; + [self setCurrentEntry:pe]; } -- (PlaylistEntry *)nextEntry +- (void)addShuffledListToBack { - if (nextEntry == nil) - [self getNextEntry]; + NSArray *newList = [Shuffle shuffleList:[self arrangedObjects]]; + NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [newList count])]; - return nextEntry; + [self insertObjects:newList atArrangedObjectIndexes:indexSet]; + + [newList release]; } -- (void)reset +- (void)addShuffledListToFront { - nextEntry = nil; - prevEntry = nil; - [self generateShuffleList]; + NSArray *newList = [Shuffle shuffleList:[self arrangedObjects]]; + NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange([[self arrangedObjects] count], [newList count])]; + + [self insertObjects:newList atArrangedObjectIndexes:indexSet]; + + [newList release]; } -- (void)generateShuffleList +- (void)resetShuffleList { -// [shuffleHistory removeAllObjects]; -// DBLog(@"Generated Shuffle List"); [shuffleList removeAllObjects]; - [shuffleList addObjectsFromArray:[self arrangedObjects]]; - if (currentEntry != nil) - [shuffleList removeObject:currentEntry]; -} - -- (void)setCurrentEntry:(PlaylistEntry *)pe addToHistory:(BOOL)h -{ - [self setCurrentEntry:pe]; - - if (h == YES) - { - [history insertObject:pe atIndex:0]; - if ([history count] > HISTORY_SIZE) - [history removeObjectAtIndex:([history count] - 1)]; - - } -} - -- (void)getNextEntry -{ - PlaylistEntry *pe; - - if (nextEntry != nil) - return; - - if (shuffle == YES) - { -// DBLog(@"SHUFFLE IS TEH ON: %i", [shuffleList count]); - if ([shuffleList count] == 0) //out of tuuuunes - { - if (repeat == YES) - { - [self generateShuffleList]; - } - else - { - [self setNextEntry:nil]; - return; - } - } - int r; - - r = random() % [shuffleList count]; -// DBLog(@"PICKING SONG %i FROM SHUFFLE LIST", r); - pe = [shuffleList objectAtIndex:r]; - - [self setNextEntry:pe]; - } - else - { - int i = ([currentEntry index] - 1) + 1; - - if (i >= [[self arrangedObjects] count]) //out of tuuuunes - { - if (repeat == YES) - { - i = 0; - } - else - { - [self setNextEntry:nil]; - return; - } - } - - pe = [[self arrangedObjects] objectAtIndex:i]; - - [self setNextEntry:pe]; - } + shuffleIndex = 0; } - (id)currentEntry @@ -412,51 +389,11 @@ currentEntry = pe; } -- (void)getPrevEntry -{ - PlaylistEntry *pe; - -// DBLog(@"GETTING PREVIOUS ENTRY"); - - if (prevEntry != nil) - return; - //NOTE: 1 contains the current entry - if ([history count] == 1) //Cant go back any further - { -// DBLog(@"HISTORY IS TEH EMPTY"); - [self setPrevEntry:nil]; - return; - } - else - { -// DBLog(@"IN TEH HISTORY"); - - pe = [history objectAtIndex:1]; - [self setPrevEntry:pe]; - - return; - } -} - -- (void)setPrevEntry:(PlaylistEntry *)pe -{ - [pe retain]; - [prevEntry release]; - prevEntry = pe; -} - -- (void)setNextEntry:(PlaylistEntry *)pe -{ - [pe retain]; - [nextEntry release]; - nextEntry = pe; -} - - (void)setShuffle:(BOOL)s { shuffle = s; if (shuffle == YES) - [self generateShuffleList]; + [self resetShuffleList]; } - (BOOL)shuffle { diff --git a/Playlist/PlaylistView.h b/Playlist/PlaylistView.h index a505a749b..e4149967b 100644 --- a/Playlist/PlaylistView.h +++ b/Playlist/PlaylistView.h @@ -8,12 +8,12 @@ #import -#import "SoundController.h" +#import "PlaybackController.h" #import "PlaylistController.h" @interface PlaylistView : NSTableView { - IBOutlet SoundController *soundController; + IBOutlet PlaybackController *playbackController; IBOutlet PlaylistController *playlistController; } diff --git a/Playlist/PlaylistView.m b/Playlist/PlaylistView.m index 9eb055872..1bb6d5b27 100644 --- a/Playlist/PlaylistView.m +++ b/Playlist/PlaylistView.m @@ -7,7 +7,7 @@ // #import "PlaylistView.h" -#import "SoundController.h" +#import "PlaybackController.h" #import "PlaylistController.h" @implementation PlaylistView @@ -31,7 +31,7 @@ // DBLog(@"MOUSE DOWN"); if ([e type] == NSLeftMouseDown && [e clickCount] == 2) { - [soundController play:self]; + [playbackController play:self]; } else { @@ -57,11 +57,11 @@ } else if (c == ' ') { - [soundController pauseResume:self]; + [playbackController playPauseResume:self]; } else if (c == NSEnterCharacter || c == NSCarriageReturnCharacter) { - [soundController play:self]; + [playbackController play:self]; } else {