diff --git a/Audio/Chain/AudioChunk.h b/Audio/Chain/AudioChunk.h index 29fce39e5..68942db0e 100644 --- a/Audio/Chain/AudioChunk.h +++ b/Audio/Chain/AudioChunk.h @@ -80,6 +80,7 @@ enum { + (uint32_t)findChannelIndex:(uint32_t)flag; - (id)init; +- (id)initWithProperties:(NSDictionary *)properties; - (void)assignSamples:(const void *)data frameCount:(size_t)count; @@ -88,6 +89,7 @@ enum { - (BOOL)isEmpty; - (size_t)frameCount; +- (void)setFrameCount:(size_t)count; // For truncation only - (double)duration; diff --git a/Audio/Chain/AudioChunk.m b/Audio/Chain/AudioChunk.m index 05130c506..adb72814f 100644 --- a/Audio/Chain/AudioChunk.m +++ b/Audio/Chain/AudioChunk.m @@ -7,6 +7,8 @@ #import "AudioChunk.h" +#import "CoreAudioUtils.h" + @implementation AudioChunk - (id)init { @@ -21,6 +23,18 @@ return self; } +- (id)initWithProperties:(NSDictionary *)properties { + self = [super init]; + + if(self) { + chunkData = [[NSMutableData alloc] init]; + [self setFormat:propertiesToASBD(properties)]; + lossless = [[properties objectForKey:@"encoding"] isEqualToString:@"lossless"]; + } + + return self; +} + static const uint32_t AudioChannelConfigTable[] = { 0, AudioConfigMono, @@ -156,6 +170,16 @@ static const uint32_t AudioChannelConfigTable[] = { return 0; } +- (void)setFrameCount:(size_t)count { + if(formatAssigned) { + count *= format.mBytesPerPacket; + size_t currentLength = [chunkData length]; + if(count < currentLength) { + [chunkData replaceBytesInRange:NSMakeRange(count, currentLength - count) withBytes:NULL length:0]; + } + } +} + - (double)duration { if(formatAssigned) { const size_t bytesPerPacket = format.mBytesPerPacket; diff --git a/Audio/Chain/ConverterNode.m b/Audio/Chain/ConverterNode.m index c0e427960..c6fce7753 100644 --- a/Audio/Chain/ConverterNode.m +++ b/Audio/Chain/ConverterNode.m @@ -432,34 +432,37 @@ static void convert_be_to_le(uint8_t *buffer, size_t bitsPerSample, size_t bytes } - (void)process { - char writeBuf[CHUNK_SIZE]; - // Removed endOfStream check from here, since we want to be able to flush the converter // when the end of stream is reached. Convert function instead processes what it can, // and returns 0 samples when it has nothing more to process at the end of stream. while([self shouldContinue] == YES) { - int amountConverted; + AudioChunk *chunk = nil; while(paused) { usleep(500); } @autoreleasepool { - amountConverted = [self convert:writeBuf amount:CHUNK_SIZE]; + chunk = [self convert]; } - if(!amountConverted) { + if(!chunk) { if(paused) { continue; - } else if(streamFormatChanged) { - [self cleanUp]; - [self setupWithInputFormat:newInputFormat withInputConfig:newInputChannelConfig isLossless:rememberedLossless]; - continue; - } else + } else if(!streamFormatChanged) { break; + } + } else { + @autoreleasepool { + [self writeChunk:chunk]; + chunk = nil; + } + } + if(streamFormatChanged) { + [self cleanUp]; + [self setupWithInputFormat:newInputFormat withInputConfig:newInputChannelConfig isLossless:rememberedLossless]; } - [self writeData:writeBuf amount:amountConverted]; } } -- (int)convert:(void *)dest amount:(int)amount { +- (AudioChunk *)convert { UInt32 ioNumberPackets; int amountReadFromFC; int amountRead = 0; @@ -472,7 +475,7 @@ static void convert_be_to_le(uint8_t *buffer, size_t bitsPerSample, size_t bytes tryagain: if(stopping || [self shouldContinue] == NO) { convertEntered = NO; - return amountRead; + return nil; } amountReadFromFC = 0; @@ -543,7 +546,7 @@ tryagain: if(!bytesReadFromInput) { convertEntered = NO; - return amountRead; + return nil; } if(bytesReadFromInput && isBigEndian) { @@ -703,19 +706,26 @@ tryagain: if(floatOffset == floatSize) goto tryagain; - ioNumberPackets = (amount - amountRead); - if(ioNumberPackets > (floatSize - floatOffset)) - ioNumberPackets = (UInt32)(floatSize - floatOffset); + ioNumberPackets = (UInt32)(floatSize - floatOffset); ioNumberPackets -= ioNumberPackets % dmFloatFormat.mBytesPerPacket; - memcpy(((uint8_t *)dest) + amountRead, ((uint8_t *)floatBuffer) + floatOffset, ioNumberPackets); + if(ioNumberPackets) { + AudioChunk *chunk = [[AudioChunk alloc] init]; + [chunk setFormat:nodeFormat]; + if(nodeChannelConfig) { + [chunk setChannelConfig:nodeChannelConfig]; + } + [chunk assignSamples:floatBuffer frameCount:ioNumberPackets / dmFloatFormat.mBytesPerPacket]; - floatOffset += ioNumberPackets; - amountRead += ioNumberPackets; + floatOffset += ioNumberPackets; + amountRead += ioNumberPackets; + convertEntered = NO; + return chunk; + } convertEntered = NO; - return amountRead; + return nil; } - (void)observeValueForKeyPath:(NSString *)keyPath diff --git a/Audio/Chain/Downmix.m b/Audio/Chain/Downmix.m index 1bb981a48..a8291640e 100644 --- a/Audio/Chain/Downmix.m +++ b/Audio/Chain/Downmix.m @@ -149,10 +149,12 @@ static void downmix_to_stereo(const float *inBuffer, int channels, uint32_t conf static void downmix_to_mono(const float *inBuffer, int channels, uint32_t config, float *outBuffer, size_t count) { float tempBuffer[count * 2]; - downmix_to_stereo(inBuffer, channels, config, tempBuffer, count); - inBuffer = tempBuffer; - channels = 2; - config = AudioConfigStereo; + if(channels > 2 || config != AudioConfigStereo) { + downmix_to_stereo(inBuffer, channels, config, tempBuffer, count); + inBuffer = tempBuffer; + channels = 2; + config = AudioConfigStereo; + } cblas_scopy((int)count, inBuffer, 2, outBuffer, 1); vDSP_vadd(outBuffer, 1, inBuffer + 1, 2, outBuffer, 1, count); } diff --git a/Audio/Chain/InputNode.m b/Audio/Chain/InputNode.m index f5840a284..a071fa34a 100644 --- a/Audio/Chain/InputNode.m +++ b/Audio/Chain/InputNode.m @@ -142,10 +142,6 @@ static void *kInputNodeContext = &kInputNodeContext; } - (void)process { - int amountInBuffer = 0; - int bytesInBuffer = 0; - void *inputBuffer = malloc(CHUNK_SIZE * 8 * 18); // Maximum 18 channels, dunno what we'll receive - BOOL shouldClose = YES; BOOL seekError = NO; @@ -165,7 +161,6 @@ static void *kInputNodeContext = &kInputNodeContext; ConverterNode *converter = [bufferChain converter]; DLog(@"SEEKING! Resetting Buffer"); - amountInBuffer = 0; // This resets the converter's buffer [self resetBuffer]; [converter resetBuffer]; @@ -174,7 +169,9 @@ static void *kInputNodeContext = &kInputNodeContext; DLog(@"Reset buffer!"); DLog(@"SEEKING!"); - seekError = [decoder seek:seekFrame] < 0; + @autoreleasepool { + seekError = [decoder seek:seekFrame] < 0; + } shouldSeek = NO; DLog(@"Seeked! Resetting Buffer"); @@ -185,44 +182,39 @@ static void *kInputNodeContext = &kInputNodeContext; } } - if(amountInBuffer < CHUNK_SIZE) { - int framesToRead = CHUNK_SIZE - amountInBuffer; - int framesRead; + AudioChunk *chunk; + @autoreleasepool { + chunk = [decoder readAudio]; + } + + if(chunk && [chunk frameCount]) { @autoreleasepool { - framesRead = [decoder readAudio:((char *)inputBuffer) + bytesInBuffer frames:framesToRead]; + [self writeChunk:chunk]; + chunk = nil; + } + } else { + DLog(@"End of stream? %@", [self properties]); + + endOfStream = YES; + shouldClose = [controller endOfInputReached]; // Lets us know if we should keep going or not (occassionally, for track changes within a file) + DLog(@"closing? is %i", shouldClose); + + // Move this here, so that the above endOfInputReached has a chance to queue another track before starting output + // Technically, the output should still play out its buffer first before checking if it should stop + if(initialBufferFilled == NO) { + [controller initialBufferFilled:self]; } - if(framesRead > 0 && !seekError) { - amountInBuffer += framesRead; - bytesInBuffer += framesRead * bytesPerFrame; - [self writeData:inputBuffer amount:bytesInBuffer]; - amountInBuffer = 0; - bytesInBuffer = 0; + // wait before exiting, as we might still get seeking request + DLog("InputNode: Before wait") + [exitAtTheEndOfTheStream waitIndefinitely]; + DLog("InputNode: After wait, should seek = %d", shouldSeek); + if(shouldSeek) { + endOfStream = NO; + shouldClose = NO; + continue; } else { - DLog(@"End of stream? %@", [self properties]); - - endOfStream = YES; - shouldClose = [controller endOfInputReached]; // Lets us know if we should keep going or not (occassionally, for track changes within a file) - DLog(@"closing? is %i", shouldClose); - - // Move this here, so that the above endOfInputReached has a chance to queue another track before starting output - // Technically, the output should still play out its buffer first before checking if it should stop - if(initialBufferFilled == NO) { - [controller initialBufferFilled:self]; - } - - // wait before exiting, as we might still get seeking request - DLog("InputNode: Before wait") - [exitAtTheEndOfTheStream waitIndefinitely]; - DLog("InputNode: After wait, should seek = %d", shouldSeek); - if(shouldSeek) { - endOfStream = NO; - shouldClose = NO; - continue; - } - else { - break; - } + break; } } } @@ -230,8 +222,6 @@ static void *kInputNodeContext = &kInputNodeContext; if(shouldClose) [decoder close]; - free(inputBuffer); - [exitAtTheEndOfTheStream signal]; DLog("Input node thread stopping"); diff --git a/Audio/Chain/Node.h b/Audio/Chain/Node.h index 0e2feb2e2..12eca8726 100644 --- a/Audio/Chain/Node.h +++ b/Audio/Chain/Node.h @@ -19,7 +19,7 @@ ChunkList *buffer; Semaphore *semaphore; - NSRecursiveLock *accessLock; + NSLock *accessLock; id __weak previousNode; id __weak controller; @@ -37,6 +37,7 @@ - (id _Nullable)initWithController:(id _Nonnull)c previous:(id _Nullable)p; - (void)writeData:(const void *_Nonnull)ptr amount:(size_t)a; +- (void)writeChunk:(AudioChunk *_Nonnull)chunk; - (AudioChunk *_Nonnull)readChunk:(size_t)maxFrames; - (BOOL)peekFormat:(AudioStreamBasicDescription *_Nonnull)format channelConfig:(uint32_t *_Nonnull)config; diff --git a/Audio/Chain/Node.m b/Audio/Chain/Node.m index 3fc91b533..bef0b2b2a 100644 --- a/Audio/Chain/Node.m +++ b/Audio/Chain/Node.m @@ -25,7 +25,7 @@ buffer = [[ChunkList alloc] initWithMaximumDuration:3.0]; semaphore = [[Semaphore alloc] init]; - accessLock = [[NSRecursiveLock alloc] init]; + accessLock = [[NSLock alloc] init]; initialBufferFilled = NO; @@ -91,6 +91,35 @@ [accessLock unlock]; } +- (void)writeChunk:(AudioChunk *)chunk { + [accessLock lock]; + + const double chunkDuration = [chunk duration]; + double durationLeft = [buffer maxDuration] - [buffer listDuration]; + + while(shouldContinue == YES && chunkDuration > durationLeft) { + if(durationLeft < chunkDuration) { + if(initialBufferFilled == NO) { + initialBufferFilled = YES; + if([controller respondsToSelector:@selector(initialBufferFilled:)]) + [controller performSelector:@selector(initialBufferFilled:) withObject:self]; + } + } + + if(durationLeft < chunkDuration || shouldReset) { + [accessLock unlock]; + [semaphore wait]; + [accessLock lock]; + } + + durationLeft = [buffer maxDuration] - [buffer listDuration]; + } + + [buffer addChunk:chunk]; + + [accessLock unlock]; +} + // Should be overwriten by subclass. - (void)process { } diff --git a/Audio/CogAudio.xcodeproj/project.pbxproj b/Audio/CogAudio.xcodeproj/project.pbxproj index 41eb778f9..96c5b753c 100644 --- a/Audio/CogAudio.xcodeproj/project.pbxproj +++ b/Audio/CogAudio.xcodeproj/project.pbxproj @@ -819,6 +819,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -865,6 +866,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Audio/CogPluginMulti.m b/Audio/CogPluginMulti.m index 66f2bdffb..6d4f88720 100644 --- a/Audio/CogPluginMulti.m +++ b/Audio/CogPluginMulti.m @@ -79,9 +79,9 @@ static void *kCogDecoderMultiContext = &kCogDecoderMultiContext; return @{}; } -- (int)readAudio:(void *)buffer frames:(UInt32)frames { - if(theDecoder != nil) return [theDecoder readAudio:buffer frames:frames]; - return 0; +- (AudioChunk *)readAudio { + if(theDecoder != nil) return [theDecoder readAudio]; + return nil; } - (BOOL)open:(id)source { diff --git a/Audio/Output/HeadphoneFilter.h b/Audio/Output/HeadphoneFilter.h index c6f500b0d..ee1699161 100644 --- a/Audio/Output/HeadphoneFilter.h +++ b/Audio/Output/HeadphoneFilter.h @@ -15,10 +15,10 @@ vDSP_DFT_Setup dftSetupF; vDSP_DFT_Setup dftSetupB; - size_t fftSize; - size_t fftSizeOver2; - size_t bufferSize; - size_t paddedBufferSize; + int fftSize; + int fftSizeOver2; + int bufferSize; + int paddedBufferSize; int channelCount; DSPSplitComplex signal_fft; @@ -38,7 +38,7 @@ - (id)initWithImpulseFile:(NSURL *)url forSampleRate:(double)sampleRate withInputChannels:(int)channels withConfig:(uint32_t)config; -- (void)process:(const float *)inBuffer sampleCount:(size_t)count toBuffer:(float *)outBuffer; +- (void)process:(const float *)inBuffer sampleCount:(int)count toBuffer:(float *)outBuffer; - (void)reset; diff --git a/Audio/Output/HeadphoneFilter.mm b/Audio/Output/HeadphoneFilter.mm index 17c79cc09..23efdafed 100644 --- a/Audio/Output/HeadphoneFilter.mm +++ b/Audio/Output/HeadphoneFilter.mm @@ -302,7 +302,7 @@ static impulseCache *_sharedController = nil; paddedBufferSize = fftSize; fftSizeOver2 = (fftSize + 1) / 2; - const size_t fftSizeOver2Plus1 = fftSizeOver2 + 1; // DFT float overwrites plus one, double doesn't + const int fftSizeOver2Plus1 = fftSizeOver2 + 1; // DFT float overwrites plus one, double doesn't dftSetupF = vDSP_DFT_zrop_CreateSetup(nil, fftSize, vDSP_DFT_FORWARD); dftSetupB = vDSP_DFT_zrop_CreateSetup(nil, fftSize, vDSP_DFT_INVERSE); diff --git a/Audio/Plugin.h b/Audio/Plugin.h index e3db69361..80e0748ed 100644 --- a/Audio/Plugin.h +++ b/Audio/Plugin.h @@ -1,5 +1,7 @@ // Plugins! HOORAY! +#import "AudioChunk.h" + @protocol CogSource + (NSArray *)schemes; // http, file, etc @@ -42,7 +44,7 @@ - (NSDictionary *)properties; - (NSDictionary *)metadata; // Only to be implemented for dynamic metadata, send events on change -- (int)readAudio:(void *)buffer frames:(UInt32)frames; +- (AudioChunk *)readAudio; - (BOOL)open:(id)source; - (long)seek:(long)frame; diff --git a/Audio/Visualization/VisualizationController.m b/Audio/Visualization/VisualizationController.m index 30bcf6c4f..3cbe61b43 100644 --- a/Audio/Visualization/VisualizationController.m +++ b/Audio/Visualization/VisualizationController.m @@ -82,10 +82,16 @@ static VisualizationController *_sharedController = nil; - (void)copyVisPCM:(float *)outPCM visFFT:(float *)outFFT latencyOffset:(double)latency { if(!outPCM && !outFFT) return; - + + if(!visAudio || !visAudioSize) { + if(outPCM) bzero(outPCM, sizeof(float) * 4096); + if(outFFT) bzero(outFFT, sizeof(float) * 2048); + return; + } + float tempPCM[4096]; if(!outPCM) outPCM = &tempPCM[0]; - + @synchronized(self) { if(!sampleRate) { bzero(outPCM, 4096 * sizeof(float)); diff --git a/Cog.xcodeproj/project.pbxproj b/Cog.xcodeproj/project.pbxproj index bcb3c8a00..139aa59fb 100644 --- a/Cog.xcodeproj/project.pbxproj +++ b/Cog.xcodeproj/project.pbxproj @@ -940,6 +940,7 @@ 83489C4E2782F2DF00BDCEA2 /* libvgmPlayer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = libvgmPlayer.xcodeproj; path = Plugins/libvgmPlayer/libvgmPlayer.xcodeproj; sourceTree = ""; }; 8349270127B4EFFC0009AB2B /* duplicateItemsTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = duplicateItemsTemplate.pdf; path = Images/duplicateItemsTemplate.pdf; sourceTree = ""; }; 8349270B27B4EFFC0009AB2B /* deadItemsTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = deadItemsTemplate.pdf; path = Images/deadItemsTemplate.pdf; sourceTree = ""; }; + 834A42C4287B01B600EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = Audio/Chain/AudioChunk.h; sourceTree = SOURCE_ROOT; }; 834B05E82859C006000B7DC0 /* TotalTimeTransformer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TotalTimeTransformer.h; path = Transformers/TotalTimeTransformer.h; sourceTree = ""; }; 834B05E92859C006000B7DC0 /* TotalTimeTransformer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = TotalTimeTransformer.m; path = Transformers/TotalTimeTransformer.m; sourceTree = ""; }; 8355D6B4180612F300D05687 /* NSData+MD5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+MD5.h"; sourceTree = ""; }; @@ -1076,6 +1077,18 @@ 83E5E54B18087CA5001F3284 /* miniModeOnTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = miniModeOnTemplate.pdf; path = Images/miniModeOnTemplate.pdf; sourceTree = ""; }; 83E5EFAC1FFEF78100659F0F /* OpenMPT.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OpenMPT.xcodeproj; path = Plugins/OpenMPT/OpenMPT.xcodeproj; sourceTree = ""; }; 83ED3AC7279A91C000904199 /* hdcdLogoTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = hdcdLogoTemplate.pdf; path = Images/hdcdLogoTemplate.pdf; sourceTree = ""; }; + 83F0E6A3287CAB3800D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/AboutWindowController.strings; sourceTree = ""; }; + 83F0E6A4287CAB3800D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Equalizer.strings; sourceTree = ""; }; + 83F0E6A5287CAB3800D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoInspector.strings; sourceTree = ""; }; + 83F0E6A6287CAB3800D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/MainMenu.strings; sourceTree = ""; }; + 83F0E6A7287CAB3800D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/OpenURLPanel.strings; sourceTree = ""; }; + 83F0E6A8287CAB3800D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/FileTree.strings; sourceTree = ""; }; + 83F0E6A9287CAB3800D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/SpectrumWindow.strings; sourceTree = ""; }; + 83F0E6AA287CAB3800D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/SpotlightPanel.strings; sourceTree = ""; }; + 83F0E6AB287CAB3800D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Feedback.strings; sourceTree = ""; }; + 83F0E8AD287CD48800D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; + 83F0E8B1287CD50700D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; + 83F0E8B2287CD52500D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = pl; path = pl.lproj/Credits.html; sourceTree = ""; }; 83F9D7F11A884B44007ABEC2 /* SilenceDecoder.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SilenceDecoder.xcodeproj; path = Plugins/SilenceDecoder/SilenceDecoder.xcodeproj; sourceTree = ""; }; 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 8E07AB760AAC930B00A4B32F /* PreferencesController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PreferencesController.h; path = Preferences/PreferencesController.h; sourceTree = ""; }; @@ -1240,6 +1253,7 @@ 177EC0110B8BC2CF0000BC8C /* Utils */ = { isa = PBXGroup; children = ( + 834A42C4287B01B600EB9D9B /* AudioChunk.h */, 8384912518080F2D00E7332D /* Logging.h */, 07E18DF10D62B38400BB0E11 /* NSArray+ShuffleUtils.h */, 07E18DF20D62B38400BB0E11 /* NSArray+ShuffleUtils.m */, @@ -2093,6 +2107,7 @@ fr, he, ja, + pl, ru, ); mainGroup = 29B97314FDCFA39411CA2CEA /* Cog */; @@ -2846,6 +2861,7 @@ children = ( 833F681E1CDBCAA700AFB9F0 /* es */, 835C888C22CC1882001B4B3F /* en */, + 83F0E8AD287CD48800D84594 /* pl */, 491C55C2287AA4B7007D96F5 /* ru */, ); name = InfoPlist.strings; @@ -2867,6 +2883,7 @@ 83BC5AB720E4C91400631CD4 /* Base */, 83BC5AD220E4D0B400631CD4 /* es */, 83BC5AD420E4D0B600631CD4 /* en */, + 83F0E6A8287CAB3800D84594 /* pl */, 491C55BB287AA4B6007D96F5 /* ru */, ); name = FileTree.xib; @@ -2878,6 +2895,7 @@ 83BC5AB520E4C91200631CD4 /* Base */, 83BC5AC620E4D04600631CD4 /* en */, 83BC5AC820E4D05A00631CD4 /* es */, + 83F0E6A6287CAB3800D84594 /* pl */, 491C55B9287AA4B6007D96F5 /* ru */, ); name = MainMenu.xib; @@ -2889,6 +2907,7 @@ 83BC5AB620E4C91300631CD4 /* Base */, 83BC5ACE20E4D09700631CD4 /* es */, 83BC5AD020E4D09800631CD4 /* en */, + 83F0E6A7287CAB3800D84594 /* pl */, 491C55BA287AA4B6007D96F5 /* ru */, ); name = OpenURLPanel.xib; @@ -2900,6 +2919,7 @@ 83BC5AB820E4C91400631CD4 /* Base */, 83BC5AD620E4D0D800631CD4 /* es */, 83BC5AD820E4D0D900631CD4 /* en */, + 83F0E6AA287CAB3800D84594 /* pl */, 491C55BD287AA4B6007D96F5 /* ru */, ); name = SpotlightPanel.xib; @@ -2911,6 +2931,7 @@ 83BC5AB420E4C91100631CD4 /* Base */, 83BC5ACA20E4D07200631CD4 /* es */, 83BC5ACC20E4D07700631CD4 /* en */, + 83F0E6A5287CAB3800D84594 /* pl */, 491C55B8287AA4B6007D96F5 /* ru */, ); name = InfoInspector.xib; @@ -2922,6 +2943,7 @@ 83BC5AB920E4C91500631CD4 /* Base */, 83BC5ADA20E4D0E900631CD4 /* en */, 83BC5ADC20E4D0EC00631CD4 /* es */, + 83F0E6AB287CAB3800D84594 /* pl */, 491C55BE287AA4B6007D96F5 /* ru */, ); name = Feedback.xib; @@ -2932,6 +2954,7 @@ children = ( 833F68251CDBCAA800AFB9F0 /* es */, 835C888B22CC1881001B4B3F /* en */, + 83F0E8B2287CD52500D84594 /* pl */, 491C55C4287AA4B7007D96F5 /* ru */, ); name = Credits.html; @@ -2943,6 +2966,7 @@ 830C37A027B95E3000E02BB0 /* Base */, 839614A8286EDA0400D3EEDB /* en */, 839614AA286EDA0600D3EEDB /* es */, + 83F0E6A4287CAB3800D84594 /* pl */, 491C55B7287AA4B6007D96F5 /* ru */, ); name = Equalizer.xib; @@ -2954,6 +2978,7 @@ 839614A1286ED97200D3EEDB /* Base */, 839614A4286ED98600D3EEDB /* en */, 839614A6286ED98800D3EEDB /* es */, + 83F0E6A3287CAB3800D84594 /* pl */, 491C55B6287AA4B6007D96F5 /* ru */, ); name = AboutWindowController.xib; @@ -2965,6 +2990,7 @@ 839614AC286EDA5C00D3EEDB /* Base */, 839614AF286EDA6800D3EEDB /* en */, 839614B1286EDA6E00D3EEDB /* es */, + 83F0E6A9287CAB3800D84594 /* pl */, 491C55BC287AA4B6007D96F5 /* ru */, ); name = SpectrumWindow.xib; @@ -2975,6 +3001,7 @@ children = ( 833F681F1CDBCAA800AFB9F0 /* es */, 835C888D22CC1882001B4B3F /* en */, + 83F0E8B1287CD50700D84594 /* pl */, 491C55C3287AA4B7007D96F5 /* ru */, ); name = Localizable.strings; @@ -2988,7 +3015,6 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = "Cog color"; - CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Cog.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; @@ -3044,7 +3070,6 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = "Cog color"; - CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Cog.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; @@ -3097,6 +3122,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -3140,6 +3166,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Frameworks/File_Extractor/File_Extractor.xcodeproj/project.pbxproj b/Frameworks/File_Extractor/File_Extractor.xcodeproj/project.pbxproj index 53b9e74c4..c196ea799 100644 --- a/Frameworks/File_Extractor/File_Extractor.xcodeproj/project.pbxproj +++ b/Frameworks/File_Extractor/File_Extractor.xcodeproj/project.pbxproj @@ -283,6 +283,7 @@ 83C210AC19CD92960093C461 /* pathfn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pathfn.cpp; sourceTree = ""; }; 83C210AE19CD97DB0093C461 /* timefn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = timefn.cpp; sourceTree = ""; }; 83C210AF19CD97DB0093C461 /* timefn.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = timefn.hpp; sourceTree = ""; }; + 83F0E6B3287CAB4100D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -646,6 +647,7 @@ en, es, Base, + pl, ); mainGroup = 8359FF3217FEF39F0060F3ED; productRefGroup = 8359FF3D17FEF39F0060F3ED /* Products */; @@ -746,6 +748,7 @@ children = ( 8359FF4917FEF39F0060F3ED /* en */, 833F68401CDBCAB300AFB9F0 /* es */, + 83F0E6B3287CAB4100D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -761,6 +764,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -817,6 +821,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Frameworks/File_Extractor/File_Extractor/pl.lproj/InfoPlist.strings b/Frameworks/File_Extractor/File_Extractor/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Frameworks/File_Extractor/File_Extractor/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Frameworks/GME/GME.xcodeproj/project.pbxproj b/Frameworks/GME/GME.xcodeproj/project.pbxproj index 6fcca8657..f2dce9bb1 100644 --- a/Frameworks/GME/GME.xcodeproj/project.pbxproj +++ b/Frameworks/GME/GME.xcodeproj/project.pbxproj @@ -236,6 +236,7 @@ 8370B70C17F615FE001A4D7A /* Spc_Sfm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Spc_Sfm.cpp; path = gme/Spc_Sfm.cpp; sourceTree = ""; }; 8370B70D17F615FE001A4D7A /* Spc_Sfm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Spc_Sfm.h; path = gme/Spc_Sfm.h; sourceTree = ""; }; 83747B7F2862D4DB0021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; + 83F0E6B7287CAB4100D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; 83FC5D3B181B47FB00B917E5 /* dsp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dsp.cpp; sourceTree = ""; }; 83FC5D3C181B47FB00B917E5 /* dsp.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = dsp.hpp; sourceTree = ""; }; 83FC5D57181B47FB00B917E5 /* smp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = smp.cpp; sourceTree = ""; }; @@ -641,6 +642,7 @@ en, es, Base, + pl, ); mainGroup = 0867D691FE84028FC02AAC07 /* GME */; productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; @@ -727,6 +729,7 @@ children = ( 833F68361CDBCAB200AFB9F0 /* es */, 835C889022CC1884001B4B3F /* en */, + 83F0E6B7287CAB4100D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -806,6 +809,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -852,6 +856,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Frameworks/GME/pl.lproj/InfoPlist.strings b/Frameworks/GME/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..948e12b99 Binary files /dev/null and b/Frameworks/GME/pl.lproj/InfoPlist.strings differ diff --git a/Frameworks/HighlyAdvanced/HighlyAdvanced.xcodeproj/project.pbxproj b/Frameworks/HighlyAdvanced/HighlyAdvanced.xcodeproj/project.pbxproj index 73766f0a1..a80e1dac3 100644 --- a/Frameworks/HighlyAdvanced/HighlyAdvanced.xcodeproj/project.pbxproj +++ b/Frameworks/HighlyAdvanced/HighlyAdvanced.xcodeproj/project.pbxproj @@ -68,6 +68,7 @@ 8343798717F97CF600584396 /* Sound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Sound.cpp; sourceTree = ""; }; 8343798817F97CF600584396 /* Sound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sound.h; sourceTree = ""; }; 83747B8E2862D5040021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; + 83F0E6BD287CAB4200D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -263,6 +264,7 @@ en, es, Base, + pl, ); mainGroup = 8343792B17F97BDB00584396; productRefGroup = 8343793617F97BDB00584396 /* Products */; @@ -311,6 +313,7 @@ children = ( 8343794217F97BDB00584396 /* en */, 833F682F1CDBCAB100AFB9F0 /* es */, + 83F0E6BD287CAB4200D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -326,6 +329,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -381,6 +385,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Frameworks/HighlyAdvanced/HighlyAdvanced/pl.lproj/InfoPlist.strings b/Frameworks/HighlyAdvanced/HighlyAdvanced/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Frameworks/HighlyAdvanced/HighlyAdvanced/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Frameworks/HighlyExperimental/HighlyExperimental.xcodeproj/project.pbxproj b/Frameworks/HighlyExperimental/HighlyExperimental.xcodeproj/project.pbxproj index c196ae12c..170c18727 100644 --- a/Frameworks/HighlyExperimental/HighlyExperimental.xcodeproj/project.pbxproj +++ b/Frameworks/HighlyExperimental/HighlyExperimental.xcodeproj/project.pbxproj @@ -50,6 +50,7 @@ 8360EF5817F92DB0005208A4 /* vfs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vfs.c; path = Core/vfs.c; sourceTree = ""; }; 8360EF5917F92DB0005208A4 /* vfs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vfs.h; path = Core/vfs.h; sourceTree = ""; }; 83747BA22862D5390021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; + 83F0E6B9287CAB4200D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -202,6 +203,7 @@ en, es, Base, + pl, ); mainGroup = 8360EF0617F92C91005208A4; productRefGroup = 8360EF1117F92C91005208A4 /* Products */; @@ -248,6 +250,7 @@ children = ( 8360EF1D17F92C91005208A4 /* en */, 833F682B1CDBCAB000AFB9F0 /* es */, + 83F0E6B9287CAB4200D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -263,6 +266,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -318,6 +322,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Frameworks/HighlyExperimental/HighlyExperimental/pl.lproj/InfoPlist.strings b/Frameworks/HighlyExperimental/HighlyExperimental/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Frameworks/HighlyExperimental/HighlyExperimental/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Frameworks/HighlyQuixotic/HighlyQuixotic.xcodeproj/project.pbxproj b/Frameworks/HighlyQuixotic/HighlyQuixotic.xcodeproj/project.pbxproj index 99982a011..eb4ef8ab8 100644 --- a/Frameworks/HighlyQuixotic/HighlyQuixotic.xcodeproj/project.pbxproj +++ b/Frameworks/HighlyQuixotic/HighlyQuixotic.xcodeproj/project.pbxproj @@ -34,6 +34,7 @@ 8343791C17F96EA600584396 /* z80.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = z80.c; path = Core/z80.c; sourceTree = ""; }; 8343791D17F96EA600584396 /* z80.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = z80.h; path = Core/z80.h; sourceTree = ""; }; 83747B932862D5160021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; + 83F0E6BC287CAB4200D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -174,6 +175,7 @@ en, es, Base, + pl, ); mainGroup = 834378D417F96E2600584396; productRefGroup = 834378DF17F96E2600584396 /* Products */; @@ -216,6 +218,7 @@ children = ( 834378EB17F96E2600584396 /* en */, 833F682E1CDBCAB100AFB9F0 /* es */, + 83F0E6BC287CAB4200D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -231,6 +234,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -290,6 +294,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Frameworks/HighlyQuixotic/HighlyQuixotic/pl.lproj/InfoPlist.strings b/Frameworks/HighlyQuixotic/HighlyQuixotic/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Frameworks/HighlyQuixotic/HighlyQuixotic/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Frameworks/HighlyTheoretical/HighlyTheoretical.xcodeproj/project.pbxproj b/Frameworks/HighlyTheoretical/HighlyTheoretical.xcodeproj/project.pbxproj index 67fd965c2..4c02c1e55 100644 --- a/Frameworks/HighlyTheoretical/HighlyTheoretical.xcodeproj/project.pbxproj +++ b/Frameworks/HighlyTheoretical/HighlyTheoretical.xcodeproj/project.pbxproj @@ -52,6 +52,7 @@ 834378C317F9666D00584396 /* m68kops.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = m68kops.h; sourceTree = ""; }; 834378C417F9666D00584396 /* macros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = macros.h; sourceTree = ""; }; 83747B982862D5230021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; + 83F0E6BB287CAB4200D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -216,6 +217,7 @@ en, es, Base, + pl, ); mainGroup = 8343786417F9658E00584396; productRefGroup = 8343786F17F9658E00584396 /* Products */; @@ -261,6 +263,7 @@ children = ( 8343787B17F9658E00584396 /* en */, 833F682D1CDBCAB000AFB9F0 /* es */, + 83F0E6BB287CAB4200D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -276,6 +279,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -337,6 +341,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Frameworks/HighlyTheoretical/HighlyTheoretical/pl.lproj/InfoPlist.strings b/Frameworks/HighlyTheoretical/HighlyTheoretical/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Frameworks/HighlyTheoretical/HighlyTheoretical/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Frameworks/HivelyPlayer/HivelyPlayer.xcodeproj/project.pbxproj b/Frameworks/HivelyPlayer/HivelyPlayer.xcodeproj/project.pbxproj index 9172cff98..c9754b940 100644 --- a/Frameworks/HivelyPlayer/HivelyPlayer.xcodeproj/project.pbxproj +++ b/Frameworks/HivelyPlayer/HivelyPlayer.xcodeproj/project.pbxproj @@ -24,6 +24,7 @@ 836FB58F182054B700B3AD2D /* blip_buf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = blip_buf.c; sourceTree = ""; }; 836FB590182054B700B3AD2D /* blip_buf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blip_buf.h; sourceTree = ""; }; 83747BB12862D55A0021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; + 83F0E6C1287CAB4200D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -156,6 +157,7 @@ en, es, Base, + pl, ); mainGroup = 836FB54C182053D700B3AD2D; productRefGroup = 836FB557182053D700B3AD2D /* Products */; @@ -196,6 +198,7 @@ children = ( 836FB563182053D700B3AD2D /* en */, 833F68481CDBCABF00AFB9F0 /* es */, + 83F0E6C1287CAB4200D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -211,6 +214,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -267,6 +271,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Frameworks/HivelyPlayer/HivelyPlayer/pl.lproj/InfoPlist.strings b/Frameworks/HivelyPlayer/HivelyPlayer/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Frameworks/HivelyPlayer/HivelyPlayer/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Frameworks/MPCDec/MPCDec.xcodeproj/project.pbxproj b/Frameworks/MPCDec/MPCDec.xcodeproj/project.pbxproj index 201575359..e32701e94 100644 --- a/Frameworks/MPCDec/MPCDec.xcodeproj/project.pbxproj +++ b/Frameworks/MPCDec/MPCDec.xcodeproj/project.pbxproj @@ -59,6 +59,7 @@ 83A16F1B19F48FB800842DBC /* mpcmath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mpcmath.h; sourceTree = ""; }; 83A16F1C19F48FB800842DBC /* reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reader.h; sourceTree = ""; }; 83A16F1D19F48FB800842DBC /* streaminfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = streaminfo.h; sourceTree = ""; }; + 83F0E6C6287CAB4300D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; 8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 8DC2EF5B0486A6940098B216 /* mpcdec.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = mpcdec.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8E6096BF09F314CF006D8BD7 /* mpc_decoder.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = mpc_decoder.c; path = Files/src/mpc_decoder.c; sourceTree = ""; }; @@ -256,6 +257,7 @@ en, es, Base, + pl, ); mainGroup = 0867D691FE84028FC02AAC07 /* MPCDec */; productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; @@ -306,6 +308,7 @@ children = ( 833F683F1CDBCAB300AFB9F0 /* es */, 835C889222CC1885001B4B3F /* en */, + 83F0E6C6287CAB4300D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -369,6 +372,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; @@ -413,6 +417,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; diff --git a/Frameworks/MPCDec/pl.lproj/InfoPlist.strings b/Frameworks/MPCDec/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..7080cf949 Binary files /dev/null and b/Frameworks/MPCDec/pl.lproj/InfoPlist.strings differ diff --git a/Frameworks/SSEQPlayer/SSEQPlayer.xcodeproj/project.pbxproj b/Frameworks/SSEQPlayer/SSEQPlayer.xcodeproj/project.pbxproj index d2bf041c3..c82e4224e 100644 --- a/Frameworks/SSEQPlayer/SSEQPlayer.xcodeproj/project.pbxproj +++ b/Frameworks/SSEQPlayer/SSEQPlayer.xcodeproj/project.pbxproj @@ -84,6 +84,7 @@ 8384901D1807649A00E7332D /* SYMBSection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SYMBSection.h; sourceTree = ""; }; 8384901E1807649A00E7332D /* Track.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Track.cpp; sourceTree = ""; }; 8384901F1807649A00E7332D /* Track.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Track.h; sourceTree = ""; }; + 83F0E6BE287CAB4200D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -265,6 +266,7 @@ en, es, Base, + pl, ); mainGroup = 83848FAE1807623F00E7332D; productRefGroup = 83848FB91807623F00E7332D /* Products */; @@ -316,6 +318,7 @@ children = ( 83848FC51807623F00E7332D /* en */, 833F68301CDBCAB100AFB9F0 /* es */, + 83F0E6BE287CAB4200D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -331,6 +334,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -386,6 +390,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Frameworks/SSEQPlayer/SSEQPlayer/pl.lproj/InfoPlist.strings b/Frameworks/SSEQPlayer/SSEQPlayer/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Frameworks/SSEQPlayer/SSEQPlayer/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Frameworks/Shorten/Shorten.xcodeproj/project.pbxproj b/Frameworks/Shorten/Shorten.xcodeproj/project.pbxproj index 4e3f51a06..303020297 100644 --- a/Frameworks/Shorten/Shorten.xcodeproj/project.pbxproj +++ b/Frameworks/Shorten/Shorten.xcodeproj/project.pbxproj @@ -38,6 +38,7 @@ 833F683E1CDBCAB300AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; 835C889522CC1888001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 83747BCA2862D5970021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; + 83F0E6C9287CAB4300D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; 8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 8DC2EF5B0486A6940098B216 /* Shorten.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shorten.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -200,6 +201,7 @@ en, es, Base, + pl, ); mainGroup = 0867D691FE84028FC02AAC07 /* Shorten */; productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; @@ -245,6 +247,7 @@ children = ( 833F683E1CDBCAB300AFB9F0 /* es */, 835C889522CC1888001B4B3F /* en */, + 83F0E6C9287CAB4300D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -313,6 +316,7 @@ ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; @@ -364,6 +368,7 @@ ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; diff --git a/Frameworks/Shorten/pl.lproj/InfoPlist.strings b/Frameworks/Shorten/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..7080cf949 Binary files /dev/null and b/Frameworks/Shorten/pl.lproj/InfoPlist.strings differ diff --git a/Frameworks/TagLib/TagLib.xcodeproj/project.pbxproj b/Frameworks/TagLib/TagLib.xcodeproj/project.pbxproj index 2e8396914..2d1f1b4d8 100644 --- a/Frameworks/TagLib/TagLib.xcodeproj/project.pbxproj +++ b/Frameworks/TagLib/TagLib.xcodeproj/project.pbxproj @@ -276,6 +276,7 @@ 83747BD22862D5B00021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 83B46FC92707EED200847FC9 /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; }; 83B46FCB2707EEDB00847FC9 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; + 83F0E6CA287CAB4300D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; 8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 8DC2EF5B0486A6940098B216 /* TagLib.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TagLib.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EDE862FC25CF6BD60086EFD3 /* tpropertymap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tpropertymap.cpp; sourceTree = ""; }; @@ -996,6 +997,7 @@ en, es, Base, + pl, ); mainGroup = 0867D691FE84028FC02AAC07 /* TagLib */; productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; @@ -1114,6 +1116,7 @@ children = ( 833F683D1CDBCAB300AFB9F0 /* es */, 835C889822CC1889001B4B3F /* en */, + 83F0E6CA287CAB4300D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -1179,6 +1182,7 @@ ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -1227,6 +1231,7 @@ ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Frameworks/TagLib/pl.lproj/InfoPlist.strings b/Frameworks/TagLib/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..cde2c3450 --- /dev/null +++ b/Frameworks/TagLib/pl.lproj/InfoPlist.strings @@ -0,0 +1,3 @@ +/* Localized versions of Info.plist keys */ + +NSHumanReadableCopyright = "© __MyCompanyName__, 2006"; diff --git a/Frameworks/WavPack/WavPack.xcodeproj/project.pbxproj b/Frameworks/WavPack/WavPack.xcodeproj/project.pbxproj index b9f34266f..e58a6e4dc 100644 --- a/Frameworks/WavPack/WavPack.xcodeproj/project.pbxproj +++ b/Frameworks/WavPack/WavPack.xcodeproj/project.pbxproj @@ -73,6 +73,7 @@ 83DD1DCE17FA038A00249519 /* wavpack_local.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wavpack_local.h; path = Files/wavpack_local.h; sourceTree = ""; }; 83DD1DCF17FA038A00249519 /* wavpack_version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wavpack_version.h; path = Files/wavpack_version.h; sourceTree = ""; }; 83DD1DD317FA03F900249519 /* tags.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tags.c; path = Files/tags.c; sourceTree = ""; }; + 83F0E6CD287CAB4400D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; 8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 8DC2EF5B0486A6940098B216 /* WavPack.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WavPack.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8E7574AF09F31BB90080F1EE /* md5.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = md5.h; path = Files/md5.h; sourceTree = ""; }; @@ -272,6 +273,7 @@ en, es, Base, + pl, ); mainGroup = 0867D691FE84028FC02AAC07 /* WavPack */; productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; @@ -337,6 +339,7 @@ children = ( 833F683A1CDBCAB200AFB9F0 /* es */, 835C889B22CC188A001B4B3F /* en */, + 83F0E6CD287CAB4400D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -429,6 +432,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -474,6 +478,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Frameworks/WavPack/pl.lproj/InfoPlist.strings b/Frameworks/WavPack/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..7080cf949 Binary files /dev/null and b/Frameworks/WavPack/pl.lproj/InfoPlist.strings differ diff --git a/Frameworks/lazyusf2/lazyusf2.xcodeproj/project.pbxproj b/Frameworks/lazyusf2/lazyusf2.xcodeproj/project.pbxproj index f825a9afd..cd2376f12 100644 --- a/Frameworks/lazyusf2/lazyusf2.xcodeproj/project.pbxproj +++ b/Frameworks/lazyusf2/lazyusf2.xcodeproj/project.pbxproj @@ -1079,6 +1079,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -1135,6 +1136,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Frameworks/midi_processing/midi_processing.xcodeproj/project.pbxproj b/Frameworks/midi_processing/midi_processing.xcodeproj/project.pbxproj index bac3bd1e1..a52442419 100644 --- a/Frameworks/midi_processing/midi_processing.xcodeproj/project.pbxproj +++ b/Frameworks/midi_processing/midi_processing.xcodeproj/project.pbxproj @@ -44,6 +44,7 @@ 83B066EE180D5724008E3612 /* midi_processor_syx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = midi_processor_syx.cpp; sourceTree = ""; }; 83B066EF180D5724008E3612 /* midi_processor_xmi.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = midi_processor_xmi.cpp; sourceTree = ""; }; 83B066F0180D5724008E3612 /* midi_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_processor.h; sourceTree = ""; }; + 83F0E6C5287CAB4300D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -186,6 +187,7 @@ en, es, Base, + pl, ); mainGroup = 83B066A2180D56B9008E3612; productRefGroup = 83B066AD180D56B9008E3612 /* Products */; @@ -236,6 +238,7 @@ children = ( 83B066B9180D56B9008E3612 /* en */, 833F68441CDBCABF00AFB9F0 /* es */, + 83F0E6C5287CAB4300D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -251,6 +254,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -307,6 +311,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Frameworks/midi_processing/midi_processing/pl.lproj/InfoPlist.strings b/Frameworks/midi_processing/midi_processing/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Frameworks/midi_processing/midi_processing/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Frameworks/psflib/psflib.xcodeproj/project.pbxproj b/Frameworks/psflib/psflib.xcodeproj/project.pbxproj index cb2827182..cbae75eee 100644 --- a/Frameworks/psflib/psflib.xcodeproj/project.pbxproj +++ b/Frameworks/psflib/psflib.xcodeproj/project.pbxproj @@ -26,6 +26,7 @@ 8343785717F93D8200584396 /* psflib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = psflib.c; sourceTree = ""; }; 8343785817F93D8200584396 /* psflib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = psflib.h; sourceTree = ""; }; 83747B9D2862D52E0021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; + 83F0E6BA287CAB4200D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -160,6 +161,7 @@ en, es, Base, + pl, ); mainGroup = 8343781217F93CB500584396; productRefGroup = 8343781D17F93CB500584396 /* Products */; @@ -200,6 +202,7 @@ children = ( 8343782917F93CB500584396 /* en */, 833F682C1CDBCAB000AFB9F0 /* es */, + 83F0E6BA287CAB4200D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -215,6 +218,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -270,6 +274,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Frameworks/psflib/psflib/pl.lproj/InfoPlist.strings b/Frameworks/psflib/psflib/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Frameworks/psflib/psflib/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Frameworks/vgmstream/libvgmstream.xcodeproj/project.pbxproj b/Frameworks/vgmstream/libvgmstream.xcodeproj/project.pbxproj index 7f338a4ab..029bf332b 100644 --- a/Frameworks/vgmstream/libvgmstream.xcodeproj/project.pbxproj +++ b/Frameworks/vgmstream/libvgmstream.xcodeproj/project.pbxproj @@ -1536,6 +1536,7 @@ 83F0AA5C21E2028B004BBC04 /* smp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smp.c; sourceTree = ""; }; 83F0AA5D21E2028B004BBC04 /* vsv_streamfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vsv_streamfile.h; sourceTree = ""; }; 83F0AA5E21E2028C004BBC04 /* vsv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vsv.c; sourceTree = ""; }; + 83F0E6CC287CAB4400D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; 83F1EE28245D4FB10076E182 /* imuse_decoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = imuse_decoder.c; sourceTree = ""; }; 83F1EE2C245D4FB20076E182 /* vadpcm_decoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vadpcm_decoder.c; sourceTree = ""; }; 83F1EE2F245D4FC10076E182 /* imuse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = imuse.c; sourceTree = ""; }; @@ -2661,6 +2662,7 @@ en, es, Base, + pl, ); mainGroup = 836F6B2F18BDB8880095E648; productRefGroup = 836F6B3A18BDB8880095E648 /* Products */; @@ -3328,6 +3330,7 @@ isa = PBXVariantGroup; children = ( 836F6B4618BDB8880095E648 /* en */, + 83F0E6CC287CAB4400D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -3343,6 +3346,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -3421,6 +3425,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Frameworks/vgmstream/vgmstream/pl.lproj/InfoPlist.strings b/Frameworks/vgmstream/vgmstream/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Frameworks/vgmstream/vgmstream/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Frameworks/vio2sf/vio2sf.xcodeproj/project.pbxproj b/Frameworks/vio2sf/vio2sf.xcodeproj/project.pbxproj index ea361de12..c1dc1b708 100644 --- a/Frameworks/vio2sf/vio2sf.xcodeproj/project.pbxproj +++ b/Frameworks/vio2sf/vio2sf.xcodeproj/project.pbxproj @@ -99,6 +99,7 @@ 83DE0C6C180A9CA400269051 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = ""; }; 83DE0CB7180A9FD000269051 /* state.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = state.c; sourceTree = ""; }; 83DE0CB9180A9FE300269051 /* state.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = state.h; sourceTree = ""; }; + 83F0E6BF287CAB4200D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -309,6 +310,7 @@ en, es, Base, + pl, ); mainGroup = 83DE0BFC180A9BD400269051; productRefGroup = 83DE0C07180A9BD400269051 /* Products */; @@ -363,6 +365,7 @@ children = ( 83DE0C13180A9BD400269051 /* en */, 833F68311CDBCAB100AFB9F0 /* es */, + 83F0E6BF287CAB4200D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -378,6 +381,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -434,6 +438,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Frameworks/vio2sf/vio2sf/pl.lproj/InfoPlist.strings b/Frameworks/vio2sf/vio2sf/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Frameworks/vio2sf/vio2sf/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Plugins/APL/APL.xcodeproj/project.pbxproj b/Plugins/APL/APL.xcodeproj/project.pbxproj index 4809933c6..4cbe91672 100644 --- a/Plugins/APL/APL.xcodeproj/project.pbxproj +++ b/Plugins/APL/APL.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 32DBCF630370AF2F00C91783 /* APL_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APL_Prefix.pch; sourceTree = ""; }; + 834A42AF287AF34300EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 83747FE32862E8B60021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 838491281808135500E7332D /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../Utils/Logging.h; sourceTree = ""; }; 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -74,6 +75,7 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 834A42AF287AF34300EB9D9B /* AudioChunk.h */, 838491281808135500E7332D /* Logging.h */, 8E8D423C0CBB0FF600135C1B /* Plugin.h */, 8E8D42350CBB0F9800135C1B /* APLDecoder.h */, @@ -207,6 +209,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -251,6 +254,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/APL/APLDecoder.m b/Plugins/APL/APLDecoder.m index 9fc7fd36d..da93d0f19 100644 --- a/Plugins/APL/APLDecoder.m +++ b/Plugins/APL/APLDecoder.m @@ -108,18 +108,24 @@ return framePosition; } -- (int)readAudio:(void *)buf frames:(UInt32)frames { - if(framePosition + frames > trackEnd) - frames = (UInt32)(trackEnd - framePosition); +- (AudioChunk *)readAudio { + int maxFrames = INT_MAX; - if(!frames) { + if(framePosition + maxFrames > trackEnd) + maxFrames = (int)(trackEnd - framePosition); + + if(!maxFrames) { DLog(@"APL readAudio Returning 0"); - return 0; + return nil; } - int n = [decoder readAudio:buf frames:frames]; - framePosition += n; - return n; + AudioChunk *chunk = [decoder readAudio]; + if(chunk.frameCount > maxFrames) { + [chunk setFrameCount:maxFrames]; + } + + framePosition += chunk.frameCount; + return chunk; } - (BOOL)isSilence { diff --git a/Plugins/AdPlug/AdPlug.xcodeproj/project.pbxproj b/Plugins/AdPlug/AdPlug.xcodeproj/project.pbxproj index 427939dd4..cacfb9829 100644 --- a/Plugins/AdPlug/AdPlug.xcodeproj/project.pbxproj +++ b/Plugins/AdPlug/AdPlug.xcodeproj/project.pbxproj @@ -52,6 +52,7 @@ /* Begin PBXFileReference section */ 833A8999286FF2FD0022E036 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 834A42AE287AF27A00EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 83747C6D2862DDDB0021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 83D3C5F3201C674D005564CB /* AdPlug.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AdPlug.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 83D3C5F6201C674D005564CB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -123,6 +124,7 @@ 83D3C5F5201C674D005564CB /* AdPlug */ = { isa = PBXGroup; children = ( + 834A42AE287AF27A00EB9D9B /* AudioChunk.h */, 83D3C667201C7020005564CB /* adplug.db */, 83D3C657201C6E24005564CB /* AdPlugContainer.h */, 83D3C654201C6E24005564CB /* AdPlugContainer.mm */, diff --git a/Plugins/AdPlug/AdPlug/AdPlugDecoder.mm b/Plugins/AdPlug/AdPlug/AdPlugDecoder.mm index 6e57a2263..6e4d0033f 100644 --- a/Plugins/AdPlug/AdPlug/AdPlugDecoder.mm +++ b/Plugins/AdPlug/AdPlug/AdPlugDecoder.mm @@ -103,7 +103,14 @@ static CAdPlugDatabase *g_database = NULL; return @{}; } -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { + int frames = 1024; + int16_t buffer[1024 * 2]; + + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + void *buf = (void *)buffer; + int total = 0; bool dont_loop = !IsRepeatOneSet(); if(dont_loop && current_pos + frames > length) @@ -128,7 +135,9 @@ static CAdPlugDatabase *g_database = NULL; total += samples_now; } - return total; + [chunk assignSamples:buffer frameCount:total]; + + return chunk; } - (long)seek:(long)frame { diff --git a/Plugins/ArchiveSource/ArchiveSource.xcodeproj/project.pbxproj b/Plugins/ArchiveSource/ArchiveSource.xcodeproj/project.pbxproj index 132032fb7..9c1f52097 100644 --- a/Plugins/ArchiveSource/ArchiveSource.xcodeproj/project.pbxproj +++ b/Plugins/ArchiveSource/ArchiveSource.xcodeproj/project.pbxproj @@ -33,6 +33,7 @@ /* Begin PBXFileReference section */ 8307D31A286070EA000FF8EB /* SandboxBroker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SandboxBroker.h; path = ../../../Utils/SandboxBroker.h; sourceTree = ""; }; + 834A42B0287AF4BF00EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 8359009717FEF6490060F3ED /* ArchiveSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArchiveSource.h; sourceTree = ""; }; 8359009817FEF6490060F3ED /* ArchiveSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ArchiveSource.m; sourceTree = ""; }; 8359009A17FEFDA80060F3ED /* ArchiveContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArchiveContainer.h; sourceTree = ""; }; @@ -49,6 +50,7 @@ 8359FF6A17FEF39F0060F3ED /* File_Extractor.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = File_Extractor.xcodeproj; path = ../../Frameworks/File_Extractor/File_Extractor.xcodeproj; sourceTree = ""; }; 83747C632862DDA00021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 8384913518081BA000E7332D /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../../Utils/Logging.h; sourceTree = ""; }; + 83F0E6B4287CAB4100D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -105,6 +107,7 @@ 8359FF2017FEF35C0060F3ED /* ArchiveSource */ = { isa = PBXGroup; children = ( + 834A42B0287AF4BF00EB9D9B /* AudioChunk.h */, 8307D31A286070EA000FF8EB /* SandboxBroker.h */, 8384913518081BA000E7332D /* Logging.h */, 835900A017FF079C0060F3ED /* Plugin.h */, @@ -189,6 +192,7 @@ en, es, Base, + pl, ); mainGroup = 8359FF0E17FEF35C0060F3ED; productRefGroup = 8359FF1817FEF35C0060F3ED /* Products */; @@ -252,6 +256,7 @@ isa = PBXVariantGroup; children = ( 8359FF2417FEF35C0060F3ED /* en */, + 83F0E6B4287CAB4100D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -267,6 +272,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -322,6 +328,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/ArchiveSource/ArchiveSource/pl.lproj/InfoPlist.strings b/Plugins/ArchiveSource/ArchiveSource/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Plugins/ArchiveSource/ArchiveSource/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Plugins/CoreAudio/CoreAudio.xcodeproj/project.pbxproj b/Plugins/CoreAudio/CoreAudio.xcodeproj/project.pbxproj index bf2bbe922..08b340b05 100644 --- a/Plugins/CoreAudio/CoreAudio.xcodeproj/project.pbxproj +++ b/Plugins/CoreAudio/CoreAudio.xcodeproj/project.pbxproj @@ -23,6 +23,7 @@ 17C93EAB0B8FF3CE008627D6 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; 17C93EB20B8FF3E1008627D6 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; 32DBCF630370AF2F00C91783 /* CoreAudio_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoreAudio_Prefix.pch; sourceTree = ""; }; + 834A42B1287AF4D900EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 83747C5E2862DD880021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 83849129180813E800E7332D /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../Utils/Logging.h; sourceTree = ""; }; 8D5B49B6048680CD000E48DA /* CoreAudio.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoreAudio.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -77,6 +78,7 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 834A42B1287AF4D900EB9D9B /* AudioChunk.h */, 83849129180813E800E7332D /* Logging.h */, 177FCFCA0B90C9A10011C3B5 /* Plugin.h */, 17C93E720B8FF192008627D6 /* CoreAudioDecoder.h */, @@ -250,6 +252,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -294,6 +297,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/CoreAudio/CoreAudioDecoder.m b/Plugins/CoreAudio/CoreAudioDecoder.m index 854115ab2..e343427fa 100644 --- a/Plugins/CoreAudio/CoreAudioDecoder.m +++ b/Plugins/CoreAudio/CoreAudioDecoder.m @@ -306,25 +306,33 @@ static SInt64 getSizeProc(void *clientData) { return YES; } -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { OSStatus err; AudioBufferList bufferList; UInt32 frameCount; + int frames = 1024; + size_t bytesPerFrame = channels * (bitsPerSample / 8); + uint8_t buffer[frames * bytesPerFrame]; + // Set up the AudioBufferList bufferList.mNumberBuffers = 1; bufferList.mBuffers[0].mNumberChannels = channels; - bufferList.mBuffers[0].mData = buf; + bufferList.mBuffers[0].mData = buffer; bufferList.mBuffers[0].mDataByteSize = frames * channels * (bitsPerSample / 8); // Read a chunk of PCM input (converted from whatever format) frameCount = frames; err = ExtAudioFileRead(_in, &frameCount, &bufferList); if(err != noErr) { - return 0; + return nil; } - return frameCount; + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + [chunk assignSamples:buffer frameCount:frameCount]; + + return chunk; } - (long)seek:(long)frame { diff --git a/Plugins/CueSheet/CueSheet.xcodeproj/project.pbxproj b/Plugins/CueSheet/CueSheet.xcodeproj/project.pbxproj index 204512e3c..93248eb48 100644 --- a/Plugins/CueSheet/CueSheet.xcodeproj/project.pbxproj +++ b/Plugins/CueSheet/CueSheet.xcodeproj/project.pbxproj @@ -24,11 +24,13 @@ 17DA346D0CC04FCD0003F6B2 /* CueSheetMetadataReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CueSheetMetadataReader.m; sourceTree = ""; }; 32DBCF630370AF2F00C91783 /* CueSheet_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CueSheet_Prefix.pch; sourceTree = ""; }; 833F68371CDBCAB200AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; + 834A42B2287AF59900EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 835C888E22CC1883001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 83747C592862DD660021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 8384912A180814D900E7332D /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../Utils/Logging.h; sourceTree = ""; }; 839DA7D0274A2EA9001B18E5 /* AudioMetadataReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioMetadataReader.h; path = ../../Audio/AudioMetadataReader.h; sourceTree = ""; }; 839DA7D3274A2FD4001B18E5 /* NSDictionary+Merge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+Merge.h"; path = "../../Utils/NSDictionary+Merge.h"; sourceTree = ""; }; + 83F0E6B5287CAB4100D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; 8D5B49B6048680CD000E48DA /* CueSheet.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CueSheet.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8E8D42240CBB0F5800135C1B /* CueSheetContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CueSheetContainer.h; sourceTree = ""; }; @@ -89,6 +91,7 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 834A42B2287AF59900EB9D9B /* AudioChunk.h */, 839DA7D3274A2FD4001B18E5 /* NSDictionary+Merge.h */, 839DA7D0274A2EA9001B18E5 /* AudioMetadataReader.h */, 8384912A180814D900E7332D /* Logging.h */, @@ -193,6 +196,7 @@ en, es, Base, + pl, ); mainGroup = 089C166AFE841209C02AAC07 /* CueSheet */; projectDirPath = ""; @@ -235,6 +239,7 @@ children = ( 833F68371CDBCAB200AFB9F0 /* es */, 835C888E22CC1883001B4B3F /* en */, + 83F0E6B5287CAB4100D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -290,6 +295,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -334,6 +340,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/CueSheet/CueSheetDecoder.m b/Plugins/CueSheet/CueSheetDecoder.m index 01b265cf8..c32fdba41 100644 --- a/Plugins/CueSheet/CueSheetDecoder.m +++ b/Plugins/CueSheet/CueSheetDecoder.m @@ -83,6 +83,8 @@ static void *kCueSheetDecoderContext = &kCueSheetDecoderContext; decoder = [NSClassFromString(@"AudioDecoder") audioDecoderForSource:source skipCue:YES]; + [self registerObservers]; + if(![decoder open:source]) { ALog(@"Could not open cuesheet decoder"); return NO; @@ -166,22 +168,6 @@ static void *kCueSheetDecoderContext = &kCueSheetDecoderContext; } else { // Fix for embedded cuesheet handler parsing non-embedded files, // or files that are already in the playlist without a fragment - source = [NSClassFromString(@"AudioSource") audioSourceForURL:url]; - - if(![source open:url]) { - ALog(@"Could not open cuesheet source"); - return NO; - } - - decoder = [NSClassFromString(@"AudioDecoder") audioDecoderForSource:source skipCue:YES]; - - [self registerObservers]; - - if(![decoder open:source]) { - ALog(@"Could not open cuesheet decoder"); - return NO; - } - NSDictionary *properties = [decoder properties]; int bitsPerSample = [[properties objectForKey:@"bitsPerSample"] intValue]; int channels = [[properties objectForKey:@"channels"] intValue]; @@ -323,25 +309,32 @@ static void *kCueSheetDecoderContext = &kCueSheetDecoderContext; return framePosition - trackStart; } -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { if(!seekedToStart) { [self seek:0]; } + int frames = INT_MAX; + if(!noFragment && framePosition + frames > trackEnd) { frames = (UInt32)(trackEnd - framePosition); } if(!frames) { DLog(@"Returning 0"); - return 0; + return nil; } - int n = [decoder readAudio:buf frames:frames]; + AudioChunk *chunk = [decoder readAudio]; - framePosition += n; + size_t n = chunk.frameCount; + if(n > frames) { + [chunk setFrameCount:frames]; + } - return n; + framePosition += chunk.frameCount; + + return chunk; } - (BOOL)isSilence { diff --git a/Plugins/CueSheet/pl.lproj/InfoPlist.strings b/Plugins/CueSheet/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..99142f9ac Binary files /dev/null and b/Plugins/CueSheet/pl.lproj/InfoPlist.strings differ diff --git a/Plugins/FFMPEG/FFMPEG.xcodeproj/project.pbxproj b/Plugins/FFMPEG/FFMPEG.xcodeproj/project.pbxproj index 4406e50fe..c560f028c 100644 --- a/Plugins/FFMPEG/FFMPEG.xcodeproj/project.pbxproj +++ b/Plugins/FFMPEG/FFMPEG.xcodeproj/project.pbxproj @@ -45,6 +45,7 @@ 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 834A42B3287AF65000EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 8352D48E1CDDB023009D16AA /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; 8352D4901CDDB02A009D16AA /* VideoDecodeAcceleration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VideoDecodeAcceleration.framework; path = System/Library/Frameworks/VideoDecodeAcceleration.framework; sourceTree = SDKROOT; }; 8352D4921CDDB034009D16AA /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; @@ -145,6 +146,7 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 834A42B3287AF65000EB9D9B /* AudioChunk.h */, 8356BD1A27B3D06F0074E50C /* HTTPSource.h */, 8356BCEA27B37DA40074E50C /* TagLibID3v2Reader.h */, 8356BCE827B37C6F0074E50C /* NSDictionary+Merge.h */, @@ -332,6 +334,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -380,6 +383,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/FFMPEG/FFMPEGDecoder.h b/Plugins/FFMPEG/FFMPEGDecoder.h index cd546d50e..2d62c0e7e 100644 --- a/Plugins/FFMPEG/FFMPEGDecoder.h +++ b/Plugins/FFMPEG/FFMPEGDecoder.h @@ -45,8 +45,7 @@ int64_t ffmpeg_seek(void *opaque, int64_t offset, int whence); BOOL metadataUpdated; - int prebufferedAudio; - uint8_t *prebufferedAudioData; + AudioChunk *prebufferedChunk; BOOL rawDSD; BOOL rawDSDReverseBits; diff --git a/Plugins/FFMPEG/FFMPEGDecoder.m b/Plugins/FFMPEG/FFMPEGDecoder.m index 463e1ba1e..20557dd58 100644 --- a/Plugins/FFMPEG/FFMPEGDecoder.m +++ b/Plugins/FFMPEG/FFMPEGDecoder.m @@ -471,13 +471,10 @@ static uint8_t reverse_bits[0x100]; metadataUpdated = NO; [self updateMetadata]; - prebufferedAudio = 0; - prebufferedAudioData = NULL; + prebufferedChunk = nil; if(attachedPicIndex >= 0) { - int frameSize = rawDSD ? channels : channels * (bitsPerSample / 8); - prebufferedAudioData = malloc(1024 * frameSize); - [self readAudio:prebufferedAudioData frames:1024]; + prebufferedChunk = [self readAudio]; } return YES; @@ -681,30 +678,31 @@ static void setDictionary(NSMutableDictionary *dict, NSString *tag, NSString *va } } -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { if(!seekedToStart) { [self seek:0]; } + if(prebufferedChunk) { + // A bit of ignored read-ahead to support embedded artwork + size_t framesReadNow = prebufferedChunk.frameCount; + framesRead -= framesReadNow; + AudioChunk *chunk = prebufferedChunk; + prebufferedChunk = nil; + return chunk; + } + + if(totalFrames && framesRead >= totalFrames) + return nil; + + int frames = 1024; + int frameSize = rawDSD ? channels : channels * (bitsPerSample / 8); int bytesToRead = frames * frameSize; int bytesRead = 0; - if(prebufferedAudio) { - // A bit of ignored read-ahead to support embedded artwork - int bytesBuffered = prebufferedAudio * frameSize; - int bytesToCopy = (bytesBuffered > bytesToRead) ? bytesToRead : bytesBuffered; - memcpy(buf, prebufferedAudioData, bytesToCopy); - memmove(prebufferedAudioData, prebufferedAudioData + bytesToCopy, bytesBuffered - bytesToCopy); - prebufferedAudio -= bytesToCopy / frameSize; - bytesRead = bytesToCopy; - - int framesReadNow = bytesRead / frameSize; - framesRead -= framesReadNow; - } - - if(totalFrames && framesRead >= totalFrames) - return 0; + uint8_t buffer[bytesToRead]; + void *buf = (void *)buffer; int dataSize = 0; @@ -909,7 +907,11 @@ static void setDictionary(NSMutableDictionary *dict, NSString *tag, NSString *va framesRead += framesReadNow; - return framesReadNow; + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + [chunk assignSamples:buffer frameCount:framesReadNow]; + + return chunk; } - (long)seek:(long)frame { @@ -918,7 +920,7 @@ static void setDictionary(NSMutableDictionary *dict, NSString *tag, NSString *va seekedToStart = YES; - prebufferedAudio = 0; + prebufferedChunk = nil; if(frame >= totalFrames) { framesRead = totalFrames; diff --git a/Plugins/FileSource/FileSource.xcodeproj/project.pbxproj b/Plugins/FileSource/FileSource.xcodeproj/project.pbxproj index 3407ac759..2ccd0a398 100644 --- a/Plugins/FileSource/FileSource.xcodeproj/project.pbxproj +++ b/Plugins/FileSource/FileSource.xcodeproj/project.pbxproj @@ -39,6 +39,7 @@ 32DBCF630370AF2F00C91783 /* FileSource_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileSource_Prefix.pch; sourceTree = ""; }; 8307D31B2860722C000FF8EB /* SandboxBroker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SandboxBroker.h; path = ../../Utils/SandboxBroker.h; sourceTree = ""; }; 8335FF6817FF765A002D8DD2 /* File_Extractor.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = File_Extractor.xcodeproj; path = ../../Frameworks/File_Extractor/File_Extractor.xcodeproj; sourceTree = ""; }; + 834A42AD287AF25600EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 83747C4F2862DD2F0021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 8D5B49B6048680CD000E48DA /* FileSource.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FileSource.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -91,6 +92,7 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 834A42AD287AF25600EB9D9B /* AudioChunk.h */, 8307D31B2860722C000FF8EB /* SandboxBroker.h */, 17ADB4080B979A8A00257CA2 /* Plugin.h */, 17ADB4180B979AEB00257CA2 /* FileSource.h */, @@ -294,6 +296,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -339,6 +342,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/Flac/Flac.xcodeproj/project.pbxproj b/Plugins/Flac/Flac.xcodeproj/project.pbxproj index 6bf15ba6f..a7265f2d1 100644 --- a/Plugins/Flac/Flac.xcodeproj/project.pbxproj +++ b/Plugins/Flac/Flac.xcodeproj/project.pbxproj @@ -36,6 +36,7 @@ 32DBCF630370AF2F00C91783 /* Flac_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Flac_Prefix.pch; sourceTree = ""; }; 8301C145287805F500651A6E /* NSDictionary+Merge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+Merge.h"; path = "../../Utils/NSDictionary+Merge.h"; sourceTree = ""; }; 8301C146287805F500651A6E /* NSDictionary+Merge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+Merge.m"; path = "../../Utils/NSDictionary+Merge.m"; sourceTree = ""; }; + 834A42B4287AF7AA00EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 8356BD1927B3CCBB0074E50C /* HTTPSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTTPSource.h; path = ../HTTPSource/HTTPSource.h; sourceTree = ""; }; 836EF0D927BB970B00BF35B2 /* libFLAC.8.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libFLAC.8.dylib; path = ../../ThirdParty/flac/lib/libFLAC.8.dylib; sourceTree = ""; }; 83747C4A2862DCF40021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; @@ -92,6 +93,7 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 834A42B4287AF7AA00EB9D9B /* AudioChunk.h */, 8301C145287805F500651A6E /* NSDictionary+Merge.h */, 8301C146287805F500651A6E /* NSDictionary+Merge.m */, 83AA660A27B7DAE40098D4B8 /* cuesheet.m */, @@ -285,6 +287,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -329,6 +332,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/Flac/FlacDecoder.m b/Plugins/Flac/FlacDecoder.m index 876682d9e..f594cec6d 100644 --- a/Plugins/Flac/FlacDecoder.m +++ b/Plugins/Flac/FlacDecoder.m @@ -361,39 +361,23 @@ void ErrorCallback(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorS return YES; } -- (int)readAudio:(void *)buffer frames:(UInt32)frames { - int framesRead = 0; - while(framesRead < frames) { - if(blockBufferFrames == 0) { - if(framesRead) { - break; - } +- (AudioChunk *)readAudio { + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = nil; - if(FLAC__stream_decoder_get_state(decoder) == FLAC__STREAM_DECODER_END_OF_STREAM) { - break; - } + if(FLAC__stream_decoder_get_state(decoder) == FLAC__STREAM_DECODER_END_OF_STREAM) { + return nil; + } - if(!FLAC__stream_decoder_process_single(decoder)) { - break; - } - } + if(!FLAC__stream_decoder_process_single(decoder)) { + return nil; + } - int bytesPerFrame = ((bitsPerSample + 7) / 8) * channels; + if(blockBufferFrames > 0) { + chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + [chunk assignSamples:blockBuffer frameCount:blockBufferFrames]; - int framesToRead = blockBufferFrames; - if(blockBufferFrames > frames) { - framesToRead = frames; - } - - memcpy(((uint8_t *)buffer) + (framesRead * bytesPerFrame), (uint8_t *)blockBuffer, framesToRead * bytesPerFrame); - - frames -= framesToRead; - framesRead += framesToRead; - blockBufferFrames -= framesToRead; - - if(blockBufferFrames > 0) { - memmove((uint8_t *)blockBuffer, ((uint8_t *)blockBuffer) + (framesToRead * bytesPerFrame), blockBufferFrames * bytesPerFrame); - } + blockBufferFrames = 0; } if(![source seekable]) { @@ -429,7 +413,7 @@ void ErrorCallback(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorS } } - return framesRead; + return chunk; } - (void)close { diff --git a/Plugins/GME/GME.xcodeproj/project.pbxproj b/Plugins/GME/GME.xcodeproj/project.pbxproj index 16850ecfe..ab8d184c8 100644 --- a/Plugins/GME/GME.xcodeproj/project.pbxproj +++ b/Plugins/GME/GME.xcodeproj/project.pbxproj @@ -63,9 +63,11 @@ 8319C74E237629D300BFFAE0 /* GamePropertiesReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GamePropertiesReader.h; sourceTree = ""; }; 8319C74F237629D400BFFAE0 /* GamePropertiesReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GamePropertiesReader.m; sourceTree = ""; }; 833F68351CDBCAB200AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; + 834A42B5287AF8FE00EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 835C888F22CC1883001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 83747C452862DCD90021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 8384912E1808175400E7332D /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../Utils/Logging.h; sourceTree = ""; }; + 83F0E6B6287CAB4100D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; 83FAF8A518ADD4D100057CAF /* PlaylistController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlaylistController.h; path = ../../Playlist/PlaylistController.h; sourceTree = ""; }; 8D5B49B6048680CD000E48DA /* GME.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GME.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -119,6 +121,7 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 834A42B5287AF8FE00EB9D9B /* AudioChunk.h */, 17C8F33B0CBED3BE008D969D /* GameContainer.h */, 17C8F33C0CBED3BE008D969D /* GameContainer.m */, 17C8F33D0CBED3BE008D969D /* GameDecoder.h */, @@ -231,6 +234,7 @@ en, es, Base, + pl, ); mainGroup = 089C166AFE841209C02AAC07 /* GME */; projectDirPath = ""; @@ -296,6 +300,7 @@ children = ( 833F68351CDBCAB200AFB9F0 /* es */, 835C888F22CC1883001B4B3F /* en */, + 83F0E6B6287CAB4100D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -351,6 +356,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -396,6 +402,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/GME/GameDecoder.m b/Plugins/GME/GameDecoder.m index cec7ae0fa..528669e23 100644 --- a/Plugins/GME/GameDecoder.m +++ b/Plugins/GME/GameDecoder.m @@ -174,11 +174,18 @@ gme_err_t readCallback(void *data, void *out, int count) { return @{}; } -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { + int frames = 1024; + int16_t buffer[frames * 2]; + void *buf = (void *)buffer; + + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + int numSamples = frames * 2; // channels = 2 if(gme_track_ended(emu)) { - return 0; + return nil; } if(IsRepeatOneSet()) @@ -190,7 +197,11 @@ gme_err_t readCallback(void *data, void *out, int count) { // Some formats support length, but we'll add that in the future. //(From gme.txt) If track length, then use it. If loop length, play for intro + loop * 2. Otherwise, default to 2.5 minutes - return frames; // GME will always generate samples. There's no real EOS. + // GME will always generate samples. There's no real EOS. + + [chunk assignSamples:buffer frameCount:numSamples]; + + return chunk; } - (long)seek:(long)frame { diff --git a/Plugins/GME/pl.lproj/InfoPlist.strings b/Plugins/GME/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..948e12b99 Binary files /dev/null and b/Plugins/GME/pl.lproj/InfoPlist.strings differ diff --git a/Plugins/HTTPSource/HTTPSource.xcodeproj/project.pbxproj b/Plugins/HTTPSource/HTTPSource.xcodeproj/project.pbxproj index 9c5d1cce6..93628d75a 100644 --- a/Plugins/HTTPSource/HTTPSource.xcodeproj/project.pbxproj +++ b/Plugins/HTTPSource/HTTPSource.xcodeproj/project.pbxproj @@ -32,6 +32,7 @@ 17ADB60C0B97A74800257CA2 /* HTTPSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HTTPSource.h; sourceTree = ""; }; 17ADB6340B97A8B400257CA2 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../Audio/Plugin.h; sourceTree = SOURCE_ROOT; }; 32DBCF630370AF2F00C91783 /* HTTPSource_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPSource_Prefix.pch; sourceTree = ""; }; + 834A42B9287AFAB500EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 8356BD1727B3B7340074E50C /* libcurl.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libcurl.tbd; path = usr/lib/libcurl.tbd; sourceTree = SDKROOT; }; 83747C362862DC0D0021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 8384912F1808180000E7332D /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../Utils/Logging.h; sourceTree = ""; }; @@ -87,6 +88,7 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 834A42B9287AFAB500EB9D9B /* AudioChunk.h */, 8384912F1808180000E7332D /* Logging.h */, 17ADB6340B97A8B400257CA2 /* Plugin.h */, 17ADB60C0B97A74800257CA2 /* HTTPSource.h */, @@ -273,6 +275,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -317,6 +320,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/HighlyComplete/HighlyComplete.xcodeproj/project.pbxproj b/Plugins/HighlyComplete/HighlyComplete.xcodeproj/project.pbxproj index 63c73eb59..75d4c9330 100644 --- a/Plugins/HighlyComplete/HighlyComplete.xcodeproj/project.pbxproj +++ b/Plugins/HighlyComplete/HighlyComplete.xcodeproj/project.pbxproj @@ -190,6 +190,7 @@ 8343790C17F96E2600584396 /* HighlyQuixotic.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = HighlyQuixotic.xcodeproj; path = ../../Frameworks/HighlyQuixotic/HighlyQuixotic.xcodeproj; sourceTree = ""; }; 8343796317F97BDB00584396 /* HighlyAdvanced.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = HighlyAdvanced.xcodeproj; path = ../../Frameworks/HighlyAdvanced/HighlyAdvanced.xcodeproj; sourceTree = ""; }; 834379A717F9818400584396 /* HCDecoder.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = HCDecoder.mm; sourceTree = ""; }; + 834A42B6287AF99600EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 8360EEE417F92AC8005208A4 /* HighlyComplete.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HighlyComplete.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 8360EEE717F92AC8005208A4 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; 8360EEEA17F92AC8005208A4 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -204,6 +205,7 @@ 83CA241E1D7BC47C00F2EA53 /* mGBA.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = mGBA.xcodeproj; path = ../../Frameworks/mGBA/mGBA.xcodeproj; sourceTree = ""; }; 83DE0C34180A9BD400269051 /* vio2sf.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = vio2sf.xcodeproj; path = ../../Frameworks/vio2sf/vio2sf.xcodeproj; sourceTree = ""; }; 83E2F4C923566B0C006F7A41 /* lazyusf2.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = lazyusf2.xcodeproj; path = ../../Frameworks/lazyusf2/lazyusf2.xcodeproj; sourceTree = ""; }; + 83F0E6B8287CAB4200D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; 83FAF8A318ADD27F00057CAF /* PlaylistController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlaylistController.h; path = ../../../Playlist/PlaylistController.h; sourceTree = ""; }; 83FC32591BF5AB9000962B36 /* HighlyExperimental.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = HighlyExperimental.xcodeproj; path = ../../Frameworks/HighlyExperimental/HighlyExperimental.xcodeproj; sourceTree = ""; }; /* End PBXFileReference section */ @@ -311,6 +313,7 @@ 8360EEED17F92AC8005208A4 /* HighlyComplete */ = { isa = PBXGroup; children = ( + 834A42B6287AF99600EB9D9B /* AudioChunk.h */, 83AA660827B7CCB00098D4B8 /* Logging.h */, 83FAF8A318ADD27F00057CAF /* PlaylistController.h */, 8324C584181513A10046F78F /* circular_buffer.h */, @@ -434,6 +437,7 @@ en, es, Base, + pl, ); mainGroup = 8360EEDB17F92AC8005208A4; productRefGroup = 8360EEE517F92AC8005208A4 /* Products */; @@ -619,6 +623,7 @@ isa = PBXVariantGroup; children = ( 8360EEF117F92AC8005208A4 /* en */, + 83F0E6B8287CAB4200D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -634,6 +639,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -689,6 +695,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/HighlyComplete/HighlyComplete/HCDecoder.mm b/Plugins/HighlyComplete/HighlyComplete/HCDecoder.mm index 432a219a2..1bcaafe87 100644 --- a/Plugins/HighlyComplete/HighlyComplete/HCDecoder.mm +++ b/Plugins/HighlyComplete/HighlyComplete/HCDecoder.mm @@ -72,7 +72,7 @@ - (psf_file_container *)init { if((self = [super init])) { lock = [[NSLock alloc] init]; - list = [[NSMutableDictionary alloc] initWithCapacity:0]; + list = [[NSMutableDictionary alloc] init]; } return self; } @@ -1302,7 +1302,7 @@ static int usf_info(void *context, const char *name, const char *value) { return frames; } -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { if(!emulatorCore) { if(![self initializeDecoder]) return 0; @@ -1314,6 +1314,10 @@ static int usf_info(void *context, const char *name, const char *value) { usfRemoveSilence = NO; } + int frames = 1024; + int16_t buffer[frames * 2]; + void *buf = (void *)buffer; + unsigned long written = silence_test_buffer.data_available() / 2; if(written > frames) written = frames; @@ -1342,7 +1346,11 @@ static int usf_info(void *context, const char *name, const char *value) { framesRead += written; - return (int)written; + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + [chunk assignSamples:buffer frameCount:written]; + + return chunk; } - (void)closeDecoder { diff --git a/Plugins/HighlyComplete/HighlyComplete/pl.lproj/InfoPlist.strings b/Plugins/HighlyComplete/HighlyComplete/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Plugins/HighlyComplete/HighlyComplete/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Plugins/Hively/Hively.xcodeproj/project.pbxproj b/Plugins/Hively/Hively.xcodeproj/project.pbxproj index 8a3ab56f4..0c34d4732 100644 --- a/Plugins/Hively/Hively.xcodeproj/project.pbxproj +++ b/Plugins/Hively/Hively.xcodeproj/project.pbxproj @@ -49,6 +49,7 @@ /* Begin PBXFileReference section */ 831C7F6918ADD73F00CE4A69 /* PlaylistController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlaylistController.h; path = ../../../Playlist/PlaylistController.h; sourceTree = ""; }; 833F68471CDBCABF00AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; + 834A42B8287AFA3600EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 836FB52D1820538700B3AD2D /* Hively.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hively.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 836FB5301820538700B3AD2D /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; 836FB5331820538700B3AD2D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -66,6 +67,7 @@ 836FB59F1820556F00B3AD2D /* HVLContainer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HVLContainer.m; sourceTree = ""; }; 836FB5A31820557E00B3AD2D /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../../Audio/Plugin.h; sourceTree = ""; }; 83747C3B2862DC450021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; + 83F0E6C0287CAB4200D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -122,6 +124,7 @@ 836FB5361820538700B3AD2D /* Hively */ = { isa = PBXGroup; children = ( + 834A42B8287AFA3600EB9D9B /* AudioChunk.h */, 831C7F6918ADD73F00CE4A69 /* PlaylistController.h */, 836FB5A31820557E00B3AD2D /* Plugin.h */, 836FB59A1820556F00B3AD2D /* HVLDecoder.h */, @@ -207,6 +210,7 @@ en, es, Base, + pl, ); mainGroup = 836FB5241820538700B3AD2D; productRefGroup = 836FB52E1820538700B3AD2D /* Products */; @@ -272,6 +276,7 @@ children = ( 836FB53A1820538700B3AD2D /* en */, 833F68471CDBCABF00AFB9F0 /* es */, + 83F0E6C0287CAB4200D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -287,6 +292,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -343,6 +349,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/Hively/Hively/HVLDecoder.m b/Plugins/Hively/Hively/HVLDecoder.m index d6747800b..b56c4ad98 100644 --- a/Plugins/Hively/Hively/HVLDecoder.m +++ b/Plugins/Hively/Hively/HVLDecoder.m @@ -107,7 +107,11 @@ static void oneTimeInit(void) { return @{}; } -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { + int frames = 1024; + float buffer[frames * 2]; + void *buf = (void *)buffer; + BOOL repeatone = IsRepeatOneSet(); if(!repeatone && framesRead >= totalFrames) @@ -157,7 +161,11 @@ static void oneTimeInit(void) { framesRead += total; - return total; + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + [chunk assignSamples:buffer frameCount:total]; + + return chunk; } - (long)seek:(long)frame { diff --git a/Plugins/Hively/Hively/pl.lproj/InfoPlist.strings b/Plugins/Hively/Hively/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Plugins/Hively/Hively/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Plugins/M3u/M3u.xcodeproj/project.pbxproj b/Plugins/M3u/M3u.xcodeproj/project.pbxproj index a45a1c9c3..9ace2719c 100644 --- a/Plugins/M3u/M3u.xcodeproj/project.pbxproj +++ b/Plugins/M3u/M3u.xcodeproj/project.pbxproj @@ -18,9 +18,11 @@ 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 32DBCF630370AF2F00C91783 /* M3u_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = M3u_Prefix.pch; sourceTree = ""; }; 833F68391CDBCAB200AFB9F0 /* es */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; + 834A42BA287AFAEF00EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 835C889122CC1885001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 83747C2C2862DBBE0021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 83849130180818B100E7332D /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../Utils/Logging.h; sourceTree = ""; }; + 83F0E6C3287CAB4300D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; 8D5B49B6048680CD000E48DA /* M3u.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = M3u.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8E8D401B0CBAFEF200135C1B /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../Audio/Plugin.h; sourceTree = SOURCE_ROOT; }; @@ -75,6 +77,7 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 834A42BA287AFAEF00EB9D9B /* AudioChunk.h */, 83849130180818B100E7332D /* Logging.h */, 8E8D401B0CBAFEF200135C1B /* Plugin.h */, 8E8D40270CBAFF4300135C1B /* M3uContainer.h */, @@ -169,6 +172,7 @@ en, es, Base, + pl, ); mainGroup = 089C166AFE841209C02AAC07 /* M3u */; projectDirPath = ""; @@ -207,6 +211,7 @@ children = ( 833F68391CDBCAB200AFB9F0 /* es */, 835C889122CC1885001B4B3F /* en */, + 83F0E6C3287CAB4300D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -265,6 +270,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -308,6 +314,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/M3u/pl.lproj/InfoPlist.strings b/Plugins/M3u/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..99142f9ac Binary files /dev/null and b/Plugins/M3u/pl.lproj/InfoPlist.strings differ diff --git a/Plugins/MAD/MAD.xcodeproj/project.pbxproj b/Plugins/MAD/MAD.xcodeproj/project.pbxproj index b1fc88e11..38917b0ad 100644 --- a/Plugins/MAD/MAD.xcodeproj/project.pbxproj +++ b/Plugins/MAD/MAD.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 834A42BB287AFB0700EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 8372C92327C785BD00E250C9 /* MAD.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MAD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 8372C93327C7861300E250C9 /* MADDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MADDecoder.h; sourceTree = ""; }; 8372C93427C7861300E250C9 /* MADDecoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MADDecoder.m; sourceTree = ""; }; @@ -48,6 +49,7 @@ children = ( 83747C262862DB9F0021245F /* Xcode-config */, 83F97B6628600F9300A70B97 /* ThirdParty */, + 834A42BB287AFB0700EB9D9B /* AudioChunk.h */, 8372C93A27C786DD00E250C9 /* HTTPSource.h */, 8372C93927C7866B00E250C9 /* Logging.h */, 8372C93827C7865A00E250C9 /* Plugin.h */, diff --git a/Plugins/MAD/MADDecoder.m b/Plugins/MAD/MADDecoder.m index 52b8cc680..44914feb7 100644 --- a/Plugins/MAD/MADDecoder.m +++ b/Plugins/MAD/MADDecoder.m @@ -470,7 +470,7 @@ return ret; } -- (void)writeOutput { +- (BOOL)writeOutput { unsigned long startingSample = 0; unsigned long sampleCount = _synth.pcm.length; @@ -485,7 +485,7 @@ // Past the end of the file. if(totalFrames - _endPadding <= _framesDecoded) { // DLog(@"End of file. Not writing."); - return; + return YES; } // Clip this for the following calculation, so this doesn't underflow @@ -497,6 +497,11 @@ // DLog(@"End of file. %li", totalFrames - _endPadding - _framesDecoded); sampleCount = totalFrames - _endPadding - _framesDecoded + startingSample; } + } else { + // Past the end of the file. + if(totalFrames <= _framesDecoded) { + return YES; + } } // We haven't even gotten to the start yet @@ -504,7 +509,7 @@ // DLog(@"Skipping entire sample"); _framesDecoded += sampleCount; framesToSkip -= sampleCount; - return; + return NO; } framesToSkip = 0; @@ -536,6 +541,8 @@ // FILE *f = fopen("data.raw", "a"); // fwrite(_outputBuffer, channels * 2, _outputFrames, f); // fclose(f); + + return NO; } - (int)decodeMPEGFrame { @@ -651,7 +658,7 @@ return 1; } -- (BOOL)syncFormat:(BOOL)updateNow { +- (BOOL)syncFormat { float _sampleRate = _frame.header.samplerate; int _channels = MAD_NCHANNELS(&_frame.header); int _layer = 3; @@ -674,7 +681,7 @@ _channels != channels || _layer != layer); - if(changed && updateNow) { + if(changed) { sampleRate = _sampleRate; channels = _channels; layer = _layer; @@ -686,29 +693,22 @@ return changed; } -- (int)readAudio:(void *)buffer frames:(UInt32)frames { - int framesRead = 0; - +- (AudioChunk *)readAudio { if(!_firstFrame) - [self syncFormat:YES]; + [self syncFormat]; + + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = nil; for(;;) { - long framesRemaining = frames - framesRead; - long framesToCopy = (_outputFrames > framesRemaining ? framesRemaining : _outputFrames); + long framesToCopy = _outputFrames; if(framesToCopy) { - memcpy(buffer + (framesRead * channels * sizeof(float)), _outputBuffer, framesToCopy * channels * sizeof(float)); - framesRead += framesToCopy; - - if(framesToCopy != _outputFrames) { - memmove(_outputBuffer, _outputBuffer + (framesToCopy * channels), (_outputFrames - framesToCopy) * channels * sizeof(float)); - } - - _outputFrames -= framesToCopy; - } - - if(framesRead == frames) + chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + [chunk assignSamples:_outputBuffer frameCount:framesToCopy]; + _outputFrames = 0; break; + } int r = [self decodeMPEGFrame]; // DLog(@"Decoding frame: %i", r); @@ -717,21 +717,18 @@ else if(r == -1) // Unrecoverable error break; - [self writeOutput]; + if([self writeOutput]) { + return nil; + } // DLog(@"Wrote output"); - if([self syncFormat:NO]) { - if(framesRead) - break; - else - [self syncFormat:YES]; - } + [self syncFormat]; } [self updateMetadata]; // DLog(@"Read: %i/%i", bytesRead, size); - return framesRead; + return chunk; } - (void)close { diff --git a/Plugins/MIDI/MIDI.xcodeproj/project.pbxproj b/Plugins/MIDI/MIDI.xcodeproj/project.pbxproj index a78c67989..90141ffda 100644 --- a/Plugins/MIDI/MIDI.xcodeproj/project.pbxproj +++ b/Plugins/MIDI/MIDI.xcodeproj/project.pbxproj @@ -99,6 +99,7 @@ 831E2A9427B4B2FA006F1C86 /* json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = json.h; sourceTree = ""; }; 831E2A9527B4B2FA006F1C86 /* json-builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "json-builder.h"; sourceTree = ""; }; 833F68431CDBCABE00AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; + 834A42BC287AFC7F00EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 834BE9191DE407CB00A07DCD /* resampler.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = resampler.c; sourceTree = ""; }; 834BE91A1DE407CB00A07DCD /* resampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = resampler.h; sourceTree = ""; }; 8356BCC427B352620074E50C /* BMPlayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BMPlayer.cpp; sourceTree = ""; }; @@ -154,6 +155,7 @@ 83C35704180EDD1C007E9DF0 /* MIDIMetadataReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MIDIMetadataReader.h; sourceTree = ""; }; 83E973451C4378880007F413 /* AUPlayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AUPlayer.mm; sourceTree = ""; }; 83E973461C4378880007F413 /* AUPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUPlayer.h; sourceTree = ""; }; + 83F0E6C4287CAB4300D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; 83FAF8A618ADD60100057CAF /* PlaylistController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlaylistController.h; path = ../../../Playlist/PlaylistController.h; sourceTree = ""; }; /* End PBXFileReference section */ @@ -306,6 +308,7 @@ 83B06690180D5668008E3612 /* MIDI */ = { isa = PBXGroup; children = ( + 834A42BC287AFC7F00EB9D9B /* AudioChunk.h */, 8307D31E28607377000FF8EB /* SandboxBroker.h */, 831E2A9127B4B2FA006F1C86 /* json */, 831E2A7D27B4B2B2006F1C86 /* BASS */, @@ -403,6 +406,7 @@ en, es, Base, + pl, ); mainGroup = 83B0667E180D5668008E3612; productRefGroup = 83B06688180D5668008E3612 /* Products */; @@ -482,6 +486,7 @@ children = ( 83B06694180D5668008E3612 /* en */, 833F68431CDBCABE00AFB9F0 /* es */, + 83F0E6C4287CAB4300D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -497,6 +502,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -553,6 +559,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/MIDI/MIDI/MIDIDecoder.mm b/Plugins/MIDI/MIDI/MIDIDecoder.mm index 1da27f543..2e7b01a60 100644 --- a/Plugins/MIDI/MIDI/MIDIDecoder.mm +++ b/Plugins/MIDI/MIDI/MIDIDecoder.mm @@ -276,14 +276,14 @@ static OSType getOSType(const char *in_) { return YES; } -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { BOOL repeatone = IsRepeatOneSet(); long localFramesLength = framesLength; long localTotalFrames = totalFrames; if(!player) { if(![self initDecoder]) - return -1; + return nil; } player->setLoopMode((repeatone || isLooped) ? (MIDIPlayer::loop_mode_enable | MIDIPlayer::loop_mode_force) : 0); @@ -302,7 +302,10 @@ static OSType getOSType(const char *in_) { soundFontsAssigned = YES; } - UInt32 frames_done = player->Play((float *)buf, frames); + int frames = 1024; + float buffer[frames * 2]; + + UInt32 frames_done = player->Play(buffer, frames); if(!frames_done) return 0; @@ -315,7 +318,7 @@ static OSType getOSType(const char *in_) { long fadeEnd = (framesRead + frames > localTotalFrames) ? localTotalFrames : (framesRead + frames); long fadePos; - float *buff = (float *)buf; + float *buff = buffer; float fadeScale = (float)(framesFade - (fadeStart - localFramesLength)) / framesFade; float fadeStep = 1.0 / (float)framesFade; @@ -337,13 +340,17 @@ static OSType getOSType(const char *in_) { } framesRead += frames; - return frames; + + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + [chunk assignSamples:buffer frameCount:frames]; + + return chunk; } - (long)seek:(long)frame { if(!player) { - float temp[2]; - if([self readAudio:temp frames:1] < 1) + if(![self readAudio]) return -1; } diff --git a/Plugins/MIDI/MIDI/pl.lproj/InfoPlist.strings b/Plugins/MIDI/MIDI/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Plugins/MIDI/MIDI/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Plugins/Musepack/Musepack.xcodeproj/project.pbxproj b/Plugins/Musepack/Musepack.xcodeproj/project.pbxproj index 2d5d4fcb7..bb54d933a 100644 --- a/Plugins/Musepack/Musepack.xcodeproj/project.pbxproj +++ b/Plugins/Musepack/Musepack.xcodeproj/project.pbxproj @@ -51,6 +51,7 @@ 1703330A0B8FB64500327265 /* MusepackDecoder.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MusepackDecoder.m; sourceTree = ""; }; 17F562570C3BD97B0019975C /* MPCDec.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = MPCDec.xcodeproj; path = ../../Frameworks/MPCDec/MPCDec.xcodeproj; sourceTree = SOURCE_ROOT; }; 32DBCF630370AF2F00C91783 /* Musepack_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Musepack_Prefix.pch; sourceTree = ""; }; + 834A42BD287AFD0D00EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 83747C1D2862DB560021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 838491311808190400E7332D /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../Utils/Logging.h; sourceTree = ""; }; 8D5B49B6048680CD000E48DA /* Musepack.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Musepack.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -105,6 +106,7 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 834A42BD287AFD0D00EB9D9B /* AudioChunk.h */, 838491311808190400E7332D /* Logging.h */, 8E2B8B4A0B9B48D000F2D9E8 /* Plugin.h */, 170333090B8FB64500327265 /* MusepackDecoder.h */, @@ -323,6 +325,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -367,6 +370,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/Musepack/MusepackDecoder.m b/Plugins/Musepack/MusepackDecoder.m index 263c3abdf..8cdf86fda 100644 --- a/Plugins/Musepack/MusepackDecoder.m +++ b/Plugins/Musepack/MusepackDecoder.m @@ -109,11 +109,15 @@ mpc_bool_t CanSeekProc(mpc_reader *p_reader) { return YES; } -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { MPC_SAMPLE_FORMAT sampleBuffer[MPC_DECODER_BUFFER_LENGTH]; + int frames = 1024; + float buffer[frames * 2]; + void *buf = (void *)buffer; + int framesRead = 0; - int bytesPerFrame = sizeof(float) * 2; // bitsPerSample == 16, channels == 2 + int bytesPerFrame = sizeof(float) * 2; // bitsPerSample == 32, channels == 2 while(framesRead < frames) { // Fill from buffer, going by bufferFrames // if still needs more, decode and repeat @@ -150,7 +154,11 @@ mpc_bool_t CanSeekProc(mpc_reader *p_reader) { } } - return framesRead; + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + [chunk assignSamples:buffer frameCount:framesRead]; + + return chunk; } - (void)close { diff --git a/Plugins/OpenMPT/OpenMPT.xcodeproj/project.pbxproj b/Plugins/OpenMPT/OpenMPT.xcodeproj/project.pbxproj index 3ba706b64..993436f50 100644 --- a/Plugins/OpenMPT/OpenMPT.xcodeproj/project.pbxproj +++ b/Plugins/OpenMPT/OpenMPT.xcodeproj/project.pbxproj @@ -48,6 +48,7 @@ /* Begin PBXFileReference section */ 833A899B286FF3150022E036 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 834A42BE287AFDC300EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 83747C182862DB2F0021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 83E5EFA31FFEF78100659F0F /* OpenMPT.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OpenMPT.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 83E5EFA61FFEF78100659F0F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -124,6 +125,7 @@ 83E5FE6A1FFF003900659F0F /* Classes */ = { isa = PBXGroup; children = ( + 834A42BE287AFDC300EB9D9B /* AudioChunk.h */, 83E5FE6B1FFF004D00659F0F /* Logging.h */, 83E5FE761FFF076F00659F0F /* PlaylistController.h */, 83E5FE6C1FFF006400659F0F /* Plugin.h */, diff --git a/Plugins/OpenMPT/OpenMPT/OMPTDecoder.mm b/Plugins/OpenMPT/OpenMPT/OMPTDecoder.mm index db410f2b5..ca2226cda 100644 --- a/Plugins/OpenMPT/OpenMPT/OMPTDecoder.mm +++ b/Plugins/OpenMPT/OpenMPT/OMPTDecoder.mm @@ -112,9 +112,13 @@ static void g_push_archive_extensions(std::vector &list) { return @{}; } -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { mod->set_repeat_count(IsRepeatOneSet() ? -1 : 0); + int frames = 1024; + float buffer[frames * 2]; + void *buf = (void *)buffer; + int total = 0; while(total < frames) { int framesToRender = 1024; @@ -131,7 +135,11 @@ static void g_push_archive_extensions(std::vector &list) { break; } - return total; + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + [chunk assignSamples:buffer frameCount:total]; + + return chunk; } - (long)seek:(long)frame { diff --git a/Plugins/Opus/Opus/OpusDecoder.m b/Plugins/Opus/Opus/OpusDecoder.m index d625f9524..6c92cbaa3 100644 --- a/Plugins/Opus/Opus/OpusDecoder.m +++ b/Plugins/Opus/Opus/OpusDecoder.m @@ -222,7 +222,7 @@ static void setDictionary(NSMutableDictionary *dict, NSString *tag, NSString *va } } -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { int numread; int total = 0; @@ -236,7 +236,10 @@ static void setDictionary(NSMutableDictionary *dict, NSString *tag, NSString *va [self updateMetadata]; } + int frames = 1024; int size = frames * channels; + float buffer[size]; + void *buf = (void *)buffer; do { float *out = ((float *)buf) + total; @@ -265,7 +268,11 @@ static void setDictionary(NSMutableDictionary *dict, NSString *tag, NSString *va [self updateIcyMetadata]; - return total / channels; + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + [chunk assignSamples:buffer frameCount:total / channels]; + + return chunk; } - (void)close { diff --git a/Plugins/Opus/Opus/pl.lproj/InfoPlist.strings b/Plugins/Opus/Opus/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Plugins/Opus/Opus/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Plugins/Opus/OpusPlugin.xcodeproj/project.pbxproj b/Plugins/Opus/OpusPlugin.xcodeproj/project.pbxproj index 14c5d0bec..ade5acd5f 100644 --- a/Plugins/Opus/OpusPlugin.xcodeproj/project.pbxproj +++ b/Plugins/Opus/OpusPlugin.xcodeproj/project.pbxproj @@ -32,6 +32,7 @@ 83186314285CEC91001422CC /* NSDictionary+Merge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+Merge.h"; path = "../../../Utils/NSDictionary+Merge.h"; sourceTree = ""; }; 83186315285CEC91001422CC /* NSDictionary+Merge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+Merge.m"; path = "../../../Utils/NSDictionary+Merge.m"; sourceTree = ""; }; 833F68411CDBCABC00AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; + 834A42BF287AFE2600EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 8356BD1B27B469B80074E50C /* HTTPSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTTPSource.h; path = ../../HTTPSource/HTTPSource.h; sourceTree = ""; }; 836EF0CE27BB952F00BF35B2 /* libopusfile.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libopusfile.0.dylib; path = ../../ThirdParty/opusfile/lib/libopusfile.0.dylib; sourceTree = ""; }; 83747C0E2862DAC70021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; @@ -47,6 +48,7 @@ 8375B36B17FFF1CB0092A79F /* OpusDecoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OpusDecoder.m; sourceTree = ""; }; 8375B36D17FFF1FE0092A79F /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../../Audio/Plugin.h; sourceTree = ""; }; 8384913718081F2700E7332D /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../../Utils/Logging.h; sourceTree = ""; }; + 83F0E6C7287CAB4300D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -114,6 +116,7 @@ 8375B04517FFEA400092A79F /* Opus */ = { isa = PBXGroup; children = ( + 834A42BF287AFE2600EB9D9B /* AudioChunk.h */, 83186314285CEC91001422CC /* NSDictionary+Merge.h */, 83186315285CEC91001422CC /* NSDictionary+Merge.m */, 8356BD1B27B469B80074E50C /* HTTPSource.h */, @@ -180,6 +183,7 @@ en, es, Base, + pl, ); mainGroup = 8375B03317FFEA400092A79F; productRefGroup = 8375B03D17FFEA400092A79F /* Products */; @@ -220,6 +224,7 @@ children = ( 8375B04917FFEA400092A79F /* en */, 833F68411CDBCABC00AFB9F0 /* es */, + 83F0E6C7287CAB4300D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -235,6 +240,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -291,6 +297,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/Pls/Pls.xcodeproj/project.pbxproj b/Plugins/Pls/Pls.xcodeproj/project.pbxproj index b7c8c42a8..d1cf82b14 100644 --- a/Plugins/Pls/Pls.xcodeproj/project.pbxproj +++ b/Plugins/Pls/Pls.xcodeproj/project.pbxproj @@ -18,9 +18,11 @@ 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 32DBCF630370AF2F00C91783 /* Pls_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pls_Prefix.pch; sourceTree = ""; }; 833F68381CDBCAB200AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; + 834A42C0287AFEB100EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 835C889422CC1887001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 83747C092862DAA90021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 838491321808193F00E7332D /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../Utils/Logging.h; sourceTree = ""; }; + 83F0E6C8287CAB4300D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; 8D5B49B6048680CD000E48DA /* Pls.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pls.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8E8D419F0CBB0CA700135C1B /* PlsContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlsContainer.h; sourceTree = ""; }; @@ -75,6 +77,7 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 834A42C0287AFEB100EB9D9B /* AudioChunk.h */, 838491321808193F00E7332D /* Logging.h */, 8E8D41A50CBB0CBE00135C1B /* Plugin.h */, 8E8D419F0CBB0CA700135C1B /* PlsContainer.h */, @@ -169,6 +172,7 @@ en, es, Base, + pl, ); mainGroup = 089C166AFE841209C02AAC07 /* Pls */; projectDirPath = ""; @@ -207,6 +211,7 @@ children = ( 833F68381CDBCAB200AFB9F0 /* es */, 835C889422CC1887001B4B3F /* en */, + 83F0E6C8287CAB4300D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -262,6 +267,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -305,6 +311,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/Pls/pl.lproj/InfoPlist.strings b/Plugins/Pls/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..99142f9ac Binary files /dev/null and b/Plugins/Pls/pl.lproj/InfoPlist.strings differ diff --git a/Plugins/Shorten/Shorten.xcodeproj/project.pbxproj b/Plugins/Shorten/Shorten.xcodeproj/project.pbxproj index 922a04e77..6bd680791 100644 --- a/Plugins/Shorten/Shorten.xcodeproj/project.pbxproj +++ b/Plugins/Shorten/Shorten.xcodeproj/project.pbxproj @@ -52,6 +52,7 @@ 177FCFAC0B90C96B0011C3B5 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../Audio/Plugin.h; sourceTree = SOURCE_ROOT; }; 17F563DD0C3BDBF10019975C /* Shorten.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Shorten.xcodeproj; path = ../../Frameworks/Shorten/Shorten.xcodeproj; sourceTree = SOURCE_ROOT; }; 32DBCF630370AF2F00C91783 /* Shorten_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Shorten_Prefix.pch; sourceTree = ""; }; + 834A42A9287AEF1300EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 83747C042862DA780021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 8D5B49B6048680CD000E48DA /* Shorten.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Shorten.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -104,6 +105,7 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 834A42A9287AEF1300EB9D9B /* AudioChunk.h */, 177FCFAC0B90C96B0011C3B5 /* Plugin.h */, 1745C42B0B90C1DC00A6768C /* ShortenDecoder.h */, 1745C42C0B90C1DC00A6768C /* ShortenDecoder.mm */, @@ -321,6 +323,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -365,6 +368,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/Shorten/ShortenDecoder.mm b/Plugins/Shorten/ShortenDecoder.mm index 222cc3ee6..f1fa809c8 100644 --- a/Plugins/Shorten/ShortenDecoder.mm +++ b/Plugins/Shorten/ShortenDecoder.mm @@ -41,16 +41,25 @@ return YES; } -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { + long frames = 1024; long bytesPerFrame = channels * (bitsPerSample / 8); long amountRead; + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + + uint8_t buffer[bytesPerFrame * 1024]; + void *buf = (void *)buffer; + // For some reason a busy loop is causing pops when output is set to 48000. Probably CPU starvation, since the SHN decoder seems to use a multithreaded nonblocking approach. do { amountRead = decoder->read(buf, frames * bytesPerFrame); } while(amountRead == -1); - return (int)(amountRead / bytesPerFrame); + [chunk assignSamples:buf frameCount:amountRead / bytesPerFrame]; + + return chunk; } - (long)seek:(long)sample { diff --git a/Plugins/SilenceDecoder/SilenceDecoder.xcodeproj/project.pbxproj b/Plugins/SilenceDecoder/SilenceDecoder.xcodeproj/project.pbxproj index c68a1b3a9..d48a77452 100644 --- a/Plugins/SilenceDecoder/SilenceDecoder.xcodeproj/project.pbxproj +++ b/Plugins/SilenceDecoder/SilenceDecoder.xcodeproj/project.pbxproj @@ -12,6 +12,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 834A42C1287AFED700EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 83747BFA2862D95C0021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 83F9D7E71A884B44007ABEC2 /* SilenceDecoder.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SilenceDecoder.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 83F9D7EB1A884B44007ABEC2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -64,6 +65,7 @@ 83F9D7E91A884B44007ABEC2 /* SilenceDecoder */ = { isa = PBXGroup; children = ( + 834A42C1287AFED700EB9D9B /* AudioChunk.h */, 83F9D8091A884CB5007ABEC2 /* Logging.h */, 83F9D8081A884C93007ABEC2 /* Plugin.h */, 83F9D8041A884C23007ABEC2 /* PlaylistController.h */, diff --git a/Plugins/SilenceDecoder/SilenceDecoder/SilenceDecoder.m b/Plugins/SilenceDecoder/SilenceDecoder/SilenceDecoder.m index b049dc5cd..a7a1b4e17 100644 --- a/Plugins/SilenceDecoder/SilenceDecoder/SilenceDecoder.m +++ b/Plugins/SilenceDecoder/SilenceDecoder/SilenceDecoder.m @@ -50,7 +50,11 @@ enum { channels = 2 }; return @{}; } -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { + int frames = 1024; + float buffer[frames * channels]; + void *buf = (void *)buffer; + int total = frames; if(!IsRepeatOneSet()) { @@ -62,7 +66,11 @@ enum { channels = 2 }; memset(buf, 0, sizeof(float) * total * channels); - return total; + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + [chunk assignSamples:buffer frameCount:total]; + + return chunk; } - (long)seek:(long)frame { diff --git a/Plugins/TagLib/TagLib.xcodeproj/project.pbxproj b/Plugins/TagLib/TagLib.xcodeproj/project.pbxproj index 2d9821cdd..7f142aac0 100644 --- a/Plugins/TagLib/TagLib.xcodeproj/project.pbxproj +++ b/Plugins/TagLib/TagLib.xcodeproj/project.pbxproj @@ -12,6 +12,7 @@ 17F563B40C3BDBB30019975C /* TagLib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17F563A60C3BDB8F0019975C /* TagLib.framework */; }; 17F563B60C3BDBB50019975C /* TagLib.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 17F563A60C3BDB8F0019975C /* TagLib.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 8307D31D286072BF000FF8EB /* SandboxBroker.h in Headers */ = {isa = PBXBuildFile; fileRef = 8307D31C286072BF000FF8EB /* SandboxBroker.h */; }; + 834A42C3287AFF5E00EB9D9B /* AudioChunk.h in Headers */ = {isa = PBXBuildFile; fileRef = 834A42C2287AFF5E00EB9D9B /* AudioChunk.h */; }; 8356BCE527B377C20074E50C /* TagLibID3v2Reader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8356BCE327B377C20074E50C /* TagLibID3v2Reader.h */; }; 8356BCE627B377C20074E50C /* TagLibID3v2Reader.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8356BCE427B377C20074E50C /* TagLibID3v2Reader.mm */; }; 8384913A18081FFC00E7332D /* Logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 8384913918081FFC00E7332D /* Logging.h */; }; @@ -60,6 +61,7 @@ 17F563A00C3BDB8F0019975C /* TagLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = TagLib.xcodeproj; path = ../../Frameworks/TagLib/TagLib.xcodeproj; sourceTree = SOURCE_ROOT; }; 32DBCF630370AF2F00C91783 /* TagLib_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TagLib_Prefix.pch; sourceTree = ""; }; 8307D31C286072BF000FF8EB /* SandboxBroker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SandboxBroker.h; path = ../../Utils/SandboxBroker.h; sourceTree = ""; }; + 834A42C2287AFF5E00EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 8356BCE327B377C20074E50C /* TagLibID3v2Reader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TagLibID3v2Reader.h; sourceTree = ""; }; 8356BCE427B377C20074E50C /* TagLibID3v2Reader.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = TagLibID3v2Reader.mm; sourceTree = ""; }; 83747BF52862D9470021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; @@ -115,6 +117,7 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 834A42C2287AFF5E00EB9D9B /* AudioChunk.h */, 8307D31C286072BF000FF8EB /* SandboxBroker.h */, 8384913918081FFC00E7332D /* Logging.h */, 07CACE890ED1AD1000C0F1E8 /* TagLibMetadataWriter.h */, @@ -188,6 +191,7 @@ buildActionMask = 2147483647; files = ( 8384913A18081FFC00E7332D /* Logging.h in Headers */, + 834A42C3287AFF5E00EB9D9B /* AudioChunk.h in Headers */, 8307D31D286072BF000FF8EB /* SandboxBroker.h in Headers */, 8356BCE527B377C20074E50C /* TagLibID3v2Reader.h in Headers */, ); @@ -357,6 +361,7 @@ ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -402,6 +407,7 @@ ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/Vorbis/VorbisDecoder.m b/Plugins/Vorbis/VorbisDecoder.m index 410ed5641..a89b0e770 100644 --- a/Plugins/Vorbis/VorbisDecoder.m +++ b/Plugins/Vorbis/VorbisDecoder.m @@ -200,9 +200,10 @@ static void setDictionary(NSMutableDictionary *dict, NSString *tag, NSString *va } } -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { int numread; int total = 0; + int frames = 1024; if(currentSection != lastSection) { vorbis_info *vi; @@ -218,6 +219,12 @@ static void setDictionary(NSMutableDictionary *dict, NSString *tag, NSString *va [self updateMetadata]; } + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + + float buffer[frames * channels]; + void *buf = (void *)buffer; + do { lastSection = currentSection; float **pcm; @@ -247,7 +254,9 @@ static void setDictionary(NSMutableDictionary *dict, NSString *tag, NSString *va [self updateIcyMetadata]; - return total; + [chunk assignSamples:buffer frameCount:total]; + + return chunk; } - (void)close { diff --git a/Plugins/Vorbis/VorbisPlugin.xcodeproj/project.pbxproj b/Plugins/Vorbis/VorbisPlugin.xcodeproj/project.pbxproj index 8a425bcc4..68ac88223 100644 --- a/Plugins/Vorbis/VorbisPlugin.xcodeproj/project.pbxproj +++ b/Plugins/Vorbis/VorbisPlugin.xcodeproj/project.pbxproj @@ -28,6 +28,7 @@ 8301C14A287810F300651A6E /* libFLAC.8.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libFLAC.8.dylib; path = ../../ThirdParty/flac/lib/libFLAC.8.dylib; sourceTree = ""; }; 83186311285CEBD2001422CC /* NSDictionary+Merge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+Merge.h"; path = "../../Utils/NSDictionary+Merge.h"; sourceTree = ""; }; 83186312285CEBD2001422CC /* NSDictionary+Merge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+Merge.m"; path = "../../Utils/NSDictionary+Merge.m"; sourceTree = ""; }; + 834A42AB287AF0B000EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 8356BD1C27B46A2D0074E50C /* HTTPSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTTPSource.h; path = ../HTTPSource/HTTPSource.h; sourceTree = ""; }; 836EF0D427BB969D00BF35B2 /* libvorbisfile.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libvorbisfile.3.dylib; path = ../../ThirdParty/vorbis/lib/libvorbisfile.3.dylib; sourceTree = ""; }; 836EF0DE27BB987000BF35B2 /* libvorbis.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libvorbis.0.dylib; path = ../../ThirdParty/vorbis/lib/libvorbis.0.dylib; sourceTree = ""; }; @@ -92,6 +93,7 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 834A42AB287AF0B000EB9D9B /* AudioChunk.h */, 83186311285CEBD2001422CC /* NSDictionary+Merge.h */, 83186312285CEBD2001422CC /* NSDictionary+Merge.m */, 8356BD1C27B46A2D0074E50C /* HTTPSource.h */, @@ -354,6 +356,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -398,6 +401,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/WavPack/WavPack.xcodeproj/project.pbxproj b/Plugins/WavPack/WavPack.xcodeproj/project.pbxproj index 282a6f43e..16a29f5dd 100644 --- a/Plugins/WavPack/WavPack.xcodeproj/project.pbxproj +++ b/Plugins/WavPack/WavPack.xcodeproj/project.pbxproj @@ -52,6 +52,7 @@ 177FCF940B90C9450011C3B5 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../Audio/Plugin.h; sourceTree = SOURCE_ROOT; }; 17F562C20C3BDA5A0019975C /* WavPack.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = WavPack.xcodeproj; path = ../../Frameworks/WavPack/WavPack.xcodeproj; sourceTree = SOURCE_ROOT; }; 32DBCF630370AF2F00C91783 /* WavPack_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WavPack_Prefix.pch; sourceTree = ""; }; + 834A42AA287AEFC300EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 83747BE62862D8D60021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 83849133180819EB00E7332D /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../Utils/Logging.h; sourceTree = ""; }; 8D5B49B6048680CD000E48DA /* WavPack.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WavPack.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -105,6 +106,7 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 834A42AA287AEFC300EB9D9B /* AudioChunk.h */, 83849133180819EB00E7332D /* Logging.h */, 177FCF940B90C9450011C3B5 /* Plugin.h */, 1745C4D50B90C42500A6768C /* WavPackDecoder.h */, @@ -325,6 +327,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -369,6 +372,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/WavPack/WavPackDecoder.m b/Plugins/WavPack/WavPackDecoder.m index 8b6b8e2e1..99d41b5c1 100644 --- a/Plugins/WavPack/WavPackDecoder.m +++ b/Plugins/WavPack/WavPackDecoder.m @@ -196,7 +196,12 @@ int32_t WriteBytesProc(void *ds, void *data, int32_t bcount) { return n; } */ -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { + int32_t frames = 1024; + + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + uint32_t sample; int32_t audioSample; uint32_t samplesRead; @@ -204,6 +209,10 @@ int32_t WriteBytesProc(void *ds, void *data, int32_t bcount) { int16_t *alias16; int32_t *alias32; + const size_t bufferSize = frames * [chunk format].mBytesPerFrame; + uint8_t buffer[bufferSize]; + void *buf = (void *)buffer; + size_t newSize = frames * sizeof(int32_t) * channels; if(!inputBuffer || newSize > inputBufferSize) { inputBuffer = realloc(inputBuffer, inputBufferSize = newSize); @@ -248,7 +257,9 @@ int32_t WriteBytesProc(void *ds, void *data, int32_t bcount) { ALog(@"Unsupported sample size: %d", bitsPerSample); } - return samplesRead; + [chunk assignSamples:buffer frameCount:samplesRead]; + + return chunk; } - (long)seek:(long)frame { diff --git a/Plugins/libvgmPlayer/libvgmDecoder.mm b/Plugins/libvgmPlayer/libvgmDecoder.mm index 0c88639c4..61c45267b 100644 --- a/Plugins/libvgmPlayer/libvgmDecoder.mm +++ b/Plugins/libvgmPlayer/libvgmDecoder.mm @@ -208,9 +208,18 @@ const int masterVol = 0x10000; // Fixed point 16.16 return @{}; } -- (int)readAudio:(void*)buf frames:(UInt32)frames { +- (AudioChunk*)readAudio { if([self trackEnded]) - return 0; + return nil; + + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk* chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + + int frames = 1024; + const size_t bytesPerFrame = [chunk format].mBytesPerFrame; + uint8_t buffer[frames * bytesPerFrame]; + + void* buf = (void*)buffer; BOOL repeatOne = IsRepeatOneSet(); uint32_t maxLoops = repeatOne ? 0 : (uint32_t)loopCount; @@ -238,7 +247,9 @@ const int masterVol = 0x10000; // Fixed point 16.16 framesDone += framesToDo; } - return framesDone; + [chunk assignSamples:buffer frameCount:framesDone]; + + return chunk; } - (long)seek:(long)frame { diff --git a/Plugins/libvgmPlayer/libvgmPlayer.xcodeproj/project.pbxproj b/Plugins/libvgmPlayer/libvgmPlayer.xcodeproj/project.pbxproj index 9e14651ad..af6e605f4 100644 --- a/Plugins/libvgmPlayer/libvgmPlayer.xcodeproj/project.pbxproj +++ b/Plugins/libvgmPlayer/libvgmPlayer.xcodeproj/project.pbxproj @@ -40,9 +40,11 @@ 83489C602782F39D00BDCEA2 /* libvgm-player.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libvgm-player.a"; path = "../../ThirdParty/libvgm/lib/libvgm-player.a"; sourceTree = ""; }; 83489C652782F74800BDCEA2 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; 83489C672782F74E00BDCEA2 /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; }; + 834A42AC287AF18E00EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 835C888F22CC1883001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 83747C312862DBE80021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; 8384912E1808175400E7332D /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../Utils/Logging.h; sourceTree = ""; }; + 83F0E6C2287CAB4300D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; 83FAF8A518ADD4D100057CAF /* PlaylistController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlaylistController.h; path = ../../Playlist/PlaylistController.h; sourceTree = ""; }; 8D5B49B6048680CD000E48DA /* libvgmPlayer.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = libvgmPlayer.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -102,6 +104,7 @@ 08FB77AFFE84173DC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( + 834A42AC287AF18E00EB9D9B /* AudioChunk.h */, 17C8F33B0CBED3BE008D969D /* libvgmContainer.h */, 17C8F33C0CBED3BE008D969D /* libvgmContainer.mm */, 17C8F33D0CBED3BE008D969D /* libvgmDecoder.h */, @@ -222,6 +225,7 @@ en, es, Base, + pl, ); mainGroup = 089C166AFE841209C02AAC07 /* libvgmPlayer */; projectDirPath = ""; @@ -263,6 +267,7 @@ children = ( 833F68351CDBCAB200AFB9F0 /* es */, 835C888F22CC1883001B4B3F /* en */, + 83F0E6C2287CAB4300D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -322,6 +327,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -367,6 +373,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/libvgmPlayer/pl.lproj/InfoPlist.strings b/Plugins/libvgmPlayer/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..948e12b99 Binary files /dev/null and b/Plugins/libvgmPlayer/pl.lproj/InfoPlist.strings differ diff --git a/Plugins/sidplay/SidDecoder.mm b/Plugins/sidplay/SidDecoder.mm index 7c18ca2d8..3ef8a6668 100644 --- a/Plugins/sidplay/SidDecoder.mm +++ b/Plugins/sidplay/SidDecoder.mm @@ -62,7 +62,7 @@ static const char *extListStr[] = { ".str", NULL }; - (sid_file_container *)init { if((self = [super init])) { lock = [[NSLock alloc] init]; - list = [[NSMutableDictionary alloc] initWithCapacity:0]; + list = [[NSMutableDictionary alloc] init]; } return self; } @@ -275,59 +275,54 @@ static void sidTuneLoader(const char *fileName, std::vector &bufferRef) return @{}; } -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { int total = 0; - int16_t *sampleBuffer = (int16_t *)buf; - while(total < frames) { - int framesToRender = 1024; - if(framesToRender > frames) - framesToRender = frames; - int rendered = engine->play(sampleBuffer + total * n_channels, framesToRender * n_channels) / n_channels; + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; - if(rendered <= 0) - break; + int16_t buffer[1024 * n_channels]; - if(n_channels == 2) { - for(int i = 0, j = rendered * 2; i < j; i += 2) { - int16_t *sample = sampleBuffer + total * 2 + i; - int mid = (int)(sample[0] + sample[1]) / 2; - int side = (int)(sample[0] - sample[1]) / 4; - sample[0] = mid + side; - sample[1] = mid - side; - } + int framesToRender = 1024; + int rendered = engine->play(buffer, framesToRender * n_channels) / n_channels; + + if(rendered <= 0) + return nil; + + if(n_channels == 2) { + for(int i = 0, j = rendered * 2; i < j; i += 2) { + int16_t *sample = buffer + total * 2 + i; + int mid = (int)(sample[0] + sample[1]) / 2; + int side = (int)(sample[0] - sample[1]) / 4; + sample[0] = mid + side; + sample[1] = mid - side; } - - renderedTotal += rendered; - - if(!IsRepeatOneSet() && renderedTotal >= length) { - int16_t *sampleBuf = (int16_t *)buf + total * n_channels; - long fadeEnd = fadeRemain - rendered; - if(fadeEnd < 0) - fadeEnd = 0; - float fadePosf = (float)fadeRemain / (float)fadeTotal; - const float fadeStep = 1.0f / (float)fadeTotal; - for(long fadePos = fadeRemain; fadePos > fadeEnd; --fadePos, fadePosf -= fadeStep) { - long offset = (fadeRemain - fadePos) * n_channels; - float sampleLeft = sampleBuf[offset + 0]; - sampleLeft *= fadePosf; - sampleBuf[offset + 0] = (int16_t)sampleLeft; - if(n_channels == 2) { - float sampleRight = sampleBuf[offset + 1]; - sampleRight *= fadePosf; - sampleBuf[offset + 1] = (int16_t)sampleRight; - } - } - rendered = (int)(fadeRemain - fadeEnd); - fadeRemain = fadeEnd; - } - - total += rendered; - - if(rendered < framesToRender) - break; } - return total; + if(!IsRepeatOneSet() && renderedTotal >= length) { + int16_t *sampleBuf = buffer; + long fadeEnd = fadeRemain - rendered; + if(fadeEnd < 0) + fadeEnd = 0; + float fadePosf = (float)fadeRemain / (float)fadeTotal; + const float fadeStep = 1.0f / (float)fadeTotal; + for(long fadePos = fadeRemain; fadePos > fadeEnd; --fadePos, fadePosf -= fadeStep) { + long offset = (fadeRemain - fadePos) * n_channels; + float sampleLeft = sampleBuf[offset + 0]; + sampleLeft *= fadePosf; + sampleBuf[offset + 0] = (int16_t)sampleLeft; + if(n_channels == 2) { + float sampleRight = sampleBuf[offset + 1]; + sampleRight *= fadePosf; + sampleBuf[offset + 1] = (int16_t)sampleRight; + } + } + rendered = (int)(fadeRemain - fadeEnd); + fadeRemain = fadeEnd; + } + + [chunk assignSamples:buffer frameCount:rendered]; + + return chunk; } - (long)seek:(long)frame { diff --git a/Plugins/sidplay/sidplay.xcodeproj/project.pbxproj b/Plugins/sidplay/sidplay.xcodeproj/project.pbxproj index c7274937a..f9bda9b1b 100644 --- a/Plugins/sidplay/sidplay.xcodeproj/project.pbxproj +++ b/Plugins/sidplay/sidplay.xcodeproj/project.pbxproj @@ -52,6 +52,7 @@ 8314D80D1A35658C00EEE8E6 /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../../Utils/Logging.h; sourceTree = ""; }; 8314D80E1A3565AC00EEE8E6 /* PlaylistController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlaylistController.h; path = ../../../Playlist/PlaylistController.h; sourceTree = ""; }; 833A8996286FF2E30022E036 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 834A42A6287AEAAB00EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 836F5BEA1A357915002730CC /* roms.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = roms.cpp; sourceTree = SOURCE_ROOT; }; 836F5BEB1A357915002730CC /* roms.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = roms.hpp; sourceTree = SOURCE_ROOT; }; 83747BFF2862DA420021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = ""; }; @@ -92,6 +93,7 @@ 8314D6331A354DFE00EEE8E6 /* sidplay */ = { isa = PBXGroup; children = ( + 834A42A6287AEAAB00EB9D9B /* AudioChunk.h */, 836F5BEA1A357915002730CC /* roms.cpp */, 836F5BEB1A357915002730CC /* roms.hpp */, 8314D80E1A3565AC00EEE8E6 /* PlaylistController.h */, diff --git a/Plugins/vgmstream/vgmstream.xcodeproj/project.pbxproj b/Plugins/vgmstream/vgmstream.xcodeproj/project.pbxproj index 37bfa544d..86cd5edac 100644 --- a/Plugins/vgmstream/vgmstream.xcodeproj/project.pbxproj +++ b/Plugins/vgmstream/vgmstream.xcodeproj/project.pbxproj @@ -52,6 +52,7 @@ 833F68491CDBCAC000AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; 8340888B1F6F604A00DCD404 /* VGMMetadataReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VGMMetadataReader.m; sourceTree = ""; }; 8340888D1F6F604B00DCD404 /* VGMMetadataReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VGMMetadataReader.h; sourceTree = ""; }; + 834A42A8287AEDFB00EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../../Audio/Chain/AudioChunk.h; sourceTree = ""; }; 835D241E235AB318009A1251 /* VGMPropertiesReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VGMPropertiesReader.m; sourceTree = ""; }; 835D241F235AB319009A1251 /* VGMPropertiesReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VGMPropertiesReader.h; sourceTree = ""; }; 836F6B1018BDB80D0095E648 /* vgmstream.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = vgmstream.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -73,6 +74,7 @@ 83AA5D2B1F6E30080020821C /* VGMInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VGMInterface.h; sourceTree = ""; }; 83AA5D2C1F6E30080020821C /* VGMContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VGMContainer.h; sourceTree = ""; }; 83AA5D2F1F6E301B0020821C /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../../Utils/Logging.h; sourceTree = ""; }; + 83F0E6CB287CAB4300D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -141,6 +143,7 @@ 836F705A18BDC40E0095E648 /* VGMDecoder.h */, 836F705B18BDC40E0095E648 /* VGMDecoder.m */, 83AA5D2F1F6E301B0020821C /* Logging.h */, + 834A42A8287AEDFB00EB9D9B /* AudioChunk.h */, 836F706018BDC84D0095E648 /* Plugin.h */, 836F6B1A18BDB80D0095E648 /* Supporting Files */, ); @@ -219,6 +222,7 @@ en, es, Base, + pl, ); mainGroup = 836F6B0718BDB80D0095E648; productRefGroup = 836F6B1118BDB80D0095E648 /* Products */; @@ -286,6 +290,7 @@ children = ( 836F6B1D18BDB80D0095E648 /* en */, 833F68491CDBCAC000AFB9F0 /* es */, + 83F0E6CB287CAB4300D84594 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -301,6 +306,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -370,6 +376,7 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Plugins/vgmstream/vgmstream/VGMDecoder.m b/Plugins/vgmstream/vgmstream/VGMDecoder.m index 5f49855c4..39355d33e 100644 --- a/Plugins/vgmstream/vgmstream/VGMDecoder.m +++ b/Plugins/vgmstream/vgmstream/VGMDecoder.m @@ -311,10 +311,17 @@ static NSString *get_description_tag(const char *description, const char *tag, c return @{}; } -- (int)readAudio:(void *)buf frames:(UInt32)frames { +- (AudioChunk *)readAudio { + UInt32 frames = 1024; UInt32 framesMax = frames; UInt32 framesDone = 0; + id audioChunkClass = NSClassFromString(@"AudioChunk"); + AudioChunk *chunk = [[audioChunkClass alloc] initWithProperties:[self properties]]; + + int16_t buffer[1024 * channels]; + void *buf = (void *)buffer; + if(canPlayForever) { BOOL repeatone = IsRepeatOneSet(); @@ -354,7 +361,9 @@ static NSString *get_description_tag(const char *description, const char *tag, c frames -= frames_to_do; } - return framesDone; + [chunk assignSamples:buffer frameCount:framesDone]; + + return chunk; } - (long)seek:(long)frame { diff --git a/Plugins/vgmstream/vgmstream/pl.lproj/InfoPlist.strings b/Plugins/vgmstream/vgmstream/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/Plugins/vgmstream/vgmstream/pl.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Preferences/Preferences/Preferences.xcodeproj/project.pbxproj b/Preferences/Preferences/Preferences.xcodeproj/project.pbxproj index cbd484855..69c11d35a 100644 --- a/Preferences/Preferences/Preferences.xcodeproj/project.pbxproj +++ b/Preferences/Preferences/Preferences.xcodeproj/project.pbxproj @@ -138,6 +138,10 @@ 83DAD9F5286EDBD6000FAA9A /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/PathSuggester.strings; sourceTree = ""; }; 83EF495D17FBC96A00642E3C /* VolumeBehaviorArrayController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VolumeBehaviorArrayController.h; sourceTree = ""; }; 83EF495E17FBC96A00642E3C /* VolumeBehaviorArrayController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VolumeBehaviorArrayController.m; sourceTree = ""; }; + 83F0E6AC287CAB3D00D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; + 83F0E6AD287CAB3D00D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; + 83F0E6AF287CAB4100D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/PathSuggester.strings; sourceTree = ""; }; + 83F0E6B0287CAB4100D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Preferences.strings; sourceTree = ""; }; 83F27E651810DD3A00CEF538 /* appearance@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "appearance@2x.png"; path = "Icons/appearance@2x.png"; sourceTree = ""; }; 83F27E681810DD3A00CEF538 /* midi@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "midi@2x.png"; path = "Icons/midi@2x.png"; sourceTree = ""; }; 83F27E691810DD3A00CEF538 /* playlist@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "playlist@2x.png"; path = "Icons/playlist@2x.png"; sourceTree = ""; }; @@ -408,6 +412,7 @@ de, sv, he, + pl, ru, ); mainGroup = 089C166AFE841209C02AAC07 /* Preferences */; @@ -519,6 +524,7 @@ children = ( 833F681B1CDBCAA700AFB9F0 /* es */, 835C888922CC1880001B4B3F /* en */, + 83F0E6AC287CAB3D00D84594 /* pl */, 491C55C0287AA4B6007D96F5 /* ru */, ); name = InfoPlist.strings; @@ -529,6 +535,7 @@ children = ( 833F681C1CDBCAA700AFB9F0 /* es */, 835C888A22CC1880001B4B3F /* en */, + 83F0E6AD287CAB3D00D84594 /* pl */, 491C55C1287AA4B6007D96F5 /* ru */, ); name = Localizable.strings; @@ -540,6 +547,7 @@ 83BC5AB320E4C90F00631CD4 /* Base */, 8347435D20E6D58800063D45 /* en */, 8347435F20E6D5A000063D45 /* es */, + 83F0E6B0287CAB4100D84594 /* pl */, 491C55B5287AA4B6007D96F5 /* ru */, ); name = Preferences.xib; @@ -551,6 +559,7 @@ 83DAD9F1286EDBCD000FAA9A /* Base */, 83DAD9F3286EDBD2000FAA9A /* en */, 83DAD9F5286EDBD6000FAA9A /* es */, + 83F0E6AF287CAB4100D84594 /* pl */, 491C55B4287AA4B5007D96F5 /* ru */, ); name = PathSuggester.xib; @@ -605,6 +614,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -653,6 +663,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; diff --git a/Preferences/Preferences/pl.lproj/InfoPlist.strings b/Preferences/Preferences/pl.lproj/InfoPlist.strings new file mode 100644 index 000000000..953e9c281 --- /dev/null +++ b/Preferences/Preferences/pl.lproj/InfoPlist.strings @@ -0,0 +1,3 @@ +/* Localized versions of Info.plist keys */ + +NSHumanReadableCopyright = "© Vincent Spader, 2005-2011\n© mamburu, 2012-2013\n© Christopher Snowhill, 2013-2022"; diff --git a/Preferences/Preferences/pl.lproj/Localizable.strings b/Preferences/Preferences/pl.lproj/Localizable.strings new file mode 100644 index 000000000..12e4592da --- /dev/null +++ b/Preferences/Preferences/pl.lproj/Localizable.strings @@ -0,0 +1,25 @@ +"Nightly" = "Nightly"; +"Stable" = "Stable"; +"Unstable" = "Unstable"; + +"File Drawer" = "File Drawer"; +"Hot Keys" = "Hot Keys"; +"Output" = "Output"; + +"Updates" = "Updates"; +"Last.fm" = "Last.fm"; +"Scrobble" = "Scrobble"; +"Playlist" = "Playlist"; +"Notifications" = "Notifications"; +"Appearance" = "Appearance"; +"Synthesis" = "Synthesis"; +"General" = "General"; + +"Press Key..." = "Press Key..."; + +"Clear playlist and play" = "Clear playlist and play"; +"Enqueue" = "Enqueue"; +"Enqueue and play" = "Enqueue and play"; + +"ValidNo" = "No"; +"ValidYes" = "Yes"; diff --git a/Preferences/Preferences/pl.lproj/PathSuggester.strings b/Preferences/Preferences/pl.lproj/PathSuggester.strings new file mode 100644 index 000000000..858f9a294 --- /dev/null +++ b/Preferences/Preferences/pl.lproj/PathSuggester.strings @@ -0,0 +1,30 @@ + +/* Class = "NSTableColumn"; headerCell.title = "Path"; ObjectID = "23r-ai-XoX"; */ +"23r-ai-XoX.headerCell.title" = "Path"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "2vN-j2-JYP"; */ +"2vN-j2-JYP.title" = "Text Cell"; + +/* Class = "NSWindow"; title = "Grant access to select folders"; ObjectID = "F0z-JX-Cv5"; */ +"F0z-JX-Cv5.title" = "Grant access to select folders"; + +/* Class = "NSButtonCell"; title = "Apply"; ObjectID = "Jne-2G-yP9"; */ +"Jne-2G-yP9.title" = "Apply"; + +/* Class = "NSTableColumn"; headerCell.title = "Enabled"; ObjectID = "QWk-Qb-l0y"; */ +"QWk-Qb-l0y.headerCell.title" = "Enabled"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "RLN-Pa-Mhl"; */ +"RLN-Pa-Mhl.title" = "Table View Cell"; + +/* Class = "NSToolbarItem"; label = "Apply"; ObjectID = "cJV-DM-SOV"; */ +"cJV-DM-SOV.label" = "Apply"; + +/* Class = "NSToolbarItem"; paletteLabel = "Apply"; ObjectID = "cJV-DM-SOV"; */ +"cJV-DM-SOV.paletteLabel" = "Apply"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "w2T-DH-7x9"; */ +"w2T-DH-7x9.title" = "Text Cell"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "xFm-ed-yBb"; */ +"xFm-ed-yBb.title" = "Table View Cell"; diff --git a/Preferences/Preferences/pl.lproj/Preferences.strings b/Preferences/Preferences/pl.lproj/Preferences.strings new file mode 100644 index 000000000..d1c83b496 --- /dev/null +++ b/Preferences/Preferences/pl.lproj/Preferences.strings @@ -0,0 +1,231 @@ + +/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "61"; */ +"61.title" = "OtherViews"; + +/* Class = "NSMenuItem"; title = "Item1"; ObjectID = "62"; */ +"62.title" = "Item1"; + +/* Class = "NSMenuItem"; title = "Item2"; ObjectID = "63"; */ +"63.title" = "Item2"; + +/* Class = "NSMenuItem"; title = "Item3"; ObjectID = "64"; */ +"64.title" = "Item3"; + +/* Class = "NSTextFieldCell"; title = "Play:"; ObjectID = "198"; */ +"198.title" = "Play:"; + +/* Class = "NSTextFieldCell"; title = "Previous:"; ObjectID = "199"; */ +"199.title" = "Previous:"; + +/* Class = "NSTextFieldCell"; title = "Next:"; ObjectID = "200"; */ +"200.title" = "Next:"; + +/* Class = "NSTextFieldCell"; title = "Output Device: "; ObjectID = "211"; */ +"211.title" = "Output Device: "; + +/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "249"; */ +"249.title" = "OtherViews"; + +/* Class = "NSMenuItem"; title = "Item 1"; ObjectID = "250"; */ +"250.title" = "Item 1"; + +/* Class = "NSMenuItem"; title = "Item 2"; ObjectID = "251"; */ +"251.title" = "Item 2"; + +/* Class = "NSMenuItem"; title = "Item 3"; ObjectID = "252"; */ +"252.title" = "Item 3"; + +/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "255"; */ +"255.title" = "OtherViews"; + +/* Class = "NSMenuItem"; title = "Item 1"; ObjectID = "256"; */ +"256.title" = "Item 1"; + +/* Class = "NSMenuItem"; title = "Item 2"; ObjectID = "257"; */ +"257.title" = "Item 2"; + +/* Class = "NSMenuItem"; title = "Item 3"; ObjectID = "258"; */ +"258.title" = "Item 3"; + +/* Class = "NSTextFieldCell"; title = "When opening files:"; ObjectID = "260"; */ +"260.title" = "When opening files:"; + +/* Class = "NSTextFieldCell"; title = "When opening file with ⇧ or ⌃⌘ held:"; ObjectID = "262"; */ +"262.title" = "When opening file with ⇧ or ⌃⌘ held:"; + +/* Class = "NSButtonCell"; title = "Read CUE sheets when adding folders to playlist"; ObjectID = "311"; */ +"311.title" = "Read CUE sheets when adding folders to playlist"; + +/* Class = "NSTextFieldCell"; title = "Hz"; ObjectID = "0Am-5Y-EKq"; */ +"0Am-5Y-EKq.title" = "Hz"; + +/* Class = "NSMenuItem"; title = "Item 3"; ObjectID = "1Cb-TU-E0q"; */ +"1Cb-TU-E0q.title" = "Item 3"; + +/* Class = "NSMenuItem"; title = "Item 2"; ObjectID = "1Yq-6f-Uho"; */ +"1Yq-6f-Uho.title" = "Item 2"; + +/* Class = "NSButtonCell"; title = "Reset to defaults"; ObjectID = "1y7-iZ-BhE"; */ +"1y7-iZ-BhE.title" = "Reset to defaults"; + +/* Class = "NSMenuItem"; title = "Item 1"; ObjectID = "3Gx-cs-3B0"; */ +"3Gx-cs-3B0.title" = "Item 1"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "7un-em-D8r"; */ +"7un-em-D8r.title" = "Table View Cell"; + +/* Class = "NSMenuItem"; title = "Item 2"; ObjectID = "99B-Tx-dPH"; */ +"99B-Tx-dPH.title" = "Item 2"; + +/* Class = "NSTextFieldCell"; title = "Sample rate:"; ObjectID = "A9I-fr-vHp"; */ +"A9I-fr-vHp.title" = "Sample rate:"; + +/* Class = "NSTextFieldCell"; title = "Default play time:"; ObjectID = "AQZ-ku-F8u"; */ +"AQZ-ku-F8u.title" = "Default play time:"; + +/* Class = "NSTextFieldCell"; title = "Spectrum bars"; ObjectID = "Bll-IJ-lje"; */ +"Bll-IJ-lje.title" = "Spectrum bars"; + +/* Class = "NSTextFieldCell"; title = "Spectrum peaks"; ObjectID = "CQI-YZ-B3V"; */ +"CQI-YZ-B3V.title" = "Spectrum peaks"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "Dhd-k8-ZXq"; */ +"Dhd-k8-ZXq.title" = "Text Cell"; + +/* Class = "NSTextFieldCell"; title = "Label"; ObjectID = "ECB-P0-pve"; */ +"ECB-P0-pve.title" = "Label"; + +/* Class = "NSMenuItem"; title = "Item 3"; ObjectID = "EQX-aL-uT0"; */ +"EQX-aL-uT0.title" = "Item 3"; + +/* Class = "NSTextFieldCell"; title = "MIDI Flavor:"; ObjectID = "FQF-vJ-hBx"; */ +"FQF-vJ-hBx.title" = "MIDI Flavor:"; + +/* Class = "NSTextFieldCell"; title = "Default loop count:"; ObjectID = "Fgm-Vs-tgU"; */ +"Fgm-Vs-tgU.title" = "Default loop count:"; + +/* Class = "NSButtonCell"; title = "Colorful dock icons"; ObjectID = "GdX-5e-NeU"; */ +"GdX-5e-NeU.title" = "Colorful dock icons"; + +/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "HKM-FW-dhH"; */ +"HKM-FW-dhH.title" = "OtherViews"; + +/* Class = "NSMenuItem"; title = "Delete Invalid Paths"; ObjectID = "JU5-o7-jid"; */ +"JU5-o7-jid.title" = "Delete Invalid Paths"; + +/* Class = "NSMenuItem"; title = "Add Path"; ObjectID = "JxP-0t-mTB"; */ +"JxP-0t-mTB.title" = "Add Path"; + +/* Class = "NSTextFieldCell"; title = "Selected:"; ObjectID = "KJz-qS-IcO"; */ +"KJz-qS-IcO.title" = "Selected:"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "LwT-Qb-47r"; */ +"LwT-Qb-47r.title" = "Table View Cell"; + +/* Class = "NSButtonCell"; title = "Enable HRTF filter (Not needed with AirPods or Beats)"; ObjectID = "NGx-0c-WVR"; */ +"NGx-0c-WVR.title" = "Enable HRTF filter (Not needed with AirPods or Beats)"; + +/* Class = "NSButtonCell"; title = "Use 3D rendered spectrum"; ObjectID = "NMg-TO-amV"; */ +"NMg-TO-amV.title" = "Use 3D rendered spectrum"; + +/* Class = "NSTextFieldCell"; title = "(will be preferred if possible)"; ObjectID = "POG-ai-6D2"; */ +"POG-ai-6D2.title" = "(will be preferred if possible)"; + +/* Class = "NSButtonCell"; title = "Show album art"; ObjectID = "RGf-4D-3NW"; */ +"RGf-4D-3NW.title" = "Show album art"; + +/* Class = "NSButtonCell"; title = "Quit when playback completes"; ObjectID = "SBA-J5-rEd"; */ +"SBA-J5-rEd.title" = "Quit when playback completes"; + +/* Class = "NSTextFieldCell"; title = "Spam:"; ObjectID = "SMd-GA-jrH"; */ +"SMd-GA-jrH.title" = "Spam:"; + +/* Class = "NSTextFieldCell"; title = "Default fade time:"; ObjectID = "UdW-qd-A0x"; */ +"UdW-qd-A0x.title" = "Default fade time:"; + +/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "V8o-Xy-HUW"; */ +"V8o-Xy-HUW.title" = "OtherViews"; + +/* Class = "NSMenuItem"; title = "Item 3"; ObjectID = "WWy-iW-3Ct"; */ +"WWy-iW-3Ct.title" = "Item 3"; + +/* Class = "NSMenuItem"; title = "Item 1"; ObjectID = "XzK-h2-vIT"; */ +"XzK-h2-vIT.title" = "Item 1"; + +/* Class = "NSMenuItem"; title = "Item 2"; ObjectID = "YLi-QX-EgD"; */ +"YLi-QX-EgD.title" = "Item 2"; + +/* Class = "NSTableColumn"; headerCell.title = "Path"; ObjectID = "Yz2-Ee-bZ0"; */ +"Yz2-Ee-bZ0.headerCell.title" = "Path"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "bWQ-dT-X3w"; */ +"bWQ-dT-X3w.title" = "Text Cell"; + +/* Class = "NSButtonCell"; title = "Use iTunes style"; ObjectID = "cOb-hQ-7K8"; */ +"cOb-hQ-7K8.title" = "Use iTunes style"; + +/* Class = "NSButtonCell"; title = "Limit volume control to 100%"; ObjectID = "ds2-aw-ebU"; */ +"ds2-aw-ebU.title" = "Limit volume control to 100%"; + +/* Class = "NSTextFieldCell"; title = "Resampling Quality:"; ObjectID = "eX0-PC-iVo"; */ +"eX0-PC-iVo.title" = "Resampling Quality:"; + +/* Class = "NSButtonCell"; title = "Resume playback on startup"; ObjectID = "fUg-Cg-gXa"; */ +"fUg-Cg-gXa.title" = "Resume playback on startup"; + +/* Class = "NSButtonCell"; title = "Use flat perspective in toolbar"; ObjectID = "gXL-j6-df0"; */ +"gXL-j6-df0.title" = "Use flat perspective in toolbar"; + +/* Class = "NSButtonCell"; title = "Enable notifications"; ObjectID = "hqT-nY-NoU"; */ +"hqT-nY-NoU.title" = "Enable notifications"; + +/* Class = "NSMenuItem"; title = "Item 3"; ObjectID = "jLL-zc-kYf"; */ +"jLL-zc-kYf.title" = "Item 3"; + +/* Class = "NSTextFieldCell"; title = "hh:mm:ss.ms"; ObjectID = "klv-Wh-0ur"; */ +"klv-Wh-0ur.title" = "hh:mm:ss.ms"; + +/* Class = "NSTableColumn"; headerCell.title = "Valid"; ObjectID = "lEg-E3-TBs"; */ +"lEg-E3-TBs.headerCell.title" = "Valid"; + +/* Class = "NSTextFieldCell"; title = "MIDI Plugin:"; ObjectID = "n5F-dq-NZh"; */ +"n5F-dq-NZh.title" = "MIDI Plugin:"; + +/* Class = "NSMenuItem"; title = "Delete Path"; ObjectID = "nva-pz-xSS"; */ +"nva-pz-xSS.title" = "Delete Path"; + +/* Class = "NSMenuItem"; title = "Item 2"; ObjectID = "nzS-3F-jPX"; */ +"nzS-3F-jPX.title" = "Item 2"; + +/* Class = "NSMenuItem"; title = "Item 1"; ObjectID = "oWh-lD-mFH"; */ +"oWh-lD-mFH.title" = "Item 1"; + +/* Class = "NSMenuItem"; title = "Suggest Paths"; ObjectID = "qjI-dK-nfG"; */ +"qjI-dK-nfG.title" = "Suggest Paths"; + +/* Class = "NSButtonCell"; title = "Allow insecure SSL connections"; ObjectID = "sva-DV-ina"; */ +"sva-DV-ina.title" = "Allow insecure SSL connections"; + +/* Class = "NSButtonCell"; title = "Show stop button"; ObjectID = "vMI-lj-Lrz"; */ +"vMI-lj-Lrz.title" = "Show stop button"; + +/* Class = "NSMenuItem"; title = "Item 1"; ObjectID = "vaQ-pZ-jXy"; */ +"vaQ-pZ-jXy.title" = "Item 1"; + +/* Class = "NSTextFieldCell"; title = "Volume Level:"; ObjectID = "wK4-EF-8Wa"; */ +"wK4-EF-8Wa.title" = "Volume Level:"; + +/* Class = "CocoaBindingsConnection"; ibShadowedIsNilPlaceholder = "None"; ObjectID = "wNb-bg-cgq"; */ +"wNb-bg-cgq.ibShadowedIsNilPlaceholder" = "None"; + +/* Class = "NSTextFieldCell"; title = "Folder access paths:"; ObjectID = "wWm-AD-cD4"; */ +"wWm-AD-cD4.title" = "Folder access paths:"; + +/* Class = "NSButtonCell"; title = "Select a SoundFont"; ObjectID = "yeL-9c-lFq"; */ +"yeL-9c-lFq.title" = "Select a SoundFont"; + +/* Class = "NSButtonCell"; title = "Send crash reports and usage data"; ObjectID = "zQ2-6O-3Og"; */ +"zQ2-6O-3Og.title" = "Send crash reports and usage data"; + +/* Class = "NSTextFieldCell"; title = "hh:mm:ss.ms"; ObjectID = "zaI-0m-tQf"; */ +"zaI-0m-tQf.title" = "hh:mm:ss.ms"; diff --git a/pl.lproj/Equalizer.strings b/pl.lproj/Equalizer.strings index 5414cd967..5e24d3b6e 100644 --- a/pl.lproj/Equalizer.strings +++ b/pl.lproj/Equalizer.strings @@ -30,7 +30,7 @@ "ERP-9r-xp9.title" = "400"; /* Class = "NSButtonCell"; title = "Enabled"; ObjectID = "Id9-5k-q9Q"; */ -"Id9-5k-q9Q.title" = "Enabled"; +"Id9-5k-q9Q.title" = "Włączony"; /* Class = "NSTextFieldCell"; title = "500"; ObjectID = "JVJ-LV-LDc"; */ "JVJ-LV-LDc.title" = "500"; @@ -69,7 +69,7 @@ "Zlw-xU-QP7.title" = "-6 dB"; /* Class = "NSButtonCell"; title = "Tracking genre tags"; ObjectID = "aeV-tB-rvh"; */ -"aeV-tB-rvh.title" = "Tracking genre tags"; +"aeV-tB-rvh.title" = "śledzenie tagów gatunku"; /* Class = "NSButtonCell"; title = "Flatten EQ"; ObjectID = "bOS-GE-rwi"; */ "bOS-GE-rwi.title" = "Flatten EQ"; @@ -114,7 +114,7 @@ "ke7-4o-FJG.title" = "5"; /* Class = "NSTextFieldCell"; title = "Note: You may use right-click to draw an equalizer shape"; ObjectID = "lwG-Tm-rr1"; */ -"lwG-Tm-rr1.title" = "Note: You may use right-click to draw an equalizer shape"; +"lwG-Tm-rr1.title" = "uwaga: możesz użyć prawego klawisza myszy aby narysować kształt equalizera."; /* Class = "NSTextFieldCell"; title = "6.3"; ObjectID = "neW-5g-R0i"; */ "neW-5g-R0i.title" = "6.3"; @@ -141,4 +141,4 @@ "xM8-HB-8XL.title" = "1k"; /* Class = "NSTextFieldCell"; title = "Preset:"; ObjectID = "xsQ-DN-AcS"; */ -"xsQ-DN-AcS.title" = "Preset:"; +"xsQ-DN-AcS.title" = "ustawienia użytkownika:"; diff --git a/pl.lproj/FileTree.strings b/pl.lproj/FileTree.strings index 5e90ea13b..763a946aa 100644 --- a/pl.lproj/FileTree.strings +++ b/pl.lproj/FileTree.strings @@ -6,16 +6,16 @@ "110.title" = "Menu"; /* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "112"; */ -"112.title" = "Show in Finder"; +"112.title" = "pokaż w finderze"; /* Class = "NSMenuItem"; title = "Add to Playlist"; ObjectID = "119"; */ -"119.title" = "Add to Playlist"; +"119.title" = "dodaj do playlisty."; /* Class = "NSMenuItem"; title = "Set as Root"; ObjectID = "124"; */ "124.title" = "Set as Root"; /* Class = "NSMenuItem"; title = "Set as Playlist"; ObjectID = "129"; */ -"129.title" = "Set as Playlist"; +"129.title" = "ustaw jako playlistę"; /* Class = "NSBox"; title = "Box"; ObjectID = "147"; */ "147.title" = "Box"; diff --git a/pl.lproj/InfoInspector.strings b/pl.lproj/InfoInspector.strings index 0a67f6400..531006167 100644 --- a/pl.lproj/InfoInspector.strings +++ b/pl.lproj/InfoInspector.strings @@ -14,6 +14,9 @@ /* Class = "NSTextFieldCell"; title = "Length:"; ObjectID = "16"; */ "16.title" = "Length:"; +/* Class = "NSTextFieldCell"; title = "Date:"; ObjectID = "18"; */ +"18.title" = "Date:"; + /* Class = "NSTextFieldCell"; title = "Genre:"; ObjectID = "20"; */ "20.title" = "Genre:"; @@ -71,14 +74,44 @@ /* Class = "NSTextFieldCell"; title = "N/A"; ObjectID = "87"; */ "87.title" = "N/A"; -/* Class = "NSTextFieldCell"; title = "Album Artist:"; ObjectID = "vB6-9J-5qg"; */ -"vB6-9J-5qg.title" = "Album Artist:"; +/* Class = "NSTextFieldCell"; title = "Encoding:"; ObjectID = "8e7-lp-K5l"; */ +"8e7-lp-K5l.title" = "Encoding:"; -/* Class = "NSTextFieldCell"; title = "Codec:"; ObjectID = "QPg-Mb-Urn"; */ -"QPg-Mb-Urn.title" = "Codec:"; +/* Class = "NSTextFieldCell"; title = "N/A"; ObjectID = "B8w-o8-ZBw"; */ +"B8w-o8-ZBw.title" = "N/A"; -/* Class = "NSTextFieldCell"; title = "Date:"; ObjectID = "17"; */ -"18.title" = "Date:"; +/* Class = "NSTextFieldCell"; title = "Cuesheet:"; ObjectID = "Cu5-ia-Z5b"; */ +"Cu5-ia-Z5b.title" = "Cuesheet:"; -/* Class = "NSTextFieldCell"; title = "Comment:"; ObjectID = "cd3-Qt-hCm"; */ +/* Class = "NSTextFieldCell"; title = "N/A"; ObjectID = "Ial-XI-91y"; */ +"Ial-XI-91y.title" = "N/A"; + +/* Class = "NSTextFieldCell"; title = "Album Artist:"; ObjectID = "LFJ-QQ-gGr"; */ +"LFJ-QQ-gGr.title" = "Album Artist:"; + +/* Class = "NSTextFieldCell"; title = "N/A"; ObjectID = "PPV-dt-9Bp"; */ +"PPV-dt-9Bp.title" = "N/A"; + +/* Class = "NSTextFieldCell"; title = "Comment:"; ObjectID = "Ule-N3-dKW"; */ "Ule-N3-dKW.title" = "Comment:"; + +/* Class = "NSTextFieldCell"; title = "N/A"; ObjectID = "UyE-Mc-e39"; */ +"UyE-Mc-e39.title" = "N/A"; + +/* Class = "NSTextFieldCell"; title = "N/A"; ObjectID = "Yby-OU-cqP"; */ +"Yby-OU-cqP.title" = "N/A"; + +/* Class = "NSTextFieldCell"; title = "Codec:"; ObjectID = "cbq-TT-CZX"; */ +"cbq-TT-CZX.title" = "Codec:"; + +/* Class = "NSTextFieldCell"; title = "Play Count:"; ObjectID = "fiv-eh-w3c"; */ +"fiv-eh-w3c.title" = "Play Count:"; + +/* Class = "NSTextFieldCell"; title = "ReplayGain:"; ObjectID = "qBi-M8-kEx"; */ +"qBi-M8-kEx.title" = "ReplayGain:"; + +/* Class = "NSTextFieldCell"; title = "N/A"; ObjectID = "rAo-AP-lVa"; */ +"rAo-AP-lVa.title" = "N/A"; + +/* Class = "NSTextFieldCell"; title = "N/A"; ObjectID = "v14-AG-B9D"; */ +"v14-AG-B9D.title" = "N/A"; diff --git a/pl.lproj/Localizable.strings b/pl.lproj/Localizable.strings index ed5fdabb1..8e8b7efdf 100644 --- a/pl.lproj/Localizable.strings +++ b/pl.lproj/Localizable.strings @@ -1,7 +1,7 @@ "FeedbackFailedMessageText" = "Failed"; -"FeedbackFailedInformativeText" = "Feedback failed to send."; -"FeedbackSuccessMessageText" = "Success"; -"FeedbackSuccessInformativeText" = "Feedback successfully sent!"; +"FeedbackFailedInformativeText" = "Nie udało się wysłać twojej opinii."; +"FeedbackSuccessMessageText" = "success!"; +"FeedbackSuccessInformativeText" = "Opinia została wysłana pomyślnie."; "PlayButtonTooltip" = "Play"; "StopButtonTooltip" = "Stop"; diff --git a/pl.lproj/MainMenu.strings b/pl.lproj/MainMenu.strings index 3ca381ebc..a84dab6d2 100644 --- a/pl.lproj/MainMenu.strings +++ b/pl.lproj/MainMenu.strings @@ -617,12 +617,174 @@ /* Class = "NSMenuItem"; title = "Remove Duplicate Items"; ObjectID = "2qB-Bq-t2u"; */ "2qB-Bq-t2u.title" = "Usuń duplikaty"; +/* Class = "NSTableColumn"; headerCell.title = "Codec"; ObjectID = "3A3-9o-Gh9"; */ +"3A3-9o-Gh9.headerCell.title" = "Codec"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "3QN-Ok-QPu"; */ +"3QN-Ok-QPu.title" = "Table View Cell"; + +/* Class = "NSToolbarItem"; label = "Remove Duplicate Items"; ObjectID = "4pg-Lq-O8K"; */ +"4pg-Lq-O8K.label" = "Remove Duplicate Items"; + +/* Class = "NSToolbarItem"; paletteLabel = "Remove Duplicate Items"; ObjectID = "4pg-Lq-O8K"; */ +"4pg-Lq-O8K.paletteLabel" = "Remove Duplicate Items"; + +/* Class = "CocoaBindingsConnection"; ibShadowedDisplayPattern = "%{value1}@%{value2}@"; ObjectID = "5bQ-Qy-2KR"; */ +"5bQ-Qy-2KR.ibShadowedDisplayPattern" = "%{value1}@%{value2}@"; + +/* Class = "NSMenuItem"; title = "Reset Play Count"; ObjectID = "5iV-dM-oX2"; */ +"5iV-dM-oX2.title" = "Reset Play Count"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "71l-3L-S3g"; */ +"71l-3L-S3g.title" = "Table View Cell"; + /* Class = "NSMenuItem"; title = "Remove Dead Items"; ObjectID = "Ajn-k4-afd"; */ "Ajn-k4-afd.title" = "usuń uszkodzone rzeczy"; /* Class = "NSMenuItem"; title = "Properties"; ObjectID = "Eds-my-DQr"; */ "Eds-my-DQr.title" = "właściwości"; +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "FMU-QZ-NdQ"; */ +"FMU-QZ-NdQ.title" = "Table View Cell"; + +/* Class = "NSMenuItem"; title = "Reload Info"; ObjectID = "HK9-Am-31h"; */ +"HK9-Am-31h.title" = "Reload Info"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "Igo-5f-yim"; */ +"Igo-5f-yim.title" = "Table View Cell"; + +/* Class = "CocoaBindingsConnection"; ibShadowedDisplayPattern = "%{value1}@%{value2}@"; ObjectID = "Kih-ky-A1h"; */ +"Kih-ky-A1h.ibShadowedDisplayPattern" = "%{value1}@%{value2}@"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "M6d-rj-lEz"; */ +"M6d-rj-lEz.title" = "Text Cell"; + +/* Class = "NSToolbarItem"; label = "Spectrum"; ObjectID = "NtB-XF-g07"; */ +"NtB-XF-g07.label" = "Spectrum"; + +/* Class = "NSToolbarItem"; paletteLabel = "Spectrum"; ObjectID = "NtB-XF-g07"; */ +"NtB-XF-g07.paletteLabel" = "Spectrum"; + +/* Class = "NSMenuItem"; title = "Remove Rating"; ObjectID = "PyI-lF-iuz"; */ +"PyI-lF-iuz.title" = "Remove Rating"; + +/* Class = "NSMenuItem"; title = "Filter Playlist"; ObjectID = "UAk-Gc-lT4"; */ +"UAk-Gc-lT4.title" = "Filter Playlist"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "VVx-99-roJ"; */ +"VVx-99-roJ.title" = "Table View Cell"; + +/* Class = "NSToolbarItem"; label = "Remove Dead Items"; ObjectID = "WKt-lM-Bv1"; */ +"WKt-lM-Bv1.label" = "Remove Dead Items"; + +/* Class = "NSToolbarItem"; paletteLabel = "Remove Dead Items"; ObjectID = "WKt-lM-Bv1"; */ +"WKt-lM-Bv1.paletteLabel" = "Remove Dead Items"; + +/* Class = "NSTableColumn"; headerCell.title = "Title"; ObjectID = "XBr-ec-D81"; */ +"XBr-ec-D81.headerCell.title" = "Title"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "YwT-z9-2d2"; */ +"YwT-z9-2d2.title" = "Table View Cell"; + +/* Class = "NSToolbarItem"; label = "HDCD Indicator"; ObjectID = "ZH9-ZU-skw"; */ +"ZH9-ZU-skw.label" = "HDCD Indicator"; + +/* Class = "NSToolbarItem"; paletteLabel = "HDCD Indicator"; ObjectID = "ZH9-ZU-skw"; */ +"ZH9-ZU-skw.paletteLabel" = "HDCD Indicator"; + +/* Class = "NSToolbarItem"; label = "Show Equalizer"; ObjectID = "ZOn-sB-FR3"; */ +"ZOn-sB-FR3.label" = "Show Equalizer"; + +/* Class = "NSToolbarItem"; paletteLabel = "Show Equalizer"; ObjectID = "ZOn-sB-FR3"; */ +"ZOn-sB-FR3.paletteLabel" = "Show Equalizer"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "gKK-cS-RP5"; */ +"gKK-cS-RP5.title" = "Table View Cell"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "js2-sT-U4M"; */ +"js2-sT-U4M.title" = "Table View Cell"; + +/* Class = "NSToolbarItem"; label = "Randomize"; ObjectID = "kVl-aW-mtT"; */ +"kVl-aW-mtT.label" = "Randomize"; + +/* Class = "NSToolbarItem"; paletteLabel = "Randomize"; ObjectID = "kVl-aW-mtT"; */ +"kVl-aW-mtT.paletteLabel" = "Randomize"; + +/* Class = "NSToolbarItem"; label = "Remove Dead Items"; ObjectID = "knJ-aI-sFa"; */ +"knJ-aI-sFa.label" = "Remove Dead Items"; + +/* Class = "NSToolbarItem"; paletteLabel = "Remove Dead Items"; ObjectID = "knJ-aI-sFa"; */ +"knJ-aI-sFa.paletteLabel" = "Remove Dead Items"; + +/* Class = "NSMenuItem"; title = "Reload Info"; ObjectID = "kq8-9v-zC0"; */ +"kq8-9v-zC0.title" = "Reload Info"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "lBy-Uc-vCA"; */ +"lBy-Uc-vCA.title" = "Text Cell"; + +/* Class = "NSMenuItem"; title = "Show Mini Player On Top"; ObjectID = "lXN-EZ-xg0"; */ +"lXN-EZ-xg0.title" = "Show Mini Player On Top"; + +/* Class = "NSMenuItem"; title = "Move to Trash"; ObjectID = "mhx-dQ-Kwx"; */ +"mhx-dQ-Kwx.title" = "Move to Trash"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "moV-3G-GpB"; */ +"moV-3G-GpB.title" = "Table View Cell"; + +/* Class = "NSMenuItem"; title = "Show Equalizer"; ObjectID = "nBU-pH-J3I"; */ +"nBU-pH-J3I.title" = "Show Equalizer"; + +/* Class = "NSMenuItem"; title = "Privacy Policy..."; ObjectID = "nb7-FW-egH"; */ +"nb7-FW-egH.title" = "Privacy Policy..."; + +/* Class = "NSMenuItem"; title = "Stop after Selection"; ObjectID = "omb-wi-loX"; */ +"omb-wi-loX.title" = "Stop after Selection"; + +/* Class = "NSMenuItem"; title = "Show All Songs"; ObjectID = "pU1-ci-9uB"; */ +"pU1-ci-9uB.title" = "Show All Songs"; + +/* Class = "NSToolbarItem"; label = "HDCD Indicator"; ObjectID = "qfu-F9-bOZ"; */ +"qfu-F9-bOZ.label" = "HDCD Indicator"; + +/* Class = "NSToolbarItem"; paletteLabel = "HDCD Indicator"; ObjectID = "qfu-F9-bOZ"; */ +"qfu-F9-bOZ.paletteLabel" = "HDCD Indicator"; + +/* Class = "NSMenuItem"; title = "Move to Trash"; ObjectID = "qlT-UX-x72"; */ +"qlT-UX-x72.title" = "Move to Trash"; + +/* Class = "NSToolbarItem"; label = "Remove Duplicate Items"; ObjectID = "rEg-qk-MbN"; */ +"rEg-qk-MbN.label" = "Remove Duplicate Items"; + +/* Class = "NSToolbarItem"; paletteLabel = "Remove Duplicate Items"; ObjectID = "rEg-qk-MbN"; */ +"rEg-qk-MbN.paletteLabel" = "Remove Duplicate Items"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "sdo-Sm-KPH"; */ +"sdo-Sm-KPH.title" = "Table View Cell"; + +/* Class = "NSToolbarItem"; label = "Spectrum"; ObjectID = "sf3-l1-fJw"; */ +"sf3-l1-fJw.label" = "Spectrum"; + +/* Class = "NSToolbarItem"; paletteLabel = "Spectrum"; ObjectID = "sf3-l1-fJw"; */ +"sf3-l1-fJw.paletteLabel" = "Spectrum"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "tus-lr-RhS"; */ +"tus-lr-RhS.title" = "Table View Cell"; + +/* Class = "NSMenuItem"; title = "Toggle Toolbar Style"; ObjectID = "vBH-Mr-XWi"; */ +"vBH-Mr-XWi.title" = "Toggle Toolbar Style"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "vaJ-Bc-ebE"; */ +"vaJ-Bc-ebE.title" = "Table View Cell"; + +/* Class = "NSToolbarItem"; label = "Show Equalizer"; ObjectID = "vzT-Gb-aGW"; */ +"vzT-Gb-aGW.label" = "Show Equalizer"; + +/* Class = "NSToolbarItem"; paletteLabel = "Show Equalizer"; ObjectID = "vzT-Gb-aGW"; */ +"vzT-Gb-aGW.paletteLabel" = "Show Equalizer"; + +/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "wky-z8-Cj5"; */ +"wky-z8-Cj5.title" = "Table View Cell"; + /* Class = "NSTableColumn"; title = "Album Artist"; ObjectID = "yGV-gP-Wl6"; */ "yGV-gP-Wl6.title" = "Album artysta";