SDL_mixer: playmus and playwave are working on macOS, iOS, and tvOS

From bf0022fe006efab4bd91b748023906e71824e198 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Mon, 2 May 2022 09:57:51 -0700
Subject: [PATCH] playmus and playwave are working on macOS, iOS, and tvOS

---
 .../playmus/playmus.xcodeproj/project.pbxproj | 360 +++++++++++++----
 .../playwave.xcodeproj/project.pbxproj        | 374 +++++++++++++-----
 .../xcschemes/playwave (iOS).xcscheme         |  84 ----
 .../xcschemes/playwave (macOS).xcscheme       |  84 ----
 4 files changed, 566 insertions(+), 336 deletions(-)
 delete mode 100644 Xcode/playwave/playwave.xcodeproj/xcshareddata/xcschemes/playwave (iOS).xcscheme
 delete mode 100644 Xcode/playwave/playwave.xcodeproj/xcshareddata/xcschemes/playwave (macOS).xcscheme

diff --git a/Xcode/playmus/playmus.xcodeproj/project.pbxproj b/Xcode/playmus/playmus.xcodeproj/project.pbxproj
index e9e3aa22..3f709e9f 100644
--- a/Xcode/playmus/playmus.xcodeproj/project.pbxproj
+++ b/Xcode/playmus/playmus.xcodeproj/project.pbxproj
@@ -7,33 +7,94 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		F39CD44A281DC6A4006CF638 /* SDL2.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED810E281DC09600C33C5B /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968EBF2820392700661875 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EBE2820392700661875 /* SDL2.framework */; };
+		F3968EC1282039AC00661875 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EC0282039AC00661875 /* SDL2.framework */; };
+		F3968EC3282039BC00661875 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EC2282039BC00661875 /* SDL2.framework */; };
+		F3968ECE28203E7300661875 /* SDL2.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EBE2820392700661875 /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968ECF28203F3100661875 /* SDL2_mixer.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80D4281D9ED600C33C5B /* SDL2_mixer.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968ED028203F5800661875 /* FLAC.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968E98282038D200661875 /* FLAC.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968ED128203F5800661875 /* libmodplug.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968E9E282038D700661875 /* libmodplug.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968ED228203F5800661875 /* mpg123.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EA4282038DB00661875 /* mpg123.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968ED328203F5800661875 /* ogg.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EBC2820390500661875 /* ogg.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968ED428203F5800661875 /* opus.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EAA282038E000661875 /* opus.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968ED628203F5800661875 /* vorbis.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EB6282038FB00661875 /* vorbis.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968EEF2820409F00661875 /* SDL2.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EC0282039AC00661875 /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968EF0282040B300661875 /* FLAC.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968E98282038D200661875 /* FLAC.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968EF1282040B300661875 /* libmodplug.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968E9E282038D700661875 /* libmodplug.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968EF2282040B300661875 /* mpg123.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EA4282038DB00661875 /* mpg123.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968EF3282040B300661875 /* ogg.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EBC2820390500661875 /* ogg.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968EF4282040B300661875 /* opus.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EAA282038E000661875 /* opus.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968EF5282040B300661875 /* tremor.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EB0282038F600661875 /* tremor.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968EF6282040B300661875 /* vorbis.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EB6282038FB00661875 /* vorbis.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968F0E2820428F00661875 /* FLAC.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968E98282038D200661875 /* FLAC.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968F0F2820428F00661875 /* libmodplug.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968E9E282038D700661875 /* libmodplug.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968F102820428F00661875 /* mpg123.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EA4282038DB00661875 /* mpg123.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968F112820428F00661875 /* ogg.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EBC2820390500661875 /* ogg.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968F122820428F00661875 /* opus.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EAA282038E000661875 /* opus.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968F132820428F00661875 /* vorbis.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EB6282038FB00661875 /* vorbis.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3968F142820428F00661875 /* SDL2.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3968EC2282039BC00661875 /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		F39CD44B281DC6C8006CF638 /* SDL2_mixer.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80D4281D9ED600C33C5B /* SDL2_mixer.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		F39CD452281DC9CE006CF638 /* SDL2_mixer.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80D4281D9ED600C33C5B /* SDL2_mixer.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		F3D87BCA281DEFA7005DA540 /* FLAC.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3D87BC4281DEF9E005DA540 /* FLAC.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		F3D87BCB281DEFA7005DA540 /* modplug.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3D87BC9281DEF9E005DA540 /* modplug.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		F3D87BCC281DEFA7005DA540 /* mpg123.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3D87BC3281DEF9E005DA540 /* mpg123.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		F3D87BCD281DEFA7005DA540 /* Ogg.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3D87BC8281DEF9E005DA540 /* Ogg.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		F3D87BCE281DEFA7005DA540 /* Opus.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3D87BC7281DEF9E005DA540 /* Opus.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		F3D87BCF281DEFA7005DA540 /* OpusFile.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3D87BC5281DEF9E005DA540 /* OpusFile.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		F3D87BD0281DEFA7005DA540 /* Vorbis.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3D87BC6281DEF9E005DA540 /* Vorbis.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		F3ED80CB281D9ECB00C33C5B /* playmus.c in Sources */ = {isa = PBXBuildFile; fileRef = F3ED80CA281D9ECB00C33C5B /* playmus.c */; };
 		F3ED80CC281D9ECB00C33C5B /* playmus.c in Sources */ = {isa = PBXBuildFile; fileRef = F3ED80CA281D9ECB00C33C5B /* playmus.c */; };
 		F3ED80DB281D9F2100C33C5B /* playmus.c in Sources */ = {isa = PBXBuildFile; fileRef = F3ED80CA281D9ECB00C33C5B /* playmus.c */; };
 		F3ED80E3281DA16500C33C5B /* SDL2_mixer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80D4281D9ED600C33C5B /* SDL2_mixer.framework */; };
-		F3ED80E5281DA17800C33C5B /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80E4281DA17800C33C5B /* SDL2.framework */; };
 		F3ED80F3281DA3BD00C33C5B /* SDL_uikit_main.c in Sources */ = {isa = PBXBuildFile; fileRef = F3ED80EF281DA3BD00C33C5B /* SDL_uikit_main.c */; };
 		F3ED80F4281DA3BD00C33C5B /* SDL_uikit_main.c in Sources */ = {isa = PBXBuildFile; fileRef = F3ED80EF281DA3BD00C33C5B /* SDL_uikit_main.c */; };
 		F3ED80F5281DA3F600C33C5B /* SDL2_mixer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80D4281D9ED600C33C5B /* SDL2_mixer.framework */; };
-		F3ED80F7281DA40300C33C5B /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80F6281DA40300C33C5B /* SDL2.framework */; };
 		F3ED80FF281DA63000C33C5B /* SDL2_mixer.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80D4281D9ED600C33C5B /* SDL2_mixer.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		F3ED810C281DBEF000C33C5B /* SDL2.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80F6281DA40300C33C5B /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		F3ED8110281DC09600C33C5B /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED810E281DC09600C33C5B /* SDL2.framework */; };
-		F3ED8112281DC11700C33C5B /* SDL2.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80E4281DA17800C33C5B /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		F3ED8113281DC13D00C33C5B /* SDL2_mixer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80D4281D9ED600C33C5B /* SDL2_mixer.framework */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
+		F3968E97282038D200661875 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F3968E93282038D200661875 /* FLAC.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = F3F70E67281F442C005AA27D;
+			remoteInfo = FLAC;
+		};
+		F3968E9D282038D700661875 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F3968E99282038D700661875 /* libmodplug.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = F3968D85281FBB1900661875;
+			remoteInfo = libmodplug;
+		};
+		F3968EA3282038DB00661875 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F3968E9F282038DB00661875 /* mpg123.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = F3968BA5281F855B00661875;
+			remoteInfo = mpg123;
+		};
+		F3968EA9282038E000661875 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F3968EA5282038E000661875 /* opus.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = F3968A21281F704800661875;
+			remoteInfo = opus;
+		};
+		F3968EAF282038F600661875 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F3968EAB282038F600661875 /* tremor.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = F3F70F52281F686A005AA27D;
+			remoteInfo = tremor;
+		};
+		F3968EB5282038FB00661875 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F3968EB1282038FB00661875 /* vorbis.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = F3F70EFF281F637A005AA27D;
+			remoteInfo = vorbis;
+		};
+		F3968EBB2820390500661875 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F3968EB72820390500661875 /* ogg.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = F3F70EDA281F61B4005AA27D;
+			remoteInfo = ogg;
+		};
 		F3ED80D3281D9ED600C33C5B /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = F3ED80CD281D9ED600C33C5B /* SDL_mixer.xcodeproj */;
@@ -64,8 +125,14 @@
 			dstPath = "";
 			dstSubfolderSpec = 10;
 			files = (
+				F3968F142820428F00661875 /* SDL2.framework in Copy Frameworks */,
 				F39CD44B281DC6C8006CF638 /* SDL2_mixer.framework in Copy Frameworks */,
-				F39CD44A281DC6A4006CF638 /* SDL2.framework in Copy Frameworks */,
+				F3968F0E2820428F00661875 /* FLAC.framework in Copy Frameworks */,
+				F3968F0F2820428F00661875 /* libmodplug.framework in Copy Frameworks */,
+				F3968F102820428F00661875 /* mpg123.framework in Copy Frameworks */,
+				F3968F112820428F00661875 /* ogg.framework in Copy Frameworks */,
+				F3968F122820428F00661875 /* opus.framework in Copy Frameworks */,
+				F3968F132820428F00661875 /* vorbis.framework in Copy Frameworks */,
 			);
 			name = "Copy Frameworks";
 			runOnlyForDeploymentPostprocessing = 0;
@@ -76,15 +143,14 @@
 			dstPath = "";
 			dstSubfolderSpec = 10;
 			files = (
-				F3ED8112281DC11700C33C5B /* SDL2.framework in Copy Frameworks */,
-				F39CD452281DC9CE006CF638 /* SDL2_mixer.framework in Copy Frameworks */,
-				F3D87BCA281DEFA7005DA540 /* FLAC.framework in Copy Frameworks */,
-				F3D87BCB281DEFA7005DA540 /* modplug.framework in Copy Frameworks */,
-				F3D87BCC281DEFA7005DA540 /* mpg123.framework in Copy Frameworks */,
-				F3D87BCD281DEFA7005DA540 /* Ogg.framework in Copy Frameworks */,
-				F3D87BCE281DEFA7005DA540 /* Opus.framework in Copy Frameworks */,
-				F3D87BCF281DEFA7005DA540 /* OpusFile.framework in Copy Frameworks */,
-				F3D87BD0281DEFA7005DA540 /* Vorbis.framework in Copy Frameworks */,
+				F3968ECE28203E7300661875 /* SDL2.framework in Copy Frameworks */,
+				F3968ECF28203F3100661875 /* SDL2_mixer.framework in Copy Frameworks */,
+				F3968ED028203F5800661875 /* FLAC.framework in Copy Frameworks */,
+				F3968ED128203F5800661875 /* libmodplug.framework in Copy Frameworks */,
+				F3968ED228203F5800661875 /* mpg123.framework in Copy Frameworks */,
+				F3968ED328203F5800661875 /* ogg.framework in Copy Frameworks */,
+				F3968ED428203F5800661875 /* opus.framework in Copy Frameworks */,
+				F3968ED628203F5800661875 /* vorbis.framework in Copy Frameworks */,
 			);
 			name = "Copy Frameworks";
 			runOnlyForDeploymentPostprocessing = 0;
@@ -95,8 +161,15 @@
 			dstPath = "";
 			dstSubfolderSpec = 10;
 			files = (
+				F3968EEF2820409F00661875 /* SDL2.framework in Copy Frameworks */,
 				F3ED80FF281DA63000C33C5B /* SDL2_mixer.framework in Copy Frameworks */,
-				F3ED810C281DBEF000C33C5B /* SDL2.framework in Copy Frameworks */,
+				F3968EF0282040B300661875 /* FLAC.framework in Copy Frameworks */,
+				F3968EF1282040B300661875 /* libmodplug.framework in Copy Frameworks */,
+				F3968EF2282040B300661875 /* mpg123.framework in Copy Frameworks */,
+				F3968EF3282040B300661875 /* ogg.framework in Copy Frameworks */,
+				F3968EF4282040B300661875 /* opus.framework in Copy Frameworks */,
+				F3968EF5282040B300661875 /* tremor.framework in Copy Frameworks */,
+				F3968EF6282040B300661875 /* vorbis.framework in Copy Frameworks */,
 			);
 			name = "Copy Frameworks";
 			runOnlyForDeploymentPostprocessing = 0;
@@ -104,23 +177,23 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
-		F3D87BC3281DEF9E005DA540 /* mpg123.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = mpg123.framework; path = ../macOS/mpg123.framework; sourceTree = "<group>"; };
-		F3D87BC4281DEF9E005DA540 /* FLAC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FLAC.framework; path = ../macOS/FLAC.framework; sourceTree = "<group>"; };
-		F3D87BC5281DEF9E005DA540 /* OpusFile.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpusFile.framework; path = ../macOS/OpusFile.framework; sourceTree = "<group>"; };
-		F3D87BC6281DEF9E005DA540 /* Vorbis.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Vorbis.framework; path = ../macOS/Vorbis.framework; sourceTree = "<group>"; };
-		F3D87BC7281DEF9E005DA540 /* Opus.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Opus.framework; path = ../macOS/Opus.framework; sourceTree = "<group>"; };
-		F3D87BC8281DEF9E005DA540 /* Ogg.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Ogg.framework; path = ../macOS/Ogg.framework; sourceTree = "<group>"; };
-		F3D87BC9281DEF9E005DA540 /* modplug.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = modplug.framework; path = ../macOS/modplug.framework; sourceTree = "<group>"; };
+		F3968E93282038D200661875 /* FLAC.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = FLAC.xcodeproj; path = ../FLAC/FLAC.xcodeproj; sourceTree = "<group>"; };
+		F3968E99282038D700661875 /* libmodplug.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = libmodplug.xcodeproj; path = ../libmodplug/libmodplug.xcodeproj; sourceTree = "<group>"; };
+		F3968E9F282038DB00661875 /* mpg123.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = mpg123.xcodeproj; path = ../mpg123/mpg123.xcodeproj; sourceTree = "<group>"; };
+		F3968EA5282038E000661875 /* opus.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = opus.xcodeproj; path = ../opus/opus.xcodeproj; sourceTree = "<group>"; };
+		F3968EAB282038F600661875 /* tremor.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = tremor.xcodeproj; path = ../tremor/tremor.xcodeproj; sourceTree = "<group>"; };
+		F3968EB1282038FB00661875 /* vorbis.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = vorbis.xcodeproj; path = ../vorbis/vorbis.xcodeproj; sourceTree = "<group>"; };
+		F3968EB72820390500661875 /* ogg.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ogg.xcodeproj; path = ../ogg/ogg.xcodeproj; sourceTree = "<group>"; };
+		F3968EBE2820392700661875 /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = ../macOS/SDL2.framework; sourceTree = "<group>"; };
+		F3968EC0282039AC00661875 /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = ../iOS/SDL2.framework; sourceTree = "<group>"; };
+		F3968EC2282039BC00661875 /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = ../tvOS/SDL2.framework; sourceTree = "<group>"; };
 		F3ED80B3281D9E8900C33C5B /* playmus.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = playmus.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		F3ED80B9281D9E8900C33C5B /* playmus.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = playmus.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		F3ED80BB281D9E8900C33C5B /* macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = macOS.entitlements; sourceTree = "<group>"; };
 		F3ED80CA281D9ECB00C33C5B /* playmus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = playmus.c; path = ../../playmus.c; sourceTree = SOURCE_ROOT; };
 		F3ED80CD281D9ED600C33C5B /* SDL_mixer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL_mixer.xcodeproj; path = ../SDL_mixer.xcodeproj; sourceTree = "<group>"; };
 		F3ED80E1281D9F2100C33C5B /* playmus.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = playmus.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		F3ED80E4281DA17800C33C5B /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = ../macOS/SDL2.framework; sourceTree = "<group>"; };
 		F3ED80EF281DA3BD00C33C5B /* SDL_uikit_main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_uikit_main.c; sourceTree = SOURCE_ROOT; };
-		F3ED80F6281DA40300C33C5B /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = ../iOS/SDL2.framework; sourceTree = "<group>"; };
-		F3ED810E281DC09600C33C5B /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = ../tvOS/SDL2.framework; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -128,7 +201,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				F3ED80F7281DA40300C33C5B /* SDL2.framework in Frameworks */,
+				F3968EC1282039AC00661875 /* SDL2.framework in Frameworks */,
 				F3ED80F5281DA3F600C33C5B /* SDL2_mixer.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -137,7 +210,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				F3ED80E5281DA17800C33C5B /* SDL2.framework in Frameworks */,
+				F3968EBF2820392700661875 /* SDL2.framework in Frameworks */,
 				F3ED80E3281DA16500C33C5B /* SDL2_mixer.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -146,7 +219,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				F3ED8110281DC09600C33C5B /* SDL2.framework in Frameworks */,
+				F3968EC3282039BC00661875 /* SDL2.framework in Frameworks */,
 				F3ED8113281DC13D00C33C5B /* SDL2_mixer.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -154,95 +227,151 @@
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
-		F3ED80A6281D9E8800C33C5B = {
+		F3968E94282038D200661875 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				F3ED80CD281D9ED600C33C5B /* SDL_mixer.xcodeproj */,
-				F3ED80AB281D9E8800C33C5B /* Shared */,
-				F3ED80BA281D9E8900C33C5B /* macOS */,
-				F3ED80B4281D9E8900C33C5B /* Products */,
-				F3ED80E2281DA16500C33C5B /* Frameworks */,
+				F3968E98282038D200661875 /* FLAC.framework */,
 			);
+			name = Products;
 			sourceTree = "<group>";
 		};
-		F3ED80AB281D9E8800C33C5B /* Shared */ = {
+		F3968E9A282038D700661875 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				F3ED80CA281D9ECB00C33C5B /* playmus.c */,
-				F3ED80EF281DA3BD00C33C5B /* SDL_uikit_main.c */,
+				F3968E9E282038D700661875 /* libmodplug.framework */,
 			);
-			name = Shared;
-			sourceTree = SOURCE_ROOT;
+			name = Products;
+			sourceTree = "<group>";
 		};
-		F3ED80B4281D9E8900C33C5B /* Products */ = {
+		F3968EA0282038DB00661875 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				F3ED80B3281D9E8900C33C5B /* playmus.app */,
-				F3ED80B9281D9E8900C33C5B /* playmus.app */,
-				F3ED80E1281D9F2100C33C5B /* playmus.app */,
+				F3968EA4282038DB00661875 /* mpg123.framework */,
 			);
 			name = Products;
 			sourceTree = "<group>";
 		};
-		F3ED80BA281D9E8900C33C5B /* macOS */ = {
+		F3968EA6282038E000661875 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				F3ED80BB281D9E8900C33C5B /* macOS.entitlements */,
+				F3968EAA282038E000661875 /* opus.framework */,
 			);
-			path = macOS;
+			name = Products;
 			sourceTree = "<group>";
 		};
-		F3ED80CE281D9ED600C33C5B /* Products */ = {
+		F3968EAC282038F600661875 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				F3ED80D4281D9ED600C33C5B /* SDL2_mixer.framework */,
-				F3ED80D6281D9ED600C33C5B /* libSDL2_mixer.a */,
-				F3ED80D8281D9ED600C33C5B /* Create DMG */,
+				F3968EB0282038F600661875 /* tremor.framework */,
 			);
 			name = Products;
 			sourceTree = "<group>";
 		};
-		F3ED80E2281DA16500C33C5B /* Frameworks */ = {
+		F3968EB2282038FB00661875 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				F3ED8104281DADB900C33C5B /* macOS */,
-				F3ED8105281DADC900C33C5B /* iOS */,
-				F3ED810D281DC07200C33C5B /* tvOS */,
+				F3968EB6282038FB00661875 /* vorbis.framework */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		F3968EB82820390500661875 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				F3968EBC2820390500661875 /* ogg.framework */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		F3968EBD2820392700661875 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				F3968EC728203DD200661875 /* macOS */,
+				F3968EC828203DDA00661875 /* iOS */,
+				F3968EC928203DDE00661875 /* tvOS */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
 		};
-		F3ED8104281DADB900C33C5B /* macOS */ = {
+		F3968EC728203DD200661875 /* macOS */ = {
 			isa = PBXGroup;
 			children = (
-				F3ED80E4281DA17800C33C5B /* SDL2.framework */,
-				F3D87BC4281DEF9E005DA540 /* FLAC.framework */,
-				F3D87BC9281DEF9E005DA540 /* modplug.framework */,
-				F3D87BC3281DEF9E005DA540 /* mpg123.framework */,
-				F3D87BC8281DEF9E005DA540 /* Ogg.framework */,
-				F3D87BC7281DEF9E005DA540 /* Opus.framework */,
-				F3D87BC5281DEF9E005DA540 /* OpusFile.framework */,
-				F3D87BC6281DEF9E005DA540 /* Vorbis.framework */,
+				F3968EBE2820392700661875 /* SDL2.framework */,
 			);
 			name = macOS;
 			sourceTree = "<group>";
 		};
-		F3ED8105281DADC900C33C5B /* iOS */ = {
+		F3968EC828203DDA00661875 /* iOS */ = {
 			isa = PBXGroup;
 			children = (
-				F3ED80F6281DA40300C33C5B /* SDL2.framework */,
+				F3968EC0282039AC00661875 /* SDL2.framework */,
 			);
 			name = iOS;
 			sourceTree = "<group>";
 		};
-		F3ED810D281DC07200C33C5B /* tvOS */ = {
+		F3968EC928203DDE00661875 /* tvOS */ = {
 			isa = PBXGroup;
 			children = (
-				F3ED810E281DC09600C33C5B /* SDL2.framework */,
+				F3968EC2282039BC00661875 /* SDL2.framework */,
 			);
 			name = tvOS;
 			sourceTree = "<group>";
 		};
+		F3ED80A6281D9E8800C33C5B = {
+			isa = PBXGroup;
+			children = (
+				F3968E93282038D200661875 /* FLAC.xcodeproj */,
+				F3968E99282038D700661875 /* libmodplug.xcodeproj */,
+				F3968E9F282038DB00661875 /* mpg123.xcodeproj */,
+				F3968EB72820390500661875 /* ogg.xcodeproj */,
+				F3968EA5282038E000661875 /* opus.xcodeproj */,
+				F3968EAB282038F600661875 /* tremor.xcodeproj */,
+				F3968EB1282038FB00661875 /* vorbis.xcodeproj */,
+				F3ED80CD281D9ED600C33C5B /* SDL_mixer.xcodeproj */,
+				F3ED80AB281D9E8800C33C5B /* Shared */,
+				F3ED80BA281D9E8900C33C5B /* macOS */,
+				F3ED80B4281D9E8900C33C5B /* Products */,
+				F3968EBD2820392700661875 /* Frameworks */,
+			);
+			sourceTree = "<group>";
+		};
+		F3ED80AB281D9E8800C33C5B /* Shared */ = {
+			isa = PBXGroup;
+			children = (
+				F3ED80CA281D9ECB00C33C5B /* playmus.c */,
+				F3ED80EF281DA3BD00C33C5B /* SDL_uikit_main.c */,
+			);
+			name = Shared;
+			sourceTree = SOURCE_ROOT;
+		};
+		F3ED80B4281D9E8900C33C5B /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				F3ED80B3281D9E8900C33C5B /* playmus.app */,
+				F3ED80B9281D9E8900C33C5B /* playmus.app */,
+				F3ED80E1281D9F2100C33C5B /* playmus.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		F3ED80BA281D9E8900C33C5B /* macOS */ = {
+			isa = PBXGroup;
+			children = (
+				F3ED80BB281D9E8900C33C5B /* macOS.entitlements */,
+			);
+			path = macOS;
+			sourceTree = "<group>";
+		};
+		F3ED80CE281D9ED600C33C5B /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				F3ED80D4281D9ED600C33C5B /* SDL2_mixer.framework */,
+				F3ED80D6281D9ED600C33C5B /* libSDL2_mixer.a */,
+				F3ED80D8281D9ED600C33C5B /* Create DMG */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -330,10 +459,38 @@
 			productRefGroup = F3ED80B4281D9E8900C33C5B /* Products */;
 			projectDirPath = "";
 			projectReferences = (
+				{
+					ProductGroup = F3968E94282038D200661875 /* Products */;
+					ProjectRef = F3968E93282038D200661875 /* FLAC.xcodeproj */;
+				},
+				{
+					ProductGroup = F3968E9A282038D700661875 /* Products */;
+					ProjectRef = F3968E99282038D700661875 /* libmodplug.xcodeproj */;
+				},
+				{
+					ProductGroup = F3968EA0282038DB00661875 /* Products */;
+					ProjectRef = F3968E9F282038DB00661875 /* mpg123.xcodeproj */;
+				},
+				{
+					ProductGroup = F3968EB82820390500661875 /* Products */;
+					ProjectRef = F3968EB72820390500661875 /* ogg.xcodeproj */;
+				},
+				{
+					ProductGroup = F3968EA6282038E000661875 /* Products */;
+					ProjectRef = F3968EA5282038E000661875 /* opus.xcodeproj */;
+				},
 				{
 					ProductGroup = F3ED80CE281D9ED600C33C5B /* Products */;
 					ProjectRef = F3ED80CD281D9ED600C33C5B /* SDL_mixer.xcodeproj */;
 				},
+				{
+					ProductGroup = F3968EAC282038F600661875 /* Products */;
+					ProjectRef = F3968EAB282038F600661875 /* tremor.xcodeproj */;
+				},
+				{
+					ProductGroup = F3968EB2282038FB00661875 /* Products */;
+					ProjectRef = F3968EB1282038FB00661875 /* vorbis.xcodeproj */;
+				},
 			);
 			projectRoot = "";
 			targets = (
@@ -345,6 +502,55 @@
 /* End PBXProject section */
 
 /* Begin PBXReferenceProxy section */
+		F3968E98282038D200661875 /* FLAC.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = FLAC.framework;
+			remoteRef = F3968E97282038D200661875 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		F3968E9E282038D700661875 /* libmodplug.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = libmodplug.framework;
+			remoteRef = F3968E9D282038D700661875 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		F3968EA4282038DB00661875 /* mpg123.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = mpg123.framework;
+			remoteRef = F3968EA3282038DB00661875 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		F3968EAA282038E000661875 /* opus.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = opus.framework;
+			remoteRef = F3968EA9282038E000661875 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		F3968EB0282038F600661875 /* tremor.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = tremor.framework;
+			remoteRef = F3968EAF282038F600661875 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		F3968EB6282038FB00661875 /* vorbis.framew

(Patch may be truncated, please check the link at the top of this post.)