From 3883ff3ab482e8fc0f983cd2c62a69b2bc4f33cd Mon Sep 17 00:00:00 2001 From: "Stephen F. Booth" Date: Fri, 3 Jan 2025 18:47:27 -0600 Subject: [PATCH 01/22] Add `.xcodeproj` --- SFBAudioEngine.xcodeproj/project.pbxproj | 1393 +++++++++++++++++++ Sources/SFBAudioEngine/SFBAudioEngine.swift | 4 +- 2 files changed, 1396 insertions(+), 1 deletion(-) create mode 100644 SFBAudioEngine.xcodeproj/project.pbxproj diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj new file mode 100644 index 000000000..9f70c50f8 --- /dev/null +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -0,0 +1,1393 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 321C18B12CF7886000670824 /* vorbis in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18B02CF7886000670824 /* vorbis */; }; + 321C18B42CF7887600670824 /* speex in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18B32CF7887600670824 /* speex */; }; + 321C18B72CF7888800670824 /* lame in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18B62CF7888800670824 /* lame */; }; + 321C18BA2CF7889A00670824 /* mpc in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18B92CF7889A00670824 /* mpc */; }; + 321C18BD2CF788AB00670824 /* mpg123 in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18BC2CF788AB00670824 /* mpg123 */; }; + 322CE3442CF787630070996C /* dumb in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3432CF787630070996C /* dumb */; }; + 322CE3472CF787740070996C /* MAC in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3462CF787740070996C /* MAC */; }; + 322CE34A2CF7878D0070996C /* taglib in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3492CF7878D0070996C /* taglib */; }; + 322CE34D2CF788020070996C /* wavpack in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE34C2CF788020070996C /* wavpack */; }; + 322CE3502CF788120070996C /* ogg in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE34F2CF788120070996C /* ogg */; }; + 322CE3532CF788240070996C /* FLAC in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3522CF788240070996C /* FLAC */; }; + 322CE3562CF788360070996C /* opus in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3552CF788360070996C /* opus */; }; + 3237E1A82CF7865A0084AA51 /* SFBAudioProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19E2CF785DD0084AA51 /* SFBAudioProperties.swift */; }; + 3237E1A92CF7865A0084AA51 /* SFBAudioPlayerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19D2CF785DD0084AA51 /* SFBAudioPlayerNode.swift */; }; + 3237E1AA2CF7865A0084AA51 /* SFBAudioPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19C2CF785DD0084AA51 /* SFBAudioPlayer.swift */; }; + 3237E1AB2CF7865A0084AA51 /* SFBOutputSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1A02CF785DD0084AA51 /* SFBOutputSource.swift */; }; + 3237E1AC2CF7865A0084AA51 /* SFBReplayGainAnalyzer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1A12CF785DD0084AA51 /* SFBReplayGainAnalyzer.swift */; }; + 3237E1AD2CF7865A0084AA51 /* SFBAudioMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19B2CF785DD0084AA51 /* SFBAudioMetadata.swift */; }; + 3237E1AE2CF7865A0084AA51 /* SFBInputSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19F2CF785DD0084AA51 /* SFBInputSource.swift */; }; + 3237E1AF2CF7865A0084AA51 /* SFBAudioEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19A2CF785DD0084AA51 /* SFBAudioEngine.swift */; }; + 3237E1B02CF7868B0084AA51 /* SFBAudioConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0DC2CF785DD0084AA51 /* SFBAudioConverter.m */; }; + 3237E1B12CF7868B0084AA51 /* SFBAttachedPicture.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1492CF785DD0084AA51 /* SFBAttachedPicture.m */; }; + 3237E1B22CF7868B0084AA51 /* SFBAudioExporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0DD2CF785DD0084AA51 /* SFBAudioExporter.m */; }; + 3237E1B32CF7868B0084AA51 /* SFBTrueAudioEncoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E11C2CF785DD0084AA51 /* SFBTrueAudioEncoder.mm */; }; + 3237E1B42CF7868B0084AA51 /* SFBWavPackDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1032CF785DD0084AA51 /* SFBWavPackDecoder.m */; }; + 3237E1B52CF7868B0084AA51 /* SFBCoreAudioDecoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0E22CF785DD0084AA51 /* SFBCoreAudioDecoder.mm */; }; + 3237E1B72CF7868B0084AA51 /* AddAudioPropertiesToDictionary.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1462CF785DD0084AA51 /* AddAudioPropertiesToDictionary.mm */; }; + 3237E1B82CF7868B0084AA51 /* SFBMPEGDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0F52CF785DD0084AA51 /* SFBMPEGDecoder.m */; }; + 3237E1B92CF7868B0084AA51 /* SFBOggSpeexDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0FB2CF785DD0084AA51 /* SFBOggSpeexDecoder.m */; }; + 3237E1BA2CF7868B0084AA51 /* NSData+SFBExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1912CF785DD0084AA51 /* NSData+SFBExtensions.m */; }; + 3237E1BB2CF7868B0084AA51 /* SFBOggVorbisEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E11A2CF785DD0084AA51 /* SFBOggVorbisEncoder.m */; }; + 3237E1BC2CF7868B0084AA51 /* SFBLibsndfileDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0EE2CF785DD0084AA51 /* SFBLibsndfileDecoder.m */; }; + 3237E1BD2CF7868B0084AA51 /* SFBAudioEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1052CF785DD0084AA51 /* SFBAudioEncoder.m */; }; + 3237E1BE2CF7868B0084AA51 /* SFBAudioMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E14C2CF785DD0084AA51 /* SFBAudioMetadata.m */; }; + 3237E1BF2CF7868B0084AA51 /* SFBAIFFFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1482CF785DD0084AA51 /* SFBAIFFFile.mm */; }; + 3237E1C02CF7868B0084AA51 /* SFBAudioMetadata+TagLibMP4Tag.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1542CF785DD0084AA51 /* SFBAudioMetadata+TagLibMP4Tag.mm */; }; + 3237E1C12CF7868B0084AA51 /* SFBOggVorbisFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1732CF785DD0084AA51 /* SFBOggVorbisFile.mm */; }; + 3237E1C22CF7868B0084AA51 /* SFBDoPDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0E32CF785DD0084AA51 /* SFBDoPDecoder.m */; }; + 3237E1C32CF7868B0084AA51 /* SFBFLACDecoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0EC2CF785DD0084AA51 /* SFBFLACDecoder.mm */; }; + 3237E1C42CF7868B0084AA51 /* SFBReplayGainAnalyzer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0DA2CF785DD0084AA51 /* SFBReplayGainAnalyzer.m */; }; + 3237E1C52CF7868B0084AA51 /* SFBAudioMetadata+TagLibAPETag.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E14E2CF785DD0084AA51 /* SFBAudioMetadata+TagLibAPETag.mm */; }; + 3237E1C62CF7868B0084AA51 /* SFBDSFFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E15D2CF785DD0084AA51 /* SFBDSFFile.mm */; }; + 3237E1C72CF7868B0084AA51 /* SFBMP4File.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1692CF785DD0084AA51 /* SFBMP4File.mm */; }; + 3237E1C82CF7868B0084AA51 /* NSFileHandle+SFBHeaderReading.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1952CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.m */; }; + 3237E1C92CF7868B0084AA51 /* NSError+SFBURLPresentation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1932CF785DD0084AA51 /* NSError+SFBURLPresentation.m */; }; + 3237E1CA2CF7868B0084AA51 /* SFBWAVEFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E17D2CF785DD0084AA51 /* SFBWAVEFile.mm */; }; + 3237E1CB2CF7868B0084AA51 /* SFBAudioPlayerNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E18C2CF785DD0084AA51 /* SFBAudioPlayerNode.mm */; }; + 3237E1CC2CF7868B0084AA51 /* SFBDSDIFFFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E15B2CF785DD0084AA51 /* SFBDSDIFFFile.mm */; }; + 3237E1CD2CF7868B0084AA51 /* SFBMutableDataOutputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1872CF785DD0084AA51 /* SFBMutableDataOutputSource.m */; }; + 3237E1CE2CF7868B0084AA51 /* SFBAudioMetadata+TagLibXiphComment.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1582CF785DD0084AA51 /* SFBAudioMetadata+TagLibXiphComment.mm */; }; + 3237E1CF2CF7868B0084AA51 /* SFBDSDDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0E42CF785DD0084AA51 /* SFBDSDDecoder.m */; }; + 3237E1D02CF7868B0084AA51 /* SFBShortenDecoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0FF2CF785DD0084AA51 /* SFBShortenDecoder.mm */; }; + 3237E1D12CF7868B0084AA51 /* SFBImpulseTrackerModuleFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1632CF785DD0084AA51 /* SFBImpulseTrackerModuleFile.mm */; }; + 3237E1D22CF7868B0084AA51 /* SFBScreamTracker3ModuleFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1772CF785DD0084AA51 /* SFBScreamTracker3ModuleFile.mm */; }; + 3237E1D32CF7868B0084AA51 /* SFBOggFLACFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E16D2CF785DD0084AA51 /* SFBOggFLACFile.mm */; }; + 3237E1D42CF7868B0084AA51 /* SFBFLACFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1612CF785DD0084AA51 /* SFBFLACFile.mm */; }; + 3237E1D52CF7868B0084AA51 /* SFBAudioDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0DF2CF785DD0084AA51 /* SFBAudioDecoder.m */; }; + 3237E1D62CF7868B0084AA51 /* SFBOutputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1882CF785DD0084AA51 /* SFBOutputSource.m */; }; + 3237E1D72CF7868B0084AA51 /* SFBDataInputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E13B2CF785DD0084AA51 /* SFBDataInputSource.m */; }; + 3237E1D82CF7868B0084AA51 /* SFBInputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1402CF785DD0084AA51 /* SFBInputSource.m */; }; + 3237E1D92CF7868B0084AA51 /* SFBFLACEncoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E10A2CF785DD0084AA51 /* SFBFLACEncoder.mm */; }; + 3237E1DA2CF7868B0084AA51 /* SFBDSDPCMDecoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0E82CF785DD0084AA51 /* SFBDSDPCMDecoder.mm */; }; + 3237E1DB2CF7868B0084AA51 /* SFBOggSpeexFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1712CF785DD0084AA51 /* SFBOggSpeexFile.mm */; }; + 3237E1DC2CF7868B0084AA51 /* SFBAudioMetadata+TagLibTag.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1562CF785DD0084AA51 /* SFBAudioMetadata+TagLibTag.mm */; }; + 3237E1DD2CF7868B0084AA51 /* SFBOggSpeexEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1182CF785DD0084AA51 /* SFBOggSpeexEncoder.m */; }; + 3237E1DE2CF7868B0084AA51 /* SFBAudioProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1592CF785DD0084AA51 /* SFBAudioProperties.m */; }; + 3237E1DF2CF7868B0084AA51 /* SFBTrueAudioDecoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1012CF785DD0084AA51 /* SFBTrueAudioDecoder.mm */; }; + 3237E1E02CF7868B0084AA51 /* SFBAudioMetadata+TagLibID3v2Tag.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1522CF785DD0084AA51 /* SFBAudioMetadata+TagLibID3v2Tag.mm */; }; + 3237E1E12CF7868B0084AA51 /* SFBFileInputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E13F2CF785DD0084AA51 /* SFBFileInputSource.m */; }; + 3237E1E22CF7868B0084AA51 /* SFBCoreAudioEncoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1082CF785DD0084AA51 /* SFBCoreAudioEncoder.mm */; }; + 3237E1E32CF7868B0084AA51 /* SFBLoopableRegionDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0EF2CF785DD0084AA51 /* SFBLoopableRegionDecoder.m */; }; + 3237E1E42CF7868B0084AA51 /* SFBOggOpusFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E16F2CF785DD0084AA51 /* SFBOggOpusFile.mm */; }; + 3237E1E52CF7868B0084AA51 /* SFBExtendedModuleFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E15F2CF785DD0084AA51 /* SFBExtendedModuleFile.mm */; }; + 3237E1E62CF7868B0084AA51 /* SFBAudioMetadata+TagLibID3v1Tag.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1502CF785DD0084AA51 /* SFBAudioMetadata+TagLibID3v1Tag.mm */; }; + 3237E1E72CF7868B0084AA51 /* SFBBufferOutputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1832CF785DD0084AA51 /* SFBBufferOutputSource.m */; }; + 3237E1E82CF7868B0084AA51 /* SFBWavPackFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E17F2CF785DD0084AA51 /* SFBWavPackFile.mm */; }; + 3237E1E92CF7868B0084AA51 /* SFBDSDIFFDecoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0E72CF785DD0084AA51 /* SFBDSDIFFDecoder.mm */; }; + 3237E1EA2CF7868B0084AA51 /* SFBModuleDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0F12CF785DD0084AA51 /* SFBModuleDecoder.m */; }; + 3237E1EB2CF7868B0084AA51 /* SFBWavPackEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E11E2CF785DD0084AA51 /* SFBWavPackEncoder.m */; }; + 3237E1EC2CF7868B0084AA51 /* SFBMonkeysAudioFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1652CF785DD0084AA51 /* SFBMonkeysAudioFile.mm */; }; + 3237E1ED2CF7868B0084AA51 /* SFBFileOutputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1852CF785DD0084AA51 /* SFBFileOutputSource.m */; }; + 3237E1EE2CF7868B0084AA51 /* SFBMusepackDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0F72CF785DD0084AA51 /* SFBMusepackDecoder.m */; }; + 3237E1EF2CF7868B0084AA51 /* SFBTrueAudioFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E17B2CF785DD0084AA51 /* SFBTrueAudioFile.mm */; }; + 3237E1F02CF7868B0084AA51 /* SFBProTrackerModuleFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1752CF785DD0084AA51 /* SFBProTrackerModuleFile.mm */; }; + 3237E1F12CF7868B0084AA51 /* SFBOggVorbisDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0FD2CF785DD0084AA51 /* SFBOggVorbisDecoder.m */; }; + 3237E1F22CF7868B0084AA51 /* SFBAudioPlayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E18B2CF785DD0084AA51 /* SFBAudioPlayer.mm */; }; + 3237E1F32CF7868B0084AA51 /* SFBMusepackEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1122CF785DD0084AA51 /* SFBMusepackEncoder.m */; }; + 3237E1F42CF7868B0084AA51 /* SFBMonkeysAudioEncoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E10E2CF785DD0084AA51 /* SFBMonkeysAudioEncoder.mm */; }; + 3237E1F52CF7868B0084AA51 /* SFBMemoryMappedFileInputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1432CF785DD0084AA51 /* SFBMemoryMappedFileInputSource.m */; }; + 3237E1F62CF7868B0084AA51 /* SFBMusepackFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E16B2CF785DD0084AA51 /* SFBMusepackFile.mm */; }; + 3237E1F72CF7868B0084AA51 /* SFBShortenFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1792CF785DD0084AA51 /* SFBShortenFile.m */; }; + 3237E1F82CF7868B0084AA51 /* SFBOggOpusDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0F92CF785DD0084AA51 /* SFBOggOpusDecoder.m */; }; + 3237E1F92CF7868B0084AA51 /* SFBMP3File.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1672CF785DD0084AA51 /* SFBMP3File.mm */; }; + 3237E1FA2CF7868B0084AA51 /* SFBMonkeysAudioDecoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0F32CF785DD0084AA51 /* SFBMonkeysAudioDecoder.mm */; }; + 3237E1FB2CF7868B0084AA51 /* SFBAudioFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E14A2CF785DD0084AA51 /* SFBAudioFile.m */; }; + 3237E1FC2CF7868B0084AA51 /* SFBLibsndfileEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E10C2CF785DD0084AA51 /* SFBLibsndfileEncoder.m */; }; + 3237E1FD2CF7868B0084AA51 /* SFBFileContentsInputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E13D2CF785DD0084AA51 /* SFBFileContentsInputSource.m */; }; + 3237E1FE2CF7868B0084AA51 /* SFBDSFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0EA2CF785DD0084AA51 /* SFBDSFDecoder.m */; }; + 3237E1FF2CF7868B0084AA51 /* SFBOggOpusEncoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1162CF785DD0084AA51 /* SFBOggOpusEncoder.mm */; }; + 3237E2002CF7868B0084AA51 /* SFBMP3Encoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1102CF785DD0084AA51 /* SFBMP3Encoder.mm */; }; + 3237E2012CF786BA0084AA51 /* SFBAudioPlayerNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E12C2CF785DD0084AA51 /* SFBAudioPlayerNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2022CF786BA0084AA51 /* SFBOutputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1342CF785DD0084AA51 /* SFBOutputSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2032CF786BA0084AA51 /* SFBAudioEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1252CF785DD0084AA51 /* SFBAudioEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2042CF786BA0084AA51 /* SFBDSDPCMDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1312CF785DD0084AA51 /* SFBDSDPCMDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2052CF786BA0084AA51 /* SFBPCMDecoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1352CF785DD0084AA51 /* SFBPCMDecoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2062CF786BA0084AA51 /* SFBAudioFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1292CF785DD0084AA51 /* SFBAudioFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2072CF786BA0084AA51 /* SFBDSDDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E12F2CF785DD0084AA51 /* SFBDSDDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2082CF786BA0084AA51 /* SFBAttachedPicture.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1202CF785DD0084AA51 /* SFBAttachedPicture.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2092CF786BA0084AA51 /* SFBInputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1322CF785DD0084AA51 /* SFBInputSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E20A2CF786BA0084AA51 /* SFBAudioEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1262CF785DD0084AA51 /* SFBAudioEngine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E20B2CF786BA0084AA51 /* SFBAudioProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E12D2CF785DD0084AA51 /* SFBAudioProperties.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E20C2CF786BA0084AA51 /* SFBPCMEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1362CF785DD0084AA51 /* SFBPCMEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E20D2CF786BA0084AA51 /* SFBAudioDecoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1232CF785DD0084AA51 /* SFBAudioDecoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E20E2CF786BA0084AA51 /* SFBLoopableRegionDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1332CF785DD0084AA51 /* SFBLoopableRegionDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E20F2CF786BA0084AA51 /* SFBAudioExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1282CF785DD0084AA51 /* SFBAudioExporter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2102CF786BA0084AA51 /* SFBAudioPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E12B2CF785DD0084AA51 /* SFBAudioPlayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2112CF786BA0084AA51 /* SFBDSDDecoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1302CF785DD0084AA51 /* SFBDSDDecoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2122CF786BA0084AA51 /* SFBAudioMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E12A2CF785DD0084AA51 /* SFBAudioMetadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2132CF786BA0084AA51 /* SFBAudioEngineTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1272CF785DD0084AA51 /* SFBAudioEngineTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2142CF786BA0084AA51 /* SFBAudioDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1222CF785DD0084AA51 /* SFBAudioDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2152CF786BA0084AA51 /* SFBAudioConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1212CF785DD0084AA51 /* SFBAudioConverter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2162CF786BA0084AA51 /* SFBReplayGainAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1372CF785DD0084AA51 /* SFBReplayGainAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2172CF786BA0084AA51 /* SFBDoPDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E12E2CF785DD0084AA51 /* SFBDoPDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E2182CF786BA0084AA51 /* SFBAudioEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1242CF785DD0084AA51 /* SFBAudioEncoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3237E21B2CF787230084AA51 /* CXXAudioUtilities in Frameworks */ = {isa = PBXBuildFile; productRef = 3237E21A2CF787230084AA51 /* CXXAudioUtilities */; }; + 3237E21E2CF787330084AA51 /* AVFAudioExtensions in Frameworks */ = {isa = PBXBuildFile; productRef = 3237E21D2CF787330084AA51 /* AVFAudioExtensions */; }; + 328E81642CF7890700BFCEB2 /* sndfile in Frameworks */ = {isa = PBXBuildFile; productRef = 328E81632CF7890700BFCEB2 /* sndfile */; }; + 328E81672CF7891A00BFCEB2 /* tta-cpp in Frameworks */ = {isa = PBXBuildFile; productRef = 328E81662CF7891A00BFCEB2 /* tta-cpp */; }; + 328E816A2CF7898C00BFCEB2 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 328E81692CF7898C00BFCEB2 /* ImageIO.framework */; }; + 328E816C2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 328E816B2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework */; }; + 328E816D2CF789D100BFCEB2 /* SFBTimeUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3237E18E2CF785DD0084AA51 /* SFBTimeUtilities.cpp */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 3237E0CF2CF7855B0084AA51 /* SFBAudioEngine.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SFBAudioEngine.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3237E0DA2CF785DD0084AA51 /* SFBReplayGainAnalyzer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBReplayGainAnalyzer.m; sourceTree = ""; }; + 3237E0DC2CF785DD0084AA51 /* SFBAudioConverter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioConverter.m; sourceTree = ""; }; + 3237E0DD2CF785DD0084AA51 /* SFBAudioExporter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioExporter.m; sourceTree = ""; }; + 3237E0DF2CF785DD0084AA51 /* SFBAudioDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioDecoder.m; sourceTree = ""; }; + 3237E0E02CF785DD0084AA51 /* SFBAudioDecoder+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBAudioDecoder+Internal.h"; sourceTree = ""; }; + 3237E0E12CF785DD0084AA51 /* SFBCoreAudioDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBCoreAudioDecoder.h; sourceTree = ""; }; + 3237E0E22CF785DD0084AA51 /* SFBCoreAudioDecoder.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBCoreAudioDecoder.mm; sourceTree = ""; }; + 3237E0E32CF785DD0084AA51 /* SFBDoPDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBDoPDecoder.m; sourceTree = ""; }; + 3237E0E42CF785DD0084AA51 /* SFBDSDDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBDSDDecoder.m; sourceTree = ""; }; + 3237E0E52CF785DD0084AA51 /* SFBDSDDecoder+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBDSDDecoder+Internal.h"; sourceTree = ""; }; + 3237E0E62CF785DD0084AA51 /* SFBDSDIFFDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBDSDIFFDecoder.h; sourceTree = ""; }; + 3237E0E72CF785DD0084AA51 /* SFBDSDIFFDecoder.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBDSDIFFDecoder.mm; sourceTree = ""; }; + 3237E0E82CF785DD0084AA51 /* SFBDSDPCMDecoder.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBDSDPCMDecoder.mm; sourceTree = ""; }; + 3237E0E92CF785DD0084AA51 /* SFBDSFDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBDSFDecoder.h; sourceTree = ""; }; + 3237E0EA2CF785DD0084AA51 /* SFBDSFDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBDSFDecoder.m; sourceTree = ""; }; + 3237E0EB2CF785DD0084AA51 /* SFBFLACDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBFLACDecoder.h; sourceTree = ""; }; + 3237E0EC2CF785DD0084AA51 /* SFBFLACDecoder.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBFLACDecoder.mm; sourceTree = ""; }; + 3237E0ED2CF785DD0084AA51 /* SFBLibsndfileDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBLibsndfileDecoder.h; sourceTree = ""; }; + 3237E0EE2CF785DD0084AA51 /* SFBLibsndfileDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBLibsndfileDecoder.m; sourceTree = ""; }; + 3237E0EF2CF785DD0084AA51 /* SFBLoopableRegionDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBLoopableRegionDecoder.m; sourceTree = ""; }; + 3237E0F02CF785DD0084AA51 /* SFBModuleDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBModuleDecoder.h; sourceTree = ""; }; + 3237E0F12CF785DD0084AA51 /* SFBModuleDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBModuleDecoder.m; sourceTree = ""; }; + 3237E0F22CF785DD0084AA51 /* SFBMonkeysAudioDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBMonkeysAudioDecoder.h; sourceTree = ""; }; + 3237E0F32CF785DD0084AA51 /* SFBMonkeysAudioDecoder.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBMonkeysAudioDecoder.mm; sourceTree = ""; }; + 3237E0F42CF785DD0084AA51 /* SFBMPEGDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBMPEGDecoder.h; sourceTree = ""; }; + 3237E0F52CF785DD0084AA51 /* SFBMPEGDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBMPEGDecoder.m; sourceTree = ""; }; + 3237E0F62CF785DD0084AA51 /* SFBMusepackDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBMusepackDecoder.h; sourceTree = ""; }; + 3237E0F72CF785DD0084AA51 /* SFBMusepackDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBMusepackDecoder.m; sourceTree = ""; }; + 3237E0F82CF785DD0084AA51 /* SFBOggOpusDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBOggOpusDecoder.h; sourceTree = ""; }; + 3237E0F92CF785DD0084AA51 /* SFBOggOpusDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBOggOpusDecoder.m; sourceTree = ""; }; + 3237E0FA2CF785DD0084AA51 /* SFBOggSpeexDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBOggSpeexDecoder.h; sourceTree = ""; }; + 3237E0FB2CF785DD0084AA51 /* SFBOggSpeexDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBOggSpeexDecoder.m; sourceTree = ""; }; + 3237E0FC2CF785DD0084AA51 /* SFBOggVorbisDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBOggVorbisDecoder.h; sourceTree = ""; }; + 3237E0FD2CF785DD0084AA51 /* SFBOggVorbisDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBOggVorbisDecoder.m; sourceTree = ""; }; + 3237E0FE2CF785DD0084AA51 /* SFBShortenDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBShortenDecoder.h; sourceTree = ""; }; + 3237E0FF2CF785DD0084AA51 /* SFBShortenDecoder.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBShortenDecoder.mm; sourceTree = ""; }; + 3237E1002CF785DD0084AA51 /* SFBTrueAudioDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBTrueAudioDecoder.h; sourceTree = ""; }; + 3237E1012CF785DD0084AA51 /* SFBTrueAudioDecoder.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBTrueAudioDecoder.mm; sourceTree = ""; }; + 3237E1022CF785DD0084AA51 /* SFBWavPackDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBWavPackDecoder.h; sourceTree = ""; }; + 3237E1032CF785DD0084AA51 /* SFBWavPackDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBWavPackDecoder.m; sourceTree = ""; }; + 3237E1052CF785DD0084AA51 /* SFBAudioEncoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioEncoder.m; sourceTree = ""; }; + 3237E1062CF785DD0084AA51 /* SFBAudioEncoder+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBAudioEncoder+Internal.h"; sourceTree = ""; }; + 3237E1072CF785DD0084AA51 /* SFBCoreAudioEncoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBCoreAudioEncoder.h; sourceTree = ""; }; + 3237E1082CF785DD0084AA51 /* SFBCoreAudioEncoder.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBCoreAudioEncoder.mm; sourceTree = ""; }; + 3237E1092CF785DD0084AA51 /* SFBFLACEncoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBFLACEncoder.h; sourceTree = ""; }; + 3237E10A2CF785DD0084AA51 /* SFBFLACEncoder.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBFLACEncoder.mm; sourceTree = ""; }; + 3237E10B2CF785DD0084AA51 /* SFBLibsndfileEncoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBLibsndfileEncoder.h; sourceTree = ""; }; + 3237E10C2CF785DD0084AA51 /* SFBLibsndfileEncoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBLibsndfileEncoder.m; sourceTree = ""; }; + 3237E10D2CF785DD0084AA51 /* SFBMonkeysAudioEncoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBMonkeysAudioEncoder.h; sourceTree = ""; }; + 3237E10E2CF785DD0084AA51 /* SFBMonkeysAudioEncoder.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBMonkeysAudioEncoder.mm; sourceTree = ""; }; + 3237E10F2CF785DD0084AA51 /* SFBMP3Encoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBMP3Encoder.h; sourceTree = ""; }; + 3237E1102CF785DD0084AA51 /* SFBMP3Encoder.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBMP3Encoder.mm; sourceTree = ""; }; + 3237E1112CF785DD0084AA51 /* SFBMusepackEncoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBMusepackEncoder.h; sourceTree = ""; }; + 3237E1122CF785DD0084AA51 /* SFBMusepackEncoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBMusepackEncoder.m; sourceTree = ""; }; + 3237E1152CF785DD0084AA51 /* SFBOggOpusEncoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBOggOpusEncoder.h; sourceTree = ""; }; + 3237E1162CF785DD0084AA51 /* SFBOggOpusEncoder.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBOggOpusEncoder.mm; sourceTree = ""; }; + 3237E1172CF785DD0084AA51 /* SFBOggSpeexEncoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBOggSpeexEncoder.h; sourceTree = ""; }; + 3237E1182CF785DD0084AA51 /* SFBOggSpeexEncoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBOggSpeexEncoder.m; sourceTree = ""; }; + 3237E1192CF785DD0084AA51 /* SFBOggVorbisEncoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBOggVorbisEncoder.h; sourceTree = ""; }; + 3237E11A2CF785DD0084AA51 /* SFBOggVorbisEncoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBOggVorbisEncoder.m; sourceTree = ""; }; + 3237E11B2CF785DD0084AA51 /* SFBTrueAudioEncoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBTrueAudioEncoder.h; sourceTree = ""; }; + 3237E11C2CF785DD0084AA51 /* SFBTrueAudioEncoder.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBTrueAudioEncoder.mm; sourceTree = ""; }; + 3237E11D2CF785DD0084AA51 /* SFBWavPackEncoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBWavPackEncoder.h; sourceTree = ""; }; + 3237E11E2CF785DD0084AA51 /* SFBWavPackEncoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBWavPackEncoder.m; sourceTree = ""; }; + 3237E1202CF785DD0084AA51 /* SFBAttachedPicture.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAttachedPicture.h; sourceTree = ""; }; + 3237E1212CF785DD0084AA51 /* SFBAudioConverter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioConverter.h; sourceTree = ""; }; + 3237E1222CF785DD0084AA51 /* SFBAudioDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioDecoder.h; sourceTree = ""; }; + 3237E1232CF785DD0084AA51 /* SFBAudioDecoding.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioDecoding.h; sourceTree = ""; }; + 3237E1242CF785DD0084AA51 /* SFBAudioEncoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioEncoder.h; sourceTree = ""; }; + 3237E1252CF785DD0084AA51 /* SFBAudioEncoding.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioEncoding.h; sourceTree = ""; }; + 3237E1262CF785DD0084AA51 /* SFBAudioEngine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioEngine.h; sourceTree = ""; }; + 3237E1272CF785DD0084AA51 /* SFBAudioEngineTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioEngineTypes.h; sourceTree = ""; }; + 3237E1282CF785DD0084AA51 /* SFBAudioExporter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioExporter.h; sourceTree = ""; }; + 3237E1292CF785DD0084AA51 /* SFBAudioFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioFile.h; sourceTree = ""; }; + 3237E12A2CF785DD0084AA51 /* SFBAudioMetadata.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioMetadata.h; sourceTree = ""; }; + 3237E12B2CF785DD0084AA51 /* SFBAudioPlayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioPlayer.h; sourceTree = ""; }; + 3237E12C2CF785DD0084AA51 /* SFBAudioPlayerNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioPlayerNode.h; sourceTree = ""; }; + 3237E12D2CF785DD0084AA51 /* SFBAudioProperties.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioProperties.h; sourceTree = ""; }; + 3237E12E2CF785DD0084AA51 /* SFBDoPDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBDoPDecoder.h; sourceTree = ""; }; + 3237E12F2CF785DD0084AA51 /* SFBDSDDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBDSDDecoder.h; sourceTree = ""; }; + 3237E1302CF785DD0084AA51 /* SFBDSDDecoding.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBDSDDecoding.h; sourceTree = ""; }; + 3237E1312CF785DD0084AA51 /* SFBDSDPCMDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBDSDPCMDecoder.h; sourceTree = ""; }; + 3237E1322CF785DD0084AA51 /* SFBInputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBInputSource.h; sourceTree = ""; }; + 3237E1332CF785DD0084AA51 /* SFBLoopableRegionDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBLoopableRegionDecoder.h; sourceTree = ""; }; + 3237E1342CF785DD0084AA51 /* SFBOutputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBOutputSource.h; sourceTree = ""; }; + 3237E1352CF785DD0084AA51 /* SFBPCMDecoding.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBPCMDecoding.h; sourceTree = ""; }; + 3237E1362CF785DD0084AA51 /* SFBPCMEncoding.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBPCMEncoding.h; sourceTree = ""; }; + 3237E1372CF785DD0084AA51 /* SFBReplayGainAnalyzer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBReplayGainAnalyzer.h; sourceTree = ""; }; + 3237E13A2CF785DD0084AA51 /* SFBDataInputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBDataInputSource.h; sourceTree = ""; }; + 3237E13B2CF785DD0084AA51 /* SFBDataInputSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBDataInputSource.m; sourceTree = ""; }; + 3237E13C2CF785DD0084AA51 /* SFBFileContentsInputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBFileContentsInputSource.h; sourceTree = ""; }; + 3237E13D2CF785DD0084AA51 /* SFBFileContentsInputSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBFileContentsInputSource.m; sourceTree = ""; }; + 3237E13E2CF785DD0084AA51 /* SFBFileInputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBFileInputSource.h; sourceTree = ""; }; + 3237E13F2CF785DD0084AA51 /* SFBFileInputSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBFileInputSource.m; sourceTree = ""; }; + 3237E1402CF785DD0084AA51 /* SFBInputSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBInputSource.m; sourceTree = ""; }; + 3237E1412CF785DD0084AA51 /* SFBInputSource+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBInputSource+Internal.h"; sourceTree = ""; }; + 3237E1422CF785DD0084AA51 /* SFBMemoryMappedFileInputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBMemoryMappedFileInputSource.h; sourceTree = ""; }; + 3237E1432CF785DD0084AA51 /* SFBMemoryMappedFileInputSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBMemoryMappedFileInputSource.m; sourceTree = ""; }; + 3237E1452CF785DD0084AA51 /* AddAudioPropertiesToDictionary.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddAudioPropertiesToDictionary.h; sourceTree = ""; }; + 3237E1462CF785DD0084AA51 /* AddAudioPropertiesToDictionary.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AddAudioPropertiesToDictionary.mm; sourceTree = ""; }; + 3237E1472CF785DD0084AA51 /* SFBAIFFFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAIFFFile.h; sourceTree = ""; }; + 3237E1482CF785DD0084AA51 /* SFBAIFFFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBAIFFFile.mm; sourceTree = ""; }; + 3237E1492CF785DD0084AA51 /* SFBAttachedPicture.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAttachedPicture.m; sourceTree = ""; }; + 3237E14A2CF785DD0084AA51 /* SFBAudioFile.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioFile.m; sourceTree = ""; }; + 3237E14B2CF785DD0084AA51 /* SFBAudioFile+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBAudioFile+Internal.h"; sourceTree = ""; }; + 3237E14C2CF785DD0084AA51 /* SFBAudioMetadata.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioMetadata.m; sourceTree = ""; }; + 3237E14D2CF785DD0084AA51 /* SFBAudioMetadata+TagLibAPETag.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBAudioMetadata+TagLibAPETag.h"; sourceTree = ""; }; + 3237E14E2CF785DD0084AA51 /* SFBAudioMetadata+TagLibAPETag.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = "SFBAudioMetadata+TagLibAPETag.mm"; sourceTree = ""; }; + 3237E14F2CF785DD0084AA51 /* SFBAudioMetadata+TagLibID3v1Tag.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBAudioMetadata+TagLibID3v1Tag.h"; sourceTree = ""; }; + 3237E1502CF785DD0084AA51 /* SFBAudioMetadata+TagLibID3v1Tag.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = "SFBAudioMetadata+TagLibID3v1Tag.mm"; sourceTree = ""; }; + 3237E1512CF785DD0084AA51 /* SFBAudioMetadata+TagLibID3v2Tag.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBAudioMetadata+TagLibID3v2Tag.h"; sourceTree = ""; }; + 3237E1522CF785DD0084AA51 /* SFBAudioMetadata+TagLibID3v2Tag.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = "SFBAudioMetadata+TagLibID3v2Tag.mm"; sourceTree = ""; }; + 3237E1532CF785DD0084AA51 /* SFBAudioMetadata+TagLibMP4Tag.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBAudioMetadata+TagLibMP4Tag.h"; sourceTree = ""; }; + 3237E1542CF785DD0084AA51 /* SFBAudioMetadata+TagLibMP4Tag.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = "SFBAudioMetadata+TagLibMP4Tag.mm"; sourceTree = ""; }; + 3237E1552CF785DD0084AA51 /* SFBAudioMetadata+TagLibTag.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBAudioMetadata+TagLibTag.h"; sourceTree = ""; }; + 3237E1562CF785DD0084AA51 /* SFBAudioMetadata+TagLibTag.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = "SFBAudioMetadata+TagLibTag.mm"; sourceTree = ""; }; + 3237E1572CF785DD0084AA51 /* SFBAudioMetadata+TagLibXiphComment.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBAudioMetadata+TagLibXiphComment.h"; sourceTree = ""; }; + 3237E1582CF785DD0084AA51 /* SFBAudioMetadata+TagLibXiphComment.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = "SFBAudioMetadata+TagLibXiphComment.mm"; sourceTree = ""; }; + 3237E1592CF785DD0084AA51 /* SFBAudioProperties.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioProperties.m; sourceTree = ""; }; + 3237E15A2CF785DD0084AA51 /* SFBDSDIFFFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBDSDIFFFile.h; sourceTree = ""; }; + 3237E15B2CF785DD0084AA51 /* SFBDSDIFFFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBDSDIFFFile.mm; sourceTree = ""; }; + 3237E15C2CF785DD0084AA51 /* SFBDSFFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBDSFFile.h; sourceTree = ""; }; + 3237E15D2CF785DD0084AA51 /* SFBDSFFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBDSFFile.mm; sourceTree = ""; }; + 3237E15E2CF785DD0084AA51 /* SFBExtendedModuleFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBExtendedModuleFile.h; sourceTree = ""; }; + 3237E15F2CF785DD0084AA51 /* SFBExtendedModuleFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBExtendedModuleFile.mm; sourceTree = ""; }; + 3237E1602CF785DD0084AA51 /* SFBFLACFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBFLACFile.h; sourceTree = ""; }; + 3237E1612CF785DD0084AA51 /* SFBFLACFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBFLACFile.mm; sourceTree = ""; }; + 3237E1622CF785DD0084AA51 /* SFBImpulseTrackerModuleFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBImpulseTrackerModuleFile.h; sourceTree = ""; }; + 3237E1632CF785DD0084AA51 /* SFBImpulseTrackerModuleFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBImpulseTrackerModuleFile.mm; sourceTree = ""; }; + 3237E1642CF785DD0084AA51 /* SFBMonkeysAudioFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBMonkeysAudioFile.h; sourceTree = ""; }; + 3237E1652CF785DD0084AA51 /* SFBMonkeysAudioFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBMonkeysAudioFile.mm; sourceTree = ""; }; + 3237E1662CF785DD0084AA51 /* SFBMP3File.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBMP3File.h; sourceTree = ""; }; + 3237E1672CF785DD0084AA51 /* SFBMP3File.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBMP3File.mm; sourceTree = ""; }; + 3237E1682CF785DD0084AA51 /* SFBMP4File.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBMP4File.h; sourceTree = ""; }; + 3237E1692CF785DD0084AA51 /* SFBMP4File.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBMP4File.mm; sourceTree = ""; }; + 3237E16A2CF785DD0084AA51 /* SFBMusepackFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBMusepackFile.h; sourceTree = ""; }; + 3237E16B2CF785DD0084AA51 /* SFBMusepackFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBMusepackFile.mm; sourceTree = ""; }; + 3237E16C2CF785DD0084AA51 /* SFBOggFLACFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBOggFLACFile.h; sourceTree = ""; }; + 3237E16D2CF785DD0084AA51 /* SFBOggFLACFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBOggFLACFile.mm; sourceTree = ""; }; + 3237E16E2CF785DD0084AA51 /* SFBOggOpusFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBOggOpusFile.h; sourceTree = ""; }; + 3237E16F2CF785DD0084AA51 /* SFBOggOpusFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBOggOpusFile.mm; sourceTree = ""; }; + 3237E1702CF785DD0084AA51 /* SFBOggSpeexFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBOggSpeexFile.h; sourceTree = ""; }; + 3237E1712CF785DD0084AA51 /* SFBOggSpeexFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBOggSpeexFile.mm; sourceTree = ""; }; + 3237E1722CF785DD0084AA51 /* SFBOggVorbisFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBOggVorbisFile.h; sourceTree = ""; }; + 3237E1732CF785DD0084AA51 /* SFBOggVorbisFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBOggVorbisFile.mm; sourceTree = ""; }; + 3237E1742CF785DD0084AA51 /* SFBProTrackerModuleFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBProTrackerModuleFile.h; sourceTree = ""; }; + 3237E1752CF785DD0084AA51 /* SFBProTrackerModuleFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBProTrackerModuleFile.mm; sourceTree = ""; }; + 3237E1762CF785DD0084AA51 /* SFBScreamTracker3ModuleFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBScreamTracker3ModuleFile.h; sourceTree = ""; }; + 3237E1772CF785DD0084AA51 /* SFBScreamTracker3ModuleFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBScreamTracker3ModuleFile.mm; sourceTree = ""; }; + 3237E1782CF785DD0084AA51 /* SFBShortenFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBShortenFile.h; sourceTree = ""; }; + 3237E1792CF785DD0084AA51 /* SFBShortenFile.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBShortenFile.m; sourceTree = ""; }; + 3237E17A2CF785DD0084AA51 /* SFBTrueAudioFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBTrueAudioFile.h; sourceTree = ""; }; + 3237E17B2CF785DD0084AA51 /* SFBTrueAudioFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBTrueAudioFile.mm; sourceTree = ""; }; + 3237E17C2CF785DD0084AA51 /* SFBWAVEFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBWAVEFile.h; sourceTree = ""; }; + 3237E17D2CF785DD0084AA51 /* SFBWAVEFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBWAVEFile.mm; sourceTree = ""; }; + 3237E17E2CF785DD0084AA51 /* SFBWavPackFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBWavPackFile.h; sourceTree = ""; }; + 3237E17F2CF785DD0084AA51 /* SFBWavPackFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBWavPackFile.mm; sourceTree = ""; }; + 3237E1802CF785DD0084AA51 /* TagLibStringUtilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TagLibStringUtilities.h; sourceTree = ""; }; + 3237E1822CF785DD0084AA51 /* SFBBufferOutputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBBufferOutputSource.h; sourceTree = ""; }; + 3237E1832CF785DD0084AA51 /* SFBBufferOutputSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBBufferOutputSource.m; sourceTree = ""; }; + 3237E1842CF785DD0084AA51 /* SFBFileOutputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBFileOutputSource.h; sourceTree = ""; }; + 3237E1852CF785DD0084AA51 /* SFBFileOutputSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBFileOutputSource.m; sourceTree = ""; }; + 3237E1862CF785DD0084AA51 /* SFBMutableDataOutputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBMutableDataOutputSource.h; sourceTree = ""; }; + 3237E1872CF785DD0084AA51 /* SFBMutableDataOutputSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBMutableDataOutputSource.m; sourceTree = ""; }; + 3237E1882CF785DD0084AA51 /* SFBOutputSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBOutputSource.m; sourceTree = ""; }; + 3237E1892CF785DD0084AA51 /* SFBOutputSource+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBOutputSource+Internal.h"; sourceTree = ""; }; + 3237E18B2CF785DD0084AA51 /* SFBAudioPlayer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBAudioPlayer.mm; sourceTree = ""; }; + 3237E18C2CF785DD0084AA51 /* SFBAudioPlayerNode.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBAudioPlayerNode.mm; sourceTree = ""; }; + 3237E18D2CF785DD0084AA51 /* SFBTimeUtilities.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = SFBTimeUtilities.hpp; sourceTree = ""; }; + 3237E18E2CF785DD0084AA51 /* SFBTimeUtilities.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SFBTimeUtilities.cpp; sourceTree = ""; }; + 3237E1902CF785DD0084AA51 /* NSData+SFBExtensions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSData+SFBExtensions.h"; sourceTree = ""; }; + 3237E1912CF785DD0084AA51 /* NSData+SFBExtensions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSData+SFBExtensions.m"; sourceTree = ""; }; + 3237E1922CF785DD0084AA51 /* NSError+SFBURLPresentation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSError+SFBURLPresentation.h"; sourceTree = ""; }; + 3237E1932CF785DD0084AA51 /* NSError+SFBURLPresentation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSError+SFBURLPresentation.m"; sourceTree = ""; }; + 3237E1942CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSFileHandle+SFBHeaderReading.h"; sourceTree = ""; }; + 3237E1952CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSFileHandle+SFBHeaderReading.m"; sourceTree = ""; }; + 3237E1962CF785DD0084AA51 /* SFBCStringForOSType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBCStringForOSType.h; sourceTree = ""; }; + 3237E1972CF785DD0084AA51 /* SFBTernaryTruthValue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBTernaryTruthValue.h; sourceTree = ""; }; + 3237E19A2CF785DD0084AA51 /* SFBAudioEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioEngine.swift; sourceTree = ""; }; + 3237E19B2CF785DD0084AA51 /* SFBAudioMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioMetadata.swift; sourceTree = ""; }; + 3237E19C2CF785DD0084AA51 /* SFBAudioPlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioPlayer.swift; sourceTree = ""; }; + 3237E19D2CF785DD0084AA51 /* SFBAudioPlayerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioPlayerNode.swift; sourceTree = ""; }; + 3237E19E2CF785DD0084AA51 /* SFBAudioProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioProperties.swift; sourceTree = ""; }; + 3237E19F2CF785DD0084AA51 /* SFBInputSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBInputSource.swift; sourceTree = ""; }; + 3237E1A02CF785DD0084AA51 /* SFBOutputSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBOutputSource.swift; sourceTree = ""; }; + 3237E1A12CF785DD0084AA51 /* SFBReplayGainAnalyzer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBReplayGainAnalyzer.swift; sourceTree = ""; }; + 3237E1A52CF785DD0084AA51 /* SFBAudioEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioEngineTests.swift; sourceTree = ""; }; + 328E81692CF7898C00BFCEB2 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.1.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; + 328E816B2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UniformTypeIdentifiers.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.1.sdk/System/Library/Frameworks/UniformTypeIdentifiers.framework; sourceTree = DEVELOPER_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 3237E0CC2CF7855B0084AA51 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 328E81672CF7891A00BFCEB2 /* tta-cpp in Frameworks */, + 321C18BA2CF7889A00670824 /* mpc in Frameworks */, + 321C18B42CF7887600670824 /* speex in Frameworks */, + 328E816A2CF7898C00BFCEB2 /* ImageIO.framework in Frameworks */, + 321C18BD2CF788AB00670824 /* mpg123 in Frameworks */, + 322CE34D2CF788020070996C /* wavpack in Frameworks */, + 322CE34A2CF7878D0070996C /* taglib in Frameworks */, + 322CE3532CF788240070996C /* FLAC in Frameworks */, + 322CE3472CF787740070996C /* MAC in Frameworks */, + 322CE3562CF788360070996C /* opus in Frameworks */, + 321C18B12CF7886000670824 /* vorbis in Frameworks */, + 321C18B72CF7888800670824 /* lame in Frameworks */, + 328E816C2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework in Frameworks */, + 322CE3442CF787630070996C /* dumb in Frameworks */, + 322CE3502CF788120070996C /* ogg in Frameworks */, + 328E81642CF7890700BFCEB2 /* sndfile in Frameworks */, + 3237E21B2CF787230084AA51 /* CXXAudioUtilities in Frameworks */, + 3237E21E2CF787330084AA51 /* AVFAudioExtensions in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 3237E0C52CF7855B0084AA51 = { + isa = PBXGroup; + children = ( + 3237E1A42CF785DD0084AA51 /* Sources */, + 3237E1A72CF785DD0084AA51 /* Tests */, + 328E81682CF7898C00BFCEB2 /* Frameworks */, + 3237E0D02CF7855B0084AA51 /* Products */, + ); + sourceTree = ""; + }; + 3237E0D02CF7855B0084AA51 /* Products */ = { + isa = PBXGroup; + children = ( + 3237E0CF2CF7855B0084AA51 /* SFBAudioEngine.framework */, + ); + name = Products; + sourceTree = ""; + }; + 3237E0DB2CF785DD0084AA51 /* Analysis */ = { + isa = PBXGroup; + children = ( + 3237E0DA2CF785DD0084AA51 /* SFBReplayGainAnalyzer.m */, + ); + path = Analysis; + sourceTree = ""; + }; + 3237E0DE2CF785DD0084AA51 /* Conversion */ = { + isa = PBXGroup; + children = ( + 3237E0DC2CF785DD0084AA51 /* SFBAudioConverter.m */, + 3237E0DD2CF785DD0084AA51 /* SFBAudioExporter.m */, + ); + path = Conversion; + sourceTree = ""; + }; + 3237E1042CF785DD0084AA51 /* Decoders */ = { + isa = PBXGroup; + children = ( + 3237E0DF2CF785DD0084AA51 /* SFBAudioDecoder.m */, + 3237E0E02CF785DD0084AA51 /* SFBAudioDecoder+Internal.h */, + 3237E0E12CF785DD0084AA51 /* SFBCoreAudioDecoder.h */, + 3237E0E22CF785DD0084AA51 /* SFBCoreAudioDecoder.mm */, + 3237E0E32CF785DD0084AA51 /* SFBDoPDecoder.m */, + 3237E0E42CF785DD0084AA51 /* SFBDSDDecoder.m */, + 3237E0E52CF785DD0084AA51 /* SFBDSDDecoder+Internal.h */, + 3237E0E62CF785DD0084AA51 /* SFBDSDIFFDecoder.h */, + 3237E0E72CF785DD0084AA51 /* SFBDSDIFFDecoder.mm */, + 3237E0E82CF785DD0084AA51 /* SFBDSDPCMDecoder.mm */, + 3237E0E92CF785DD0084AA51 /* SFBDSFDecoder.h */, + 3237E0EA2CF785DD0084AA51 /* SFBDSFDecoder.m */, + 3237E0EB2CF785DD0084AA51 /* SFBFLACDecoder.h */, + 3237E0EC2CF785DD0084AA51 /* SFBFLACDecoder.mm */, + 3237E0ED2CF785DD0084AA51 /* SFBLibsndfileDecoder.h */, + 3237E0EE2CF785DD0084AA51 /* SFBLibsndfileDecoder.m */, + 3237E0EF2CF785DD0084AA51 /* SFBLoopableRegionDecoder.m */, + 3237E0F02CF785DD0084AA51 /* SFBModuleDecoder.h */, + 3237E0F12CF785DD0084AA51 /* SFBModuleDecoder.m */, + 3237E0F22CF785DD0084AA51 /* SFBMonkeysAudioDecoder.h */, + 3237E0F32CF785DD0084AA51 /* SFBMonkeysAudioDecoder.mm */, + 3237E0F42CF785DD0084AA51 /* SFBMPEGDecoder.h */, + 3237E0F52CF785DD0084AA51 /* SFBMPEGDecoder.m */, + 3237E0F62CF785DD0084AA51 /* SFBMusepackDecoder.h */, + 3237E0F72CF785DD0084AA51 /* SFBMusepackDecoder.m */, + 3237E0F82CF785DD0084AA51 /* SFBOggOpusDecoder.h */, + 3237E0F92CF785DD0084AA51 /* SFBOggOpusDecoder.m */, + 3237E0FA2CF785DD0084AA51 /* SFBOggSpeexDecoder.h */, + 3237E0FB2CF785DD0084AA51 /* SFBOggSpeexDecoder.m */, + 3237E0FC2CF785DD0084AA51 /* SFBOggVorbisDecoder.h */, + 3237E0FD2CF785DD0084AA51 /* SFBOggVorbisDecoder.m */, + 3237E0FE2CF785DD0084AA51 /* SFBShortenDecoder.h */, + 3237E0FF2CF785DD0084AA51 /* SFBShortenDecoder.mm */, + 3237E1002CF785DD0084AA51 /* SFBTrueAudioDecoder.h */, + 3237E1012CF785DD0084AA51 /* SFBTrueAudioDecoder.mm */, + 3237E1022CF785DD0084AA51 /* SFBWavPackDecoder.h */, + 3237E1032CF785DD0084AA51 /* SFBWavPackDecoder.m */, + ); + path = Decoders; + sourceTree = ""; + }; + 3237E11F2CF785DD0084AA51 /* Encoders */ = { + isa = PBXGroup; + children = ( + 3237E1052CF785DD0084AA51 /* SFBAudioEncoder.m */, + 3237E1062CF785DD0084AA51 /* SFBAudioEncoder+Internal.h */, + 3237E1072CF785DD0084AA51 /* SFBCoreAudioEncoder.h */, + 3237E1082CF785DD0084AA51 /* SFBCoreAudioEncoder.mm */, + 3237E1092CF785DD0084AA51 /* SFBFLACEncoder.h */, + 3237E10A2CF785DD0084AA51 /* SFBFLACEncoder.mm */, + 3237E10B2CF785DD0084AA51 /* SFBLibsndfileEncoder.h */, + 3237E10C2CF785DD0084AA51 /* SFBLibsndfileEncoder.m */, + 3237E10D2CF785DD0084AA51 /* SFBMonkeysAudioEncoder.h */, + 3237E10E2CF785DD0084AA51 /* SFBMonkeysAudioEncoder.mm */, + 3237E10F2CF785DD0084AA51 /* SFBMP3Encoder.h */, + 3237E1102CF785DD0084AA51 /* SFBMP3Encoder.mm */, + 3237E1112CF785DD0084AA51 /* SFBMusepackEncoder.h */, + 3237E1122CF785DD0084AA51 /* SFBMusepackEncoder.m */, + 3237E1152CF785DD0084AA51 /* SFBOggOpusEncoder.h */, + 3237E1162CF785DD0084AA51 /* SFBOggOpusEncoder.mm */, + 3237E1172CF785DD0084AA51 /* SFBOggSpeexEncoder.h */, + 3237E1182CF785DD0084AA51 /* SFBOggSpeexEncoder.m */, + 3237E1192CF785DD0084AA51 /* SFBOggVorbisEncoder.h */, + 3237E11A2CF785DD0084AA51 /* SFBOggVorbisEncoder.m */, + 3237E11B2CF785DD0084AA51 /* SFBTrueAudioEncoder.h */, + 3237E11C2CF785DD0084AA51 /* SFBTrueAudioEncoder.mm */, + 3237E11D2CF785DD0084AA51 /* SFBWavPackEncoder.h */, + 3237E11E2CF785DD0084AA51 /* SFBWavPackEncoder.m */, + ); + path = Encoders; + sourceTree = ""; + }; + 3237E1382CF785DD0084AA51 /* SFBAudioEngine */ = { + isa = PBXGroup; + children = ( + 3237E1202CF785DD0084AA51 /* SFBAttachedPicture.h */, + 3237E1212CF785DD0084AA51 /* SFBAudioConverter.h */, + 3237E1222CF785DD0084AA51 /* SFBAudioDecoder.h */, + 3237E1232CF785DD0084AA51 /* SFBAudioDecoding.h */, + 3237E1242CF785DD0084AA51 /* SFBAudioEncoder.h */, + 3237E1252CF785DD0084AA51 /* SFBAudioEncoding.h */, + 3237E1262CF785DD0084AA51 /* SFBAudioEngine.h */, + 3237E1272CF785DD0084AA51 /* SFBAudioEngineTypes.h */, + 3237E1282CF785DD0084AA51 /* SFBAudioExporter.h */, + 3237E1292CF785DD0084AA51 /* SFBAudioFile.h */, + 3237E12A2CF785DD0084AA51 /* SFBAudioMetadata.h */, + 3237E12B2CF785DD0084AA51 /* SFBAudioPlayer.h */, + 3237E12C2CF785DD0084AA51 /* SFBAudioPlayerNode.h */, + 3237E12D2CF785DD0084AA51 /* SFBAudioProperties.h */, + 3237E12E2CF785DD0084AA51 /* SFBDoPDecoder.h */, + 3237E12F2CF785DD0084AA51 /* SFBDSDDecoder.h */, + 3237E1302CF785DD0084AA51 /* SFBDSDDecoding.h */, + 3237E1312CF785DD0084AA51 /* SFBDSDPCMDecoder.h */, + 3237E1322CF785DD0084AA51 /* SFBInputSource.h */, + 3237E1332CF785DD0084AA51 /* SFBLoopableRegionDecoder.h */, + 3237E1342CF785DD0084AA51 /* SFBOutputSource.h */, + 3237E1352CF785DD0084AA51 /* SFBPCMDecoding.h */, + 3237E1362CF785DD0084AA51 /* SFBPCMEncoding.h */, + 3237E1372CF785DD0084AA51 /* SFBReplayGainAnalyzer.h */, + ); + path = SFBAudioEngine; + sourceTree = ""; + }; + 3237E1392CF785DD0084AA51 /* include */ = { + isa = PBXGroup; + children = ( + 3237E1382CF785DD0084AA51 /* SFBAudioEngine */, + ); + path = include; + sourceTree = ""; + }; + 3237E1442CF785DD0084AA51 /* Input */ = { + isa = PBXGroup; + children = ( + 3237E13A2CF785DD0084AA51 /* SFBDataInputSource.h */, + 3237E13B2CF785DD0084AA51 /* SFBDataInputSource.m */, + 3237E13C2CF785DD0084AA51 /* SFBFileContentsInputSource.h */, + 3237E13D2CF785DD0084AA51 /* SFBFileContentsInputSource.m */, + 3237E13E2CF785DD0084AA51 /* SFBFileInputSource.h */, + 3237E13F2CF785DD0084AA51 /* SFBFileInputSource.m */, + 3237E1402CF785DD0084AA51 /* SFBInputSource.m */, + 3237E1412CF785DD0084AA51 /* SFBInputSource+Internal.h */, + 3237E1422CF785DD0084AA51 /* SFBMemoryMappedFileInputSource.h */, + 3237E1432CF785DD0084AA51 /* SFBMemoryMappedFileInputSource.m */, + ); + path = Input; + sourceTree = ""; + }; + 3237E1812CF785DD0084AA51 /* Metadata */ = { + isa = PBXGroup; + children = ( + 3237E1452CF785DD0084AA51 /* AddAudioPropertiesToDictionary.h */, + 3237E1462CF785DD0084AA51 /* AddAudioPropertiesToDictionary.mm */, + 3237E1472CF785DD0084AA51 /* SFBAIFFFile.h */, + 3237E1482CF785DD0084AA51 /* SFBAIFFFile.mm */, + 3237E1492CF785DD0084AA51 /* SFBAttachedPicture.m */, + 3237E14A2CF785DD0084AA51 /* SFBAudioFile.m */, + 3237E14B2CF785DD0084AA51 /* SFBAudioFile+Internal.h */, + 3237E14C2CF785DD0084AA51 /* SFBAudioMetadata.m */, + 3237E14D2CF785DD0084AA51 /* SFBAudioMetadata+TagLibAPETag.h */, + 3237E14E2CF785DD0084AA51 /* SFBAudioMetadata+TagLibAPETag.mm */, + 3237E14F2CF785DD0084AA51 /* SFBAudioMetadata+TagLibID3v1Tag.h */, + 3237E1502CF785DD0084AA51 /* SFBAudioMetadata+TagLibID3v1Tag.mm */, + 3237E1512CF785DD0084AA51 /* SFBAudioMetadata+TagLibID3v2Tag.h */, + 3237E1522CF785DD0084AA51 /* SFBAudioMetadata+TagLibID3v2Tag.mm */, + 3237E1532CF785DD0084AA51 /* SFBAudioMetadata+TagLibMP4Tag.h */, + 3237E1542CF785DD0084AA51 /* SFBAudioMetadata+TagLibMP4Tag.mm */, + 3237E1552CF785DD0084AA51 /* SFBAudioMetadata+TagLibTag.h */, + 3237E1562CF785DD0084AA51 /* SFBAudioMetadata+TagLibTag.mm */, + 3237E1572CF785DD0084AA51 /* SFBAudioMetadata+TagLibXiphComment.h */, + 3237E1582CF785DD0084AA51 /* SFBAudioMetadata+TagLibXiphComment.mm */, + 3237E1592CF785DD0084AA51 /* SFBAudioProperties.m */, + 3237E15A2CF785DD0084AA51 /* SFBDSDIFFFile.h */, + 3237E15B2CF785DD0084AA51 /* SFBDSDIFFFile.mm */, + 3237E15C2CF785DD0084AA51 /* SFBDSFFile.h */, + 3237E15D2CF785DD0084AA51 /* SFBDSFFile.mm */, + 3237E15E2CF785DD0084AA51 /* SFBExtendedModuleFile.h */, + 3237E15F2CF785DD0084AA51 /* SFBExtendedModuleFile.mm */, + 3237E1602CF785DD0084AA51 /* SFBFLACFile.h */, + 3237E1612CF785DD0084AA51 /* SFBFLACFile.mm */, + 3237E1622CF785DD0084AA51 /* SFBImpulseTrackerModuleFile.h */, + 3237E1632CF785DD0084AA51 /* SFBImpulseTrackerModuleFile.mm */, + 3237E1642CF785DD0084AA51 /* SFBMonkeysAudioFile.h */, + 3237E1652CF785DD0084AA51 /* SFBMonkeysAudioFile.mm */, + 3237E1662CF785DD0084AA51 /* SFBMP3File.h */, + 3237E1672CF785DD0084AA51 /* SFBMP3File.mm */, + 3237E1682CF785DD0084AA51 /* SFBMP4File.h */, + 3237E1692CF785DD0084AA51 /* SFBMP4File.mm */, + 3237E16A2CF785DD0084AA51 /* SFBMusepackFile.h */, + 3237E16B2CF785DD0084AA51 /* SFBMusepackFile.mm */, + 3237E16C2CF785DD0084AA51 /* SFBOggFLACFile.h */, + 3237E16D2CF785DD0084AA51 /* SFBOggFLACFile.mm */, + 3237E16E2CF785DD0084AA51 /* SFBOggOpusFile.h */, + 3237E16F2CF785DD0084AA51 /* SFBOggOpusFile.mm */, + 3237E1702CF785DD0084AA51 /* SFBOggSpeexFile.h */, + 3237E1712CF785DD0084AA51 /* SFBOggSpeexFile.mm */, + 3237E1722CF785DD0084AA51 /* SFBOggVorbisFile.h */, + 3237E1732CF785DD0084AA51 /* SFBOggVorbisFile.mm */, + 3237E1742CF785DD0084AA51 /* SFBProTrackerModuleFile.h */, + 3237E1752CF785DD0084AA51 /* SFBProTrackerModuleFile.mm */, + 3237E1762CF785DD0084AA51 /* SFBScreamTracker3ModuleFile.h */, + 3237E1772CF785DD0084AA51 /* SFBScreamTracker3ModuleFile.mm */, + 3237E1782CF785DD0084AA51 /* SFBShortenFile.h */, + 3237E1792CF785DD0084AA51 /* SFBShortenFile.m */, + 3237E17A2CF785DD0084AA51 /* SFBTrueAudioFile.h */, + 3237E17B2CF785DD0084AA51 /* SFBTrueAudioFile.mm */, + 3237E17C2CF785DD0084AA51 /* SFBWAVEFile.h */, + 3237E17D2CF785DD0084AA51 /* SFBWAVEFile.mm */, + 3237E17E2CF785DD0084AA51 /* SFBWavPackFile.h */, + 3237E17F2CF785DD0084AA51 /* SFBWavPackFile.mm */, + 3237E1802CF785DD0084AA51 /* TagLibStringUtilities.h */, + ); + path = Metadata; + sourceTree = ""; + }; + 3237E18A2CF785DD0084AA51 /* Output */ = { + isa = PBXGroup; + children = ( + 3237E1822CF785DD0084AA51 /* SFBBufferOutputSource.h */, + 3237E1832CF785DD0084AA51 /* SFBBufferOutputSource.m */, + 3237E1842CF785DD0084AA51 /* SFBFileOutputSource.h */, + 3237E1852CF785DD0084AA51 /* SFBFileOutputSource.m */, + 3237E1862CF785DD0084AA51 /* SFBMutableDataOutputSource.h */, + 3237E1872CF785DD0084AA51 /* SFBMutableDataOutputSource.m */, + 3237E1882CF785DD0084AA51 /* SFBOutputSource.m */, + 3237E1892CF785DD0084AA51 /* SFBOutputSource+Internal.h */, + ); + path = Output; + sourceTree = ""; + }; + 3237E18F2CF785DD0084AA51 /* Player */ = { + isa = PBXGroup; + children = ( + 3237E18B2CF785DD0084AA51 /* SFBAudioPlayer.mm */, + 3237E18C2CF785DD0084AA51 /* SFBAudioPlayerNode.mm */, + 3237E18D2CF785DD0084AA51 /* SFBTimeUtilities.hpp */, + 3237E18E2CF785DD0084AA51 /* SFBTimeUtilities.cpp */, + ); + path = Player; + sourceTree = ""; + }; + 3237E1982CF785DD0084AA51 /* Utilities */ = { + isa = PBXGroup; + children = ( + 3237E1902CF785DD0084AA51 /* NSData+SFBExtensions.h */, + 3237E1912CF785DD0084AA51 /* NSData+SFBExtensions.m */, + 3237E1922CF785DD0084AA51 /* NSError+SFBURLPresentation.h */, + 3237E1932CF785DD0084AA51 /* NSError+SFBURLPresentation.m */, + 3237E1942CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.h */, + 3237E1952CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.m */, + 3237E1962CF785DD0084AA51 /* SFBCStringForOSType.h */, + 3237E1972CF785DD0084AA51 /* SFBTernaryTruthValue.h */, + ); + path = Utilities; + sourceTree = ""; + }; + 3237E1992CF785DD0084AA51 /* CSFBAudioEngine */ = { + isa = PBXGroup; + children = ( + 3237E0DB2CF785DD0084AA51 /* Analysis */, + 3237E0DE2CF785DD0084AA51 /* Conversion */, + 3237E1042CF785DD0084AA51 /* Decoders */, + 3237E11F2CF785DD0084AA51 /* Encoders */, + 3237E1392CF785DD0084AA51 /* include */, + 3237E1442CF785DD0084AA51 /* Input */, + 3237E1812CF785DD0084AA51 /* Metadata */, + 3237E18A2CF785DD0084AA51 /* Output */, + 3237E18F2CF785DD0084AA51 /* Player */, + 3237E1982CF785DD0084AA51 /* Utilities */, + ); + path = CSFBAudioEngine; + sourceTree = ""; + }; + 3237E1A22CF785DD0084AA51 /* SFBAudioEngine */ = { + isa = PBXGroup; + children = ( + 3237E19A2CF785DD0084AA51 /* SFBAudioEngine.swift */, + 3237E19B2CF785DD0084AA51 /* SFBAudioMetadata.swift */, + 3237E19C2CF785DD0084AA51 /* SFBAudioPlayer.swift */, + 3237E19D2CF785DD0084AA51 /* SFBAudioPlayerNode.swift */, + 3237E19E2CF785DD0084AA51 /* SFBAudioProperties.swift */, + 3237E19F2CF785DD0084AA51 /* SFBInputSource.swift */, + 3237E1A02CF785DD0084AA51 /* SFBOutputSource.swift */, + 3237E1A12CF785DD0084AA51 /* SFBReplayGainAnalyzer.swift */, + ); + path = SFBAudioEngine; + sourceTree = ""; + }; + 3237E1A42CF785DD0084AA51 /* Sources */ = { + isa = PBXGroup; + children = ( + 3237E1992CF785DD0084AA51 /* CSFBAudioEngine */, + 3237E1A22CF785DD0084AA51 /* SFBAudioEngine */, + ); + path = Sources; + sourceTree = ""; + }; + 3237E1A62CF785DD0084AA51 /* SFBAudioEngineTests */ = { + isa = PBXGroup; + children = ( + 3237E1A52CF785DD0084AA51 /* SFBAudioEngineTests.swift */, + ); + path = SFBAudioEngineTests; + sourceTree = ""; + }; + 3237E1A72CF785DD0084AA51 /* Tests */ = { + isa = PBXGroup; + children = ( + 3237E1A62CF785DD0084AA51 /* SFBAudioEngineTests */, + ); + path = Tests; + sourceTree = ""; + }; + 328E81682CF7898C00BFCEB2 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 328E816B2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework */, + 328E81692CF7898C00BFCEB2 /* ImageIO.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 3237E0CA2CF7855B0084AA51 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3237E2012CF786BA0084AA51 /* SFBAudioPlayerNode.h in Headers */, + 3237E2022CF786BA0084AA51 /* SFBOutputSource.h in Headers */, + 3237E2032CF786BA0084AA51 /* SFBAudioEncoding.h in Headers */, + 3237E2042CF786BA0084AA51 /* SFBDSDPCMDecoder.h in Headers */, + 3237E2052CF786BA0084AA51 /* SFBPCMDecoding.h in Headers */, + 3237E2062CF786BA0084AA51 /* SFBAudioFile.h in Headers */, + 3237E2072CF786BA0084AA51 /* SFBDSDDecoder.h in Headers */, + 3237E2082CF786BA0084AA51 /* SFBAttachedPicture.h in Headers */, + 3237E2092CF786BA0084AA51 /* SFBInputSource.h in Headers */, + 3237E20A2CF786BA0084AA51 /* SFBAudioEngine.h in Headers */, + 3237E20B2CF786BA0084AA51 /* SFBAudioProperties.h in Headers */, + 3237E20C2CF786BA0084AA51 /* SFBPCMEncoding.h in Headers */, + 3237E20D2CF786BA0084AA51 /* SFBAudioDecoding.h in Headers */, + 3237E20E2CF786BA0084AA51 /* SFBLoopableRegionDecoder.h in Headers */, + 3237E20F2CF786BA0084AA51 /* SFBAudioExporter.h in Headers */, + 3237E2102CF786BA0084AA51 /* SFBAudioPlayer.h in Headers */, + 3237E2112CF786BA0084AA51 /* SFBDSDDecoding.h in Headers */, + 3237E2122CF786BA0084AA51 /* SFBAudioMetadata.h in Headers */, + 3237E2132CF786BA0084AA51 /* SFBAudioEngineTypes.h in Headers */, + 3237E2142CF786BA0084AA51 /* SFBAudioDecoder.h in Headers */, + 3237E2152CF786BA0084AA51 /* SFBAudioConverter.h in Headers */, + 3237E2162CF786BA0084AA51 /* SFBReplayGainAnalyzer.h in Headers */, + 3237E2172CF786BA0084AA51 /* SFBDoPDecoder.h in Headers */, + 3237E2182CF786BA0084AA51 /* SFBAudioEncoder.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 3237E0CE2CF7855B0084AA51 /* SFBAudioEngine */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3237E0D52CF7855B0084AA51 /* Build configuration list for PBXNativeTarget "SFBAudioEngine" */; + buildPhases = ( + 3237E0CA2CF7855B0084AA51 /* Headers */, + 3237E0CB2CF7855B0084AA51 /* Sources */, + 3237E0CC2CF7855B0084AA51 /* Frameworks */, + 3237E0CD2CF7855B0084AA51 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SFBAudioEngine; + packageProductDependencies = ( + 3237E21A2CF787230084AA51 /* CXXAudioUtilities */, + 3237E21D2CF787330084AA51 /* AVFAudioExtensions */, + 322CE3432CF787630070996C /* dumb */, + 322CE3462CF787740070996C /* MAC */, + 322CE3492CF7878D0070996C /* taglib */, + 322CE34C2CF788020070996C /* wavpack */, + 322CE34F2CF788120070996C /* ogg */, + 322CE3522CF788240070996C /* FLAC */, + 322CE3552CF788360070996C /* opus */, + 321C18B02CF7886000670824 /* vorbis */, + 321C18B32CF7887600670824 /* speex */, + 321C18B62CF7888800670824 /* lame */, + 321C18B92CF7889A00670824 /* mpc */, + 321C18BC2CF788AB00670824 /* mpg123 */, + 328E81632CF7890700BFCEB2 /* sndfile */, + 328E81662CF7891A00BFCEB2 /* tta-cpp */, + ); + productName = SFBAudioEngine; + productReference = 3237E0CF2CF7855B0084AA51 /* SFBAudioEngine.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 3237E0C62CF7855B0084AA51 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastUpgradeCheck = 1620; + TargetAttributes = { + 3237E0CE2CF7855B0084AA51 = { + CreatedOnToolsVersion = 16.1; + }; + }; + }; + buildConfigurationList = 3237E0C92CF7855B0084AA51 /* Build configuration list for PBXProject "SFBAudioEngine" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 3237E0C52CF7855B0084AA51; + minimizedProjectReferenceProxies = 1; + packageReferences = ( + 3237E2192CF787230084AA51 /* XCRemoteSwiftPackageReference "CXXAudioUtilities" */, + 3237E21C2CF787330084AA51 /* XCRemoteSwiftPackageReference "AVFAudioExtensions" */, + 322CE3422CF787630070996C /* XCRemoteSwiftPackageReference "CDUMB" */, + 322CE3452CF787740070996C /* XCRemoteSwiftPackageReference "CXXMonkeysAudio" */, + 322CE3482CF7878D0070996C /* XCRemoteSwiftPackageReference "CXXTagLib" */, + 322CE34B2CF788020070996C /* XCRemoteSwiftPackageReference "wavpack-binary-xcframework" */, + 322CE34E2CF788120070996C /* XCRemoteSwiftPackageReference "ogg-binary-xcframework" */, + 322CE3512CF788240070996C /* XCRemoteSwiftPackageReference "flac-binary-xcframework" */, + 322CE3542CF788360070996C /* XCRemoteSwiftPackageReference "opus-binary-xcframework" */, + 321C18AF2CF7886000670824 /* XCRemoteSwiftPackageReference "vorbis-binary-xcframework" */, + 321C18B22CF7887600670824 /* XCRemoteSwiftPackageReference "CSpeex" */, + 321C18B52CF7888800670824 /* XCRemoteSwiftPackageReference "lame-binary-xcframework" */, + 321C18B82CF7889A00670824 /* XCRemoteSwiftPackageReference "mpc-binary-xcframework" */, + 321C18BB2CF788AB00670824 /* XCRemoteSwiftPackageReference "mpg123-binary-xcframework" */, + 328E81622CF7890700BFCEB2 /* XCRemoteSwiftPackageReference "sndfile-binary-xcframework" */, + 328E81652CF7891A00BFCEB2 /* XCRemoteSwiftPackageReference "tta-cpp-binary-xcframework" */, + ); + preferredProjectObjectVersion = 77; + productRefGroup = 3237E0D02CF7855B0084AA51 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 3237E0CE2CF7855B0084AA51 /* SFBAudioEngine */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 3237E0CD2CF7855B0084AA51 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 3237E0CB2CF7855B0084AA51 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3237E1A82CF7865A0084AA51 /* SFBAudioProperties.swift in Sources */, + 3237E1A92CF7865A0084AA51 /* SFBAudioPlayerNode.swift in Sources */, + 3237E1AA2CF7865A0084AA51 /* SFBAudioPlayer.swift in Sources */, + 3237E1B02CF7868B0084AA51 /* SFBAudioConverter.m in Sources */, + 3237E1B12CF7868B0084AA51 /* SFBAttachedPicture.m in Sources */, + 3237E1B22CF7868B0084AA51 /* SFBAudioExporter.m in Sources */, + 3237E1B32CF7868B0084AA51 /* SFBTrueAudioEncoder.mm in Sources */, + 3237E1B42CF7868B0084AA51 /* SFBWavPackDecoder.m in Sources */, + 3237E1B52CF7868B0084AA51 /* SFBCoreAudioDecoder.mm in Sources */, + 3237E1B72CF7868B0084AA51 /* AddAudioPropertiesToDictionary.mm in Sources */, + 3237E1B82CF7868B0084AA51 /* SFBMPEGDecoder.m in Sources */, + 3237E1B92CF7868B0084AA51 /* SFBOggSpeexDecoder.m in Sources */, + 3237E1BA2CF7868B0084AA51 /* NSData+SFBExtensions.m in Sources */, + 3237E1BB2CF7868B0084AA51 /* SFBOggVorbisEncoder.m in Sources */, + 3237E1BC2CF7868B0084AA51 /* SFBLibsndfileDecoder.m in Sources */, + 3237E1BD2CF7868B0084AA51 /* SFBAudioEncoder.m in Sources */, + 3237E1BE2CF7868B0084AA51 /* SFBAudioMetadata.m in Sources */, + 3237E1BF2CF7868B0084AA51 /* SFBAIFFFile.mm in Sources */, + 3237E1C02CF7868B0084AA51 /* SFBAudioMetadata+TagLibMP4Tag.mm in Sources */, + 3237E1C12CF7868B0084AA51 /* SFBOggVorbisFile.mm in Sources */, + 3237E1C22CF7868B0084AA51 /* SFBDoPDecoder.m in Sources */, + 3237E1C32CF7868B0084AA51 /* SFBFLACDecoder.mm in Sources */, + 3237E1C42CF7868B0084AA51 /* SFBReplayGainAnalyzer.m in Sources */, + 3237E1C52CF7868B0084AA51 /* SFBAudioMetadata+TagLibAPETag.mm in Sources */, + 3237E1C62CF7868B0084AA51 /* SFBDSFFile.mm in Sources */, + 3237E1C72CF7868B0084AA51 /* SFBMP4File.mm in Sources */, + 3237E1C82CF7868B0084AA51 /* NSFileHandle+SFBHeaderReading.m in Sources */, + 3237E1C92CF7868B0084AA51 /* NSError+SFBURLPresentation.m in Sources */, + 3237E1CA2CF7868B0084AA51 /* SFBWAVEFile.mm in Sources */, + 3237E1CB2CF7868B0084AA51 /* SFBAudioPlayerNode.mm in Sources */, + 3237E1CC2CF7868B0084AA51 /* SFBDSDIFFFile.mm in Sources */, + 3237E1CD2CF7868B0084AA51 /* SFBMutableDataOutputSource.m in Sources */, + 3237E1CE2CF7868B0084AA51 /* SFBAudioMetadata+TagLibXiphComment.mm in Sources */, + 3237E1CF2CF7868B0084AA51 /* SFBDSDDecoder.m in Sources */, + 3237E1D02CF7868B0084AA51 /* SFBShortenDecoder.mm in Sources */, + 3237E1D12CF7868B0084AA51 /* SFBImpulseTrackerModuleFile.mm in Sources */, + 3237E1D22CF7868B0084AA51 /* SFBScreamTracker3ModuleFile.mm in Sources */, + 3237E1D32CF7868B0084AA51 /* SFBOggFLACFile.mm in Sources */, + 3237E1D42CF7868B0084AA51 /* SFBFLACFile.mm in Sources */, + 3237E1D52CF7868B0084AA51 /* SFBAudioDecoder.m in Sources */, + 3237E1D62CF7868B0084AA51 /* SFBOutputSource.m in Sources */, + 3237E1D72CF7868B0084AA51 /* SFBDataInputSource.m in Sources */, + 3237E1D82CF7868B0084AA51 /* SFBInputSource.m in Sources */, + 3237E1D92CF7868B0084AA51 /* SFBFLACEncoder.mm in Sources */, + 3237E1DA2CF7868B0084AA51 /* SFBDSDPCMDecoder.mm in Sources */, + 3237E1DB2CF7868B0084AA51 /* SFBOggSpeexFile.mm in Sources */, + 3237E1DC2CF7868B0084AA51 /* SFBAudioMetadata+TagLibTag.mm in Sources */, + 3237E1DD2CF7868B0084AA51 /* SFBOggSpeexEncoder.m in Sources */, + 3237E1DE2CF7868B0084AA51 /* SFBAudioProperties.m in Sources */, + 3237E1DF2CF7868B0084AA51 /* SFBTrueAudioDecoder.mm in Sources */, + 3237E1E02CF7868B0084AA51 /* SFBAudioMetadata+TagLibID3v2Tag.mm in Sources */, + 3237E1E12CF7868B0084AA51 /* SFBFileInputSource.m in Sources */, + 3237E1E22CF7868B0084AA51 /* SFBCoreAudioEncoder.mm in Sources */, + 3237E1E32CF7868B0084AA51 /* SFBLoopableRegionDecoder.m in Sources */, + 328E816D2CF789D100BFCEB2 /* SFBTimeUtilities.cpp in Sources */, + 3237E1E42CF7868B0084AA51 /* SFBOggOpusFile.mm in Sources */, + 3237E1E52CF7868B0084AA51 /* SFBExtendedModuleFile.mm in Sources */, + 3237E1E62CF7868B0084AA51 /* SFBAudioMetadata+TagLibID3v1Tag.mm in Sources */, + 3237E1E72CF7868B0084AA51 /* SFBBufferOutputSource.m in Sources */, + 3237E1E82CF7868B0084AA51 /* SFBWavPackFile.mm in Sources */, + 3237E1E92CF7868B0084AA51 /* SFBDSDIFFDecoder.mm in Sources */, + 3237E1EA2CF7868B0084AA51 /* SFBModuleDecoder.m in Sources */, + 3237E1EB2CF7868B0084AA51 /* SFBWavPackEncoder.m in Sources */, + 3237E1EC2CF7868B0084AA51 /* SFBMonkeysAudioFile.mm in Sources */, + 3237E1ED2CF7868B0084AA51 /* SFBFileOutputSource.m in Sources */, + 3237E1EE2CF7868B0084AA51 /* SFBMusepackDecoder.m in Sources */, + 3237E1EF2CF7868B0084AA51 /* SFBTrueAudioFile.mm in Sources */, + 3237E1F02CF7868B0084AA51 /* SFBProTrackerModuleFile.mm in Sources */, + 3237E1F12CF7868B0084AA51 /* SFBOggVorbisDecoder.m in Sources */, + 3237E1F22CF7868B0084AA51 /* SFBAudioPlayer.mm in Sources */, + 3237E1F32CF7868B0084AA51 /* SFBMusepackEncoder.m in Sources */, + 3237E1F42CF7868B0084AA51 /* SFBMonkeysAudioEncoder.mm in Sources */, + 3237E1F52CF7868B0084AA51 /* SFBMemoryMappedFileInputSource.m in Sources */, + 3237E1F62CF7868B0084AA51 /* SFBMusepackFile.mm in Sources */, + 3237E1F72CF7868B0084AA51 /* SFBShortenFile.m in Sources */, + 3237E1F82CF7868B0084AA51 /* SFBOggOpusDecoder.m in Sources */, + 3237E1F92CF7868B0084AA51 /* SFBMP3File.mm in Sources */, + 3237E1FA2CF7868B0084AA51 /* SFBMonkeysAudioDecoder.mm in Sources */, + 3237E1FB2CF7868B0084AA51 /* SFBAudioFile.m in Sources */, + 3237E1FC2CF7868B0084AA51 /* SFBLibsndfileEncoder.m in Sources */, + 3237E1FD2CF7868B0084AA51 /* SFBFileContentsInputSource.m in Sources */, + 3237E1FE2CF7868B0084AA51 /* SFBDSFDecoder.m in Sources */, + 3237E1FF2CF7868B0084AA51 /* SFBOggOpusEncoder.mm in Sources */, + 3237E2002CF7868B0084AA51 /* SFBMP3Encoder.mm in Sources */, + 3237E1AB2CF7865A0084AA51 /* SFBOutputSource.swift in Sources */, + 3237E1AC2CF7865A0084AA51 /* SFBReplayGainAnalyzer.swift in Sources */, + 3237E1AD2CF7865A0084AA51 /* SFBAudioMetadata.swift in Sources */, + 3237E1AE2CF7865A0084AA51 /* SFBInputSource.swift in Sources */, + 3237E1AF2CF7865A0084AA51 /* SFBAudioEngine.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 3237E0D62CF7855B0084AA51 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + BUILD_LIBRARY_FOR_DISTRIBUTION = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 11.0; + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = org.sbooth.AudioEngine; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = auto; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx"; + SUPPORTS_MACCATALYST = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3"; + TVOS_DEPLOYMENT_TARGET = 15.0; + XROS_DEPLOYMENT_TARGET = 2.1; + }; + name = Debug; + }; + 3237E0D72CF7855B0084AA51 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + BUILD_LIBRARY_FOR_DISTRIBUTION = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 11.0; + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = org.sbooth.AudioEngine; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = auto; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx"; + SUPPORTS_MACCATALYST = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3"; + TVOS_DEPLOYMENT_TARGET = 15.0; + XROS_DEPLOYMENT_TARGET = 2.1; + }; + name = Release; + }; + 3237E0D82CF7855B0084AA51 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++23"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 3237E0D92CF7855B0084AA51 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++23"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SWIFT_COMPILATION_MODE = wholemodule; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3237E0C92CF7855B0084AA51 /* Build configuration list for PBXProject "SFBAudioEngine" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3237E0D82CF7855B0084AA51 /* Debug */, + 3237E0D92CF7855B0084AA51 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3237E0D52CF7855B0084AA51 /* Build configuration list for PBXNativeTarget "SFBAudioEngine" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3237E0D62CF7855B0084AA51 /* Debug */, + 3237E0D72CF7855B0084AA51 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 321C18AF2CF7886000670824 /* XCRemoteSwiftPackageReference "vorbis-binary-xcframework" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/vorbis-binary-xcframework"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.1.2; + }; + }; + 321C18B22CF7887600670824 /* XCRemoteSwiftPackageReference "CSpeex" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/CSpeex"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.2.1; + }; + }; + 321C18B52CF7888800670824 /* XCRemoteSwiftPackageReference "lame-binary-xcframework" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/lame-binary-xcframework"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.1.2; + }; + }; + 321C18B82CF7889A00670824 /* XCRemoteSwiftPackageReference "mpc-binary-xcframework" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/mpc-binary-xcframework"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.1.2; + }; + }; + 321C18BB2CF788AB00670824 /* XCRemoteSwiftPackageReference "mpg123-binary-xcframework" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/mpg123-binary-xcframework"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.2.2; + }; + }; + 322CE3422CF787630070996C /* XCRemoteSwiftPackageReference "CDUMB" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/CDUMB"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.0.3; + }; + }; + 322CE3452CF787740070996C /* XCRemoteSwiftPackageReference "CXXMonkeysAudio" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/CXXMonkeysAudio"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 10.76.0; + }; + }; + 322CE3482CF7878D0070996C /* XCRemoteSwiftPackageReference "CXXTagLib" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/CXXTagLib"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.0.2; + }; + }; + 322CE34B2CF788020070996C /* XCRemoteSwiftPackageReference "wavpack-binary-xcframework" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/wavpack-binary-xcframework"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.1.1; + }; + }; + 322CE34E2CF788120070996C /* XCRemoteSwiftPackageReference "ogg-binary-xcframework" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/ogg-binary-xcframework"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.1.2; + }; + }; + 322CE3512CF788240070996C /* XCRemoteSwiftPackageReference "flac-binary-xcframework" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/flac-binary-xcframework"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.1.3; + }; + }; + 322CE3542CF788360070996C /* XCRemoteSwiftPackageReference "opus-binary-xcframework" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/opus-binary-xcframework"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.2.2; + }; + }; + 3237E2192CF787230084AA51 /* XCRemoteSwiftPackageReference "CXXAudioUtilities" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/CXXAudioUtilities"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.3.1; + }; + }; + 3237E21C2CF787330084AA51 /* XCRemoteSwiftPackageReference "AVFAudioExtensions" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/AVFAudioExtensions"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.4.1; + }; + }; + 328E81622CF7890700BFCEB2 /* XCRemoteSwiftPackageReference "sndfile-binary-xcframework" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/sndfile-binary-xcframework"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.1.2; + }; + }; + 328E81652CF7891A00BFCEB2 /* XCRemoteSwiftPackageReference "tta-cpp-binary-xcframework" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/tta-cpp-binary-xcframework"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.1.2; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 321C18B02CF7886000670824 /* vorbis */ = { + isa = XCSwiftPackageProductDependency; + package = 321C18AF2CF7886000670824 /* XCRemoteSwiftPackageReference "vorbis-binary-xcframework" */; + productName = vorbis; + }; + 321C18B32CF7887600670824 /* speex */ = { + isa = XCSwiftPackageProductDependency; + package = 321C18B22CF7887600670824 /* XCRemoteSwiftPackageReference "CSpeex" */; + productName = speex; + }; + 321C18B62CF7888800670824 /* lame */ = { + isa = XCSwiftPackageProductDependency; + package = 321C18B52CF7888800670824 /* XCRemoteSwiftPackageReference "lame-binary-xcframework" */; + productName = lame; + }; + 321C18B92CF7889A00670824 /* mpc */ = { + isa = XCSwiftPackageProductDependency; + package = 321C18B82CF7889A00670824 /* XCRemoteSwiftPackageReference "mpc-binary-xcframework" */; + productName = mpc; + }; + 321C18BC2CF788AB00670824 /* mpg123 */ = { + isa = XCSwiftPackageProductDependency; + package = 321C18BB2CF788AB00670824 /* XCRemoteSwiftPackageReference "mpg123-binary-xcframework" */; + productName = mpg123; + }; + 322CE3432CF787630070996C /* dumb */ = { + isa = XCSwiftPackageProductDependency; + package = 322CE3422CF787630070996C /* XCRemoteSwiftPackageReference "CDUMB" */; + productName = dumb; + }; + 322CE3462CF787740070996C /* MAC */ = { + isa = XCSwiftPackageProductDependency; + package = 322CE3452CF787740070996C /* XCRemoteSwiftPackageReference "CXXMonkeysAudio" */; + productName = MAC; + }; + 322CE3492CF7878D0070996C /* taglib */ = { + isa = XCSwiftPackageProductDependency; + package = 322CE3482CF7878D0070996C /* XCRemoteSwiftPackageReference "CXXTagLib" */; + productName = taglib; + }; + 322CE34C2CF788020070996C /* wavpack */ = { + isa = XCSwiftPackageProductDependency; + package = 322CE34B2CF788020070996C /* XCRemoteSwiftPackageReference "wavpack-binary-xcframework" */; + productName = wavpack; + }; + 322CE34F2CF788120070996C /* ogg */ = { + isa = XCSwiftPackageProductDependency; + package = 322CE34E2CF788120070996C /* XCRemoteSwiftPackageReference "ogg-binary-xcframework" */; + productName = ogg; + }; + 322CE3522CF788240070996C /* FLAC */ = { + isa = XCSwiftPackageProductDependency; + package = 322CE3512CF788240070996C /* XCRemoteSwiftPackageReference "flac-binary-xcframework" */; + productName = FLAC; + }; + 322CE3552CF788360070996C /* opus */ = { + isa = XCSwiftPackageProductDependency; + package = 322CE3542CF788360070996C /* XCRemoteSwiftPackageReference "opus-binary-xcframework" */; + productName = opus; + }; + 3237E21A2CF787230084AA51 /* CXXAudioUtilities */ = { + isa = XCSwiftPackageProductDependency; + package = 3237E2192CF787230084AA51 /* XCRemoteSwiftPackageReference "CXXAudioUtilities" */; + productName = CXXAudioUtilities; + }; + 3237E21D2CF787330084AA51 /* AVFAudioExtensions */ = { + isa = XCSwiftPackageProductDependency; + package = 3237E21C2CF787330084AA51 /* XCRemoteSwiftPackageReference "AVFAudioExtensions" */; + productName = AVFAudioExtensions; + }; + 328E81632CF7890700BFCEB2 /* sndfile */ = { + isa = XCSwiftPackageProductDependency; + package = 328E81622CF7890700BFCEB2 /* XCRemoteSwiftPackageReference "sndfile-binary-xcframework" */; + productName = sndfile; + }; + 328E81662CF7891A00BFCEB2 /* tta-cpp */ = { + isa = XCSwiftPackageProductDependency; + package = 328E81652CF7891A00BFCEB2 /* XCRemoteSwiftPackageReference "tta-cpp-binary-xcframework" */; + productName = "tta-cpp"; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 3237E0C62CF7855B0084AA51 /* Project object */; +} diff --git a/Sources/SFBAudioEngine/SFBAudioEngine.swift b/Sources/SFBAudioEngine/SFBAudioEngine.swift index b3e7ffe26..7d370c18a 100644 --- a/Sources/SFBAudioEngine/SFBAudioEngine.swift +++ b/Sources/SFBAudioEngine/SFBAudioEngine.swift @@ -1,7 +1,9 @@ // -// Copyright (c) 2006-2024 Stephen F. Booth +// Copyright (c) 2006-2025 Stephen F. Booth // Part of https://github.com/sbooth/SFBAudioEngine // MIT license // +#if canImport(CSFBAudioEngine) @_exported import CSFBAudioEngine +#endif From 119ecdaeaa32d9eac5c8176bc05d561f2ab2aab6 Mon Sep 17 00:00:00 2001 From: "Stephen F. Booth" Date: Sun, 5 Jan 2025 12:18:37 -0600 Subject: [PATCH 02/22] Update xcodeproj --- SFBAudioEngine.xcodeproj/project.pbxproj | 154 +++++++++++++++++++++++ 1 file changed, 154 insertions(+) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index 9f70c50f8..2cb64d653 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -138,6 +138,81 @@ 328E816A2CF7898C00BFCEB2 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 328E81692CF7898C00BFCEB2 /* ImageIO.framework */; }; 328E816C2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 328E816B2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework */; }; 328E816D2CF789D100BFCEB2 /* SFBTimeUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3237E18E2CF785DD0084AA51 /* SFBTimeUtilities.cpp */; }; + 32F6E5C02D2B02F00029B972 /* SFBLibsndfileUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 32F6E5BF2D2B02F00029B972 /* SFBLibsndfileUtilities.m */; }; + 32F6E5C12D2B02F00029B972 /* SFBLibsndfileUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 32F6E5BE2D2B02F00029B972 /* SFBLibsndfileUtilities.h */; }; + 32F6E5C22D2B031D0029B972 /* NSData+SFBExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1902CF785DD0084AA51 /* NSData+SFBExtensions.h */; }; + 32F6E5C32D2B031D0029B972 /* NSFileHandle+SFBHeaderReading.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1942CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.h */; }; + 32F6E5C42D2B031D0029B972 /* SFBCStringForOSType.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1962CF785DD0084AA51 /* SFBCStringForOSType.h */; }; + 32F6E5C52D2B031D0029B972 /* SFBTernaryTruthValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1972CF785DD0084AA51 /* SFBTernaryTruthValue.h */; }; + 32F6E5C62D2B031D0029B972 /* NSError+SFBURLPresentation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1922CF785DD0084AA51 /* NSError+SFBURLPresentation.h */; }; + 32F6E5C72D2B032F0029B972 /* SFBTimeUtilities.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3237E18D2CF785DD0084AA51 /* SFBTimeUtilities.hpp */; }; + 32F6E5C82D2B033E0029B972 /* SFBOutputSource+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1892CF785DD0084AA51 /* SFBOutputSource+Internal.h */; }; + 32F6E5C92D2B033E0029B972 /* SFBMutableDataOutputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1862CF785DD0084AA51 /* SFBMutableDataOutputSource.h */; }; + 32F6E5CA2D2B033E0029B972 /* SFBFileOutputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1842CF785DD0084AA51 /* SFBFileOutputSource.h */; }; + 32F6E5CB2D2B033E0029B972 /* SFBBufferOutputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1822CF785DD0084AA51 /* SFBBufferOutputSource.h */; }; + 32F6E5CC2D2B03630029B972 /* SFBMonkeysAudioDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0F22CF785DD0084AA51 /* SFBMonkeysAudioDecoder.h */; }; + 32F6E5CD2D2B03630029B972 /* SFBDSDDecoder+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0E52CF785DD0084AA51 /* SFBDSDDecoder+Internal.h */; }; + 32F6E5CE2D2B03630029B972 /* SFBFLACDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0EB2CF785DD0084AA51 /* SFBFLACDecoder.h */; }; + 32F6E5CF2D2B03630029B972 /* SFBModuleDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0F02CF785DD0084AA51 /* SFBModuleDecoder.h */; }; + 32F6E5D02D2B03630029B972 /* SFBOggSpeexDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0FA2CF785DD0084AA51 /* SFBOggSpeexDecoder.h */; }; + 32F6E5D12D2B03630029B972 /* SFBMusepackDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0F62CF785DD0084AA51 /* SFBMusepackDecoder.h */; }; + 32F6E5D22D2B03630029B972 /* SFBWavPackDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1022CF785DD0084AA51 /* SFBWavPackDecoder.h */; }; + 32F6E5D32D2B03630029B972 /* SFBOggVorbisDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0FC2CF785DD0084AA51 /* SFBOggVorbisDecoder.h */; }; + 32F6E5D42D2B03630029B972 /* SFBAudioDecoder+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0E02CF785DD0084AA51 /* SFBAudioDecoder+Internal.h */; }; + 32F6E5D52D2B03630029B972 /* SFBDSDIFFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0E62CF785DD0084AA51 /* SFBDSDIFFDecoder.h */; }; + 32F6E5D62D2B03630029B972 /* SFBOggOpusDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0F82CF785DD0084AA51 /* SFBOggOpusDecoder.h */; }; + 32F6E5D72D2B03630029B972 /* SFBShortenDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0FE2CF785DD0084AA51 /* SFBShortenDecoder.h */; }; + 32F6E5D82D2B03630029B972 /* SFBLibsndfileDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0ED2CF785DD0084AA51 /* SFBLibsndfileDecoder.h */; }; + 32F6E5D92D2B03630029B972 /* SFBCoreAudioDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0E12CF785DD0084AA51 /* SFBCoreAudioDecoder.h */; }; + 32F6E5DA2D2B03630029B972 /* SFBDSFDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0E92CF785DD0084AA51 /* SFBDSFDecoder.h */; }; + 32F6E5DB2D2B03630029B972 /* SFBMPEGDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0F42CF785DD0084AA51 /* SFBMPEGDecoder.h */; }; + 32F6E5DC2D2B03630029B972 /* SFBTrueAudioDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1002CF785DD0084AA51 /* SFBTrueAudioDecoder.h */; }; + 32F6E5DD2D2B03770029B972 /* SFBOggOpusEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1152CF785DD0084AA51 /* SFBOggOpusEncoder.h */; }; + 32F6E5DE2D2B03770029B972 /* SFBAudioEncoder+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1062CF785DD0084AA51 /* SFBAudioEncoder+Internal.h */; }; + 32F6E5DF2D2B03770029B972 /* SFBOggSpeexEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1172CF785DD0084AA51 /* SFBOggSpeexEncoder.h */; }; + 32F6E5E02D2B03770029B972 /* SFBWavPackEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E11D2CF785DD0084AA51 /* SFBWavPackEncoder.h */; }; + 32F6E5E12D2B03770029B972 /* SFBCoreAudioEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1072CF785DD0084AA51 /* SFBCoreAudioEncoder.h */; }; + 32F6E5E22D2B03770029B972 /* SFBMusepackEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1112CF785DD0084AA51 /* SFBMusepackEncoder.h */; }; + 32F6E5E32D2B03770029B972 /* SFBMP3Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E10F2CF785DD0084AA51 /* SFBMP3Encoder.h */; }; + 32F6E5E42D2B03770029B972 /* SFBTrueAudioEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E11B2CF785DD0084AA51 /* SFBTrueAudioEncoder.h */; }; + 32F6E5E52D2B03770029B972 /* SFBFLACEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1092CF785DD0084AA51 /* SFBFLACEncoder.h */; }; + 32F6E5E62D2B03770029B972 /* SFBMonkeysAudioEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E10D2CF785DD0084AA51 /* SFBMonkeysAudioEncoder.h */; }; + 32F6E5E72D2B03770029B972 /* SFBLibsndfileEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E10B2CF785DD0084AA51 /* SFBLibsndfileEncoder.h */; }; + 32F6E5E82D2B03770029B972 /* SFBOggVorbisEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1192CF785DD0084AA51 /* SFBOggVorbisEncoder.h */; }; + 32F6E5E92D2B03DA0029B972 /* SFBFileContentsInputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E13C2CF785DD0084AA51 /* SFBFileContentsInputSource.h */; }; + 32F6E5EA2D2B03DA0029B972 /* SFBInputSource+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1412CF785DD0084AA51 /* SFBInputSource+Internal.h */; }; + 32F6E5EB2D2B03DA0029B972 /* SFBFileInputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E13E2CF785DD0084AA51 /* SFBFileInputSource.h */; }; + 32F6E5EC2D2B03DA0029B972 /* SFBDataInputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E13A2CF785DD0084AA51 /* SFBDataInputSource.h */; }; + 32F6E5ED2D2B03DA0029B972 /* SFBMemoryMappedFileInputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1422CF785DD0084AA51 /* SFBMemoryMappedFileInputSource.h */; }; + 32F6E5EE2D2B04030029B972 /* SFBAudioMetadata+TagLibID3v2Tag.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1512CF785DD0084AA51 /* SFBAudioMetadata+TagLibID3v2Tag.h */; }; + 32F6E5EF2D2B04030029B972 /* SFBOggVorbisFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1722CF785DD0084AA51 /* SFBOggVorbisFile.h */; }; + 32F6E5F02D2B04030029B972 /* SFBTrueAudioFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E17A2CF785DD0084AA51 /* SFBTrueAudioFile.h */; }; + 32F6E5F12D2B04030029B972 /* SFBOggOpusFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E16E2CF785DD0084AA51 /* SFBOggOpusFile.h */; }; + 32F6E5F22D2B04030029B972 /* SFBImpulseTrackerModuleFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1622CF785DD0084AA51 /* SFBImpulseTrackerModuleFile.h */; }; + 32F6E5F32D2B04030029B972 /* SFBAudioMetadata+TagLibMP4Tag.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1532CF785DD0084AA51 /* SFBAudioMetadata+TagLibMP4Tag.h */; }; + 32F6E5F42D2B04030029B972 /* SFBProTrackerModuleFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1742CF785DD0084AA51 /* SFBProTrackerModuleFile.h */; }; + 32F6E5F52D2B04030029B972 /* SFBShortenFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1782CF785DD0084AA51 /* SFBShortenFile.h */; }; + 32F6E5F62D2B04030029B972 /* SFBExtendedModuleFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E15E2CF785DD0084AA51 /* SFBExtendedModuleFile.h */; }; + 32F6E5F72D2B04030029B972 /* SFBAudioMetadata+TagLibTag.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1552CF785DD0084AA51 /* SFBAudioMetadata+TagLibTag.h */; }; + 32F6E5F82D2B04030029B972 /* SFBAudioMetadata+TagLibID3v1Tag.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E14F2CF785DD0084AA51 /* SFBAudioMetadata+TagLibID3v1Tag.h */; }; + 32F6E5F92D2B04030029B972 /* SFBAudioMetadata+TagLibXiphComment.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1572CF785DD0084AA51 /* SFBAudioMetadata+TagLibXiphComment.h */; }; + 32F6E5FA2D2B04030029B972 /* SFBScreamTracker3ModuleFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1762CF785DD0084AA51 /* SFBScreamTracker3ModuleFile.h */; }; + 32F6E5FB2D2B04030029B972 /* SFBAIFFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1472CF785DD0084AA51 /* SFBAIFFFile.h */; }; + 32F6E5FC2D2B04030029B972 /* SFBWavPackFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E17E2CF785DD0084AA51 /* SFBWavPackFile.h */; }; + 32F6E5FD2D2B04030029B972 /* SFBOggSpeexFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1702CF785DD0084AA51 /* SFBOggSpeexFile.h */; }; + 32F6E5FE2D2B04030029B972 /* SFBDSDIFFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E15A2CF785DD0084AA51 /* SFBDSDIFFFile.h */; }; + 32F6E5FF2D2B04030029B972 /* SFBAudioFile+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E14B2CF785DD0084AA51 /* SFBAudioFile+Internal.h */; }; + 32F6E6002D2B04030029B972 /* TagLibStringUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1802CF785DD0084AA51 /* TagLibStringUtilities.h */; }; + 32F6E6012D2B04030029B972 /* SFBDSFFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E15C2CF785DD0084AA51 /* SFBDSFFile.h */; }; + 32F6E6022D2B04030029B972 /* SFBMonkeysAudioFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1642CF785DD0084AA51 /* SFBMonkeysAudioFile.h */; }; + 32F6E6032D2B04030029B972 /* SFBMusepackFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E16A2CF785DD0084AA51 /* SFBMusepackFile.h */; }; + 32F6E6042D2B04030029B972 /* SFBOggFLACFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E16C2CF785DD0084AA51 /* SFBOggFLACFile.h */; }; + 32F6E6052D2B04030029B972 /* AddAudioPropertiesToDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1452CF785DD0084AA51 /* AddAudioPropertiesToDictionary.h */; }; + 32F6E6062D2B04030029B972 /* SFBMP3File.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1662CF785DD0084AA51 /* SFBMP3File.h */; }; + 32F6E6072D2B04030029B972 /* SFBFLACFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1602CF785DD0084AA51 /* SFBFLACFile.h */; }; + 32F6E6082D2B04030029B972 /* SFBAudioMetadata+TagLibAPETag.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E14D2CF785DD0084AA51 /* SFBAudioMetadata+TagLibAPETag.h */; }; + 32F6E6092D2B04030029B972 /* SFBMP4File.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1682CF785DD0084AA51 /* SFBMP4File.h */; }; + 32F6E60A2D2B04030029B972 /* SFBWAVEFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E17C2CF785DD0084AA51 /* SFBWAVEFile.h */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -331,6 +406,8 @@ 3237E1A52CF785DD0084AA51 /* SFBAudioEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioEngineTests.swift; sourceTree = ""; }; 328E81692CF7898C00BFCEB2 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.1.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; 328E816B2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UniformTypeIdentifiers.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.1.sdk/System/Library/Frameworks/UniformTypeIdentifiers.framework; sourceTree = DEVELOPER_DIR; }; + 32F6E5BE2D2B02F00029B972 /* SFBLibsndfileUtilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBLibsndfileUtilities.h; sourceTree = ""; }; + 32F6E5BF2D2B02F00029B972 /* SFBLibsndfileUtilities.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBLibsndfileUtilities.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -631,6 +708,8 @@ 3237E1942CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.h */, 3237E1952CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.m */, 3237E1962CF785DD0084AA51 /* SFBCStringForOSType.h */, + 32F6E5BE2D2B02F00029B972 /* SFBLibsndfileUtilities.h */, + 32F6E5BF2D2B02F00029B972 /* SFBLibsndfileUtilities.m */, 3237E1972CF785DD0084AA51 /* SFBTernaryTruthValue.h */, ); path = Utilities; @@ -710,8 +789,42 @@ buildActionMask = 2147483647; files = ( 3237E2012CF786BA0084AA51 /* SFBAudioPlayerNode.h in Headers */, + 32F6E5DD2D2B03770029B972 /* SFBOggOpusEncoder.h in Headers */, + 32F6E5DE2D2B03770029B972 /* SFBAudioEncoder+Internal.h in Headers */, + 32F6E5DF2D2B03770029B972 /* SFBOggSpeexEncoder.h in Headers */, + 32F6E5E02D2B03770029B972 /* SFBWavPackEncoder.h in Headers */, + 32F6E5E12D2B03770029B972 /* SFBCoreAudioEncoder.h in Headers */, + 32F6E5E22D2B03770029B972 /* SFBMusepackEncoder.h in Headers */, + 32F6E5E32D2B03770029B972 /* SFBMP3Encoder.h in Headers */, + 32F6E5E42D2B03770029B972 /* SFBTrueAudioEncoder.h in Headers */, + 32F6E5E52D2B03770029B972 /* SFBFLACEncoder.h in Headers */, + 32F6E5E62D2B03770029B972 /* SFBMonkeysAudioEncoder.h in Headers */, + 32F6E5E72D2B03770029B972 /* SFBLibsndfileEncoder.h in Headers */, + 32F6E5E82D2B03770029B972 /* SFBOggVorbisEncoder.h in Headers */, 3237E2022CF786BA0084AA51 /* SFBOutputSource.h in Headers */, 3237E2032CF786BA0084AA51 /* SFBAudioEncoding.h in Headers */, + 32F6E5CC2D2B03630029B972 /* SFBMonkeysAudioDecoder.h in Headers */, + 32F6E5CD2D2B03630029B972 /* SFBDSDDecoder+Internal.h in Headers */, + 32F6E5CE2D2B03630029B972 /* SFBFLACDecoder.h in Headers */, + 32F6E5CF2D2B03630029B972 /* SFBModuleDecoder.h in Headers */, + 32F6E5D02D2B03630029B972 /* SFBOggSpeexDecoder.h in Headers */, + 32F6E5D12D2B03630029B972 /* SFBMusepackDecoder.h in Headers */, + 32F6E5D22D2B03630029B972 /* SFBWavPackDecoder.h in Headers */, + 32F6E5D32D2B03630029B972 /* SFBOggVorbisDecoder.h in Headers */, + 32F6E5D42D2B03630029B972 /* SFBAudioDecoder+Internal.h in Headers */, + 32F6E5D52D2B03630029B972 /* SFBDSDIFFDecoder.h in Headers */, + 32F6E5D62D2B03630029B972 /* SFBOggOpusDecoder.h in Headers */, + 32F6E5E92D2B03DA0029B972 /* SFBFileContentsInputSource.h in Headers */, + 32F6E5EA2D2B03DA0029B972 /* SFBInputSource+Internal.h in Headers */, + 32F6E5EB2D2B03DA0029B972 /* SFBFileInputSource.h in Headers */, + 32F6E5EC2D2B03DA0029B972 /* SFBDataInputSource.h in Headers */, + 32F6E5ED2D2B03DA0029B972 /* SFBMemoryMappedFileInputSource.h in Headers */, + 32F6E5D72D2B03630029B972 /* SFBShortenDecoder.h in Headers */, + 32F6E5D82D2B03630029B972 /* SFBLibsndfileDecoder.h in Headers */, + 32F6E5D92D2B03630029B972 /* SFBCoreAudioDecoder.h in Headers */, + 32F6E5DA2D2B03630029B972 /* SFBDSFDecoder.h in Headers */, + 32F6E5DB2D2B03630029B972 /* SFBMPEGDecoder.h in Headers */, + 32F6E5DC2D2B03630029B972 /* SFBTrueAudioDecoder.h in Headers */, 3237E2042CF786BA0084AA51 /* SFBDSDPCMDecoder.h in Headers */, 3237E2052CF786BA0084AA51 /* SFBPCMDecoding.h in Headers */, 3237E2062CF786BA0084AA51 /* SFBAudioFile.h in Headers */, @@ -719,6 +832,7 @@ 3237E2082CF786BA0084AA51 /* SFBAttachedPicture.h in Headers */, 3237E2092CF786BA0084AA51 /* SFBInputSource.h in Headers */, 3237E20A2CF786BA0084AA51 /* SFBAudioEngine.h in Headers */, + 32F6E5C12D2B02F00029B972 /* SFBLibsndfileUtilities.h in Headers */, 3237E20B2CF786BA0084AA51 /* SFBAudioProperties.h in Headers */, 3237E20C2CF786BA0084AA51 /* SFBPCMEncoding.h in Headers */, 3237E20D2CF786BA0084AA51 /* SFBAudioDecoding.h in Headers */, @@ -728,9 +842,48 @@ 3237E2112CF786BA0084AA51 /* SFBDSDDecoding.h in Headers */, 3237E2122CF786BA0084AA51 /* SFBAudioMetadata.h in Headers */, 3237E2132CF786BA0084AA51 /* SFBAudioEngineTypes.h in Headers */, + 32F6E5EE2D2B04030029B972 /* SFBAudioMetadata+TagLibID3v2Tag.h in Headers */, + 32F6E5EF2D2B04030029B972 /* SFBOggVorbisFile.h in Headers */, + 32F6E5F02D2B04030029B972 /* SFBTrueAudioFile.h in Headers */, + 32F6E5F12D2B04030029B972 /* SFBOggOpusFile.h in Headers */, + 32F6E5F22D2B04030029B972 /* SFBImpulseTrackerModuleFile.h in Headers */, + 32F6E5F32D2B04030029B972 /* SFBAudioMetadata+TagLibMP4Tag.h in Headers */, + 32F6E5F42D2B04030029B972 /* SFBProTrackerModuleFile.h in Headers */, + 32F6E5F52D2B04030029B972 /* SFBShortenFile.h in Headers */, + 32F6E5F62D2B04030029B972 /* SFBExtendedModuleFile.h in Headers */, + 32F6E5F72D2B04030029B972 /* SFBAudioMetadata+TagLibTag.h in Headers */, + 32F6E5F82D2B04030029B972 /* SFBAudioMetadata+TagLibID3v1Tag.h in Headers */, + 32F6E5F92D2B04030029B972 /* SFBAudioMetadata+TagLibXiphComment.h in Headers */, + 32F6E5FA2D2B04030029B972 /* SFBScreamTracker3ModuleFile.h in Headers */, + 32F6E5FB2D2B04030029B972 /* SFBAIFFFile.h in Headers */, + 32F6E5FC2D2B04030029B972 /* SFBWavPackFile.h in Headers */, + 32F6E5FD2D2B04030029B972 /* SFBOggSpeexFile.h in Headers */, + 32F6E5FE2D2B04030029B972 /* SFBDSDIFFFile.h in Headers */, + 32F6E5FF2D2B04030029B972 /* SFBAudioFile+Internal.h in Headers */, + 32F6E6002D2B04030029B972 /* TagLibStringUtilities.h in Headers */, + 32F6E6012D2B04030029B972 /* SFBDSFFile.h in Headers */, + 32F6E6022D2B04030029B972 /* SFBMonkeysAudioFile.h in Headers */, + 32F6E6032D2B04030029B972 /* SFBMusepackFile.h in Headers */, + 32F6E6042D2B04030029B972 /* SFBOggFLACFile.h in Headers */, + 32F6E6052D2B04030029B972 /* AddAudioPropertiesToDictionary.h in Headers */, + 32F6E6062D2B04030029B972 /* SFBMP3File.h in Headers */, + 32F6E6072D2B04030029B972 /* SFBFLACFile.h in Headers */, + 32F6E6082D2B04030029B972 /* SFBAudioMetadata+TagLibAPETag.h in Headers */, + 32F6E6092D2B04030029B972 /* SFBMP4File.h in Headers */, + 32F6E60A2D2B04030029B972 /* SFBWAVEFile.h in Headers */, + 32F6E5C82D2B033E0029B972 /* SFBOutputSource+Internal.h in Headers */, + 32F6E5C92D2B033E0029B972 /* SFBMutableDataOutputSource.h in Headers */, + 32F6E5CA2D2B033E0029B972 /* SFBFileOutputSource.h in Headers */, + 32F6E5CB2D2B033E0029B972 /* SFBBufferOutputSource.h in Headers */, 3237E2142CF786BA0084AA51 /* SFBAudioDecoder.h in Headers */, + 32F6E5C72D2B032F0029B972 /* SFBTimeUtilities.hpp in Headers */, 3237E2152CF786BA0084AA51 /* SFBAudioConverter.h in Headers */, 3237E2162CF786BA0084AA51 /* SFBReplayGainAnalyzer.h in Headers */, + 32F6E5C22D2B031D0029B972 /* NSData+SFBExtensions.h in Headers */, + 32F6E5C32D2B031D0029B972 /* NSFileHandle+SFBHeaderReading.h in Headers */, + 32F6E5C42D2B031D0029B972 /* SFBCStringForOSType.h in Headers */, + 32F6E5C52D2B031D0029B972 /* SFBTernaryTruthValue.h in Headers */, + 32F6E5C62D2B031D0029B972 /* NSError+SFBURLPresentation.h in Headers */, 3237E2172CF786BA0084AA51 /* SFBDoPDecoder.h in Headers */, 3237E2182CF786BA0084AA51 /* SFBAudioEncoder.h in Headers */, ); @@ -911,6 +1064,7 @@ 3237E1F02CF7868B0084AA51 /* SFBProTrackerModuleFile.mm in Sources */, 3237E1F12CF7868B0084AA51 /* SFBOggVorbisDecoder.m in Sources */, 3237E1F22CF7868B0084AA51 /* SFBAudioPlayer.mm in Sources */, + 32F6E5C02D2B02F00029B972 /* SFBLibsndfileUtilities.m in Sources */, 3237E1F32CF7868B0084AA51 /* SFBMusepackEncoder.m in Sources */, 3237E1F42CF7868B0084AA51 /* SFBMonkeysAudioEncoder.mm in Sources */, 3237E1F52CF7868B0084AA51 /* SFBMemoryMappedFileInputSource.m in Sources */, From 11a84021ffe6e97bc1c8514af50ff3666c243f88 Mon Sep 17 00:00:00 2001 From: "Stephen F. Booth" Date: Tue, 14 Jan 2025 17:16:12 -0600 Subject: [PATCH 03/22] Add new files to xcodeproj --- SFBAudioEngine.xcodeproj/project.pbxproj | 44 +++++++++++++++++++----- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index 2cb64d653..c43be44fe 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -12,6 +12,15 @@ 321C18B72CF7888800670824 /* lame in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18B62CF7888800670824 /* lame */; }; 321C18BA2CF7889A00670824 /* mpc in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18B92CF7889A00670824 /* mpc */; }; 321C18BD2CF788AB00670824 /* mpg123 in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18BC2CF788AB00670824 /* mpg123 */; }; + 322298872D3727790020316A /* StringDescribingAVAudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 322298852D3727790020316A /* StringDescribingAVAudioFormat.h */; }; + 322298882D3727790020316A /* HostTimeUtilities.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 322298822D3727790020316A /* HostTimeUtilities.hpp */; }; + 322298892D3727790020316A /* SFBAudioPlayerNode+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 322298842D3727790020316A /* SFBAudioPlayerNode+Internal.h */; }; + 3222988A2D3727790020316A /* AudioPlayerNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3222987E2D3727790020316A /* AudioPlayerNode.h */; }; + 3222988B2D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.h in Headers */ = {isa = PBXBuildFile; fileRef = 322298802D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.h */; }; + 3222988C2D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 322298812D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.mm */; }; + 3222988D2D3727790020316A /* HostTimeUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 322298832D3727790020316A /* HostTimeUtilities.cpp */; }; + 3222988E2D3727790020316A /* StringDescribingAVAudioFormat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 322298862D3727790020316A /* StringDescribingAVAudioFormat.mm */; }; + 3222988F2D3727790020316A /* AudioPlayerNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3222987F2D3727790020316A /* AudioPlayerNode.mm */; }; 322CE3442CF787630070996C /* dumb in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3432CF787630070996C /* dumb */; }; 322CE3472CF787740070996C /* MAC in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3462CF787740070996C /* MAC */; }; 322CE34A2CF7878D0070996C /* taglib in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3492CF7878D0070996C /* taglib */; }; @@ -137,7 +146,6 @@ 328E81672CF7891A00BFCEB2 /* tta-cpp in Frameworks */ = {isa = PBXBuildFile; productRef = 328E81662CF7891A00BFCEB2 /* tta-cpp */; }; 328E816A2CF7898C00BFCEB2 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 328E81692CF7898C00BFCEB2 /* ImageIO.framework */; }; 328E816C2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 328E816B2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework */; }; - 328E816D2CF789D100BFCEB2 /* SFBTimeUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3237E18E2CF785DD0084AA51 /* SFBTimeUtilities.cpp */; }; 32F6E5C02D2B02F00029B972 /* SFBLibsndfileUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 32F6E5BF2D2B02F00029B972 /* SFBLibsndfileUtilities.m */; }; 32F6E5C12D2B02F00029B972 /* SFBLibsndfileUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 32F6E5BE2D2B02F00029B972 /* SFBLibsndfileUtilities.h */; }; 32F6E5C22D2B031D0029B972 /* NSData+SFBExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1902CF785DD0084AA51 /* NSData+SFBExtensions.h */; }; @@ -145,7 +153,6 @@ 32F6E5C42D2B031D0029B972 /* SFBCStringForOSType.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1962CF785DD0084AA51 /* SFBCStringForOSType.h */; }; 32F6E5C52D2B031D0029B972 /* SFBTernaryTruthValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1972CF785DD0084AA51 /* SFBTernaryTruthValue.h */; }; 32F6E5C62D2B031D0029B972 /* NSError+SFBURLPresentation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1922CF785DD0084AA51 /* NSError+SFBURLPresentation.h */; }; - 32F6E5C72D2B032F0029B972 /* SFBTimeUtilities.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3237E18D2CF785DD0084AA51 /* SFBTimeUtilities.hpp */; }; 32F6E5C82D2B033E0029B972 /* SFBOutputSource+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1892CF785DD0084AA51 /* SFBOutputSource+Internal.h */; }; 32F6E5C92D2B033E0029B972 /* SFBMutableDataOutputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1862CF785DD0084AA51 /* SFBMutableDataOutputSource.h */; }; 32F6E5CA2D2B033E0029B972 /* SFBFileOutputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1842CF785DD0084AA51 /* SFBFileOutputSource.h */; }; @@ -216,6 +223,15 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 3222987E2D3727790020316A /* AudioPlayerNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioPlayerNode.h; sourceTree = ""; }; + 3222987F2D3727790020316A /* AudioPlayerNode.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AudioPlayerNode.mm; sourceTree = ""; }; + 322298802D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AVAudioChannelLayoutsAreEquivalent.h; sourceTree = ""; }; + 322298812D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AVAudioChannelLayoutsAreEquivalent.mm; sourceTree = ""; }; + 322298822D3727790020316A /* HostTimeUtilities.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = HostTimeUtilities.hpp; sourceTree = ""; }; + 322298832D3727790020316A /* HostTimeUtilities.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HostTimeUtilities.cpp; sourceTree = ""; }; + 322298842D3727790020316A /* SFBAudioPlayerNode+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBAudioPlayerNode+Internal.h"; sourceTree = ""; }; + 322298852D3727790020316A /* StringDescribingAVAudioFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StringDescribingAVAudioFormat.h; sourceTree = ""; }; + 322298862D3727790020316A /* StringDescribingAVAudioFormat.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = StringDescribingAVAudioFormat.mm; sourceTree = ""; }; 3237E0CF2CF7855B0084AA51 /* SFBAudioEngine.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SFBAudioEngine.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3237E0DA2CF785DD0084AA51 /* SFBReplayGainAnalyzer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBReplayGainAnalyzer.m; sourceTree = ""; }; 3237E0DC2CF785DD0084AA51 /* SFBAudioConverter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioConverter.m; sourceTree = ""; }; @@ -385,8 +401,6 @@ 3237E1892CF785DD0084AA51 /* SFBOutputSource+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBOutputSource+Internal.h"; sourceTree = ""; }; 3237E18B2CF785DD0084AA51 /* SFBAudioPlayer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBAudioPlayer.mm; sourceTree = ""; }; 3237E18C2CF785DD0084AA51 /* SFBAudioPlayerNode.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBAudioPlayerNode.mm; sourceTree = ""; }; - 3237E18D2CF785DD0084AA51 /* SFBTimeUtilities.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = SFBTimeUtilities.hpp; sourceTree = ""; }; - 3237E18E2CF785DD0084AA51 /* SFBTimeUtilities.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SFBTimeUtilities.cpp; sourceTree = ""; }; 3237E1902CF785DD0084AA51 /* NSData+SFBExtensions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSData+SFBExtensions.h"; sourceTree = ""; }; 3237E1912CF785DD0084AA51 /* NSData+SFBExtensions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSData+SFBExtensions.m"; sourceTree = ""; }; 3237E1922CF785DD0084AA51 /* NSError+SFBURLPresentation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSError+SFBURLPresentation.h"; sourceTree = ""; }; @@ -690,10 +704,17 @@ 3237E18F2CF785DD0084AA51 /* Player */ = { isa = PBXGroup; children = ( + 3222987E2D3727790020316A /* AudioPlayerNode.h */, + 3222987F2D3727790020316A /* AudioPlayerNode.mm */, + 322298802D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.h */, + 322298812D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.mm */, + 322298822D3727790020316A /* HostTimeUtilities.hpp */, + 322298832D3727790020316A /* HostTimeUtilities.cpp */, 3237E18B2CF785DD0084AA51 /* SFBAudioPlayer.mm */, 3237E18C2CF785DD0084AA51 /* SFBAudioPlayerNode.mm */, - 3237E18D2CF785DD0084AA51 /* SFBTimeUtilities.hpp */, - 3237E18E2CF785DD0084AA51 /* SFBTimeUtilities.cpp */, + 322298842D3727790020316A /* SFBAudioPlayerNode+Internal.h */, + 322298852D3727790020316A /* StringDescribingAVAudioFormat.h */, + 322298862D3727790020316A /* StringDescribingAVAudioFormat.mm */, ); path = Player; sourceTree = ""; @@ -850,6 +871,11 @@ 32F6E5F32D2B04030029B972 /* SFBAudioMetadata+TagLibMP4Tag.h in Headers */, 32F6E5F42D2B04030029B972 /* SFBProTrackerModuleFile.h in Headers */, 32F6E5F52D2B04030029B972 /* SFBShortenFile.h in Headers */, + 322298872D3727790020316A /* StringDescribingAVAudioFormat.h in Headers */, + 322298882D3727790020316A /* HostTimeUtilities.hpp in Headers */, + 322298892D3727790020316A /* SFBAudioPlayerNode+Internal.h in Headers */, + 3222988A2D3727790020316A /* AudioPlayerNode.h in Headers */, + 3222988B2D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.h in Headers */, 32F6E5F62D2B04030029B972 /* SFBExtendedModuleFile.h in Headers */, 32F6E5F72D2B04030029B972 /* SFBAudioMetadata+TagLibTag.h in Headers */, 32F6E5F82D2B04030029B972 /* SFBAudioMetadata+TagLibID3v1Tag.h in Headers */, @@ -876,7 +902,6 @@ 32F6E5CA2D2B033E0029B972 /* SFBFileOutputSource.h in Headers */, 32F6E5CB2D2B033E0029B972 /* SFBBufferOutputSource.h in Headers */, 3237E2142CF786BA0084AA51 /* SFBAudioDecoder.h in Headers */, - 32F6E5C72D2B032F0029B972 /* SFBTimeUtilities.hpp in Headers */, 3237E2152CF786BA0084AA51 /* SFBAudioConverter.h in Headers */, 3237E2162CF786BA0084AA51 /* SFBReplayGainAnalyzer.h in Headers */, 32F6E5C22D2B031D0029B972 /* NSData+SFBExtensions.h in Headers */, @@ -1008,6 +1033,10 @@ 3237E1B92CF7868B0084AA51 /* SFBOggSpeexDecoder.m in Sources */, 3237E1BA2CF7868B0084AA51 /* NSData+SFBExtensions.m in Sources */, 3237E1BB2CF7868B0084AA51 /* SFBOggVorbisEncoder.m in Sources */, + 3222988C2D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.mm in Sources */, + 3222988D2D3727790020316A /* HostTimeUtilities.cpp in Sources */, + 3222988E2D3727790020316A /* StringDescribingAVAudioFormat.mm in Sources */, + 3222988F2D3727790020316A /* AudioPlayerNode.mm in Sources */, 3237E1BC2CF7868B0084AA51 /* SFBLibsndfileDecoder.m in Sources */, 3237E1BD2CF7868B0084AA51 /* SFBAudioEncoder.m in Sources */, 3237E1BE2CF7868B0084AA51 /* SFBAudioMetadata.m in Sources */, @@ -1048,7 +1077,6 @@ 3237E1E12CF7868B0084AA51 /* SFBFileInputSource.m in Sources */, 3237E1E22CF7868B0084AA51 /* SFBCoreAudioEncoder.mm in Sources */, 3237E1E32CF7868B0084AA51 /* SFBLoopableRegionDecoder.m in Sources */, - 328E816D2CF789D100BFCEB2 /* SFBTimeUtilities.cpp in Sources */, 3237E1E42CF7868B0084AA51 /* SFBOggOpusFile.mm in Sources */, 3237E1E52CF7868B0084AA51 /* SFBExtendedModuleFile.mm in Sources */, 3237E1E62CF7868B0084AA51 /* SFBAudioMetadata+TagLibID3v1Tag.mm in Sources */, From b6f22fa1ae92df49c938733545ba86ee1e8e6b95 Mon Sep 17 00:00:00 2001 From: Stephen Booth Date: Sat, 1 Feb 2025 16:50:26 -0600 Subject: [PATCH 04/22] Add `RemoveDecoderFromQueue` (#565) --- Sources/CSFBAudioEngine/Player/AudioPlayerNode.h | 2 ++ Sources/CSFBAudioEngine/Player/AudioPlayerNode.mm | 14 ++++++++++++++ .../CSFBAudioEngine/Player/SFBAudioPlayerNode.mm | 6 ++++++ .../include/SFBAudioEngine/SFBAudioPlayerNode.h | 4 ++++ 4 files changed, 26 insertions(+) diff --git a/Sources/CSFBAudioEngine/Player/AudioPlayerNode.h b/Sources/CSFBAudioEngine/Player/AudioPlayerNode.h index 845a4f6c1..084c4d33b 100644 --- a/Sources/CSFBAudioEngine/Player/AudioPlayerNode.h +++ b/Sources/CSFBAudioEngine/Player/AudioPlayerNode.h @@ -186,6 +186,8 @@ class AudioPlayerNode final { /// Pops the next decoder from the decoder queue Decoder _Nullable DequeueDecoder() noexcept; + bool RemoveDecoderFromQueue(Decoder _Nonnull decoder) noexcept; + void ClearQueue() noexcept { std::lock_guard lock(mQueueLock); diff --git a/Sources/CSFBAudioEngine/Player/AudioPlayerNode.mm b/Sources/CSFBAudioEngine/Player/AudioPlayerNode.mm index e15ea0646..ed78e86a3 100644 --- a/Sources/CSFBAudioEngine/Player/AudioPlayerNode.mm +++ b/Sources/CSFBAudioEngine/Player/AudioPlayerNode.mm @@ -623,6 +623,20 @@ bool PerformSeekIfRequired() noexcept return decoder; } +bool SFB::AudioPlayerNode::RemoveDecoderFromQueue(Decoder decoder) noexcept +{ +#if DEBUG + assert(decoder != nil); +#endif /* DEBUG */ + + std::lock_guard lock(mQueueLock); + const auto iter = std::find(mQueuedDecoders.cbegin(), mQueuedDecoders.cend(), decoder); + if(iter == mQueuedDecoders.cend()) + return false; + mQueuedDecoders.erase(iter); + return true; +} + SFB::AudioPlayerNode::Decoder SFB::AudioPlayerNode::CurrentDecoder() const noexcept { std::lock_guard lock(mDecoderLock); diff --git a/Sources/CSFBAudioEngine/Player/SFBAudioPlayerNode.mm b/Sources/CSFBAudioEngine/Player/SFBAudioPlayerNode.mm index 346f13605..f3c8e2bb2 100644 --- a/Sources/CSFBAudioEngine/Player/SFBAudioPlayerNode.mm +++ b/Sources/CSFBAudioEngine/Player/SFBAudioPlayerNode.mm @@ -130,6 +130,12 @@ - (BOOL)enqueueDecoder:(id )decoder error:(NSError **)error return _impl->DequeueDecoder(); } +- (BOOL)removeDecoderFromQueue:(id)decoder +{ + NSParameterAssert(decoder != nil); + return _impl->RemoveDecoderFromQueue(decoder); +} + - (void)clearQueue { _impl->ClearQueue(); diff --git a/Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioPlayerNode.h b/Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioPlayerNode.h index d83ca6520..a7af8730c 100644 --- a/Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioPlayerNode.h +++ b/Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioPlayerNode.h @@ -143,6 +143,10 @@ NS_SWIFT_NAME(AudioPlayerNode) @interface SFBAudioPlayerNode : AVAudioSourceNode /// Dequeues and returns the next decoder from the decoder queue - (nullable id ) dequeueDecoder; +/// Removes a decoder from the decoder queue +/// - parameter decoder: The decoder to remove +/// - returns: `YES` if the decoder was removed successfully +- (BOOL)removeDecoderFromQueue:(id)decoder; /// Empties the decoder queue - (void)clearQueue; From aa851dcf9df340aa3708d32a0c72d3d83f7b0441 Mon Sep 17 00:00:00 2001 From: Stephen Booth Date: Sat, 1 Feb 2025 16:55:41 -0600 Subject: [PATCH 05/22] Update documentation comment (#566) --- Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioPlayer.h | 2 +- .../CSFBAudioEngine/include/SFBAudioEngine/SFBAudioPlayerNode.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioPlayer.h b/Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioPlayer.h index b2e19af54..759a83ecc 100644 --- a/Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioPlayer.h +++ b/Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioPlayer.h @@ -106,7 +106,7 @@ NS_SWIFT_NAME(AudioPlayer) @interface SFBAudioPlayer : NSObject )decoder; -/// Empties the decoder queue +/// Clears the decoder queue - (void)clearQueue; /// Returns `YES` if the decoder queue is empty From 73b53c77dd5b5a9126d45f1bf8752993eb3aa19e Mon Sep 17 00:00:00 2001 From: Stephen Booth Date: Mon, 3 Feb 2025 10:20:17 -0600 Subject: [PATCH 06/22] Refactor playback position and time (#567) --- .../Player/SFBAudioPlayerNode.mm | 3 - .../Utilities/SFBAudioEngineTypes.m | 11 +++ .../SFBAudioEngine/SFBAudioEngineTypes.h | 39 +++++++++ .../SFBAudioEngine/SFBAudioPlayerNode.h | 38 --------- .../SFBAudioEngine/SFBAudioPlayerNode.swift | 80 ------------------- .../SFBAudioEngine/SFBPlaybackPosition.swift | 47 +++++++++++ Sources/SFBAudioEngine/SFBPlaybackTime.swift | 47 +++++++++++ 7 files changed, 144 insertions(+), 121 deletions(-) create mode 100644 Sources/CSFBAudioEngine/Utilities/SFBAudioEngineTypes.m create mode 100644 Sources/SFBAudioEngine/SFBPlaybackPosition.swift create mode 100644 Sources/SFBAudioEngine/SFBPlaybackTime.swift diff --git a/Sources/CSFBAudioEngine/Player/SFBAudioPlayerNode.mm b/Sources/CSFBAudioEngine/Player/SFBAudioPlayerNode.mm index f3c8e2bb2..0bd7f7401 100644 --- a/Sources/CSFBAudioEngine/Player/SFBAudioPlayerNode.mm +++ b/Sources/CSFBAudioEngine/Player/SFBAudioPlayerNode.mm @@ -8,9 +8,6 @@ #import "SFBAudioPlayerNode+Internal.h" -const NSTimeInterval SFBUnknownTime = -1; -const SFBPlaybackPosition SFBInvalidPlaybackPosition = { .framePosition = SFBUnknownFramePosition, .frameLength = SFBUnknownFrameLength}; -const SFBPlaybackTime SFBInvalidPlaybackTime = { .currentTime = SFBUnknownTime, .totalTime = SFBUnknownTime}; NSErrorDomain const SFBAudioPlayerNodeErrorDomain = @"org.sbooth.AudioEngine.AudioPlayerNode"; namespace { diff --git a/Sources/CSFBAudioEngine/Utilities/SFBAudioEngineTypes.m b/Sources/CSFBAudioEngine/Utilities/SFBAudioEngineTypes.m new file mode 100644 index 000000000..69f1aa529 --- /dev/null +++ b/Sources/CSFBAudioEngine/Utilities/SFBAudioEngineTypes.m @@ -0,0 +1,11 @@ +// +// Copyright (c) 2006-2025 Stephen F. Booth +// Part of https://github.com/sbooth/SFBAudioEngine +// MIT license +// + +#import "SFBAudioEngineTypes.h" + +const NSTimeInterval SFBUnknownTime = -1; +const SFBPlaybackPosition SFBInvalidPlaybackPosition = { .framePosition = SFBUnknownFramePosition, .frameLength = SFBUnknownFrameLength}; +const SFBPlaybackTime SFBInvalidPlaybackTime = { .currentTime = SFBUnknownTime, .totalTime = SFBUnknownTime}; diff --git a/Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioEngineTypes.h b/Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioEngineTypes.h index e66a373a1..917040087 100644 --- a/Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioEngineTypes.h +++ b/Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioEngineTypes.h @@ -72,6 +72,7 @@ CF_ENUM(int) { #ifdef __OBJC__ +#import #import #pragma mark - Constants for Unknowns @@ -91,4 +92,42 @@ NS_ENUM(AVAudioFramePosition) { SFBUnknownPacketCount NS_SWIFT_NAME(unknownPacketCount) = -1, }; +#pragma mark - Playback Position + +/// Playback position information +struct NS_SWIFT_SENDABLE SFBPlaybackPosition { + /// The current frame position or `SFBUnknownFramePosition` if unknown + AVAudioFramePosition framePosition; + /// The total number of frames or `SFBUnknownFrameLength` if unknown + AVAudioFramePosition frameLength; +} NS_SWIFT_NAME(PlaybackPosition); +typedef struct SFBPlaybackPosition SFBPlaybackPosition; + +/// Value representing an invalid or unknown playback position +extern const SFBPlaybackPosition SFBInvalidPlaybackPosition NS_SWIFT_NAME(PlaybackPosition.invalid); + +/// Returns `YES` if the current frame position and total number of frames in `playbackPosition` are valid +NS_INLINE BOOL SFBPlaybackPositionIsValid(SFBPlaybackPosition playbackPosition) { + return playbackPosition.framePosition != SFBUnknownFramePosition && playbackPosition.frameLength != SFBUnknownFrameLength; +} + +#pragma mark - Playback Time + +/// Playback time information +struct NS_SWIFT_SENDABLE SFBPlaybackTime { + /// The current time or `SFBUnknownTime` if unknown + NSTimeInterval currentTime; + /// The total time or `SFBUnknownTime` if unknown + NSTimeInterval totalTime; +} NS_SWIFT_NAME(PlaybackTime); +typedef struct SFBPlaybackTime SFBPlaybackTime; + +/// Value representing an invalid or unknown playback time +extern const SFBPlaybackTime SFBInvalidPlaybackTime NS_SWIFT_NAME(PlaybackTime.invalid); + +/// Returns `YES` if the current time and total time in `playbackTime` are valid +NS_INLINE BOOL SFBPlaybackTimeIsValid(SFBPlaybackTime playbackTime) { + return playbackTime.currentTime != SFBUnknownTime && playbackTime.totalTime != SFBUnknownTime; +} + #endif /* __OBJC__ */ diff --git a/Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioPlayerNode.h b/Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioPlayerNode.h index 5780edd76..aba689b02 100644 --- a/Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioPlayerNode.h +++ b/Sources/CSFBAudioEngine/include/SFBAudioEngine/SFBAudioPlayerNode.h @@ -13,44 +13,6 @@ NS_ASSUME_NONNULL_BEGIN @protocol SFBAudioPlayerNodeDelegate; -#pragma mark - Playback position and time information - -/// Playback position information -struct NS_SWIFT_SENDABLE SFBPlaybackPosition { - /// The current frame position or `SFBUnknownFramePosition` if unknown - AVAudioFramePosition framePosition; - /// The total number of frames or `SFBUnknownFrameLength` if unknown - AVAudioFramePosition frameLength; -} NS_SWIFT_NAME(PlaybackPosition); -typedef struct SFBPlaybackPosition SFBPlaybackPosition; - -/// Value representing an invalid or unknown playback position -extern const SFBPlaybackPosition SFBInvalidPlaybackPosition NS_SWIFT_NAME(PlaybackPosition.invalid); - -/// Returns `YES` if the current frame position and total number of frames in `playbackPosition` are valid -NS_INLINE BOOL SFBPlaybackPositionIsValid(SFBPlaybackPosition playbackPosition) { - return playbackPosition.framePosition != SFBUnknownFramePosition && playbackPosition.frameLength != SFBUnknownFrameLength; -} - -/// Playback time information -struct NS_SWIFT_SENDABLE SFBPlaybackTime { - /// The current time or `SFBUnknownTime` if unknown - NSTimeInterval currentTime; - /// The total time or `SFBUnknownTime` if unknown - NSTimeInterval totalTime; -} NS_SWIFT_NAME(PlaybackTime); -typedef struct SFBPlaybackTime SFBPlaybackTime; - -/// Value representing an invalid or unknown playback time -extern const SFBPlaybackTime SFBInvalidPlaybackTime NS_SWIFT_NAME(PlaybackTime.invalid); - -/// Returns `YES` if the current time and total time in `playbackTime` are valid -NS_INLINE BOOL SFBPlaybackTimeIsValid(SFBPlaybackTime playbackTime) { - return playbackTime.currentTime != SFBUnknownTime && playbackTime.totalTime != SFBUnknownTime; -} - -#pragma mark - SFBAudioPlayerNode - /// An `AVAudioSourceNode` supporting gapless playback for PCM formats /// /// The output format of `SFBAudioPlayerNode` is specified at object initialization and cannot be changed. The output diff --git a/Sources/SFBAudioEngine/SFBAudioPlayerNode.swift b/Sources/SFBAudioEngine/SFBAudioPlayerNode.swift index 31305adf8..50f81c7d4 100644 --- a/Sources/SFBAudioEngine/SFBAudioPlayerNode.swift +++ b/Sources/SFBAudioEngine/SFBAudioPlayerNode.swift @@ -6,86 +6,6 @@ import Foundation -extension PlaybackPosition { - /// Returns `true` if the current frame position and total number of frames are valid - public var isValid: Bool { - framePosition != unknownFramePosition && frameLength != unknownFrameLength - } - /// Returns `true` if the current frame position is valid - public var isFramePositionValid: Bool { - framePosition != unknownFramePosition - } - /// Returns `true` if the total number of frames is valid - public var isFrameLengthValid: Bool { - frameLength != unknownFrameLength - } - - /// The current frame position or `nil` if unknown - public var current: AVAudioFramePosition? { - isFramePositionValid ? framePosition : nil - } - /// The total number of frames or `nil` if unknown - public var total: AVAudioFramePosition? { - isFrameLengthValid ? frameLength : nil - } - - /// Returns `current` as a fraction of `total` - public var progress: Double? { - guard isValid else { - return nil - } - return Double(framePosition) / Double(frameLength) - } - - /// Returns the frames remaining - public var remaining: AVAudioFramePosition? { - guard isValid else { - return nil - } - return frameLength - framePosition - } -} - -extension PlaybackTime { - /// Returns `true` if the current time and total time are valid - public var isValid: Bool { - currentTime != unknownTime && totalTime != unknownTime - } - /// Returns `true` if the current time is valid - public var isCurrentTimeValid: Bool { - currentTime != unknownTime - } - /// Returns `true` if the total time is valid - public var isTotalTimeValid: Bool { - totalTime != unknownTime - } - - /// The current time or `nil` if unknown - public var current: TimeInterval? { - isCurrentTimeValid ? currentTime : nil - } - /// The total time or `nil` if unknown - public var total: TimeInterval? { - isTotalTimeValid ? totalTime : nil - } - - /// Returns `current` as a fraction of `total` - public var progress: Double? { - guard isValid else { - return nil - } - return currentTime / totalTime - } - - /// Returns the time remaining - public var remaining: TimeInterval? { - guard isValid else { - return nil - } - return totalTime - currentTime - } -} - extension AudioPlayerNode { /// Returns the playback position and time in the current decoder or `nil` if the current decoder is `nil` public var playbackPositionAndTime: (position: PlaybackPosition, time: PlaybackTime) { diff --git a/Sources/SFBAudioEngine/SFBPlaybackPosition.swift b/Sources/SFBAudioEngine/SFBPlaybackPosition.swift new file mode 100644 index 000000000..f4c2e8b69 --- /dev/null +++ b/Sources/SFBAudioEngine/SFBPlaybackPosition.swift @@ -0,0 +1,47 @@ +// +// Copyright (c) 2020-2025 Stephen F. Booth +// Part of https://github.com/sbooth/SFBAudioEngine +// MIT license +// + +import Foundation + +extension PlaybackPosition { + /// Returns `true` if the current frame position and total number of frames are valid + public var isValid: Bool { + framePosition != unknownFramePosition && frameLength != unknownFrameLength + } + /// Returns `true` if the current frame position is valid + public var isFramePositionValid: Bool { + framePosition != unknownFramePosition + } + /// Returns `true` if the total number of frames is valid + public var isFrameLengthValid: Bool { + frameLength != unknownFrameLength + } + + /// The current frame position or `nil` if unknown + public var current: AVAudioFramePosition? { + isFramePositionValid ? framePosition : nil + } + /// The total number of frames or `nil` if unknown + public var total: AVAudioFramePosition? { + isFrameLengthValid ? frameLength : nil + } + + /// Returns `current` as a fraction of `total` + public var progress: Double? { + guard isValid else { + return nil + } + return Double(framePosition) / Double(frameLength) + } + + /// Returns the frames remaining + public var remaining: AVAudioFramePosition? { + guard isValid else { + return nil + } + return frameLength - framePosition + } +} diff --git a/Sources/SFBAudioEngine/SFBPlaybackTime.swift b/Sources/SFBAudioEngine/SFBPlaybackTime.swift new file mode 100644 index 000000000..e13860486 --- /dev/null +++ b/Sources/SFBAudioEngine/SFBPlaybackTime.swift @@ -0,0 +1,47 @@ +// +// Copyright (c) 2020-2025 Stephen F. Booth +// Part of https://github.com/sbooth/SFBAudioEngine +// MIT license +// + +import Foundation + +extension PlaybackTime { + /// Returns `true` if the current time and total time are valid + public var isValid: Bool { + currentTime != unknownTime && totalTime != unknownTime + } + /// Returns `true` if the current time is valid + public var isCurrentTimeValid: Bool { + currentTime != unknownTime + } + /// Returns `true` if the total time is valid + public var isTotalTimeValid: Bool { + totalTime != unknownTime + } + + /// The current time or `nil` if unknown + public var current: TimeInterval? { + isCurrentTimeValid ? currentTime : nil + } + /// The total time or `nil` if unknown + public var total: TimeInterval? { + isTotalTimeValid ? totalTime : nil + } + + /// Returns `current` as a fraction of `total` + public var progress: Double? { + guard isValid else { + return nil + } + return currentTime / totalTime + } + + /// Returns the time remaining + public var remaining: TimeInterval? { + guard isValid else { + return nil + } + return totalTime - currentTime + } +} From ab085ad165228a095e80027d6e4e847ae7245f6e Mon Sep 17 00:00:00 2001 From: "Stephen F. Booth" Date: Tue, 4 Feb 2025 21:56:45 -0600 Subject: [PATCH 07/22] Update xcodeproj --- SFBAudioEngine.xcodeproj/project.pbxproj | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index c43be44fe..8f4c6aa08 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -146,6 +146,9 @@ 328E81672CF7891A00BFCEB2 /* tta-cpp in Frameworks */ = {isa = PBXBuildFile; productRef = 328E81662CF7891A00BFCEB2 /* tta-cpp */; }; 328E816A2CF7898C00BFCEB2 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 328E81692CF7898C00BFCEB2 /* ImageIO.framework */; }; 328E816C2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 328E816B2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework */; }; + 32B6CAB32D5318880093855B /* SFBPlaybackTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B6CAB22D5318880093855B /* SFBPlaybackTime.swift */; }; + 32B6CAB42D5318880093855B /* SFBPlaybackPosition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B6CAB12D5318880093855B /* SFBPlaybackPosition.swift */; }; + 32B6CAB62D5318AF0093855B /* SFBAudioEngineTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 32B6CAB52D5318AF0093855B /* SFBAudioEngineTypes.m */; }; 32F6E5C02D2B02F00029B972 /* SFBLibsndfileUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 32F6E5BF2D2B02F00029B972 /* SFBLibsndfileUtilities.m */; }; 32F6E5C12D2B02F00029B972 /* SFBLibsndfileUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 32F6E5BE2D2B02F00029B972 /* SFBLibsndfileUtilities.h */; }; 32F6E5C22D2B031D0029B972 /* NSData+SFBExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1902CF785DD0084AA51 /* NSData+SFBExtensions.h */; }; @@ -420,6 +423,9 @@ 3237E1A52CF785DD0084AA51 /* SFBAudioEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioEngineTests.swift; sourceTree = ""; }; 328E81692CF7898C00BFCEB2 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.1.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; 328E816B2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UniformTypeIdentifiers.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.1.sdk/System/Library/Frameworks/UniformTypeIdentifiers.framework; sourceTree = DEVELOPER_DIR; }; + 32B6CAB12D5318880093855B /* SFBPlaybackPosition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBPlaybackPosition.swift; sourceTree = ""; }; + 32B6CAB22D5318880093855B /* SFBPlaybackTime.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBPlaybackTime.swift; sourceTree = ""; }; + 32B6CAB52D5318AF0093855B /* SFBAudioEngineTypes.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioEngineTypes.m; sourceTree = ""; }; 32F6E5BE2D2B02F00029B972 /* SFBLibsndfileUtilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBLibsndfileUtilities.h; sourceTree = ""; }; 32F6E5BF2D2B02F00029B972 /* SFBLibsndfileUtilities.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBLibsndfileUtilities.m; sourceTree = ""; }; /* End PBXFileReference section */ @@ -728,6 +734,7 @@ 3237E1932CF785DD0084AA51 /* NSError+SFBURLPresentation.m */, 3237E1942CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.h */, 3237E1952CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.m */, + 32B6CAB52D5318AF0093855B /* SFBAudioEngineTypes.m */, 3237E1962CF785DD0084AA51 /* SFBCStringForOSType.h */, 32F6E5BE2D2B02F00029B972 /* SFBLibsndfileUtilities.h */, 32F6E5BF2D2B02F00029B972 /* SFBLibsndfileUtilities.m */, @@ -763,6 +770,8 @@ 3237E19E2CF785DD0084AA51 /* SFBAudioProperties.swift */, 3237E19F2CF785DD0084AA51 /* SFBInputSource.swift */, 3237E1A02CF785DD0084AA51 /* SFBOutputSource.swift */, + 32B6CAB12D5318880093855B /* SFBPlaybackPosition.swift */, + 32B6CAB22D5318880093855B /* SFBPlaybackTime.swift */, 3237E1A12CF785DD0084AA51 /* SFBReplayGainAnalyzer.swift */, ); path = SFBAudioEngine; @@ -1047,6 +1056,8 @@ 3237E1C32CF7868B0084AA51 /* SFBFLACDecoder.mm in Sources */, 3237E1C42CF7868B0084AA51 /* SFBReplayGainAnalyzer.m in Sources */, 3237E1C52CF7868B0084AA51 /* SFBAudioMetadata+TagLibAPETag.mm in Sources */, + 32B6CAB32D5318880093855B /* SFBPlaybackTime.swift in Sources */, + 32B6CAB42D5318880093855B /* SFBPlaybackPosition.swift in Sources */, 3237E1C62CF7868B0084AA51 /* SFBDSFFile.mm in Sources */, 3237E1C72CF7868B0084AA51 /* SFBMP4File.mm in Sources */, 3237E1C82CF7868B0084AA51 /* NSFileHandle+SFBHeaderReading.m in Sources */, @@ -1057,6 +1068,7 @@ 3237E1CD2CF7868B0084AA51 /* SFBMutableDataOutputSource.m in Sources */, 3237E1CE2CF7868B0084AA51 /* SFBAudioMetadata+TagLibXiphComment.mm in Sources */, 3237E1CF2CF7868B0084AA51 /* SFBDSDDecoder.m in Sources */, + 32B6CAB62D5318AF0093855B /* SFBAudioEngineTypes.m in Sources */, 3237E1D02CF7868B0084AA51 /* SFBShortenDecoder.mm in Sources */, 3237E1D12CF7868B0084AA51 /* SFBImpulseTrackerModuleFile.mm in Sources */, 3237E1D22CF7868B0084AA51 /* SFBScreamTracker3ModuleFile.mm in Sources */, From 192ec7d8b3b22f2038a68b7cf938d458b81e393b Mon Sep 17 00:00:00 2001 From: "Stephen F. Booth" Date: Sun, 29 Jun 2025 08:47:06 -0500 Subject: [PATCH 08/22] Update package versions for dependencies --- SFBAudioEngine.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index 8f4c6aa08..a893aebe9 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -1407,7 +1407,7 @@ repositoryURL = "https://github.com/sbooth/mpg123-binary-xcframework"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 0.2.2; + minimumVersion = 0.2.3; }; }; 322CE3422CF787630070996C /* XCRemoteSwiftPackageReference "CDUMB" */ = { @@ -1431,7 +1431,7 @@ repositoryURL = "https://github.com/sbooth/CXXTagLib"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 2.0.2; + minimumVersion = 2.1.0; }; }; 322CE34B2CF788020070996C /* XCRemoteSwiftPackageReference "wavpack-binary-xcframework" */ = { @@ -1439,7 +1439,7 @@ repositoryURL = "https://github.com/sbooth/wavpack-binary-xcframework"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 0.1.1; + minimumVersion = 0.1.2; }; }; 322CE34E2CF788120070996C /* XCRemoteSwiftPackageReference "ogg-binary-xcframework" */ = { @@ -1455,7 +1455,7 @@ repositoryURL = "https://github.com/sbooth/flac-binary-xcframework"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 0.1.3; + minimumVersion = 0.2.0; }; }; 322CE3542CF788360070996C /* XCRemoteSwiftPackageReference "opus-binary-xcframework" */ = { From bd1c1e82594db932c285c8780dba6e6ef83f050c Mon Sep 17 00:00:00 2001 From: "Stephen F. Booth" Date: Sun, 29 Jun 2025 08:49:05 -0500 Subject: [PATCH 09/22] Replace `SFBShortenFile.m` with `SFBShortenFile.mm` --- SFBAudioEngine.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index a893aebe9..85700239d 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -106,7 +106,6 @@ 3237E1F42CF7868B0084AA51 /* SFBMonkeysAudioEncoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E10E2CF785DD0084AA51 /* SFBMonkeysAudioEncoder.mm */; }; 3237E1F52CF7868B0084AA51 /* SFBMemoryMappedFileInputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1432CF785DD0084AA51 /* SFBMemoryMappedFileInputSource.m */; }; 3237E1F62CF7868B0084AA51 /* SFBMusepackFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E16B2CF785DD0084AA51 /* SFBMusepackFile.mm */; }; - 3237E1F72CF7868B0084AA51 /* SFBShortenFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1792CF785DD0084AA51 /* SFBShortenFile.m */; }; 3237E1F82CF7868B0084AA51 /* SFBOggOpusDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0F92CF785DD0084AA51 /* SFBOggOpusDecoder.m */; }; 3237E1F92CF7868B0084AA51 /* SFBMP3File.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1672CF785DD0084AA51 /* SFBMP3File.mm */; }; 3237E1FA2CF7868B0084AA51 /* SFBMonkeysAudioDecoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0F32CF785DD0084AA51 /* SFBMonkeysAudioDecoder.mm */; }; @@ -142,6 +141,7 @@ 3237E2182CF786BA0084AA51 /* SFBAudioEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1242CF785DD0084AA51 /* SFBAudioEncoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3237E21B2CF787230084AA51 /* CXXAudioUtilities in Frameworks */ = {isa = PBXBuildFile; productRef = 3237E21A2CF787230084AA51 /* CXXAudioUtilities */; }; 3237E21E2CF787330084AA51 /* AVFAudioExtensions in Frameworks */ = {isa = PBXBuildFile; productRef = 3237E21D2CF787330084AA51 /* AVFAudioExtensions */; }; + 328997AA2E117BB70083CD7D /* SFBShortenFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 328997A92E117BB70083CD7D /* SFBShortenFile.mm */; }; 328E81642CF7890700BFCEB2 /* sndfile in Frameworks */ = {isa = PBXBuildFile; productRef = 328E81632CF7890700BFCEB2 /* sndfile */; }; 328E81672CF7891A00BFCEB2 /* tta-cpp in Frameworks */ = {isa = PBXBuildFile; productRef = 328E81662CF7891A00BFCEB2 /* tta-cpp */; }; 328E816A2CF7898C00BFCEB2 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 328E81692CF7898C00BFCEB2 /* ImageIO.framework */; }; @@ -386,7 +386,6 @@ 3237E1762CF785DD0084AA51 /* SFBScreamTracker3ModuleFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBScreamTracker3ModuleFile.h; sourceTree = ""; }; 3237E1772CF785DD0084AA51 /* SFBScreamTracker3ModuleFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBScreamTracker3ModuleFile.mm; sourceTree = ""; }; 3237E1782CF785DD0084AA51 /* SFBShortenFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBShortenFile.h; sourceTree = ""; }; - 3237E1792CF785DD0084AA51 /* SFBShortenFile.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBShortenFile.m; sourceTree = ""; }; 3237E17A2CF785DD0084AA51 /* SFBTrueAudioFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBTrueAudioFile.h; sourceTree = ""; }; 3237E17B2CF785DD0084AA51 /* SFBTrueAudioFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBTrueAudioFile.mm; sourceTree = ""; }; 3237E17C2CF785DD0084AA51 /* SFBWAVEFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBWAVEFile.h; sourceTree = ""; }; @@ -421,6 +420,7 @@ 3237E1A02CF785DD0084AA51 /* SFBOutputSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBOutputSource.swift; sourceTree = ""; }; 3237E1A12CF785DD0084AA51 /* SFBReplayGainAnalyzer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBReplayGainAnalyzer.swift; sourceTree = ""; }; 3237E1A52CF785DD0084AA51 /* SFBAudioEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioEngineTests.swift; sourceTree = ""; }; + 328997A92E117BB70083CD7D /* SFBShortenFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBShortenFile.mm; sourceTree = ""; }; 328E81692CF7898C00BFCEB2 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.1.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; 328E816B2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UniformTypeIdentifiers.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.1.sdk/System/Library/Frameworks/UniformTypeIdentifiers.framework; sourceTree = DEVELOPER_DIR; }; 32B6CAB12D5318880093855B /* SFBPlaybackPosition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBPlaybackPosition.swift; sourceTree = ""; }; @@ -680,7 +680,7 @@ 3237E1762CF785DD0084AA51 /* SFBScreamTracker3ModuleFile.h */, 3237E1772CF785DD0084AA51 /* SFBScreamTracker3ModuleFile.mm */, 3237E1782CF785DD0084AA51 /* SFBShortenFile.h */, - 3237E1792CF785DD0084AA51 /* SFBShortenFile.m */, + 328997A92E117BB70083CD7D /* SFBShortenFile.mm */, 3237E17A2CF785DD0084AA51 /* SFBTrueAudioFile.h */, 3237E17B2CF785DD0084AA51 /* SFBTrueAudioFile.mm */, 3237E17C2CF785DD0084AA51 /* SFBWAVEFile.h */, @@ -1084,6 +1084,7 @@ 3237E1DC2CF7868B0084AA51 /* SFBAudioMetadata+TagLibTag.mm in Sources */, 3237E1DD2CF7868B0084AA51 /* SFBOggSpeexEncoder.m in Sources */, 3237E1DE2CF7868B0084AA51 /* SFBAudioProperties.m in Sources */, + 328997AA2E117BB70083CD7D /* SFBShortenFile.mm in Sources */, 3237E1DF2CF7868B0084AA51 /* SFBTrueAudioDecoder.mm in Sources */, 3237E1E02CF7868B0084AA51 /* SFBAudioMetadata+TagLibID3v2Tag.mm in Sources */, 3237E1E12CF7868B0084AA51 /* SFBFileInputSource.m in Sources */, @@ -1109,7 +1110,6 @@ 3237E1F42CF7868B0084AA51 /* SFBMonkeysAudioEncoder.mm in Sources */, 3237E1F52CF7868B0084AA51 /* SFBMemoryMappedFileInputSource.m in Sources */, 3237E1F62CF7868B0084AA51 /* SFBMusepackFile.mm in Sources */, - 3237E1F72CF7868B0084AA51 /* SFBShortenFile.m in Sources */, 3237E1F82CF7868B0084AA51 /* SFBOggOpusDecoder.m in Sources */, 3237E1F92CF7868B0084AA51 /* SFBMP3File.mm in Sources */, 3237E1FA2CF7868B0084AA51 /* SFBMonkeysAudioDecoder.mm in Sources */, From 01e4c6e88bc3562b09084ac3dfe5829fee2448ea Mon Sep 17 00:00:00 2001 From: "Stephen F. Booth" Date: Sun, 27 Jul 2025 07:27:50 -0500 Subject: [PATCH 10/22] Update package versions --- SFBAudioEngine.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index 85700239d..cd67474b8 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -1423,7 +1423,7 @@ repositoryURL = "https://github.com/sbooth/CXXMonkeysAudio"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 10.76.0; + minimumVersion = 11.22.0; }; }; 322CE3482CF7878D0070996C /* XCRemoteSwiftPackageReference "CXXTagLib" */ = { @@ -1471,7 +1471,7 @@ repositoryURL = "https://github.com/sbooth/CXXAudioUtilities"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 0.3.1; + minimumVersion = 0.3.2; }; }; 3237E21C2CF787330084AA51 /* XCRemoteSwiftPackageReference "AVFAudioExtensions" */ = { From 972f23ead30b72c67d5b13dd5fff448648be7711 Mon Sep 17 00:00:00 2001 From: "Stephen F. Booth" Date: Sun, 12 Oct 2025 07:44:21 -0500 Subject: [PATCH 11/22] Update to latest project settings --- SFBAudioEngine.xcodeproj/project.pbxproj | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index cd67474b8..de463af23 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -969,7 +969,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = 1; - LastUpgradeCheck = 1620; + LastUpgradeCheck = 2600; TargetAttributes = { 3237E0CE2CF7855B0084AA51 = { CreatedOnToolsVersion = 16.1; @@ -1282,6 +1282,7 @@ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; VERSIONING_SYSTEM = "apple-generic"; @@ -1340,6 +1341,7 @@ LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_COMPILATION_MODE = wholemodule; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -1431,7 +1433,7 @@ repositoryURL = "https://github.com/sbooth/CXXTagLib"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 2.1.0; + minimumVersion = 2.1.1; }; }; 322CE34B2CF788020070996C /* XCRemoteSwiftPackageReference "wavpack-binary-xcframework" */ = { From 256faf915b4370ec864b7d4bc0d906a6d94580ad Mon Sep 17 00:00:00 2001 From: "Stephen F. Booth" Date: Sun, 12 Oct 2025 07:51:52 -0500 Subject: [PATCH 12/22] Increase `SWIFT_VERSION` to 6 --- SFBAudioEngine.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index de463af23..a97998b17 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -1170,7 +1170,7 @@ SUPPORTS_MACCATALYST = NO; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2,3"; TVOS_DEPLOYMENT_TARGET = 15.0; XROS_DEPLOYMENT_TARGET = 2.1; @@ -1217,7 +1217,7 @@ SUPPORTS_MACCATALYST = NO; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2,3"; TVOS_DEPLOYMENT_TARGET = 15.0; XROS_DEPLOYMENT_TARGET = 2.1; From df2e694bf8866e5843546c940a4d0a4cacc9913d Mon Sep 17 00:00:00 2001 From: "Stephen F. Booth" Date: Sun, 12 Oct 2025 08:26:21 -0500 Subject: [PATCH 13/22] Add Mac Catalyst support and XCFramework Makefile --- Makefile | 5 + SFBAudioEngine.xcodeproj/project.pbxproj | 6 +- xcframework.mk | 137 +++++++++++++++++++++++ 3 files changed, 144 insertions(+), 4 deletions(-) create mode 100644 Makefile create mode 100644 xcframework.mk diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..c69e5c497 --- /dev/null +++ b/Makefile @@ -0,0 +1,5 @@ +FRAMEWORK_NAME := SFBAudioEngine +XCODEPROJ := SFBAudioEngine.xcodeproj +SCHEME := SFBAudioEngine + +include ./xcframework.mk diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index a97998b17..87ccd6789 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -1165,9 +1165,8 @@ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; - SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx"; - SUPPORTS_MACCATALYST = NO; + SUPPORTS_MACCATALYST = YES; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_INSTALL_OBJC_HEADER = NO; SWIFT_VERSION = 6.0; @@ -1212,9 +1211,8 @@ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = auto; - SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx"; - SUPPORTS_MACCATALYST = NO; + SUPPORTS_MACCATALYST = YES; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_INSTALL_OBJC_HEADER = NO; SWIFT_VERSION = 6.0; diff --git a/xcframework.mk b/xcframework.mk new file mode 100644 index 000000000..6fe82682a --- /dev/null +++ b/xcframework.mk @@ -0,0 +1,137 @@ +## +## Copyright © 2021-2024 Stephen F. Booth +## MIT license +## + +## Generate an XCFramework from an Xcode project file using xcodebuild. +## +## This is a portion of a Makefile. To use it, include it in +## your own Makefile and set the following variables: +## +## FRAMEWORK_NAME The base name of the XCFramework to build. +## XCODEPROJ The path to the Xcode project file. +## +## The following targets are provided: +## +## xcframework Builds the XCFramework. +## clean Deletes the XCFramework and build products. +## xz Builds the XCFramework and compresses it to +## an XZ archive using `tar`. +## zip Builds the XCFramework and compresses it to +## a PKZip archive using `ditto`. +## This is similar to Finder's "Compress" functionality. +## +## The following variables are optional: +## +## SCHEME The scheme building the framework target. +## If not set the default is "Framework". +## MACOS_SCHEME The scheme building the macOS framework target. +## If not set the default is `$(SCHEME)`. +## IOS_SCHEME The scheme building the iOS framework target. +## If not set the default is `$(SCHEME)`. +## TVOS_SCHEME The scheme building the tvOS framework target. +## If not set the default is `$(SCHEME)`. +## BUILD_DIR The directory where the build products should +## be written. If not set the default is "build". +## +## The following targets are provided when MAKELEVEL is not 0: +## +## install Copies the XCFramework to PREFIX. +## uninstall Deletes the XCFramework from PREFIX. +## +## The following variable should be set: +## +## PREFIX The path of the desired installation prefix. +## There is no default value. +## +## An example Makefile could look like: +## +## FRAMEWORK_NAME := SFBAudioUtilities +## XCODEPROJ := SFBAudioUtilities.xcodeproj +## +## SCHEME := SFBAudioUtilities +## +## include ./xcframework.mk +## +## Running 'make' will create './SFBAudioUtilities.xcframework'. + +# The default name of the scheme that builds the framework +SCHEME ?= Framework +# The default name of the scheme that builds the framework for macOS +MACOS_SCHEME ?= $(SCHEME) +# The default name of the scheme that builds the framework for iOS +IOS_SCHEME ?= $(SCHEME) +# The default name of the scheme that builds the framework for tvOS +TVOS_SCHEME ?= $(SCHEME) + +# Build products directory +BUILD_DIR ?= build + +# The directory for intermediate .xcarchives +XCARCHIVE_DIR := $(BUILD_DIR) + +# The name of the output XCFramework +XCFRAMEWORK := $(BUILD_DIR)/$(FRAMEWORK_NAME).xcframework + +XZ_FILE := $(XCFRAMEWORK).tar.xz +ZIP_FILE := $(XCFRAMEWORK).zip + +MACOS_XCARCHIVE := $(XCARCHIVE_DIR)/macOS.xcarchive +MACOS_CATALYST_XCARCHIVE := $(XCARCHIVE_DIR)/macOS-Catalyst.xcarchive +IOS_XCARCHIVE := $(XCARCHIVE_DIR)/iOS.xcarchive +IOS_SIMULATOR_XCARCHIVE := $(XCARCHIVE_DIR)/iOS-Simulator.xcarchive +TVOS_XCARCHIVE := $(XCARCHIVE_DIR)/tvOS.xcarchive +TVOS_SIMULATOR_XCARCHIVE := $(XCARCHIVE_DIR)/tvOS-Simulator.xcarchive + +XCARCHIVES := $(MACOS_XCARCHIVE) $(MACOS_CATALYST_XCARCHIVE) $(IOS_XCARCHIVE) $(IOS_SIMULATOR_XCARCHIVE) $(TVOS_XCARCHIVE) $(TVOS_SIMULATOR_XCARCHIVE) + +xcframework: $(XCFRAMEWORK) +.PHONY: xcframework + +clean: + rm -Rf "$(MACOS_XCARCHIVE)" "$(MACOS_CATALYST_XCARCHIVE)" "$(IOS_XCARCHIVE)" "$(IOS_SIMULATOR_XCARCHIVE)" "$(TVOS_XCARCHIVE)" "$(TVOS_SIMULATOR_XCARCHIVE)" "$(XCFRAMEWORK)" "$(XZ_FILE)" "$(ZIP_FILE)" +.PHONY: clean + +xz: $(XZ_FILE) +.PHONY: xz + +zip: $(ZIP_FILE) +.PHONY: zip + +ifneq (0,$(MAKELEVEL)) +install: xcframework uninstall + cp -R "$(XCFRAMEWORK)" "$(PREFIX)" +.PHONY: install + +uninstall: + rm -Rf "$(PREFIX)/$(XCFRAMEWORK)" +.PHONY: uninstall +endif + +$(MACOS_XCARCHIVE): $(XCODEPROJ) + xcodebuild archive -project "$(XCODEPROJ)" -scheme "$(MACOS_SCHEME)" -destination "generic/platform=macOS" -archivePath "$(basename $@)" + +$(MACOS_CATALYST_XCARCHIVE): $(XCODEPROJ) + xcodebuild archive -project "$(XCODEPROJ)" -scheme "$(IOS_SCHEME)" -destination "generic/platform=macOS,variant=Mac Catalyst" -archivePath "$(basename $@)" + +$(IOS_XCARCHIVE): $(XCODEPROJ) + xcodebuild archive -project "$(XCODEPROJ)" -scheme "$(IOS_SCHEME)" -destination "generic/platform=iOS" -archivePath "$(basename $@)" + +$(IOS_SIMULATOR_XCARCHIVE): $(XCODEPROJ) + xcodebuild archive -project "$(XCODEPROJ)" -scheme "$(IOS_SCHEME)" -destination "generic/platform=iOS Simulator" -archivePath "$(basename $@)" + +$(TVOS_XCARCHIVE): $(XCODEPROJ) + xcodebuild archive -project "$(XCODEPROJ)" -scheme "$(TVOS_SCHEME)" -destination "generic/platform=tvOS" -archivePath "$(basename $@)" + +$(TVOS_SIMULATOR_XCARCHIVE): $(XCODEPROJ) + xcodebuild archive -project "$(XCODEPROJ)" -scheme "$(TVOS_SCHEME)" -destination "generic/platform=tvOS Simulator" -archivePath "$(basename $@)" + +$(XCFRAMEWORK): $(XCARCHIVES) + rm -Rf "$@" + xcodebuild -create-xcframework $(foreach xcarchive,$^,-framework "$(xcarchive)/Products/Library/Frameworks/$(FRAMEWORK_NAME).framework" -debug-symbols "$(realpath $(xcarchive)/dSYMs/$(FRAMEWORK_NAME).framework.dSYM)" ) -output "$@" + +$(XZ_FILE): $(XCFRAMEWORK) + cd $(BUILD_DIR) && tar --create --xz --file "$(notdir $@)" "$(notdir $<)" + +$(ZIP_FILE): $(XCFRAMEWORK) + cd $(BUILD_DIR) && ditto -c -k --sequesterRsrc --keepParent "$(notdir $<)" "$(notdir $@)" From a0c1df0df0736b24e51b3bd527f5df93d68539af Mon Sep 17 00:00:00 2001 From: "Stephen F. Booth" Date: Sun, 30 Nov 2025 10:35:04 -0600 Subject: [PATCH 14/22] Update xcodeproj --- SFBAudioEngine.xcodeproj/project.pbxproj | 107 +++++++++++++++++------ 1 file changed, 81 insertions(+), 26 deletions(-) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index 87ccd6789..31c4dc214 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -16,8 +16,6 @@ 322298882D3727790020316A /* HostTimeUtilities.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 322298822D3727790020316A /* HostTimeUtilities.hpp */; }; 322298892D3727790020316A /* SFBAudioPlayerNode+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 322298842D3727790020316A /* SFBAudioPlayerNode+Internal.h */; }; 3222988A2D3727790020316A /* AudioPlayerNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3222987E2D3727790020316A /* AudioPlayerNode.h */; }; - 3222988B2D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.h in Headers */ = {isa = PBXBuildFile; fileRef = 322298802D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.h */; }; - 3222988C2D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 322298812D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.mm */; }; 3222988D2D3727790020316A /* HostTimeUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 322298832D3727790020316A /* HostTimeUtilities.cpp */; }; 3222988E2D3727790020316A /* StringDescribingAVAudioFormat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 322298862D3727790020316A /* StringDescribingAVAudioFormat.mm */; }; 3222988F2D3727790020316A /* AudioPlayerNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3222987F2D3727790020316A /* AudioPlayerNode.mm */; }; @@ -139,8 +137,14 @@ 3237E2162CF786BA0084AA51 /* SFBReplayGainAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1372CF785DD0084AA51 /* SFBReplayGainAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3237E2172CF786BA0084AA51 /* SFBDoPDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E12E2CF785DD0084AA51 /* SFBDoPDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3237E2182CF786BA0084AA51 /* SFBAudioEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1242CF785DD0084AA51 /* SFBAudioEncoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3237E21B2CF787230084AA51 /* CXXAudioUtilities in Frameworks */ = {isa = PBXBuildFile; productRef = 3237E21A2CF787230084AA51 /* CXXAudioUtilities */; }; 3237E21E2CF787330084AA51 /* AVFAudioExtensions in Frameworks */ = {isa = PBXBuildFile; productRef = 3237E21D2CF787330084AA51 /* AVFAudioExtensions */; }; + 3241D7CA2EDCA8660078AB9F /* CXXCoreAudio in Frameworks */ = {isa = PBXBuildFile; productRef = 3241D7C92EDCA8660078AB9F /* CXXCoreAudio */; }; + 3241D7CD2EDCA8750078AB9F /* CXXAudioToolbox in Frameworks */ = {isa = PBXBuildFile; productRef = 3241D7CC2EDCA8750078AB9F /* CXXAudioToolbox */; }; + 3241D7D02EDCA8830078AB9F /* CXXRingBuffer in Frameworks */ = {isa = PBXBuildFile; productRef = 3241D7CF2EDCA8830078AB9F /* CXXRingBuffer */; }; + 3241D7D32EDCA88F0078AB9F /* CXXUnfairLock in Frameworks */ = {isa = PBXBuildFile; productRef = 3241D7D22EDCA88F0078AB9F /* CXXUnfairLock */; }; + 3241D7D72EDCA8DC0078AB9F /* AudioPlayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3241D7D52EDCA8DC0078AB9F /* AudioPlayer.mm */; }; + 3241D7D82EDCA8DC0078AB9F /* AudioPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3241D7D42EDCA8DC0078AB9F /* AudioPlayer.h */; }; + 3241D7D92EDCA8DC0078AB9F /* SFBAudioPlayer+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3241D7D62EDCA8DC0078AB9F /* SFBAudioPlayer+Internal.h */; }; 328997AA2E117BB70083CD7D /* SFBShortenFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 328997A92E117BB70083CD7D /* SFBShortenFile.mm */; }; 328E81642CF7890700BFCEB2 /* sndfile in Frameworks */ = {isa = PBXBuildFile; productRef = 328E81632CF7890700BFCEB2 /* sndfile */; }; 328E81672CF7891A00BFCEB2 /* tta-cpp in Frameworks */ = {isa = PBXBuildFile; productRef = 328E81662CF7891A00BFCEB2 /* tta-cpp */; }; @@ -228,8 +232,6 @@ /* Begin PBXFileReference section */ 3222987E2D3727790020316A /* AudioPlayerNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioPlayerNode.h; sourceTree = ""; }; 3222987F2D3727790020316A /* AudioPlayerNode.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AudioPlayerNode.mm; sourceTree = ""; }; - 322298802D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AVAudioChannelLayoutsAreEquivalent.h; sourceTree = ""; }; - 322298812D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AVAudioChannelLayoutsAreEquivalent.mm; sourceTree = ""; }; 322298822D3727790020316A /* HostTimeUtilities.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = HostTimeUtilities.hpp; sourceTree = ""; }; 322298832D3727790020316A /* HostTimeUtilities.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HostTimeUtilities.cpp; sourceTree = ""; }; 322298842D3727790020316A /* SFBAudioPlayerNode+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBAudioPlayerNode+Internal.h"; sourceTree = ""; }; @@ -420,6 +422,9 @@ 3237E1A02CF785DD0084AA51 /* SFBOutputSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBOutputSource.swift; sourceTree = ""; }; 3237E1A12CF785DD0084AA51 /* SFBReplayGainAnalyzer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBReplayGainAnalyzer.swift; sourceTree = ""; }; 3237E1A52CF785DD0084AA51 /* SFBAudioEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioEngineTests.swift; sourceTree = ""; }; + 3241D7D42EDCA8DC0078AB9F /* AudioPlayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioPlayer.h; sourceTree = ""; }; + 3241D7D52EDCA8DC0078AB9F /* AudioPlayer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AudioPlayer.mm; sourceTree = ""; }; + 3241D7D62EDCA8DC0078AB9F /* SFBAudioPlayer+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBAudioPlayer+Internal.h"; sourceTree = ""; }; 328997A92E117BB70083CD7D /* SFBShortenFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBShortenFile.mm; sourceTree = ""; }; 328E81692CF7898C00BFCEB2 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.1.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; 328E816B2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UniformTypeIdentifiers.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.1.sdk/System/Library/Frameworks/UniformTypeIdentifiers.framework; sourceTree = DEVELOPER_DIR; }; @@ -443,15 +448,18 @@ 322CE34D2CF788020070996C /* wavpack in Frameworks */, 322CE34A2CF7878D0070996C /* taglib in Frameworks */, 322CE3532CF788240070996C /* FLAC in Frameworks */, + 3241D7CA2EDCA8660078AB9F /* CXXCoreAudio in Frameworks */, 322CE3472CF787740070996C /* MAC in Frameworks */, 322CE3562CF788360070996C /* opus in Frameworks */, 321C18B12CF7886000670824 /* vorbis in Frameworks */, 321C18B72CF7888800670824 /* lame in Frameworks */, + 3241D7CD2EDCA8750078AB9F /* CXXAudioToolbox in Frameworks */, + 3241D7D02EDCA8830078AB9F /* CXXRingBuffer in Frameworks */, 328E816C2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework in Frameworks */, + 3241D7D32EDCA88F0078AB9F /* CXXUnfairLock in Frameworks */, 322CE3442CF787630070996C /* dumb in Frameworks */, 322CE3502CF788120070996C /* ogg in Frameworks */, 328E81642CF7890700BFCEB2 /* sndfile in Frameworks */, - 3237E21B2CF787230084AA51 /* CXXAudioUtilities in Frameworks */, 3237E21E2CF787330084AA51 /* AVFAudioExtensions in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -710,13 +718,14 @@ 3237E18F2CF785DD0084AA51 /* Player */ = { isa = PBXGroup; children = ( + 3241D7D42EDCA8DC0078AB9F /* AudioPlayer.h */, + 3241D7D52EDCA8DC0078AB9F /* AudioPlayer.mm */, 3222987E2D3727790020316A /* AudioPlayerNode.h */, 3222987F2D3727790020316A /* AudioPlayerNode.mm */, - 322298802D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.h */, - 322298812D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.mm */, 322298822D3727790020316A /* HostTimeUtilities.hpp */, 322298832D3727790020316A /* HostTimeUtilities.cpp */, 3237E18B2CF785DD0084AA51 /* SFBAudioPlayer.mm */, + 3241D7D62EDCA8DC0078AB9F /* SFBAudioPlayer+Internal.h */, 3237E18C2CF785DD0084AA51 /* SFBAudioPlayerNode.mm */, 322298842D3727790020316A /* SFBAudioPlayerNode+Internal.h */, 322298852D3727790020316A /* StringDescribingAVAudioFormat.h */, @@ -884,7 +893,6 @@ 322298882D3727790020316A /* HostTimeUtilities.hpp in Headers */, 322298892D3727790020316A /* SFBAudioPlayerNode+Internal.h in Headers */, 3222988A2D3727790020316A /* AudioPlayerNode.h in Headers */, - 3222988B2D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.h in Headers */, 32F6E5F62D2B04030029B972 /* SFBExtendedModuleFile.h in Headers */, 32F6E5F72D2B04030029B972 /* SFBAudioMetadata+TagLibTag.h in Headers */, 32F6E5F82D2B04030029B972 /* SFBAudioMetadata+TagLibID3v1Tag.h in Headers */, @@ -894,6 +902,8 @@ 32F6E5FC2D2B04030029B972 /* SFBWavPackFile.h in Headers */, 32F6E5FD2D2B04030029B972 /* SFBOggSpeexFile.h in Headers */, 32F6E5FE2D2B04030029B972 /* SFBDSDIFFFile.h in Headers */, + 3241D7D82EDCA8DC0078AB9F /* AudioPlayer.h in Headers */, + 3241D7D92EDCA8DC0078AB9F /* SFBAudioPlayer+Internal.h in Headers */, 32F6E5FF2D2B04030029B972 /* SFBAudioFile+Internal.h in Headers */, 32F6E6002D2B04030029B972 /* TagLibStringUtilities.h in Headers */, 32F6E6012D2B04030029B972 /* SFBDSFFile.h in Headers */, @@ -941,7 +951,6 @@ ); name = SFBAudioEngine; packageProductDependencies = ( - 3237E21A2CF787230084AA51 /* CXXAudioUtilities */, 3237E21D2CF787330084AA51 /* AVFAudioExtensions */, 322CE3432CF787630070996C /* dumb */, 322CE3462CF787740070996C /* MAC */, @@ -957,6 +966,10 @@ 321C18BC2CF788AB00670824 /* mpg123 */, 328E81632CF7890700BFCEB2 /* sndfile */, 328E81662CF7891A00BFCEB2 /* tta-cpp */, + 3241D7C92EDCA8660078AB9F /* CXXCoreAudio */, + 3241D7CC2EDCA8750078AB9F /* CXXAudioToolbox */, + 3241D7CF2EDCA8830078AB9F /* CXXRingBuffer */, + 3241D7D22EDCA88F0078AB9F /* CXXUnfairLock */, ); productName = SFBAudioEngine; productReference = 3237E0CF2CF7855B0084AA51 /* SFBAudioEngine.framework */; @@ -986,7 +999,6 @@ mainGroup = 3237E0C52CF7855B0084AA51; minimizedProjectReferenceProxies = 1; packageReferences = ( - 3237E2192CF787230084AA51 /* XCRemoteSwiftPackageReference "CXXAudioUtilities" */, 3237E21C2CF787330084AA51 /* XCRemoteSwiftPackageReference "AVFAudioExtensions" */, 322CE3422CF787630070996C /* XCRemoteSwiftPackageReference "CDUMB" */, 322CE3452CF787740070996C /* XCRemoteSwiftPackageReference "CXXMonkeysAudio" */, @@ -1002,6 +1014,10 @@ 321C18BB2CF788AB00670824 /* XCRemoteSwiftPackageReference "mpg123-binary-xcframework" */, 328E81622CF7890700BFCEB2 /* XCRemoteSwiftPackageReference "sndfile-binary-xcframework" */, 328E81652CF7891A00BFCEB2 /* XCRemoteSwiftPackageReference "tta-cpp-binary-xcframework" */, + 3241D7C82EDCA8660078AB9F /* XCRemoteSwiftPackageReference "CXXCoreAudio" */, + 3241D7CB2EDCA8740078AB9F /* XCRemoteSwiftPackageReference "CXXAudioToolbox" */, + 3241D7CE2EDCA8830078AB9F /* XCRemoteSwiftPackageReference "CXXRingBuffer" */, + 3241D7D12EDCA88F0078AB9F /* XCRemoteSwiftPackageReference "CXXUnfairLock" */, ); preferredProjectObjectVersion = 77; productRefGroup = 3237E0D02CF7855B0084AA51 /* Products */; @@ -1042,7 +1058,6 @@ 3237E1B92CF7868B0084AA51 /* SFBOggSpeexDecoder.m in Sources */, 3237E1BA2CF7868B0084AA51 /* NSData+SFBExtensions.m in Sources */, 3237E1BB2CF7868B0084AA51 /* SFBOggVorbisEncoder.m in Sources */, - 3222988C2D3727790020316A /* AVAudioChannelLayoutsAreEquivalent.mm in Sources */, 3222988D2D3727790020316A /* HostTimeUtilities.cpp in Sources */, 3222988E2D3727790020316A /* StringDescribingAVAudioFormat.mm in Sources */, 3222988F2D3727790020316A /* AudioPlayerNode.mm in Sources */, @@ -1082,6 +1097,7 @@ 3237E1DA2CF7868B0084AA51 /* SFBDSDPCMDecoder.mm in Sources */, 3237E1DB2CF7868B0084AA51 /* SFBOggSpeexFile.mm in Sources */, 3237E1DC2CF7868B0084AA51 /* SFBAudioMetadata+TagLibTag.mm in Sources */, + 3241D7D72EDCA8DC0078AB9F /* AudioPlayer.mm in Sources */, 3237E1DD2CF7868B0084AA51 /* SFBOggSpeexEncoder.m in Sources */, 3237E1DE2CF7868B0084AA51 /* SFBAudioProperties.m in Sources */, 328997AA2E117BB70083CD7D /* SFBShortenFile.mm in Sources */, @@ -1407,7 +1423,7 @@ repositoryURL = "https://github.com/sbooth/mpg123-binary-xcframework"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 0.2.3; + minimumVersion = 0.3.0; }; }; 322CE3422CF787630070996C /* XCRemoteSwiftPackageReference "CDUMB" */ = { @@ -1423,7 +1439,7 @@ repositoryURL = "https://github.com/sbooth/CXXMonkeysAudio"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 11.22.0; + minimumVersion = 11.82.0; }; }; 322CE3482CF7878D0070996C /* XCRemoteSwiftPackageReference "CXXTagLib" */ = { @@ -1447,7 +1463,7 @@ repositoryURL = "https://github.com/sbooth/ogg-binary-xcframework"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 0.1.2; + minimumVersion = 0.1.3; }; }; 322CE3512CF788240070996C /* XCRemoteSwiftPackageReference "flac-binary-xcframework" */ = { @@ -1466,20 +1482,44 @@ minimumVersion = 0.2.2; }; }; - 3237E2192CF787230084AA51 /* XCRemoteSwiftPackageReference "CXXAudioUtilities" */ = { + 3237E21C2CF787330084AA51 /* XCRemoteSwiftPackageReference "AVFAudioExtensions" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/sbooth/CXXAudioUtilities"; + repositoryURL = "https://github.com/sbooth/AVFAudioExtensions"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 0.3.2; + minimumVersion = 0.4.2; }; }; - 3237E21C2CF787330084AA51 /* XCRemoteSwiftPackageReference "AVFAudioExtensions" */ = { + 3241D7C82EDCA8660078AB9F /* XCRemoteSwiftPackageReference "CXXCoreAudio" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/sbooth/AVFAudioExtensions"; + repositoryURL = "https://github.com/sbooth/CXXCoreAudio"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 0.4.1; + minimumVersion = 0.2.0; + }; + }; + 3241D7CB2EDCA8740078AB9F /* XCRemoteSwiftPackageReference "CXXAudioToolbox" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/CXXAudioToolbox"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.1.2; + }; + }; + 3241D7CE2EDCA8830078AB9F /* XCRemoteSwiftPackageReference "CXXRingBuffer" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/CXXRingBuffer"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.2.0; + }; + }; + 3241D7D12EDCA88F0078AB9F /* XCRemoteSwiftPackageReference "CXXUnfairLock" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/CXXUnfairLock"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.1.0; }; }; 328E81622CF7890700BFCEB2 /* XCRemoteSwiftPackageReference "sndfile-binary-xcframework" */ = { @@ -1561,16 +1601,31 @@ package = 322CE3542CF788360070996C /* XCRemoteSwiftPackageReference "opus-binary-xcframework" */; productName = opus; }; - 3237E21A2CF787230084AA51 /* CXXAudioUtilities */ = { - isa = XCSwiftPackageProductDependency; - package = 3237E2192CF787230084AA51 /* XCRemoteSwiftPackageReference "CXXAudioUtilities" */; - productName = CXXAudioUtilities; - }; 3237E21D2CF787330084AA51 /* AVFAudioExtensions */ = { isa = XCSwiftPackageProductDependency; package = 3237E21C2CF787330084AA51 /* XCRemoteSwiftPackageReference "AVFAudioExtensions" */; productName = AVFAudioExtensions; }; + 3241D7C92EDCA8660078AB9F /* CXXCoreAudio */ = { + isa = XCSwiftPackageProductDependency; + package = 3241D7C82EDCA8660078AB9F /* XCRemoteSwiftPackageReference "CXXCoreAudio" */; + productName = CXXCoreAudio; + }; + 3241D7CC2EDCA8750078AB9F /* CXXAudioToolbox */ = { + isa = XCSwiftPackageProductDependency; + package = 3241D7CB2EDCA8740078AB9F /* XCRemoteSwiftPackageReference "CXXAudioToolbox" */; + productName = CXXAudioToolbox; + }; + 3241D7CF2EDCA8830078AB9F /* CXXRingBuffer */ = { + isa = XCSwiftPackageProductDependency; + package = 3241D7CE2EDCA8830078AB9F /* XCRemoteSwiftPackageReference "CXXRingBuffer" */; + productName = CXXRingBuffer; + }; + 3241D7D22EDCA88F0078AB9F /* CXXUnfairLock */ = { + isa = XCSwiftPackageProductDependency; + package = 3241D7D12EDCA88F0078AB9F /* XCRemoteSwiftPackageReference "CXXUnfairLock" */; + productName = CXXUnfairLock; + }; 328E81632CF7890700BFCEB2 /* sndfile */ = { isa = XCSwiftPackageProductDependency; package = 328E81622CF7890700BFCEB2 /* XCRemoteSwiftPackageReference "sndfile-binary-xcframework" */; From c56bf826c0742c23c7c749daf9687c41b1a87477 Mon Sep 17 00:00:00 2001 From: Stephen Booth Date: Sun, 28 Dec 2025 13:30:54 -0600 Subject: [PATCH 15/22] Update xcodeproj --- SFBAudioEngine.xcodeproj/project.pbxproj | 50 ++++-------------------- 1 file changed, 7 insertions(+), 43 deletions(-) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index 31c4dc214..6543c1057 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -12,13 +12,8 @@ 321C18B72CF7888800670824 /* lame in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18B62CF7888800670824 /* lame */; }; 321C18BA2CF7889A00670824 /* mpc in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18B92CF7889A00670824 /* mpc */; }; 321C18BD2CF788AB00670824 /* mpg123 in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18BC2CF788AB00670824 /* mpg123 */; }; - 322298872D3727790020316A /* StringDescribingAVAudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 322298852D3727790020316A /* StringDescribingAVAudioFormat.h */; }; 322298882D3727790020316A /* HostTimeUtilities.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 322298822D3727790020316A /* HostTimeUtilities.hpp */; }; - 322298892D3727790020316A /* SFBAudioPlayerNode+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 322298842D3727790020316A /* SFBAudioPlayerNode+Internal.h */; }; - 3222988A2D3727790020316A /* AudioPlayerNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3222987E2D3727790020316A /* AudioPlayerNode.h */; }; 3222988D2D3727790020316A /* HostTimeUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 322298832D3727790020316A /* HostTimeUtilities.cpp */; }; - 3222988E2D3727790020316A /* StringDescribingAVAudioFormat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 322298862D3727790020316A /* StringDescribingAVAudioFormat.mm */; }; - 3222988F2D3727790020316A /* AudioPlayerNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3222987F2D3727790020316A /* AudioPlayerNode.mm */; }; 322CE3442CF787630070996C /* dumb in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3432CF787630070996C /* dumb */; }; 322CE3472CF787740070996C /* MAC in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3462CF787740070996C /* MAC */; }; 322CE34A2CF7878D0070996C /* taglib in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3492CF7878D0070996C /* taglib */; }; @@ -27,7 +22,6 @@ 322CE3532CF788240070996C /* FLAC in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3522CF788240070996C /* FLAC */; }; 322CE3562CF788360070996C /* opus in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3552CF788360070996C /* opus */; }; 3237E1A82CF7865A0084AA51 /* SFBAudioProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19E2CF785DD0084AA51 /* SFBAudioProperties.swift */; }; - 3237E1A92CF7865A0084AA51 /* SFBAudioPlayerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19D2CF785DD0084AA51 /* SFBAudioPlayerNode.swift */; }; 3237E1AA2CF7865A0084AA51 /* SFBAudioPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19C2CF785DD0084AA51 /* SFBAudioPlayer.swift */; }; 3237E1AB2CF7865A0084AA51 /* SFBOutputSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1A02CF785DD0084AA51 /* SFBOutputSource.swift */; }; 3237E1AC2CF7865A0084AA51 /* SFBReplayGainAnalyzer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1A12CF785DD0084AA51 /* SFBReplayGainAnalyzer.swift */; }; @@ -60,7 +54,6 @@ 3237E1C82CF7868B0084AA51 /* NSFileHandle+SFBHeaderReading.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1952CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.m */; }; 3237E1C92CF7868B0084AA51 /* NSError+SFBURLPresentation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1932CF785DD0084AA51 /* NSError+SFBURLPresentation.m */; }; 3237E1CA2CF7868B0084AA51 /* SFBWAVEFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E17D2CF785DD0084AA51 /* SFBWAVEFile.mm */; }; - 3237E1CB2CF7868B0084AA51 /* SFBAudioPlayerNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E18C2CF785DD0084AA51 /* SFBAudioPlayerNode.mm */; }; 3237E1CC2CF7868B0084AA51 /* SFBDSDIFFFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E15B2CF785DD0084AA51 /* SFBDSDIFFFile.mm */; }; 3237E1CD2CF7868B0084AA51 /* SFBMutableDataOutputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1872CF785DD0084AA51 /* SFBMutableDataOutputSource.m */; }; 3237E1CE2CF7868B0084AA51 /* SFBAudioMetadata+TagLibXiphComment.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1582CF785DD0084AA51 /* SFBAudioMetadata+TagLibXiphComment.mm */; }; @@ -113,7 +106,6 @@ 3237E1FE2CF7868B0084AA51 /* SFBDSFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0EA2CF785DD0084AA51 /* SFBDSFDecoder.m */; }; 3237E1FF2CF7868B0084AA51 /* SFBOggOpusEncoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1162CF785DD0084AA51 /* SFBOggOpusEncoder.mm */; }; 3237E2002CF7868B0084AA51 /* SFBMP3Encoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1102CF785DD0084AA51 /* SFBMP3Encoder.mm */; }; - 3237E2012CF786BA0084AA51 /* SFBAudioPlayerNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E12C2CF785DD0084AA51 /* SFBAudioPlayerNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3237E2022CF786BA0084AA51 /* SFBOutputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1342CF785DD0084AA51 /* SFBOutputSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3237E2032CF786BA0084AA51 /* SFBAudioEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1252CF785DD0084AA51 /* SFBAudioEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3237E2042CF786BA0084AA51 /* SFBDSDPCMDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1312CF785DD0084AA51 /* SFBDSDPCMDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -144,7 +136,6 @@ 3241D7D32EDCA88F0078AB9F /* CXXUnfairLock in Frameworks */ = {isa = PBXBuildFile; productRef = 3241D7D22EDCA88F0078AB9F /* CXXUnfairLock */; }; 3241D7D72EDCA8DC0078AB9F /* AudioPlayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3241D7D52EDCA8DC0078AB9F /* AudioPlayer.mm */; }; 3241D7D82EDCA8DC0078AB9F /* AudioPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3241D7D42EDCA8DC0078AB9F /* AudioPlayer.h */; }; - 3241D7D92EDCA8DC0078AB9F /* SFBAudioPlayer+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3241D7D62EDCA8DC0078AB9F /* SFBAudioPlayer+Internal.h */; }; 328997AA2E117BB70083CD7D /* SFBShortenFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 328997A92E117BB70083CD7D /* SFBShortenFile.mm */; }; 328E81642CF7890700BFCEB2 /* sndfile in Frameworks */ = {isa = PBXBuildFile; productRef = 328E81632CF7890700BFCEB2 /* sndfile */; }; 328E81672CF7891A00BFCEB2 /* tta-cpp in Frameworks */ = {isa = PBXBuildFile; productRef = 328E81662CF7891A00BFCEB2 /* tta-cpp */; }; @@ -230,13 +221,8 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 3222987E2D3727790020316A /* AudioPlayerNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioPlayerNode.h; sourceTree = ""; }; - 3222987F2D3727790020316A /* AudioPlayerNode.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AudioPlayerNode.mm; sourceTree = ""; }; 322298822D3727790020316A /* HostTimeUtilities.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = HostTimeUtilities.hpp; sourceTree = ""; }; 322298832D3727790020316A /* HostTimeUtilities.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HostTimeUtilities.cpp; sourceTree = ""; }; - 322298842D3727790020316A /* SFBAudioPlayerNode+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBAudioPlayerNode+Internal.h"; sourceTree = ""; }; - 322298852D3727790020316A /* StringDescribingAVAudioFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StringDescribingAVAudioFormat.h; sourceTree = ""; }; - 322298862D3727790020316A /* StringDescribingAVAudioFormat.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = StringDescribingAVAudioFormat.mm; sourceTree = ""; }; 3237E0CF2CF7855B0084AA51 /* SFBAudioEngine.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SFBAudioEngine.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3237E0DA2CF785DD0084AA51 /* SFBReplayGainAnalyzer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBReplayGainAnalyzer.m; sourceTree = ""; }; 3237E0DC2CF785DD0084AA51 /* SFBAudioConverter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioConverter.m; sourceTree = ""; }; @@ -314,7 +300,6 @@ 3237E1292CF785DD0084AA51 /* SFBAudioFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioFile.h; sourceTree = ""; }; 3237E12A2CF785DD0084AA51 /* SFBAudioMetadata.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioMetadata.h; sourceTree = ""; }; 3237E12B2CF785DD0084AA51 /* SFBAudioPlayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioPlayer.h; sourceTree = ""; }; - 3237E12C2CF785DD0084AA51 /* SFBAudioPlayerNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioPlayerNode.h; sourceTree = ""; }; 3237E12D2CF785DD0084AA51 /* SFBAudioProperties.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioProperties.h; sourceTree = ""; }; 3237E12E2CF785DD0084AA51 /* SFBDoPDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBDoPDecoder.h; sourceTree = ""; }; 3237E12F2CF785DD0084AA51 /* SFBDSDDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBDSDDecoder.h; sourceTree = ""; }; @@ -404,7 +389,6 @@ 3237E1882CF785DD0084AA51 /* SFBOutputSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBOutputSource.m; sourceTree = ""; }; 3237E1892CF785DD0084AA51 /* SFBOutputSource+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBOutputSource+Internal.h"; sourceTree = ""; }; 3237E18B2CF785DD0084AA51 /* SFBAudioPlayer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBAudioPlayer.mm; sourceTree = ""; }; - 3237E18C2CF785DD0084AA51 /* SFBAudioPlayerNode.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBAudioPlayerNode.mm; sourceTree = ""; }; 3237E1902CF785DD0084AA51 /* NSData+SFBExtensions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSData+SFBExtensions.h"; sourceTree = ""; }; 3237E1912CF785DD0084AA51 /* NSData+SFBExtensions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSData+SFBExtensions.m"; sourceTree = ""; }; 3237E1922CF785DD0084AA51 /* NSError+SFBURLPresentation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSError+SFBURLPresentation.h"; sourceTree = ""; }; @@ -416,7 +400,6 @@ 3237E19A2CF785DD0084AA51 /* SFBAudioEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioEngine.swift; sourceTree = ""; }; 3237E19B2CF785DD0084AA51 /* SFBAudioMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioMetadata.swift; sourceTree = ""; }; 3237E19C2CF785DD0084AA51 /* SFBAudioPlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioPlayer.swift; sourceTree = ""; }; - 3237E19D2CF785DD0084AA51 /* SFBAudioPlayerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioPlayerNode.swift; sourceTree = ""; }; 3237E19E2CF785DD0084AA51 /* SFBAudioProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioProperties.swift; sourceTree = ""; }; 3237E19F2CF785DD0084AA51 /* SFBInputSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBInputSource.swift; sourceTree = ""; }; 3237E1A02CF785DD0084AA51 /* SFBOutputSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBOutputSource.swift; sourceTree = ""; }; @@ -424,7 +407,6 @@ 3237E1A52CF785DD0084AA51 /* SFBAudioEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioEngineTests.swift; sourceTree = ""; }; 3241D7D42EDCA8DC0078AB9F /* AudioPlayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioPlayer.h; sourceTree = ""; }; 3241D7D52EDCA8DC0078AB9F /* AudioPlayer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AudioPlayer.mm; sourceTree = ""; }; - 3241D7D62EDCA8DC0078AB9F /* SFBAudioPlayer+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBAudioPlayer+Internal.h"; sourceTree = ""; }; 328997A92E117BB70083CD7D /* SFBShortenFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBShortenFile.mm; sourceTree = ""; }; 328E81692CF7898C00BFCEB2 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.1.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; 328E816B2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UniformTypeIdentifiers.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.1.sdk/System/Library/Frameworks/UniformTypeIdentifiers.framework; sourceTree = DEVELOPER_DIR; }; @@ -592,7 +574,6 @@ 3237E1292CF785DD0084AA51 /* SFBAudioFile.h */, 3237E12A2CF785DD0084AA51 /* SFBAudioMetadata.h */, 3237E12B2CF785DD0084AA51 /* SFBAudioPlayer.h */, - 3237E12C2CF785DD0084AA51 /* SFBAudioPlayerNode.h */, 3237E12D2CF785DD0084AA51 /* SFBAudioProperties.h */, 3237E12E2CF785DD0084AA51 /* SFBDoPDecoder.h */, 3237E12F2CF785DD0084AA51 /* SFBDSDDecoder.h */, @@ -720,16 +701,9 @@ children = ( 3241D7D42EDCA8DC0078AB9F /* AudioPlayer.h */, 3241D7D52EDCA8DC0078AB9F /* AudioPlayer.mm */, - 3222987E2D3727790020316A /* AudioPlayerNode.h */, - 3222987F2D3727790020316A /* AudioPlayerNode.mm */, 322298822D3727790020316A /* HostTimeUtilities.hpp */, 322298832D3727790020316A /* HostTimeUtilities.cpp */, 3237E18B2CF785DD0084AA51 /* SFBAudioPlayer.mm */, - 3241D7D62EDCA8DC0078AB9F /* SFBAudioPlayer+Internal.h */, - 3237E18C2CF785DD0084AA51 /* SFBAudioPlayerNode.mm */, - 322298842D3727790020316A /* SFBAudioPlayerNode+Internal.h */, - 322298852D3727790020316A /* StringDescribingAVAudioFormat.h */, - 322298862D3727790020316A /* StringDescribingAVAudioFormat.mm */, ); path = Player; sourceTree = ""; @@ -775,7 +749,6 @@ 3237E19A2CF785DD0084AA51 /* SFBAudioEngine.swift */, 3237E19B2CF785DD0084AA51 /* SFBAudioMetadata.swift */, 3237E19C2CF785DD0084AA51 /* SFBAudioPlayer.swift */, - 3237E19D2CF785DD0084AA51 /* SFBAudioPlayerNode.swift */, 3237E19E2CF785DD0084AA51 /* SFBAudioProperties.swift */, 3237E19F2CF785DD0084AA51 /* SFBInputSource.swift */, 3237E1A02CF785DD0084AA51 /* SFBOutputSource.swift */, @@ -827,7 +800,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 3237E2012CF786BA0084AA51 /* SFBAudioPlayerNode.h in Headers */, 32F6E5DD2D2B03770029B972 /* SFBOggOpusEncoder.h in Headers */, 32F6E5DE2D2B03770029B972 /* SFBAudioEncoder+Internal.h in Headers */, 32F6E5DF2D2B03770029B972 /* SFBOggSpeexEncoder.h in Headers */, @@ -889,10 +861,7 @@ 32F6E5F32D2B04030029B972 /* SFBAudioMetadata+TagLibMP4Tag.h in Headers */, 32F6E5F42D2B04030029B972 /* SFBProTrackerModuleFile.h in Headers */, 32F6E5F52D2B04030029B972 /* SFBShortenFile.h in Headers */, - 322298872D3727790020316A /* StringDescribingAVAudioFormat.h in Headers */, 322298882D3727790020316A /* HostTimeUtilities.hpp in Headers */, - 322298892D3727790020316A /* SFBAudioPlayerNode+Internal.h in Headers */, - 3222988A2D3727790020316A /* AudioPlayerNode.h in Headers */, 32F6E5F62D2B04030029B972 /* SFBExtendedModuleFile.h in Headers */, 32F6E5F72D2B04030029B972 /* SFBAudioMetadata+TagLibTag.h in Headers */, 32F6E5F82D2B04030029B972 /* SFBAudioMetadata+TagLibID3v1Tag.h in Headers */, @@ -903,7 +872,6 @@ 32F6E5FD2D2B04030029B972 /* SFBOggSpeexFile.h in Headers */, 32F6E5FE2D2B04030029B972 /* SFBDSDIFFFile.h in Headers */, 3241D7D82EDCA8DC0078AB9F /* AudioPlayer.h in Headers */, - 3241D7D92EDCA8DC0078AB9F /* SFBAudioPlayer+Internal.h in Headers */, 32F6E5FF2D2B04030029B972 /* SFBAudioFile+Internal.h in Headers */, 32F6E6002D2B04030029B972 /* TagLibStringUtilities.h in Headers */, 32F6E6012D2B04030029B972 /* SFBDSFFile.h in Headers */, @@ -1045,7 +1013,6 @@ buildActionMask = 2147483647; files = ( 3237E1A82CF7865A0084AA51 /* SFBAudioProperties.swift in Sources */, - 3237E1A92CF7865A0084AA51 /* SFBAudioPlayerNode.swift in Sources */, 3237E1AA2CF7865A0084AA51 /* SFBAudioPlayer.swift in Sources */, 3237E1B02CF7868B0084AA51 /* SFBAudioConverter.m in Sources */, 3237E1B12CF7868B0084AA51 /* SFBAttachedPicture.m in Sources */, @@ -1059,8 +1026,6 @@ 3237E1BA2CF7868B0084AA51 /* NSData+SFBExtensions.m in Sources */, 3237E1BB2CF7868B0084AA51 /* SFBOggVorbisEncoder.m in Sources */, 3222988D2D3727790020316A /* HostTimeUtilities.cpp in Sources */, - 3222988E2D3727790020316A /* StringDescribingAVAudioFormat.mm in Sources */, - 3222988F2D3727790020316A /* AudioPlayerNode.mm in Sources */, 3237E1BC2CF7868B0084AA51 /* SFBLibsndfileDecoder.m in Sources */, 3237E1BD2CF7868B0084AA51 /* SFBAudioEncoder.m in Sources */, 3237E1BE2CF7868B0084AA51 /* SFBAudioMetadata.m in Sources */, @@ -1078,7 +1043,6 @@ 3237E1C82CF7868B0084AA51 /* NSFileHandle+SFBHeaderReading.m in Sources */, 3237E1C92CF7868B0084AA51 /* NSError+SFBURLPresentation.m in Sources */, 3237E1CA2CF7868B0084AA51 /* SFBWAVEFile.mm in Sources */, - 3237E1CB2CF7868B0084AA51 /* SFBAudioPlayerNode.mm in Sources */, 3237E1CC2CF7868B0084AA51 /* SFBDSDIFFFile.mm in Sources */, 3237E1CD2CF7868B0084AA51 /* SFBMutableDataOutputSource.m in Sources */, 3237E1CE2CF7868B0084AA51 /* SFBAudioMetadata+TagLibXiphComment.mm in Sources */, @@ -1176,7 +1140,7 @@ MACOSX_DEPLOYMENT_TARGET = 11.0; MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; - MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 c++20"; PRODUCT_BUNDLE_IDENTIFIER = org.sbooth.AudioEngine; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1222,7 +1186,7 @@ MACOSX_DEPLOYMENT_TARGET = 11.0; MARKETING_VERSION = 1.0; MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; - MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 c++20"; PRODUCT_BUNDLE_IDENTIFIER = org.sbooth.AudioEngine; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1245,7 +1209,7 @@ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++23"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; @@ -1311,7 +1275,7 @@ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++23"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; @@ -1495,7 +1459,7 @@ repositoryURL = "https://github.com/sbooth/CXXCoreAudio"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 0.2.0; + minimumVersion = 0.4.0; }; }; 3241D7CB2EDCA8740078AB9F /* XCRemoteSwiftPackageReference "CXXAudioToolbox" */ = { @@ -1503,7 +1467,7 @@ repositoryURL = "https://github.com/sbooth/CXXAudioToolbox"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 0.1.2; + minimumVersion = 0.2.0; }; }; 3241D7CE2EDCA8830078AB9F /* XCRemoteSwiftPackageReference "CXXRingBuffer" */ = { @@ -1511,7 +1475,7 @@ repositoryURL = "https://github.com/sbooth/CXXRingBuffer"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 0.2.0; + minimumVersion = 0.4.0; }; }; 3241D7D12EDCA88F0078AB9F /* XCRemoteSwiftPackageReference "CXXUnfairLock" */ = { From 41ca3b35c3d357010f3c246984f699238f972b8c Mon Sep 17 00:00:00 2001 From: Stephen Booth Date: Thu, 15 Jan 2026 22:30:54 -0600 Subject: [PATCH 16/22] Update project file --- SFBAudioEngine.xcodeproj/project.pbxproj | 46 ++++++++++++++---------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index 6543c1057..6e8ad38c4 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -52,7 +52,6 @@ 3237E1C62CF7868B0084AA51 /* SFBDSFFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E15D2CF785DD0084AA51 /* SFBDSFFile.mm */; }; 3237E1C72CF7868B0084AA51 /* SFBMP4File.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1692CF785DD0084AA51 /* SFBMP4File.mm */; }; 3237E1C82CF7868B0084AA51 /* NSFileHandle+SFBHeaderReading.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1952CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.m */; }; - 3237E1C92CF7868B0084AA51 /* NSError+SFBURLPresentation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1932CF785DD0084AA51 /* NSError+SFBURLPresentation.m */; }; 3237E1CA2CF7868B0084AA51 /* SFBWAVEFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E17D2CF785DD0084AA51 /* SFBWAVEFile.mm */; }; 3237E1CC2CF7868B0084AA51 /* SFBDSDIFFFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E15B2CF785DD0084AA51 /* SFBDSDIFFFile.mm */; }; 3237E1CD2CF7868B0084AA51 /* SFBMutableDataOutputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1872CF785DD0084AA51 /* SFBMutableDataOutputSource.m */; }; @@ -77,7 +76,6 @@ 3237E1E02CF7868B0084AA51 /* SFBAudioMetadata+TagLibID3v2Tag.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1522CF785DD0084AA51 /* SFBAudioMetadata+TagLibID3v2Tag.mm */; }; 3237E1E12CF7868B0084AA51 /* SFBFileInputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E13F2CF785DD0084AA51 /* SFBFileInputSource.m */; }; 3237E1E22CF7868B0084AA51 /* SFBCoreAudioEncoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1082CF785DD0084AA51 /* SFBCoreAudioEncoder.mm */; }; - 3237E1E32CF7868B0084AA51 /* SFBLoopableRegionDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0EF2CF785DD0084AA51 /* SFBLoopableRegionDecoder.m */; }; 3237E1E42CF7868B0084AA51 /* SFBOggOpusFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E16F2CF785DD0084AA51 /* SFBOggOpusFile.mm */; }; 3237E1E52CF7868B0084AA51 /* SFBExtendedModuleFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E15F2CF785DD0084AA51 /* SFBExtendedModuleFile.mm */; }; 3237E1E62CF7868B0084AA51 /* SFBAudioMetadata+TagLibID3v1Tag.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1502CF785DD0084AA51 /* SFBAudioMetadata+TagLibID3v1Tag.mm */; }; @@ -118,7 +116,6 @@ 3237E20B2CF786BA0084AA51 /* SFBAudioProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E12D2CF785DD0084AA51 /* SFBAudioProperties.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3237E20C2CF786BA0084AA51 /* SFBPCMEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1362CF785DD0084AA51 /* SFBPCMEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3237E20D2CF786BA0084AA51 /* SFBAudioDecoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1232CF785DD0084AA51 /* SFBAudioDecoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3237E20E2CF786BA0084AA51 /* SFBLoopableRegionDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1332CF785DD0084AA51 /* SFBLoopableRegionDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3237E20F2CF786BA0084AA51 /* SFBAudioExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1282CF785DD0084AA51 /* SFBAudioExporter.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3237E2102CF786BA0084AA51 /* SFBAudioPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E12B2CF785DD0084AA51 /* SFBAudioPlayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3237E2112CF786BA0084AA51 /* SFBDSDDecoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1302CF785DD0084AA51 /* SFBDSDDecoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -141,6 +138,12 @@ 328E81672CF7891A00BFCEB2 /* tta-cpp in Frameworks */ = {isa = PBXBuildFile; productRef = 328E81662CF7891A00BFCEB2 /* tta-cpp */; }; 328E816A2CF7898C00BFCEB2 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 328E81692CF7898C00BFCEB2 /* ImageIO.framework */; }; 328E816C2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 328E816B2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework */; }; + 329625A22F19F583008EEF6E /* SFBAudioRegionDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 329625A12F19F583008EEF6E /* SFBAudioRegionDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 329625A42F19F597008EEF6E /* SFBAudioRegionDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 329625A32F19F597008EEF6E /* SFBAudioRegionDecoder.m */; }; + 329625A92F19F5B9008EEF6E /* SFBLocalizedNameForURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 329625A72F19F5B9008EEF6E /* SFBLocalizedNameForURL.h */; }; + 329625AA2F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 329625A52F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.h */; }; + 329625AB2F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = 329625A62F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.m */; }; + 329625AC2F19F5B9008EEF6E /* SFBLocalizedNameForURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 329625A82F19F5B9008EEF6E /* SFBLocalizedNameForURL.m */; }; 32B6CAB32D5318880093855B /* SFBPlaybackTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B6CAB22D5318880093855B /* SFBPlaybackTime.swift */; }; 32B6CAB42D5318880093855B /* SFBPlaybackPosition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B6CAB12D5318880093855B /* SFBPlaybackPosition.swift */; }; 32B6CAB62D5318AF0093855B /* SFBAudioEngineTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 32B6CAB52D5318AF0093855B /* SFBAudioEngineTypes.m */; }; @@ -150,7 +153,6 @@ 32F6E5C32D2B031D0029B972 /* NSFileHandle+SFBHeaderReading.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1942CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.h */; }; 32F6E5C42D2B031D0029B972 /* SFBCStringForOSType.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1962CF785DD0084AA51 /* SFBCStringForOSType.h */; }; 32F6E5C52D2B031D0029B972 /* SFBTernaryTruthValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1972CF785DD0084AA51 /* SFBTernaryTruthValue.h */; }; - 32F6E5C62D2B031D0029B972 /* NSError+SFBURLPresentation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1922CF785DD0084AA51 /* NSError+SFBURLPresentation.h */; }; 32F6E5C82D2B033E0029B972 /* SFBOutputSource+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1892CF785DD0084AA51 /* SFBOutputSource+Internal.h */; }; 32F6E5C92D2B033E0029B972 /* SFBMutableDataOutputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1862CF785DD0084AA51 /* SFBMutableDataOutputSource.h */; }; 32F6E5CA2D2B033E0029B972 /* SFBFileOutputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1842CF785DD0084AA51 /* SFBFileOutputSource.h */; }; @@ -243,7 +245,6 @@ 3237E0EC2CF785DD0084AA51 /* SFBFLACDecoder.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBFLACDecoder.mm; sourceTree = ""; }; 3237E0ED2CF785DD0084AA51 /* SFBLibsndfileDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBLibsndfileDecoder.h; sourceTree = ""; }; 3237E0EE2CF785DD0084AA51 /* SFBLibsndfileDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBLibsndfileDecoder.m; sourceTree = ""; }; - 3237E0EF2CF785DD0084AA51 /* SFBLoopableRegionDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBLoopableRegionDecoder.m; sourceTree = ""; }; 3237E0F02CF785DD0084AA51 /* SFBModuleDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBModuleDecoder.h; sourceTree = ""; }; 3237E0F12CF785DD0084AA51 /* SFBModuleDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBModuleDecoder.m; sourceTree = ""; }; 3237E0F22CF785DD0084AA51 /* SFBMonkeysAudioDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBMonkeysAudioDecoder.h; sourceTree = ""; }; @@ -306,7 +307,6 @@ 3237E1302CF785DD0084AA51 /* SFBDSDDecoding.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBDSDDecoding.h; sourceTree = ""; }; 3237E1312CF785DD0084AA51 /* SFBDSDPCMDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBDSDPCMDecoder.h; sourceTree = ""; }; 3237E1322CF785DD0084AA51 /* SFBInputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBInputSource.h; sourceTree = ""; }; - 3237E1332CF785DD0084AA51 /* SFBLoopableRegionDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBLoopableRegionDecoder.h; sourceTree = ""; }; 3237E1342CF785DD0084AA51 /* SFBOutputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBOutputSource.h; sourceTree = ""; }; 3237E1352CF785DD0084AA51 /* SFBPCMDecoding.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBPCMDecoding.h; sourceTree = ""; }; 3237E1362CF785DD0084AA51 /* SFBPCMEncoding.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBPCMEncoding.h; sourceTree = ""; }; @@ -391,8 +391,6 @@ 3237E18B2CF785DD0084AA51 /* SFBAudioPlayer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBAudioPlayer.mm; sourceTree = ""; }; 3237E1902CF785DD0084AA51 /* NSData+SFBExtensions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSData+SFBExtensions.h"; sourceTree = ""; }; 3237E1912CF785DD0084AA51 /* NSData+SFBExtensions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSData+SFBExtensions.m"; sourceTree = ""; }; - 3237E1922CF785DD0084AA51 /* NSError+SFBURLPresentation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSError+SFBURLPresentation.h"; sourceTree = ""; }; - 3237E1932CF785DD0084AA51 /* NSError+SFBURLPresentation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSError+SFBURLPresentation.m"; sourceTree = ""; }; 3237E1942CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSFileHandle+SFBHeaderReading.h"; sourceTree = ""; }; 3237E1952CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSFileHandle+SFBHeaderReading.m"; sourceTree = ""; }; 3237E1962CF785DD0084AA51 /* SFBCStringForOSType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBCStringForOSType.h; sourceTree = ""; }; @@ -410,6 +408,12 @@ 328997A92E117BB70083CD7D /* SFBShortenFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBShortenFile.mm; sourceTree = ""; }; 328E81692CF7898C00BFCEB2 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.1.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; 328E816B2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UniformTypeIdentifiers.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.1.sdk/System/Library/Frameworks/UniformTypeIdentifiers.framework; sourceTree = DEVELOPER_DIR; }; + 329625A12F19F583008EEF6E /* SFBAudioRegionDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBAudioRegionDecoder.h; sourceTree = ""; }; + 329625A32F19F597008EEF6E /* SFBAudioRegionDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioRegionDecoder.m; sourceTree = ""; }; + 329625A52F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBErrorWithLocalizedDescription.h; sourceTree = ""; }; + 329625A62F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBErrorWithLocalizedDescription.m; sourceTree = ""; }; + 329625A72F19F5B9008EEF6E /* SFBLocalizedNameForURL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBLocalizedNameForURL.h; sourceTree = ""; }; + 329625A82F19F5B9008EEF6E /* SFBLocalizedNameForURL.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBLocalizedNameForURL.m; sourceTree = ""; }; 32B6CAB12D5318880093855B /* SFBPlaybackPosition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBPlaybackPosition.swift; sourceTree = ""; }; 32B6CAB22D5318880093855B /* SFBPlaybackTime.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBPlaybackTime.swift; sourceTree = ""; }; 32B6CAB52D5318AF0093855B /* SFBAudioEngineTypes.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioEngineTypes.m; sourceTree = ""; }; @@ -489,6 +493,7 @@ children = ( 3237E0DF2CF785DD0084AA51 /* SFBAudioDecoder.m */, 3237E0E02CF785DD0084AA51 /* SFBAudioDecoder+Internal.h */, + 329625A32F19F597008EEF6E /* SFBAudioRegionDecoder.m */, 3237E0E12CF785DD0084AA51 /* SFBCoreAudioDecoder.h */, 3237E0E22CF785DD0084AA51 /* SFBCoreAudioDecoder.mm */, 3237E0E32CF785DD0084AA51 /* SFBDoPDecoder.m */, @@ -503,7 +508,6 @@ 3237E0EC2CF785DD0084AA51 /* SFBFLACDecoder.mm */, 3237E0ED2CF785DD0084AA51 /* SFBLibsndfileDecoder.h */, 3237E0EE2CF785DD0084AA51 /* SFBLibsndfileDecoder.m */, - 3237E0EF2CF785DD0084AA51 /* SFBLoopableRegionDecoder.m */, 3237E0F02CF785DD0084AA51 /* SFBModuleDecoder.h */, 3237E0F12CF785DD0084AA51 /* SFBModuleDecoder.m */, 3237E0F22CF785DD0084AA51 /* SFBMonkeysAudioDecoder.h */, @@ -575,12 +579,12 @@ 3237E12A2CF785DD0084AA51 /* SFBAudioMetadata.h */, 3237E12B2CF785DD0084AA51 /* SFBAudioPlayer.h */, 3237E12D2CF785DD0084AA51 /* SFBAudioProperties.h */, + 329625A12F19F583008EEF6E /* SFBAudioRegionDecoder.h */, 3237E12E2CF785DD0084AA51 /* SFBDoPDecoder.h */, 3237E12F2CF785DD0084AA51 /* SFBDSDDecoder.h */, 3237E1302CF785DD0084AA51 /* SFBDSDDecoding.h */, 3237E1312CF785DD0084AA51 /* SFBDSDPCMDecoder.h */, 3237E1322CF785DD0084AA51 /* SFBInputSource.h */, - 3237E1332CF785DD0084AA51 /* SFBLoopableRegionDecoder.h */, 3237E1342CF785DD0084AA51 /* SFBOutputSource.h */, 3237E1352CF785DD0084AA51 /* SFBPCMDecoding.h */, 3237E1362CF785DD0084AA51 /* SFBPCMEncoding.h */, @@ -713,14 +717,16 @@ children = ( 3237E1902CF785DD0084AA51 /* NSData+SFBExtensions.h */, 3237E1912CF785DD0084AA51 /* NSData+SFBExtensions.m */, - 3237E1922CF785DD0084AA51 /* NSError+SFBURLPresentation.h */, - 3237E1932CF785DD0084AA51 /* NSError+SFBURLPresentation.m */, 3237E1942CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.h */, 3237E1952CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.m */, 32B6CAB52D5318AF0093855B /* SFBAudioEngineTypes.m */, 3237E1962CF785DD0084AA51 /* SFBCStringForOSType.h */, + 329625A52F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.h */, + 329625A62F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.m */, 32F6E5BE2D2B02F00029B972 /* SFBLibsndfileUtilities.h */, 32F6E5BF2D2B02F00029B972 /* SFBLibsndfileUtilities.m */, + 329625A72F19F5B9008EEF6E /* SFBLocalizedNameForURL.h */, + 329625A82F19F5B9008EEF6E /* SFBLocalizedNameForURL.m */, 3237E1972CF785DD0084AA51 /* SFBTernaryTruthValue.h */, ); path = Utilities; @@ -802,6 +808,7 @@ files = ( 32F6E5DD2D2B03770029B972 /* SFBOggOpusEncoder.h in Headers */, 32F6E5DE2D2B03770029B972 /* SFBAudioEncoder+Internal.h in Headers */, + 329625A22F19F583008EEF6E /* SFBAudioRegionDecoder.h in Headers */, 32F6E5DF2D2B03770029B972 /* SFBOggSpeexEncoder.h in Headers */, 32F6E5E02D2B03770029B972 /* SFBWavPackEncoder.h in Headers */, 32F6E5E12D2B03770029B972 /* SFBCoreAudioEncoder.h in Headers */, @@ -847,7 +854,6 @@ 3237E20B2CF786BA0084AA51 /* SFBAudioProperties.h in Headers */, 3237E20C2CF786BA0084AA51 /* SFBPCMEncoding.h in Headers */, 3237E20D2CF786BA0084AA51 /* SFBAudioDecoding.h in Headers */, - 3237E20E2CF786BA0084AA51 /* SFBLoopableRegionDecoder.h in Headers */, 3237E20F2CF786BA0084AA51 /* SFBAudioExporter.h in Headers */, 3237E2102CF786BA0084AA51 /* SFBAudioPlayer.h in Headers */, 3237E2112CF786BA0084AA51 /* SFBDSDDecoding.h in Headers */, @@ -892,10 +898,11 @@ 3237E2152CF786BA0084AA51 /* SFBAudioConverter.h in Headers */, 3237E2162CF786BA0084AA51 /* SFBReplayGainAnalyzer.h in Headers */, 32F6E5C22D2B031D0029B972 /* NSData+SFBExtensions.h in Headers */, + 329625A92F19F5B9008EEF6E /* SFBLocalizedNameForURL.h in Headers */, + 329625AA2F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.h in Headers */, 32F6E5C32D2B031D0029B972 /* NSFileHandle+SFBHeaderReading.h in Headers */, 32F6E5C42D2B031D0029B972 /* SFBCStringForOSType.h in Headers */, 32F6E5C52D2B031D0029B972 /* SFBTernaryTruthValue.h in Headers */, - 32F6E5C62D2B031D0029B972 /* NSError+SFBURLPresentation.h in Headers */, 3237E2172CF786BA0084AA51 /* SFBDoPDecoder.h in Headers */, 3237E2182CF786BA0084AA51 /* SFBAudioEncoder.h in Headers */, ); @@ -1018,6 +1025,8 @@ 3237E1B12CF7868B0084AA51 /* SFBAttachedPicture.m in Sources */, 3237E1B22CF7868B0084AA51 /* SFBAudioExporter.m in Sources */, 3237E1B32CF7868B0084AA51 /* SFBTrueAudioEncoder.mm in Sources */, + 329625AB2F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.m in Sources */, + 329625AC2F19F5B9008EEF6E /* SFBLocalizedNameForURL.m in Sources */, 3237E1B42CF7868B0084AA51 /* SFBWavPackDecoder.m in Sources */, 3237E1B52CF7868B0084AA51 /* SFBCoreAudioDecoder.mm in Sources */, 3237E1B72CF7868B0084AA51 /* AddAudioPropertiesToDictionary.mm in Sources */, @@ -1041,7 +1050,6 @@ 3237E1C62CF7868B0084AA51 /* SFBDSFFile.mm in Sources */, 3237E1C72CF7868B0084AA51 /* SFBMP4File.mm in Sources */, 3237E1C82CF7868B0084AA51 /* NSFileHandle+SFBHeaderReading.m in Sources */, - 3237E1C92CF7868B0084AA51 /* NSError+SFBURLPresentation.m in Sources */, 3237E1CA2CF7868B0084AA51 /* SFBWAVEFile.mm in Sources */, 3237E1CC2CF7868B0084AA51 /* SFBDSDIFFFile.mm in Sources */, 3237E1CD2CF7868B0084AA51 /* SFBMutableDataOutputSource.m in Sources */, @@ -1049,6 +1057,7 @@ 3237E1CF2CF7868B0084AA51 /* SFBDSDDecoder.m in Sources */, 32B6CAB62D5318AF0093855B /* SFBAudioEngineTypes.m in Sources */, 3237E1D02CF7868B0084AA51 /* SFBShortenDecoder.mm in Sources */, + 329625A42F19F597008EEF6E /* SFBAudioRegionDecoder.m in Sources */, 3237E1D12CF7868B0084AA51 /* SFBImpulseTrackerModuleFile.mm in Sources */, 3237E1D22CF7868B0084AA51 /* SFBScreamTracker3ModuleFile.mm in Sources */, 3237E1D32CF7868B0084AA51 /* SFBOggFLACFile.mm in Sources */, @@ -1069,7 +1078,6 @@ 3237E1E02CF7868B0084AA51 /* SFBAudioMetadata+TagLibID3v2Tag.mm in Sources */, 3237E1E12CF7868B0084AA51 /* SFBFileInputSource.m in Sources */, 3237E1E22CF7868B0084AA51 /* SFBCoreAudioEncoder.mm in Sources */, - 3237E1E32CF7868B0084AA51 /* SFBLoopableRegionDecoder.m in Sources */, 3237E1E42CF7868B0084AA51 /* SFBOggOpusFile.mm in Sources */, 3237E1E52CF7868B0084AA51 /* SFBExtendedModuleFile.mm in Sources */, 3237E1E62CF7868B0084AA51 /* SFBAudioMetadata+TagLibID3v1Tag.mm in Sources */, @@ -1459,7 +1467,7 @@ repositoryURL = "https://github.com/sbooth/CXXCoreAudio"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 0.4.0; + minimumVersion = 0.5.1; }; }; 3241D7CB2EDCA8740078AB9F /* XCRemoteSwiftPackageReference "CXXAudioToolbox" */ = { @@ -1475,7 +1483,7 @@ repositoryURL = "https://github.com/sbooth/CXXRingBuffer"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 0.4.0; + minimumVersion = 0.5.2; }; }; 3241D7D12EDCA88F0078AB9F /* XCRemoteSwiftPackageReference "CXXUnfairLock" */ = { @@ -1483,7 +1491,7 @@ repositoryURL = "https://github.com/sbooth/CXXUnfairLock"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 0.1.0; + minimumVersion = 0.2.0; }; }; 328E81622CF7890700BFCEB2 /* XCRemoteSwiftPackageReference "sndfile-binary-xcframework" */ = { From ff6a0ba83297631174c0fb893b95ca5f1dc0fc03 Mon Sep 17 00:00:00 2001 From: Stephen Booth Date: Fri, 23 Jan 2026 15:53:08 -0600 Subject: [PATCH 17/22] Add new files to project --- SFBAudioEngine.xcodeproj/project.pbxproj | 48 ++++++++++++------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index 6e8ad38c4..5b9394f03 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -12,8 +12,6 @@ 321C18B72CF7888800670824 /* lame in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18B62CF7888800670824 /* lame */; }; 321C18BA2CF7889A00670824 /* mpc in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18B92CF7889A00670824 /* mpc */; }; 321C18BD2CF788AB00670824 /* mpg123 in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18BC2CF788AB00670824 /* mpg123 */; }; - 322298882D3727790020316A /* HostTimeUtilities.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 322298822D3727790020316A /* HostTimeUtilities.hpp */; }; - 3222988D2D3727790020316A /* HostTimeUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 322298832D3727790020316A /* HostTimeUtilities.cpp */; }; 322CE3442CF787630070996C /* dumb in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3432CF787630070996C /* dumb */; }; 322CE3472CF787740070996C /* MAC in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3462CF787740070996C /* MAC */; }; 322CE34A2CF7878D0070996C /* taglib in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3492CF7878D0070996C /* taglib */; }; @@ -220,11 +218,11 @@ 32F6E6082D2B04030029B972 /* SFBAudioMetadata+TagLibAPETag.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E14D2CF785DD0084AA51 /* SFBAudioMetadata+TagLibAPETag.h */; }; 32F6E6092D2B04030029B972 /* SFBMP4File.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1682CF785DD0084AA51 /* SFBMP4File.h */; }; 32F6E60A2D2B04030029B972 /* SFBWAVEFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E17C2CF785DD0084AA51 /* SFBWAVEFile.h */; }; + 32FBE0472F2423EF001852DE /* host_time.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 32FBE0452F2423EF001852DE /* host_time.hpp */; }; + 32FBE0482F2423EF001852DE /* SFBAudioPlayer+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 32FBE0462F2423EF001852DE /* SFBAudioPlayer+Internal.h */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 322298822D3727790020316A /* HostTimeUtilities.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = HostTimeUtilities.hpp; sourceTree = ""; }; - 322298832D3727790020316A /* HostTimeUtilities.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HostTimeUtilities.cpp; sourceTree = ""; }; 3237E0CF2CF7855B0084AA51 /* SFBAudioEngine.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SFBAudioEngine.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3237E0DA2CF785DD0084AA51 /* SFBReplayGainAnalyzer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBReplayGainAnalyzer.m; sourceTree = ""; }; 3237E0DC2CF785DD0084AA51 /* SFBAudioConverter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioConverter.m; sourceTree = ""; }; @@ -419,6 +417,8 @@ 32B6CAB52D5318AF0093855B /* SFBAudioEngineTypes.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioEngineTypes.m; sourceTree = ""; }; 32F6E5BE2D2B02F00029B972 /* SFBLibsndfileUtilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBLibsndfileUtilities.h; sourceTree = ""; }; 32F6E5BF2D2B02F00029B972 /* SFBLibsndfileUtilities.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBLibsndfileUtilities.m; sourceTree = ""; }; + 32FBE0452F2423EF001852DE /* host_time.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = host_time.hpp; sourceTree = ""; }; + 32FBE0462F2423EF001852DE /* SFBAudioPlayer+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBAudioPlayer+Internal.h"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -705,9 +705,9 @@ children = ( 3241D7D42EDCA8DC0078AB9F /* AudioPlayer.h */, 3241D7D52EDCA8DC0078AB9F /* AudioPlayer.mm */, - 322298822D3727790020316A /* HostTimeUtilities.hpp */, - 322298832D3727790020316A /* HostTimeUtilities.cpp */, + 32FBE0452F2423EF001852DE /* host_time.hpp */, 3237E18B2CF785DD0084AA51 /* SFBAudioPlayer.mm */, + 32FBE0462F2423EF001852DE /* SFBAudioPlayer+Internal.h */, ); path = Player; sourceTree = ""; @@ -867,7 +867,6 @@ 32F6E5F32D2B04030029B972 /* SFBAudioMetadata+TagLibMP4Tag.h in Headers */, 32F6E5F42D2B04030029B972 /* SFBProTrackerModuleFile.h in Headers */, 32F6E5F52D2B04030029B972 /* SFBShortenFile.h in Headers */, - 322298882D3727790020316A /* HostTimeUtilities.hpp in Headers */, 32F6E5F62D2B04030029B972 /* SFBExtendedModuleFile.h in Headers */, 32F6E5F72D2B04030029B972 /* SFBAudioMetadata+TagLibTag.h in Headers */, 32F6E5F82D2B04030029B972 /* SFBAudioMetadata+TagLibID3v1Tag.h in Headers */, @@ -882,6 +881,8 @@ 32F6E6002D2B04030029B972 /* TagLibStringUtilities.h in Headers */, 32F6E6012D2B04030029B972 /* SFBDSFFile.h in Headers */, 32F6E6022D2B04030029B972 /* SFBMonkeysAudioFile.h in Headers */, + 32FBE0472F2423EF001852DE /* host_time.hpp in Headers */, + 32FBE0482F2423EF001852DE /* SFBAudioPlayer+Internal.h in Headers */, 32F6E6032D2B04030029B972 /* SFBMusepackFile.h in Headers */, 32F6E6042D2B04030029B972 /* SFBOggFLACFile.h in Headers */, 32F6E6052D2B04030029B972 /* AddAudioPropertiesToDictionary.h in Headers */, @@ -1034,7 +1035,6 @@ 3237E1B92CF7868B0084AA51 /* SFBOggSpeexDecoder.m in Sources */, 3237E1BA2CF7868B0084AA51 /* NSData+SFBExtensions.m in Sources */, 3237E1BB2CF7868B0084AA51 /* SFBOggVorbisEncoder.m in Sources */, - 3222988D2D3727790020316A /* HostTimeUtilities.cpp in Sources */, 3237E1BC2CF7868B0084AA51 /* SFBLibsndfileDecoder.m in Sources */, 3237E1BD2CF7868B0084AA51 /* SFBAudioEncoder.m in Sources */, 3237E1BE2CF7868B0084AA51 /* SFBAudioMetadata.m in Sources */, @@ -1362,7 +1362,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/vorbis-binary-xcframework"; requirement = { - kind = upToNextMajorVersion; + kind = upToNextMinorVersion; minimumVersion = 0.1.2; }; }; @@ -1378,7 +1378,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/lame-binary-xcframework"; requirement = { - kind = upToNextMajorVersion; + kind = upToNextMinorVersion; minimumVersion = 0.1.2; }; }; @@ -1386,7 +1386,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/mpc-binary-xcframework"; requirement = { - kind = upToNextMajorVersion; + kind = upToNextMinorVersion; minimumVersion = 0.1.2; }; }; @@ -1394,7 +1394,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/mpg123-binary-xcframework"; requirement = { - kind = upToNextMajorVersion; + kind = upToNextMinorVersion; minimumVersion = 0.3.0; }; }; @@ -1426,7 +1426,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/wavpack-binary-xcframework"; requirement = { - kind = upToNextMajorVersion; + kind = upToNextMinorVersion; minimumVersion = 0.1.2; }; }; @@ -1434,7 +1434,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/ogg-binary-xcframework"; requirement = { - kind = upToNextMajorVersion; + kind = upToNextMinorVersion; minimumVersion = 0.1.3; }; }; @@ -1442,7 +1442,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/flac-binary-xcframework"; requirement = { - kind = upToNextMajorVersion; + kind = upToNextMinorVersion; minimumVersion = 0.2.0; }; }; @@ -1450,7 +1450,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/opus-binary-xcframework"; requirement = { - kind = upToNextMajorVersion; + kind = upToNextMinorVersion; minimumVersion = 0.2.2; }; }; @@ -1458,15 +1458,15 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/AVFAudioExtensions"; requirement = { - kind = upToNextMajorVersion; - minimumVersion = 0.4.2; + kind = upToNextMinorVersion; + minimumVersion = 0.5.0; }; }; 3241D7C82EDCA8660078AB9F /* XCRemoteSwiftPackageReference "CXXCoreAudio" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/CXXCoreAudio"; requirement = { - kind = upToNextMajorVersion; + kind = upToNextMinorVersion; minimumVersion = 0.5.1; }; }; @@ -1474,7 +1474,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/CXXAudioToolbox"; requirement = { - kind = upToNextMajorVersion; + kind = upToNextMinorVersion; minimumVersion = 0.2.0; }; }; @@ -1482,7 +1482,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/CXXRingBuffer"; requirement = { - kind = upToNextMajorVersion; + kind = upToNextMinorVersion; minimumVersion = 0.5.2; }; }; @@ -1490,7 +1490,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/CXXUnfairLock"; requirement = { - kind = upToNextMajorVersion; + kind = upToNextMinorVersion; minimumVersion = 0.2.0; }; }; @@ -1498,7 +1498,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/sndfile-binary-xcframework"; requirement = { - kind = upToNextMajorVersion; + kind = upToNextMinorVersion; minimumVersion = 0.1.2; }; }; @@ -1506,7 +1506,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/tta-cpp-binary-xcframework"; requirement = { - kind = upToNextMajorVersion; + kind = upToNextMinorVersion; minimumVersion = 0.1.2; }; }; From 3e916cba86cc19a0346e24e70d364e32db0ce49b Mon Sep 17 00:00:00 2001 From: Stephen Booth Date: Mon, 2 Feb 2026 18:33:34 -0600 Subject: [PATCH 18/22] Update project --- SFBAudioEngine.xcodeproj/project.pbxproj | 96 +++++++++++++++--------- 1 file changed, 60 insertions(+), 36 deletions(-) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index 5b9394f03..148eeb391 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -7,6 +7,14 @@ objects = { /* Begin PBXBuildFile section */ + 321091D92F3178F20024A44F /* AudioFileWrapper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 321091D32F3178F20024A44F /* AudioFileWrapper.hpp */; }; + 321091DA2F3178F20024A44F /* ExtAudioFileWrapper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 321091D42F3178F20024A44F /* ExtAudioFileWrapper.hpp */; }; + 321091DB2F3178F20024A44F /* SFBACLDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 321091D52F3178F20024A44F /* SFBACLDescription.h */; }; + 321091DC2F3178F20024A44F /* SFBASBDFormatDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 321091D72F3178F20024A44F /* SFBASBDFormatDescription.h */; }; + 321091DD2F3178F20024A44F /* SFBACLDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = 321091D62F3178F20024A44F /* SFBACLDescription.m */; }; + 321091DE2F3178F20024A44F /* SFBASBDFormatDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = 321091D82F3178F20024A44F /* SFBASBDFormatDescription.m */; }; + 321091E12F31797D0024A44F /* CXXDispatchSemaphore in Frameworks */ = {isa = PBXBuildFile; productRef = 321091E02F31797D0024A44F /* CXXDispatchSemaphore */; }; + 321091E42F3179A60024A44F /* CXXAudioRingBuffer in Frameworks */ = {isa = PBXBuildFile; productRef = 321091E32F3179A60024A44F /* CXXAudioRingBuffer */; }; 321C18B12CF7886000670824 /* vorbis in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18B02CF7886000670824 /* vorbis */; }; 321C18B42CF7887600670824 /* speex in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18B32CF7887600670824 /* speex */; }; 321C18B72CF7888800670824 /* lame in Frameworks */ = {isa = PBXBuildFile; productRef = 321C18B62CF7888800670824 /* lame */; }; @@ -125,8 +133,6 @@ 3237E2172CF786BA0084AA51 /* SFBDoPDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E12E2CF785DD0084AA51 /* SFBDoPDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3237E2182CF786BA0084AA51 /* SFBAudioEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1242CF785DD0084AA51 /* SFBAudioEncoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3237E21E2CF787330084AA51 /* AVFAudioExtensions in Frameworks */ = {isa = PBXBuildFile; productRef = 3237E21D2CF787330084AA51 /* AVFAudioExtensions */; }; - 3241D7CA2EDCA8660078AB9F /* CXXCoreAudio in Frameworks */ = {isa = PBXBuildFile; productRef = 3241D7C92EDCA8660078AB9F /* CXXCoreAudio */; }; - 3241D7CD2EDCA8750078AB9F /* CXXAudioToolbox in Frameworks */ = {isa = PBXBuildFile; productRef = 3241D7CC2EDCA8750078AB9F /* CXXAudioToolbox */; }; 3241D7D02EDCA8830078AB9F /* CXXRingBuffer in Frameworks */ = {isa = PBXBuildFile; productRef = 3241D7CF2EDCA8830078AB9F /* CXXRingBuffer */; }; 3241D7D32EDCA88F0078AB9F /* CXXUnfairLock in Frameworks */ = {isa = PBXBuildFile; productRef = 3241D7D22EDCA88F0078AB9F /* CXXUnfairLock */; }; 3241D7D72EDCA8DC0078AB9F /* AudioPlayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3241D7D52EDCA8DC0078AB9F /* AudioPlayer.mm */; }; @@ -223,6 +229,12 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 321091D32F3178F20024A44F /* AudioFileWrapper.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = AudioFileWrapper.hpp; sourceTree = ""; }; + 321091D42F3178F20024A44F /* ExtAudioFileWrapper.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = ExtAudioFileWrapper.hpp; sourceTree = ""; }; + 321091D52F3178F20024A44F /* SFBACLDescription.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBACLDescription.h; sourceTree = ""; }; + 321091D62F3178F20024A44F /* SFBACLDescription.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBACLDescription.m; sourceTree = ""; }; + 321091D72F3178F20024A44F /* SFBASBDFormatDescription.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBASBDFormatDescription.h; sourceTree = ""; }; + 321091D82F3178F20024A44F /* SFBASBDFormatDescription.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBASBDFormatDescription.m; sourceTree = ""; }; 3237E0CF2CF7855B0084AA51 /* SFBAudioEngine.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SFBAudioEngine.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3237E0DA2CF785DD0084AA51 /* SFBReplayGainAnalyzer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBReplayGainAnalyzer.m; sourceTree = ""; }; 3237E0DC2CF785DD0084AA51 /* SFBAudioConverter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioConverter.m; sourceTree = ""; }; @@ -428,21 +440,21 @@ files = ( 328E81672CF7891A00BFCEB2 /* tta-cpp in Frameworks */, 321C18BA2CF7889A00670824 /* mpc in Frameworks */, + 321091E42F3179A60024A44F /* CXXAudioRingBuffer in Frameworks */, 321C18B42CF7887600670824 /* speex in Frameworks */, 328E816A2CF7898C00BFCEB2 /* ImageIO.framework in Frameworks */, 321C18BD2CF788AB00670824 /* mpg123 in Frameworks */, 322CE34D2CF788020070996C /* wavpack in Frameworks */, 322CE34A2CF7878D0070996C /* taglib in Frameworks */, 322CE3532CF788240070996C /* FLAC in Frameworks */, - 3241D7CA2EDCA8660078AB9F /* CXXCoreAudio in Frameworks */, 322CE3472CF787740070996C /* MAC in Frameworks */, 322CE3562CF788360070996C /* opus in Frameworks */, 321C18B12CF7886000670824 /* vorbis in Frameworks */, 321C18B72CF7888800670824 /* lame in Frameworks */, - 3241D7CD2EDCA8750078AB9F /* CXXAudioToolbox in Frameworks */, 3241D7D02EDCA8830078AB9F /* CXXRingBuffer in Frameworks */, 328E816C2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework in Frameworks */, 3241D7D32EDCA88F0078AB9F /* CXXUnfairLock in Frameworks */, + 321091E12F31797D0024A44F /* CXXDispatchSemaphore in Frameworks */, 322CE3442CF787630070996C /* dumb in Frameworks */, 322CE3502CF788120070996C /* ogg in Frameworks */, 328E81642CF7890700BFCEB2 /* sndfile in Frameworks */, @@ -715,10 +727,16 @@ 3237E1982CF785DD0084AA51 /* Utilities */ = { isa = PBXGroup; children = ( + 321091D32F3178F20024A44F /* AudioFileWrapper.hpp */, + 321091D42F3178F20024A44F /* ExtAudioFileWrapper.hpp */, 3237E1902CF785DD0084AA51 /* NSData+SFBExtensions.h */, 3237E1912CF785DD0084AA51 /* NSData+SFBExtensions.m */, 3237E1942CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.h */, 3237E1952CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.m */, + 321091D52F3178F20024A44F /* SFBACLDescription.h */, + 321091D62F3178F20024A44F /* SFBACLDescription.m */, + 321091D72F3178F20024A44F /* SFBASBDFormatDescription.h */, + 321091D82F3178F20024A44F /* SFBASBDFormatDescription.m */, 32B6CAB52D5318AF0093855B /* SFBAudioEngineTypes.m */, 3237E1962CF785DD0084AA51 /* SFBCStringForOSType.h */, 329625A52F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.h */, @@ -850,6 +868,10 @@ 3237E2082CF786BA0084AA51 /* SFBAttachedPicture.h in Headers */, 3237E2092CF786BA0084AA51 /* SFBInputSource.h in Headers */, 3237E20A2CF786BA0084AA51 /* SFBAudioEngine.h in Headers */, + 321091D92F3178F20024A44F /* AudioFileWrapper.hpp in Headers */, + 321091DA2F3178F20024A44F /* ExtAudioFileWrapper.hpp in Headers */, + 321091DB2F3178F20024A44F /* SFBACLDescription.h in Headers */, + 321091DC2F3178F20024A44F /* SFBASBDFormatDescription.h in Headers */, 32F6E5C12D2B02F00029B972 /* SFBLibsndfileUtilities.h in Headers */, 3237E20B2CF786BA0084AA51 /* SFBAudioProperties.h in Headers */, 3237E20C2CF786BA0084AA51 /* SFBPCMEncoding.h in Headers */, @@ -942,10 +964,10 @@ 321C18BC2CF788AB00670824 /* mpg123 */, 328E81632CF7890700BFCEB2 /* sndfile */, 328E81662CF7891A00BFCEB2 /* tta-cpp */, - 3241D7C92EDCA8660078AB9F /* CXXCoreAudio */, - 3241D7CC2EDCA8750078AB9F /* CXXAudioToolbox */, 3241D7CF2EDCA8830078AB9F /* CXXRingBuffer */, 3241D7D22EDCA88F0078AB9F /* CXXUnfairLock */, + 321091E02F31797D0024A44F /* CXXDispatchSemaphore */, + 321091E32F3179A60024A44F /* CXXAudioRingBuffer */, ); productName = SFBAudioEngine; productReference = 3237E0CF2CF7855B0084AA51 /* SFBAudioEngine.framework */; @@ -990,10 +1012,10 @@ 321C18BB2CF788AB00670824 /* XCRemoteSwiftPackageReference "mpg123-binary-xcframework" */, 328E81622CF7890700BFCEB2 /* XCRemoteSwiftPackageReference "sndfile-binary-xcframework" */, 328E81652CF7891A00BFCEB2 /* XCRemoteSwiftPackageReference "tta-cpp-binary-xcframework" */, - 3241D7C82EDCA8660078AB9F /* XCRemoteSwiftPackageReference "CXXCoreAudio" */, - 3241D7CB2EDCA8740078AB9F /* XCRemoteSwiftPackageReference "CXXAudioToolbox" */, 3241D7CE2EDCA8830078AB9F /* XCRemoteSwiftPackageReference "CXXRingBuffer" */, 3241D7D12EDCA88F0078AB9F /* XCRemoteSwiftPackageReference "CXXUnfairLock" */, + 321091DF2F31797D0024A44F /* XCRemoteSwiftPackageReference "CXXDispatchSemaphore" */, + 321091E22F3179A60024A44F /* XCRemoteSwiftPackageReference "CXXAudioRingBuffer" */, ); preferredProjectObjectVersion = 77; productRefGroup = 3237E0D02CF7855B0084AA51 /* Products */; @@ -1090,6 +1112,8 @@ 3237E1ED2CF7868B0084AA51 /* SFBFileOutputSource.m in Sources */, 3237E1EE2CF7868B0084AA51 /* SFBMusepackDecoder.m in Sources */, 3237E1EF2CF7868B0084AA51 /* SFBTrueAudioFile.mm in Sources */, + 321091DD2F3178F20024A44F /* SFBACLDescription.m in Sources */, + 321091DE2F3178F20024A44F /* SFBASBDFormatDescription.m in Sources */, 3237E1F02CF7868B0084AA51 /* SFBProTrackerModuleFile.mm in Sources */, 3237E1F12CF7868B0084AA51 /* SFBOggVorbisDecoder.m in Sources */, 3237E1F22CF7868B0084AA51 /* SFBAudioPlayer.mm in Sources */, @@ -1358,6 +1382,22 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ + 321091DF2F31797D0024A44F /* XCRemoteSwiftPackageReference "CXXDispatchSemaphore" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/CXXDispatchSemaphore"; + requirement = { + kind = upToNextMinorVersion; + minimumVersion = 0.4.0; + }; + }; + 321091E22F3179A60024A44F /* XCRemoteSwiftPackageReference "CXXAudioRingBuffer" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sbooth/CXXAudioRingBuffer"; + requirement = { + kind = upToNextMinorVersion; + minimumVersion = 0.1.0; + }; + }; 321C18AF2CF7886000670824 /* XCRemoteSwiftPackageReference "vorbis-binary-xcframework" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/vorbis-binary-xcframework"; @@ -1462,28 +1502,12 @@ minimumVersion = 0.5.0; }; }; - 3241D7C82EDCA8660078AB9F /* XCRemoteSwiftPackageReference "CXXCoreAudio" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/sbooth/CXXCoreAudio"; - requirement = { - kind = upToNextMinorVersion; - minimumVersion = 0.5.1; - }; - }; - 3241D7CB2EDCA8740078AB9F /* XCRemoteSwiftPackageReference "CXXAudioToolbox" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/sbooth/CXXAudioToolbox"; - requirement = { - kind = upToNextMinorVersion; - minimumVersion = 0.2.0; - }; - }; 3241D7CE2EDCA8830078AB9F /* XCRemoteSwiftPackageReference "CXXRingBuffer" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/sbooth/CXXRingBuffer"; requirement = { kind = upToNextMinorVersion; - minimumVersion = 0.5.2; + minimumVersion = 0.6.0; }; }; 3241D7D12EDCA88F0078AB9F /* XCRemoteSwiftPackageReference "CXXUnfairLock" */ = { @@ -1491,7 +1515,7 @@ repositoryURL = "https://github.com/sbooth/CXXUnfairLock"; requirement = { kind = upToNextMinorVersion; - minimumVersion = 0.2.0; + minimumVersion = 0.3.0; }; }; 328E81622CF7890700BFCEB2 /* XCRemoteSwiftPackageReference "sndfile-binary-xcframework" */ = { @@ -1513,6 +1537,16 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ + 321091E02F31797D0024A44F /* CXXDispatchSemaphore */ = { + isa = XCSwiftPackageProductDependency; + package = 321091DF2F31797D0024A44F /* XCRemoteSwiftPackageReference "CXXDispatchSemaphore" */; + productName = CXXDispatchSemaphore; + }; + 321091E32F3179A60024A44F /* CXXAudioRingBuffer */ = { + isa = XCSwiftPackageProductDependency; + package = 321091E22F3179A60024A44F /* XCRemoteSwiftPackageReference "CXXAudioRingBuffer" */; + productName = CXXAudioRingBuffer; + }; 321C18B02CF7886000670824 /* vorbis */ = { isa = XCSwiftPackageProductDependency; package = 321C18AF2CF7886000670824 /* XCRemoteSwiftPackageReference "vorbis-binary-xcframework" */; @@ -1578,16 +1612,6 @@ package = 3237E21C2CF787330084AA51 /* XCRemoteSwiftPackageReference "AVFAudioExtensions" */; productName = AVFAudioExtensions; }; - 3241D7C92EDCA8660078AB9F /* CXXCoreAudio */ = { - isa = XCSwiftPackageProductDependency; - package = 3241D7C82EDCA8660078AB9F /* XCRemoteSwiftPackageReference "CXXCoreAudio" */; - productName = CXXCoreAudio; - }; - 3241D7CC2EDCA8750078AB9F /* CXXAudioToolbox */ = { - isa = XCSwiftPackageProductDependency; - package = 3241D7CB2EDCA8740078AB9F /* XCRemoteSwiftPackageReference "CXXAudioToolbox" */; - productName = CXXAudioToolbox; - }; 3241D7CF2EDCA8830078AB9F /* CXXRingBuffer */ = { isa = XCSwiftPackageProductDependency; package = 3241D7CE2EDCA8830078AB9F /* XCRemoteSwiftPackageReference "CXXRingBuffer" */; From fa66f79f85c2e6c4b9069b743f000ad1c0c60930 Mon Sep 17 00:00:00 2001 From: Stephen Booth Date: Mon, 2 Feb 2026 18:48:42 -0600 Subject: [PATCH 19/22] Add -Wall -Wextra --- SFBAudioEngine.xcodeproj/project.pbxproj | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index 148eeb391..0c7c25f08 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -1297,6 +1297,10 @@ SWIFT_OPTIMIZATION_LEVEL = "-Onone"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; + WARNING_CFLAGS = ( + "-Wall", + "-Wextra", + ); }; name = Debug; }; @@ -1355,6 +1359,10 @@ SWIFT_COMPILATION_MODE = wholemodule; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; + WARNING_CFLAGS = ( + "-Wall", + "-Wextra", + ); }; name = Release; }; From 1e13b0e235d6c25d6c97c05f149848521acf772f Mon Sep 17 00:00:00 2001 From: Stephen Booth Date: Sat, 7 Feb 2026 18:23:11 -0600 Subject: [PATCH 20/22] Update xcodeproj --- SFBAudioEngine.xcodeproj/project.pbxproj | 44 +++++++++++++++++++----- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index 0c7c25f08..b63aa7504 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -30,7 +30,6 @@ 3237E1A82CF7865A0084AA51 /* SFBAudioProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19E2CF785DD0084AA51 /* SFBAudioProperties.swift */; }; 3237E1AA2CF7865A0084AA51 /* SFBAudioPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19C2CF785DD0084AA51 /* SFBAudioPlayer.swift */; }; 3237E1AB2CF7865A0084AA51 /* SFBOutputSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1A02CF785DD0084AA51 /* SFBOutputSource.swift */; }; - 3237E1AC2CF7865A0084AA51 /* SFBReplayGainAnalyzer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1A12CF785DD0084AA51 /* SFBReplayGainAnalyzer.swift */; }; 3237E1AD2CF7865A0084AA51 /* SFBAudioMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19B2CF785DD0084AA51 /* SFBAudioMetadata.swift */; }; 3237E1AE2CF7865A0084AA51 /* SFBInputSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19F2CF785DD0084AA51 /* SFBInputSource.swift */; }; 3237E1AF2CF7865A0084AA51 /* SFBAudioEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19A2CF785DD0084AA51 /* SFBAudioEngine.swift */; }; @@ -53,7 +52,6 @@ 3237E1C12CF7868B0084AA51 /* SFBOggVorbisFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1732CF785DD0084AA51 /* SFBOggVorbisFile.mm */; }; 3237E1C22CF7868B0084AA51 /* SFBDoPDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0E32CF785DD0084AA51 /* SFBDoPDecoder.m */; }; 3237E1C32CF7868B0084AA51 /* SFBFLACDecoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0EC2CF785DD0084AA51 /* SFBFLACDecoder.mm */; }; - 3237E1C42CF7868B0084AA51 /* SFBReplayGainAnalyzer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0DA2CF785DD0084AA51 /* SFBReplayGainAnalyzer.m */; }; 3237E1C52CF7868B0084AA51 /* SFBAudioMetadata+TagLibAPETag.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E14E2CF785DD0084AA51 /* SFBAudioMetadata+TagLibAPETag.mm */; }; 3237E1C62CF7868B0084AA51 /* SFBDSFFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E15D2CF785DD0084AA51 /* SFBDSFFile.mm */; }; 3237E1C72CF7868B0084AA51 /* SFBMP4File.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1692CF785DD0084AA51 /* SFBMP4File.mm */; }; @@ -137,6 +135,13 @@ 3241D7D32EDCA88F0078AB9F /* CXXUnfairLock in Frameworks */ = {isa = PBXBuildFile; productRef = 3241D7D22EDCA88F0078AB9F /* CXXUnfairLock */; }; 3241D7D72EDCA8DC0078AB9F /* AudioPlayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3241D7D52EDCA8DC0078AB9F /* AudioPlayer.mm */; }; 3241D7D82EDCA8DC0078AB9F /* AudioPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3241D7D42EDCA8DC0078AB9F /* AudioPlayer.h */; }; + 325244A52F380CA50048625A /* ebur128_constants.h in Headers */ = {isa = PBXBuildFile; fileRef = 3252449F2F380CA50048625A /* ebur128_constants.h */; }; + 325244A62F380CA50048625A /* audio_data_access_patterns.h in Headers */ = {isa = PBXBuildFile; fileRef = 3252449C2F380CA50048625A /* audio_data_access_patterns.h */; }; + 325244A72F380CA50048625A /* k_weighting.h in Headers */ = {isa = PBXBuildFile; fileRef = 325244A02F380CA50048625A /* k_weighting.h */; }; + 325244A82F380CA50048625A /* ebur128_analyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3252449D2F380CA50048625A /* ebur128_analyzer.h */; }; + 325244AB2F380CA50048625A /* SFBReplayGainAnalyzer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 325244A42F380CA50048625A /* SFBReplayGainAnalyzer.mm */; }; + 325244AC2F380CA50048625A /* ebur128_analyzer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3252449E2F380CA50048625A /* ebur128_analyzer.cc */; }; + 325244AD2F380CA50048625A /* k_weighting.cc in Sources */ = {isa = PBXBuildFile; fileRef = 325244A12F380CA50048625A /* k_weighting.cc */; }; 328997AA2E117BB70083CD7D /* SFBShortenFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 328997A92E117BB70083CD7D /* SFBShortenFile.mm */; }; 328E81642CF7890700BFCEB2 /* sndfile in Frameworks */ = {isa = PBXBuildFile; productRef = 328E81632CF7890700BFCEB2 /* sndfile */; }; 328E81672CF7891A00BFCEB2 /* tta-cpp in Frameworks */ = {isa = PBXBuildFile; productRef = 328E81662CF7891A00BFCEB2 /* tta-cpp */; }; @@ -236,7 +241,6 @@ 321091D72F3178F20024A44F /* SFBASBDFormatDescription.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBASBDFormatDescription.h; sourceTree = ""; }; 321091D82F3178F20024A44F /* SFBASBDFormatDescription.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBASBDFormatDescription.m; sourceTree = ""; }; 3237E0CF2CF7855B0084AA51 /* SFBAudioEngine.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SFBAudioEngine.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3237E0DA2CF785DD0084AA51 /* SFBReplayGainAnalyzer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBReplayGainAnalyzer.m; sourceTree = ""; }; 3237E0DC2CF785DD0084AA51 /* SFBAudioConverter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioConverter.m; sourceTree = ""; }; 3237E0DD2CF785DD0084AA51 /* SFBAudioExporter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioExporter.m; sourceTree = ""; }; 3237E0DF2CF785DD0084AA51 /* SFBAudioDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioDecoder.m; sourceTree = ""; }; @@ -411,10 +415,16 @@ 3237E19E2CF785DD0084AA51 /* SFBAudioProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioProperties.swift; sourceTree = ""; }; 3237E19F2CF785DD0084AA51 /* SFBInputSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBInputSource.swift; sourceTree = ""; }; 3237E1A02CF785DD0084AA51 /* SFBOutputSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBOutputSource.swift; sourceTree = ""; }; - 3237E1A12CF785DD0084AA51 /* SFBReplayGainAnalyzer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBReplayGainAnalyzer.swift; sourceTree = ""; }; 3237E1A52CF785DD0084AA51 /* SFBAudioEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioEngineTests.swift; sourceTree = ""; }; 3241D7D42EDCA8DC0078AB9F /* AudioPlayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioPlayer.h; sourceTree = ""; }; 3241D7D52EDCA8DC0078AB9F /* AudioPlayer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AudioPlayer.mm; sourceTree = ""; }; + 3252449C2F380CA50048625A /* audio_data_access_patterns.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = audio_data_access_patterns.h; sourceTree = ""; }; + 3252449D2F380CA50048625A /* ebur128_analyzer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ebur128_analyzer.h; sourceTree = ""; }; + 3252449E2F380CA50048625A /* ebur128_analyzer.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ebur128_analyzer.cc; sourceTree = ""; }; + 3252449F2F380CA50048625A /* ebur128_constants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ebur128_constants.h; sourceTree = ""; }; + 325244A02F380CA50048625A /* k_weighting.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = k_weighting.h; sourceTree = ""; }; + 325244A12F380CA50048625A /* k_weighting.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = k_weighting.cc; sourceTree = ""; }; + 325244A42F380CA50048625A /* SFBReplayGainAnalyzer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBReplayGainAnalyzer.mm; sourceTree = ""; }; 328997A92E117BB70083CD7D /* SFBShortenFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBShortenFile.mm; sourceTree = ""; }; 328E81692CF7898C00BFCEB2 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.1.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; 328E816B2CF789A800BFCEB2 /* UniformTypeIdentifiers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UniformTypeIdentifiers.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.1.sdk/System/Library/Frameworks/UniformTypeIdentifiers.framework; sourceTree = DEVELOPER_DIR; }; @@ -486,7 +496,8 @@ 3237E0DB2CF785DD0084AA51 /* Analysis */ = { isa = PBXGroup; children = ( - 3237E0DA2CF785DD0084AA51 /* SFBReplayGainAnalyzer.m */, + 325244A32F380CA50048625A /* loudness_ebur128 */, + 325244A42F380CA50048625A /* SFBReplayGainAnalyzer.mm */, ); path = Analysis; sourceTree = ""; @@ -778,7 +789,6 @@ 3237E1A02CF785DD0084AA51 /* SFBOutputSource.swift */, 32B6CAB12D5318880093855B /* SFBPlaybackPosition.swift */, 32B6CAB22D5318880093855B /* SFBPlaybackTime.swift */, - 3237E1A12CF785DD0084AA51 /* SFBReplayGainAnalyzer.swift */, ); path = SFBAudioEngine; sourceTree = ""; @@ -808,6 +818,19 @@ path = Tests; sourceTree = ""; }; + 325244A32F380CA50048625A /* loudness_ebur128 */ = { + isa = PBXGroup; + children = ( + 3252449C2F380CA50048625A /* audio_data_access_patterns.h */, + 3252449D2F380CA50048625A /* ebur128_analyzer.h */, + 3252449E2F380CA50048625A /* ebur128_analyzer.cc */, + 3252449F2F380CA50048625A /* ebur128_constants.h */, + 325244A02F380CA50048625A /* k_weighting.h */, + 325244A12F380CA50048625A /* k_weighting.cc */, + ); + path = loudness_ebur128; + sourceTree = ""; + }; 328E81682CF7898C00BFCEB2 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -925,6 +948,10 @@ 329625AA2F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.h in Headers */, 32F6E5C32D2B031D0029B972 /* NSFileHandle+SFBHeaderReading.h in Headers */, 32F6E5C42D2B031D0029B972 /* SFBCStringForOSType.h in Headers */, + 325244A52F380CA50048625A /* ebur128_constants.h in Headers */, + 325244A62F380CA50048625A /* audio_data_access_patterns.h in Headers */, + 325244A72F380CA50048625A /* k_weighting.h in Headers */, + 325244A82F380CA50048625A /* ebur128_analyzer.h in Headers */, 32F6E5C52D2B031D0029B972 /* SFBTernaryTruthValue.h in Headers */, 3237E2172CF786BA0084AA51 /* SFBDoPDecoder.h in Headers */, 3237E2182CF786BA0084AA51 /* SFBAudioEncoder.h in Headers */, @@ -1065,7 +1092,9 @@ 3237E1C12CF7868B0084AA51 /* SFBOggVorbisFile.mm in Sources */, 3237E1C22CF7868B0084AA51 /* SFBDoPDecoder.m in Sources */, 3237E1C32CF7868B0084AA51 /* SFBFLACDecoder.mm in Sources */, - 3237E1C42CF7868B0084AA51 /* SFBReplayGainAnalyzer.m in Sources */, + 325244AB2F380CA50048625A /* SFBReplayGainAnalyzer.mm in Sources */, + 325244AC2F380CA50048625A /* ebur128_analyzer.cc in Sources */, + 325244AD2F380CA50048625A /* k_weighting.cc in Sources */, 3237E1C52CF7868B0084AA51 /* SFBAudioMetadata+TagLibAPETag.mm in Sources */, 32B6CAB32D5318880093855B /* SFBPlaybackTime.swift in Sources */, 32B6CAB42D5318880093855B /* SFBPlaybackPosition.swift in Sources */, @@ -1132,7 +1161,6 @@ 3237E1FF2CF7868B0084AA51 /* SFBOggOpusEncoder.mm in Sources */, 3237E2002CF7868B0084AA51 /* SFBMP3Encoder.mm in Sources */, 3237E1AB2CF7865A0084AA51 /* SFBOutputSource.swift in Sources */, - 3237E1AC2CF7865A0084AA51 /* SFBReplayGainAnalyzer.swift in Sources */, 3237E1AD2CF7865A0084AA51 /* SFBAudioMetadata.swift in Sources */, 3237E1AE2CF7865A0084AA51 /* SFBInputSource.swift in Sources */, 3237E1AF2CF7865A0084AA51 /* SFBAudioEngine.swift in Sources */, From cde1e48cd2708b5984fbc43825c4324da06f34bd Mon Sep 17 00:00:00 2001 From: Stephen Booth Date: Wed, 11 Feb 2026 14:39:15 -0600 Subject: [PATCH 21/22] Update project file --- SFBAudioEngine.xcodeproj/project.pbxproj | 84 +++++++++++++----------- 1 file changed, 44 insertions(+), 40 deletions(-) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index b63aa7504..1a251f5ad 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -29,7 +29,6 @@ 322CE3562CF788360070996C /* opus in Frameworks */ = {isa = PBXBuildFile; productRef = 322CE3552CF788360070996C /* opus */; }; 3237E1A82CF7865A0084AA51 /* SFBAudioProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19E2CF785DD0084AA51 /* SFBAudioProperties.swift */; }; 3237E1AA2CF7865A0084AA51 /* SFBAudioPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19C2CF785DD0084AA51 /* SFBAudioPlayer.swift */; }; - 3237E1AB2CF7865A0084AA51 /* SFBOutputSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1A02CF785DD0084AA51 /* SFBOutputSource.swift */; }; 3237E1AD2CF7865A0084AA51 /* SFBAudioMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19B2CF785DD0084AA51 /* SFBAudioMetadata.swift */; }; 3237E1AE2CF7865A0084AA51 /* SFBInputSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19F2CF785DD0084AA51 /* SFBInputSource.swift */; }; 3237E1AF2CF7865A0084AA51 /* SFBAudioEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3237E19A2CF785DD0084AA51 /* SFBAudioEngine.swift */; }; @@ -58,7 +57,6 @@ 3237E1C82CF7868B0084AA51 /* NSFileHandle+SFBHeaderReading.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1952CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.m */; }; 3237E1CA2CF7868B0084AA51 /* SFBWAVEFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E17D2CF785DD0084AA51 /* SFBWAVEFile.mm */; }; 3237E1CC2CF7868B0084AA51 /* SFBDSDIFFFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E15B2CF785DD0084AA51 /* SFBDSDIFFFile.mm */; }; - 3237E1CD2CF7868B0084AA51 /* SFBMutableDataOutputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1872CF785DD0084AA51 /* SFBMutableDataOutputSource.m */; }; 3237E1CE2CF7868B0084AA51 /* SFBAudioMetadata+TagLibXiphComment.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1582CF785DD0084AA51 /* SFBAudioMetadata+TagLibXiphComment.mm */; }; 3237E1CF2CF7868B0084AA51 /* SFBDSDDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0E42CF785DD0084AA51 /* SFBDSDDecoder.m */; }; 3237E1D02CF7868B0084AA51 /* SFBShortenDecoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0FF2CF785DD0084AA51 /* SFBShortenDecoder.mm */; }; @@ -67,7 +65,6 @@ 3237E1D32CF7868B0084AA51 /* SFBOggFLACFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E16D2CF785DD0084AA51 /* SFBOggFLACFile.mm */; }; 3237E1D42CF7868B0084AA51 /* SFBFLACFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1612CF785DD0084AA51 /* SFBFLACFile.mm */; }; 3237E1D52CF7868B0084AA51 /* SFBAudioDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0DF2CF785DD0084AA51 /* SFBAudioDecoder.m */; }; - 3237E1D62CF7868B0084AA51 /* SFBOutputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1882CF785DD0084AA51 /* SFBOutputSource.m */; }; 3237E1D72CF7868B0084AA51 /* SFBDataInputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E13B2CF785DD0084AA51 /* SFBDataInputSource.m */; }; 3237E1D82CF7868B0084AA51 /* SFBInputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1402CF785DD0084AA51 /* SFBInputSource.m */; }; 3237E1D92CF7868B0084AA51 /* SFBFLACEncoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E10A2CF785DD0084AA51 /* SFBFLACEncoder.mm */; }; @@ -83,13 +80,11 @@ 3237E1E42CF7868B0084AA51 /* SFBOggOpusFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E16F2CF785DD0084AA51 /* SFBOggOpusFile.mm */; }; 3237E1E52CF7868B0084AA51 /* SFBExtendedModuleFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E15F2CF785DD0084AA51 /* SFBExtendedModuleFile.mm */; }; 3237E1E62CF7868B0084AA51 /* SFBAudioMetadata+TagLibID3v1Tag.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1502CF785DD0084AA51 /* SFBAudioMetadata+TagLibID3v1Tag.mm */; }; - 3237E1E72CF7868B0084AA51 /* SFBBufferOutputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1832CF785DD0084AA51 /* SFBBufferOutputSource.m */; }; 3237E1E82CF7868B0084AA51 /* SFBWavPackFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E17F2CF785DD0084AA51 /* SFBWavPackFile.mm */; }; 3237E1E92CF7868B0084AA51 /* SFBDSDIFFDecoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0E72CF785DD0084AA51 /* SFBDSDIFFDecoder.mm */; }; 3237E1EA2CF7868B0084AA51 /* SFBModuleDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0F12CF785DD0084AA51 /* SFBModuleDecoder.m */; }; 3237E1EB2CF7868B0084AA51 /* SFBWavPackEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E11E2CF785DD0084AA51 /* SFBWavPackEncoder.m */; }; 3237E1EC2CF7868B0084AA51 /* SFBMonkeysAudioFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1652CF785DD0084AA51 /* SFBMonkeysAudioFile.mm */; }; - 3237E1ED2CF7868B0084AA51 /* SFBFileOutputSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1852CF785DD0084AA51 /* SFBFileOutputSource.m */; }; 3237E1EE2CF7868B0084AA51 /* SFBMusepackDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0F72CF785DD0084AA51 /* SFBMusepackDecoder.m */; }; 3237E1EF2CF7868B0084AA51 /* SFBTrueAudioFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E17B2CF785DD0084AA51 /* SFBTrueAudioFile.mm */; }; 3237E1F02CF7868B0084AA51 /* SFBProTrackerModuleFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1752CF785DD0084AA51 /* SFBProTrackerModuleFile.mm */; }; @@ -108,7 +103,6 @@ 3237E1FE2CF7868B0084AA51 /* SFBDSFDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3237E0EA2CF785DD0084AA51 /* SFBDSFDecoder.m */; }; 3237E1FF2CF7868B0084AA51 /* SFBOggOpusEncoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1162CF785DD0084AA51 /* SFBOggOpusEncoder.mm */; }; 3237E2002CF7868B0084AA51 /* SFBMP3Encoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3237E1102CF785DD0084AA51 /* SFBMP3Encoder.mm */; }; - 3237E2022CF786BA0084AA51 /* SFBOutputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1342CF785DD0084AA51 /* SFBOutputSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3237E2032CF786BA0084AA51 /* SFBAudioEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1252CF785DD0084AA51 /* SFBAudioEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3237E2042CF786BA0084AA51 /* SFBDSDPCMDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1312CF785DD0084AA51 /* SFBDSDPCMDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3237E2052CF786BA0084AA51 /* SFBPCMDecoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1352CF785DD0084AA51 /* SFBPCMDecoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -153,6 +147,17 @@ 329625AA2F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 329625A52F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.h */; }; 329625AB2F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = 329625A62F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.m */; }; 329625AC2F19F5B9008EEF6E /* SFBLocalizedNameForURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 329625A82F19F5B9008EEF6E /* SFBLocalizedNameForURL.m */; }; + 32AAA1192F3D1F9600959CE5 /* SFBOutputTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AAA1182F3D1F9600959CE5 /* SFBOutputTarget.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 32AAA1222F3D1FAE00959CE5 /* SFBFileOutputTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AAA11C2F3D1FAE00959CE5 /* SFBFileOutputTarget.h */; }; + 32AAA1232F3D1FAE00959CE5 /* SFBBufferOutputTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AAA11A2F3D1FAE00959CE5 /* SFBBufferOutputTarget.h */; }; + 32AAA1242F3D1FAE00959CE5 /* SFBMutableDataOutputTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AAA11E2F3D1FAE00959CE5 /* SFBMutableDataOutputTarget.h */; }; + 32AAA1252F3D1FAE00959CE5 /* SFBOutputTarget+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AAA1212F3D1FAE00959CE5 /* SFBOutputTarget+Internal.h */; }; + 32AAA1262F3D1FAE00959CE5 /* SFBMutableDataOutputTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 32AAA11F2F3D1FAE00959CE5 /* SFBMutableDataOutputTarget.m */; }; + 32AAA1272F3D1FAE00959CE5 /* SFBOutputTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 32AAA1202F3D1FAE00959CE5 /* SFBOutputTarget.m */; }; + 32AAA1282F3D1FAE00959CE5 /* SFBBufferOutputTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 32AAA11B2F3D1FAE00959CE5 /* SFBBufferOutputTarget.m */; }; + 32AAA1292F3D1FAE00959CE5 /* SFBFileOutputTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 32AAA11D2F3D1FAE00959CE5 /* SFBFileOutputTarget.m */; }; + 32AAA12B2F3D1FC800959CE5 /* bitmask_enum.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 32AAA12A2F3D1FC800959CE5 /* bitmask_enum.hpp */; }; + 32AAA12D2F3D1FF900959CE5 /* SFBOutputTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32AAA12C2F3D1FF900959CE5 /* SFBOutputTarget.swift */; }; 32B6CAB32D5318880093855B /* SFBPlaybackTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B6CAB22D5318880093855B /* SFBPlaybackTime.swift */; }; 32B6CAB42D5318880093855B /* SFBPlaybackPosition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B6CAB12D5318880093855B /* SFBPlaybackPosition.swift */; }; 32B6CAB62D5318AF0093855B /* SFBAudioEngineTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 32B6CAB52D5318AF0093855B /* SFBAudioEngineTypes.m */; }; @@ -162,10 +167,6 @@ 32F6E5C32D2B031D0029B972 /* NSFileHandle+SFBHeaderReading.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1942CF785DD0084AA51 /* NSFileHandle+SFBHeaderReading.h */; }; 32F6E5C42D2B031D0029B972 /* SFBCStringForOSType.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1962CF785DD0084AA51 /* SFBCStringForOSType.h */; }; 32F6E5C52D2B031D0029B972 /* SFBTernaryTruthValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1972CF785DD0084AA51 /* SFBTernaryTruthValue.h */; }; - 32F6E5C82D2B033E0029B972 /* SFBOutputSource+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1892CF785DD0084AA51 /* SFBOutputSource+Internal.h */; }; - 32F6E5C92D2B033E0029B972 /* SFBMutableDataOutputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1862CF785DD0084AA51 /* SFBMutableDataOutputSource.h */; }; - 32F6E5CA2D2B033E0029B972 /* SFBFileOutputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1842CF785DD0084AA51 /* SFBFileOutputSource.h */; }; - 32F6E5CB2D2B033E0029B972 /* SFBBufferOutputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E1822CF785DD0084AA51 /* SFBBufferOutputSource.h */; }; 32F6E5CC2D2B03630029B972 /* SFBMonkeysAudioDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0F22CF785DD0084AA51 /* SFBMonkeysAudioDecoder.h */; }; 32F6E5CD2D2B03630029B972 /* SFBDSDDecoder+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0E52CF785DD0084AA51 /* SFBDSDDecoder+Internal.h */; }; 32F6E5CE2D2B03630029B972 /* SFBFLACDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3237E0EB2CF785DD0084AA51 /* SFBFLACDecoder.h */; }; @@ -321,7 +322,6 @@ 3237E1302CF785DD0084AA51 /* SFBDSDDecoding.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBDSDDecoding.h; sourceTree = ""; }; 3237E1312CF785DD0084AA51 /* SFBDSDPCMDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBDSDPCMDecoder.h; sourceTree = ""; }; 3237E1322CF785DD0084AA51 /* SFBInputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBInputSource.h; sourceTree = ""; }; - 3237E1342CF785DD0084AA51 /* SFBOutputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBOutputSource.h; sourceTree = ""; }; 3237E1352CF785DD0084AA51 /* SFBPCMDecoding.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBPCMDecoding.h; sourceTree = ""; }; 3237E1362CF785DD0084AA51 /* SFBPCMEncoding.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBPCMEncoding.h; sourceTree = ""; }; 3237E1372CF785DD0084AA51 /* SFBReplayGainAnalyzer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBReplayGainAnalyzer.h; sourceTree = ""; }; @@ -394,14 +394,6 @@ 3237E17E2CF785DD0084AA51 /* SFBWavPackFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBWavPackFile.h; sourceTree = ""; }; 3237E17F2CF785DD0084AA51 /* SFBWavPackFile.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBWavPackFile.mm; sourceTree = ""; }; 3237E1802CF785DD0084AA51 /* TagLibStringUtilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TagLibStringUtilities.h; sourceTree = ""; }; - 3237E1822CF785DD0084AA51 /* SFBBufferOutputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBBufferOutputSource.h; sourceTree = ""; }; - 3237E1832CF785DD0084AA51 /* SFBBufferOutputSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBBufferOutputSource.m; sourceTree = ""; }; - 3237E1842CF785DD0084AA51 /* SFBFileOutputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBFileOutputSource.h; sourceTree = ""; }; - 3237E1852CF785DD0084AA51 /* SFBFileOutputSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBFileOutputSource.m; sourceTree = ""; }; - 3237E1862CF785DD0084AA51 /* SFBMutableDataOutputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBMutableDataOutputSource.h; sourceTree = ""; }; - 3237E1872CF785DD0084AA51 /* SFBMutableDataOutputSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBMutableDataOutputSource.m; sourceTree = ""; }; - 3237E1882CF785DD0084AA51 /* SFBOutputSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBOutputSource.m; sourceTree = ""; }; - 3237E1892CF785DD0084AA51 /* SFBOutputSource+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBOutputSource+Internal.h"; sourceTree = ""; }; 3237E18B2CF785DD0084AA51 /* SFBAudioPlayer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SFBAudioPlayer.mm; sourceTree = ""; }; 3237E1902CF785DD0084AA51 /* NSData+SFBExtensions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSData+SFBExtensions.h"; sourceTree = ""; }; 3237E1912CF785DD0084AA51 /* NSData+SFBExtensions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSData+SFBExtensions.m"; sourceTree = ""; }; @@ -414,7 +406,6 @@ 3237E19C2CF785DD0084AA51 /* SFBAudioPlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioPlayer.swift; sourceTree = ""; }; 3237E19E2CF785DD0084AA51 /* SFBAudioProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioProperties.swift; sourceTree = ""; }; 3237E19F2CF785DD0084AA51 /* SFBInputSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBInputSource.swift; sourceTree = ""; }; - 3237E1A02CF785DD0084AA51 /* SFBOutputSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBOutputSource.swift; sourceTree = ""; }; 3237E1A52CF785DD0084AA51 /* SFBAudioEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBAudioEngineTests.swift; sourceTree = ""; }; 3241D7D42EDCA8DC0078AB9F /* AudioPlayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioPlayer.h; sourceTree = ""; }; 3241D7D52EDCA8DC0078AB9F /* AudioPlayer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AudioPlayer.mm; sourceTree = ""; }; @@ -434,6 +425,17 @@ 329625A62F19F5B9008EEF6E /* SFBErrorWithLocalizedDescription.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBErrorWithLocalizedDescription.m; sourceTree = ""; }; 329625A72F19F5B9008EEF6E /* SFBLocalizedNameForURL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBLocalizedNameForURL.h; sourceTree = ""; }; 329625A82F19F5B9008EEF6E /* SFBLocalizedNameForURL.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBLocalizedNameForURL.m; sourceTree = ""; }; + 32AAA1182F3D1F9600959CE5 /* SFBOutputTarget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBOutputTarget.h; sourceTree = ""; }; + 32AAA11A2F3D1FAE00959CE5 /* SFBBufferOutputTarget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBBufferOutputTarget.h; sourceTree = ""; }; + 32AAA11B2F3D1FAE00959CE5 /* SFBBufferOutputTarget.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBBufferOutputTarget.m; sourceTree = ""; }; + 32AAA11C2F3D1FAE00959CE5 /* SFBFileOutputTarget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBFileOutputTarget.h; sourceTree = ""; }; + 32AAA11D2F3D1FAE00959CE5 /* SFBFileOutputTarget.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBFileOutputTarget.m; sourceTree = ""; }; + 32AAA11E2F3D1FAE00959CE5 /* SFBMutableDataOutputTarget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SFBMutableDataOutputTarget.h; sourceTree = ""; }; + 32AAA11F2F3D1FAE00959CE5 /* SFBMutableDataOutputTarget.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBMutableDataOutputTarget.m; sourceTree = ""; }; + 32AAA1202F3D1FAE00959CE5 /* SFBOutputTarget.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBOutputTarget.m; sourceTree = ""; }; + 32AAA1212F3D1FAE00959CE5 /* SFBOutputTarget+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SFBOutputTarget+Internal.h"; sourceTree = ""; }; + 32AAA12A2F3D1FC800959CE5 /* bitmask_enum.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = bitmask_enum.hpp; sourceTree = ""; }; + 32AAA12C2F3D1FF900959CE5 /* SFBOutputTarget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBOutputTarget.swift; sourceTree = ""; }; 32B6CAB12D5318880093855B /* SFBPlaybackPosition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBPlaybackPosition.swift; sourceTree = ""; }; 32B6CAB22D5318880093855B /* SFBPlaybackTime.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFBPlaybackTime.swift; sourceTree = ""; }; 32B6CAB52D5318AF0093855B /* SFBAudioEngineTypes.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SFBAudioEngineTypes.m; sourceTree = ""; }; @@ -608,7 +610,7 @@ 3237E1302CF785DD0084AA51 /* SFBDSDDecoding.h */, 3237E1312CF785DD0084AA51 /* SFBDSDPCMDecoder.h */, 3237E1322CF785DD0084AA51 /* SFBInputSource.h */, - 3237E1342CF785DD0084AA51 /* SFBOutputSource.h */, + 32AAA1182F3D1F9600959CE5 /* SFBOutputTarget.h */, 3237E1352CF785DD0084AA51 /* SFBPCMDecoding.h */, 3237E1362CF785DD0084AA51 /* SFBPCMEncoding.h */, 3237E1372CF785DD0084AA51 /* SFBReplayGainAnalyzer.h */, @@ -711,14 +713,14 @@ 3237E18A2CF785DD0084AA51 /* Output */ = { isa = PBXGroup; children = ( - 3237E1822CF785DD0084AA51 /* SFBBufferOutputSource.h */, - 3237E1832CF785DD0084AA51 /* SFBBufferOutputSource.m */, - 3237E1842CF785DD0084AA51 /* SFBFileOutputSource.h */, - 3237E1852CF785DD0084AA51 /* SFBFileOutputSource.m */, - 3237E1862CF785DD0084AA51 /* SFBMutableDataOutputSource.h */, - 3237E1872CF785DD0084AA51 /* SFBMutableDataOutputSource.m */, - 3237E1882CF785DD0084AA51 /* SFBOutputSource.m */, - 3237E1892CF785DD0084AA51 /* SFBOutputSource+Internal.h */, + 32AAA11A2F3D1FAE00959CE5 /* SFBBufferOutputTarget.h */, + 32AAA11B2F3D1FAE00959CE5 /* SFBBufferOutputTarget.m */, + 32AAA11C2F3D1FAE00959CE5 /* SFBFileOutputTarget.h */, + 32AAA11D2F3D1FAE00959CE5 /* SFBFileOutputTarget.m */, + 32AAA11E2F3D1FAE00959CE5 /* SFBMutableDataOutputTarget.h */, + 32AAA11F2F3D1FAE00959CE5 /* SFBMutableDataOutputTarget.m */, + 32AAA1202F3D1FAE00959CE5 /* SFBOutputTarget.m */, + 32AAA1212F3D1FAE00959CE5 /* SFBOutputTarget+Internal.h */, ); path = Output; sourceTree = ""; @@ -728,6 +730,7 @@ children = ( 3241D7D42EDCA8DC0078AB9F /* AudioPlayer.h */, 3241D7D52EDCA8DC0078AB9F /* AudioPlayer.mm */, + 32AAA12A2F3D1FC800959CE5 /* bitmask_enum.hpp */, 32FBE0452F2423EF001852DE /* host_time.hpp */, 3237E18B2CF785DD0084AA51 /* SFBAudioPlayer.mm */, 32FBE0462F2423EF001852DE /* SFBAudioPlayer+Internal.h */, @@ -786,7 +789,7 @@ 3237E19C2CF785DD0084AA51 /* SFBAudioPlayer.swift */, 3237E19E2CF785DD0084AA51 /* SFBAudioProperties.swift */, 3237E19F2CF785DD0084AA51 /* SFBInputSource.swift */, - 3237E1A02CF785DD0084AA51 /* SFBOutputSource.swift */, + 32AAA12C2F3D1FF900959CE5 /* SFBOutputTarget.swift */, 32B6CAB12D5318880093855B /* SFBPlaybackPosition.swift */, 32B6CAB22D5318880093855B /* SFBPlaybackTime.swift */, ); @@ -853,6 +856,7 @@ 32F6E5DF2D2B03770029B972 /* SFBOggSpeexEncoder.h in Headers */, 32F6E5E02D2B03770029B972 /* SFBWavPackEncoder.h in Headers */, 32F6E5E12D2B03770029B972 /* SFBCoreAudioEncoder.h in Headers */, + 32AAA12B2F3D1FC800959CE5 /* bitmask_enum.hpp in Headers */, 32F6E5E22D2B03770029B972 /* SFBMusepackEncoder.h in Headers */, 32F6E5E32D2B03770029B972 /* SFBMP3Encoder.h in Headers */, 32F6E5E42D2B03770029B972 /* SFBTrueAudioEncoder.h in Headers */, @@ -860,7 +864,6 @@ 32F6E5E62D2B03770029B972 /* SFBMonkeysAudioEncoder.h in Headers */, 32F6E5E72D2B03770029B972 /* SFBLibsndfileEncoder.h in Headers */, 32F6E5E82D2B03770029B972 /* SFBOggVorbisEncoder.h in Headers */, - 3237E2022CF786BA0084AA51 /* SFBOutputSource.h in Headers */, 3237E2032CF786BA0084AA51 /* SFBAudioEncoding.h in Headers */, 32F6E5CC2D2B03630029B972 /* SFBMonkeysAudioDecoder.h in Headers */, 32F6E5CD2D2B03630029B972 /* SFBDSDDecoder+Internal.h in Headers */, @@ -878,6 +881,7 @@ 32F6E5EB2D2B03DA0029B972 /* SFBFileInputSource.h in Headers */, 32F6E5EC2D2B03DA0029B972 /* SFBDataInputSource.h in Headers */, 32F6E5ED2D2B03DA0029B972 /* SFBMemoryMappedFileInputSource.h in Headers */, + 32AAA1192F3D1F9600959CE5 /* SFBOutputTarget.h in Headers */, 32F6E5D72D2B03630029B972 /* SFBShortenDecoder.h in Headers */, 32F6E5D82D2B03630029B972 /* SFBLibsndfileDecoder.h in Headers */, 32F6E5D92D2B03630029B972 /* SFBCoreAudioDecoder.h in Headers */, @@ -910,6 +914,10 @@ 32F6E5F12D2B04030029B972 /* SFBOggOpusFile.h in Headers */, 32F6E5F22D2B04030029B972 /* SFBImpulseTrackerModuleFile.h in Headers */, 32F6E5F32D2B04030029B972 /* SFBAudioMetadata+TagLibMP4Tag.h in Headers */, + 32AAA1222F3D1FAE00959CE5 /* SFBFileOutputTarget.h in Headers */, + 32AAA1232F3D1FAE00959CE5 /* SFBBufferOutputTarget.h in Headers */, + 32AAA1242F3D1FAE00959CE5 /* SFBMutableDataOutputTarget.h in Headers */, + 32AAA1252F3D1FAE00959CE5 /* SFBOutputTarget+Internal.h in Headers */, 32F6E5F42D2B04030029B972 /* SFBProTrackerModuleFile.h in Headers */, 32F6E5F52D2B04030029B972 /* SFBShortenFile.h in Headers */, 32F6E5F62D2B04030029B972 /* SFBExtendedModuleFile.h in Headers */, @@ -936,10 +944,6 @@ 32F6E6082D2B04030029B972 /* SFBAudioMetadata+TagLibAPETag.h in Headers */, 32F6E6092D2B04030029B972 /* SFBMP4File.h in Headers */, 32F6E60A2D2B04030029B972 /* SFBWAVEFile.h in Headers */, - 32F6E5C82D2B033E0029B972 /* SFBOutputSource+Internal.h in Headers */, - 32F6E5C92D2B033E0029B972 /* SFBMutableDataOutputSource.h in Headers */, - 32F6E5CA2D2B033E0029B972 /* SFBFileOutputSource.h in Headers */, - 32F6E5CB2D2B033E0029B972 /* SFBBufferOutputSource.h in Headers */, 3237E2142CF786BA0084AA51 /* SFBAudioDecoder.h in Headers */, 3237E2152CF786BA0084AA51 /* SFBAudioConverter.h in Headers */, 3237E2162CF786BA0084AA51 /* SFBReplayGainAnalyzer.h in Headers */, @@ -1097,13 +1101,13 @@ 325244AD2F380CA50048625A /* k_weighting.cc in Sources */, 3237E1C52CF7868B0084AA51 /* SFBAudioMetadata+TagLibAPETag.mm in Sources */, 32B6CAB32D5318880093855B /* SFBPlaybackTime.swift in Sources */, + 32AAA12D2F3D1FF900959CE5 /* SFBOutputTarget.swift in Sources */, 32B6CAB42D5318880093855B /* SFBPlaybackPosition.swift in Sources */, 3237E1C62CF7868B0084AA51 /* SFBDSFFile.mm in Sources */, 3237E1C72CF7868B0084AA51 /* SFBMP4File.mm in Sources */, 3237E1C82CF7868B0084AA51 /* NSFileHandle+SFBHeaderReading.m in Sources */, 3237E1CA2CF7868B0084AA51 /* SFBWAVEFile.mm in Sources */, 3237E1CC2CF7868B0084AA51 /* SFBDSDIFFFile.mm in Sources */, - 3237E1CD2CF7868B0084AA51 /* SFBMutableDataOutputSource.m in Sources */, 3237E1CE2CF7868B0084AA51 /* SFBAudioMetadata+TagLibXiphComment.mm in Sources */, 3237E1CF2CF7868B0084AA51 /* SFBDSDDecoder.m in Sources */, 32B6CAB62D5318AF0093855B /* SFBAudioEngineTypes.m in Sources */, @@ -1113,8 +1117,11 @@ 3237E1D22CF7868B0084AA51 /* SFBScreamTracker3ModuleFile.mm in Sources */, 3237E1D32CF7868B0084AA51 /* SFBOggFLACFile.mm in Sources */, 3237E1D42CF7868B0084AA51 /* SFBFLACFile.mm in Sources */, + 32AAA1262F3D1FAE00959CE5 /* SFBMutableDataOutputTarget.m in Sources */, + 32AAA1272F3D1FAE00959CE5 /* SFBOutputTarget.m in Sources */, + 32AAA1282F3D1FAE00959CE5 /* SFBBufferOutputTarget.m in Sources */, + 32AAA1292F3D1FAE00959CE5 /* SFBFileOutputTarget.m in Sources */, 3237E1D52CF7868B0084AA51 /* SFBAudioDecoder.m in Sources */, - 3237E1D62CF7868B0084AA51 /* SFBOutputSource.m in Sources */, 3237E1D72CF7868B0084AA51 /* SFBDataInputSource.m in Sources */, 3237E1D82CF7868B0084AA51 /* SFBInputSource.m in Sources */, 3237E1D92CF7868B0084AA51 /* SFBFLACEncoder.mm in Sources */, @@ -1132,13 +1139,11 @@ 3237E1E42CF7868B0084AA51 /* SFBOggOpusFile.mm in Sources */, 3237E1E52CF7868B0084AA51 /* SFBExtendedModuleFile.mm in Sources */, 3237E1E62CF7868B0084AA51 /* SFBAudioMetadata+TagLibID3v1Tag.mm in Sources */, - 3237E1E72CF7868B0084AA51 /* SFBBufferOutputSource.m in Sources */, 3237E1E82CF7868B0084AA51 /* SFBWavPackFile.mm in Sources */, 3237E1E92CF7868B0084AA51 /* SFBDSDIFFDecoder.mm in Sources */, 3237E1EA2CF7868B0084AA51 /* SFBModuleDecoder.m in Sources */, 3237E1EB2CF7868B0084AA51 /* SFBWavPackEncoder.m in Sources */, 3237E1EC2CF7868B0084AA51 /* SFBMonkeysAudioFile.mm in Sources */, - 3237E1ED2CF7868B0084AA51 /* SFBFileOutputSource.m in Sources */, 3237E1EE2CF7868B0084AA51 /* SFBMusepackDecoder.m in Sources */, 3237E1EF2CF7868B0084AA51 /* SFBTrueAudioFile.mm in Sources */, 321091DD2F3178F20024A44F /* SFBACLDescription.m in Sources */, @@ -1160,7 +1165,6 @@ 3237E1FE2CF7868B0084AA51 /* SFBDSFDecoder.m in Sources */, 3237E1FF2CF7868B0084AA51 /* SFBOggOpusEncoder.mm in Sources */, 3237E2002CF7868B0084AA51 /* SFBMP3Encoder.mm in Sources */, - 3237E1AB2CF7865A0084AA51 /* SFBOutputSource.swift in Sources */, 3237E1AD2CF7865A0084AA51 /* SFBAudioMetadata.swift in Sources */, 3237E1AE2CF7865A0084AA51 /* SFBInputSource.swift in Sources */, 3237E1AF2CF7865A0084AA51 /* SFBAudioEngine.swift in Sources */, From c24849e741db961df37036cc3fa286159798c736 Mon Sep 17 00:00:00 2001 From: Stephen Booth Date: Sun, 5 Apr 2026 07:39:24 -0500 Subject: [PATCH 22/22] Update package dependencies --- SFBAudioEngine.xcodeproj/project.pbxproj | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/SFBAudioEngine.xcodeproj/project.pbxproj b/SFBAudioEngine.xcodeproj/project.pbxproj index 1a251f5ad..b03263ed0 100644 --- a/SFBAudioEngine.xcodeproj/project.pbxproj +++ b/SFBAudioEngine.xcodeproj/project.pbxproj @@ -1427,7 +1427,7 @@ repositoryURL = "https://github.com/sbooth/CXXDispatchSemaphore"; requirement = { kind = upToNextMinorVersion; - minimumVersion = 0.4.0; + minimumVersion = 0.4.1; }; }; 321091E22F3179A60024A44F /* XCRemoteSwiftPackageReference "CXXAudioRingBuffer" */ = { @@ -1435,7 +1435,7 @@ repositoryURL = "https://github.com/sbooth/CXXAudioRingBuffer"; requirement = { kind = upToNextMinorVersion; - minimumVersion = 0.1.0; + minimumVersion = 0.1.1; }; }; 321C18AF2CF7886000670824 /* XCRemoteSwiftPackageReference "vorbis-binary-xcframework" */ = { @@ -1539,7 +1539,7 @@ repositoryURL = "https://github.com/sbooth/AVFAudioExtensions"; requirement = { kind = upToNextMinorVersion; - minimumVersion = 0.5.0; + minimumVersion = 0.5.1; }; }; 3241D7CE2EDCA8830078AB9F /* XCRemoteSwiftPackageReference "CXXRingBuffer" */ = { @@ -1547,7 +1547,7 @@ repositoryURL = "https://github.com/sbooth/CXXRingBuffer"; requirement = { kind = upToNextMinorVersion; - minimumVersion = 0.6.0; + minimumVersion = 0.6.1; }; }; 3241D7D12EDCA88F0078AB9F /* XCRemoteSwiftPackageReference "CXXUnfairLock" */ = { @@ -1555,7 +1555,7 @@ repositoryURL = "https://github.com/sbooth/CXXUnfairLock"; requirement = { kind = upToNextMinorVersion; - minimumVersion = 0.3.0; + minimumVersion = 0.3.1; }; }; 328E81622CF7890700BFCEB2 /* XCRemoteSwiftPackageReference "sndfile-binary-xcframework" */ = {