Compare commits
6 commits
1787af6062
...
2f23420a6c
Author | SHA1 | Date | |
---|---|---|---|
|
2f23420a6c | ||
|
b4a3bc6fdc | ||
|
6c0ca775cd | ||
|
f05aada52d | ||
|
aebc52880b | ||
|
e8a7eaf954 |
164 changed files with 2771 additions and 1381 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -36,7 +36,7 @@ Xcode-config/SENTRY_SETTINGS.xcconfig
|
|||
/ThirdParty/ffmpeg/lib/libavformat.61.dylib
|
||||
/ThirdParty/ffmpeg/lib/libavutil.59.dylib
|
||||
/ThirdParty/ffmpeg/lib/libswresample.5.dylib
|
||||
/ThirdParty/flac/lib/libFLAC.12.dylib
|
||||
/ThirdParty/flac/lib/libFLAC.14.dylib
|
||||
/ThirdParty/libid3tag/lib/libid3tag.a
|
||||
/ThirdParty/libmad/lib/libmad.a
|
||||
/ThirdParty/libopenmpt/lib/libopenmpt.a
|
||||
|
|
|
@ -693,7 +693,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
};
|
||||
buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "CogAudio" */;
|
||||
compatibilityVersion = "Xcode 12.0";
|
||||
|
@ -905,6 +905,7 @@
|
|||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
PRODUCT_MODULE_NAME = CogAudio;
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "CogAudio-Bridging-Header.h";
|
||||
SYMROOT = ../build;
|
||||
};
|
||||
|
@ -952,6 +953,7 @@
|
|||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
PRODUCT_MODULE_NAME = CogAudio;
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "CogAudio-Bridging-Header.h";
|
||||
SYMROOT = ../build;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -7,15 +7,5 @@
|
|||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)-spks</string>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)-spki</string>
|
||||
</array>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.disable-library-validation</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.allow-jit</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.user-selected.read-write</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -129,7 +129,7 @@
|
|||
836EF0C827BB91E600BF35B2 /* libogg.0.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 836EF0C427BB919300BF35B2 /* libogg.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||
836EF0C927BB91E900BF35B2 /* libvorbisfile.3.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 836EF0C627BB91AB00BF35B2 /* libvorbisfile.3.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||
836EF0CA27BB91EB00BF35B2 /* libvorbis.0.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 836EF0C527BB91AB00BF35B2 /* libvorbis.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||
836EF0CB27BB91EE00BF35B2 /* libFLAC.12.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 836EF0C727BB91BC00BF35B2 /* libFLAC.12.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||
836EF0CB27BB91EE00BF35B2 /* libFLAC.14.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 836EF0C727BB91BC00BF35B2 /* libFLAC.14.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||
836EF0E027BB98A800BF35B2 /* libopus.0.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 836EF0CC27BB94E100BF35B2 /* libopus.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||
836EF0E127BB98AB00BF35B2 /* libopusfile.0.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 836EF0CD27BB94F100BF35B2 /* libopusfile.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||
836F5BF91A357A01002730CC /* sidplay.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8314D6411A354DFF00EEE8E6 /* sidplay.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
|
@ -158,6 +158,7 @@
|
|||
83988F0E27BE0A5900A0E89A /* RedundantPlaylistDataStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 83988F0D27BE0A5900A0E89A /* RedundantPlaylistDataStore.m */; };
|
||||
8399D4E21805A55000B503B1 /* XmlContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8399D4E01805A55000B503B1 /* XmlContainer.m */; };
|
||||
839B837F286D7F8D00F529EE /* NumberHertzToStringTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 839B837E286D7F8D00F529EE /* NumberHertzToStringTransformer.swift */; };
|
||||
839C957A2DF8E70900D007EB /* Cog26.icon in Resources */ = {isa = PBXBuildFile; fileRef = 839C95792DF8E70900D007EB /* Cog26.icon */; };
|
||||
839DA7CF274A2D4C001B18E5 /* NSDictionary+Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = 839DA7CE274A2D4C001B18E5 /* NSDictionary+Merge.m */; };
|
||||
839E56F52879625100DFB5F4 /* SADIE_D02-96000.mhr in Resources */ = {isa = PBXBuildFile; fileRef = 839E56F12879625100DFB5F4 /* SADIE_D02-96000.mhr */; };
|
||||
839E876E2D5DA0AC00A13526 /* RubberbandEngineTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 839E876D2D5DA0AC00A13526 /* RubberbandEngineTransformer.m */; };
|
||||
|
@ -721,7 +722,7 @@
|
|||
836DF617298F6F1700CD0580 /* libsoxr.0.dylib in CopyFiles */,
|
||||
836EF0E127BB98AB00BF35B2 /* libopusfile.0.dylib in CopyFiles */,
|
||||
836EF0E027BB98A800BF35B2 /* libopus.0.dylib in CopyFiles */,
|
||||
836EF0CB27BB91EE00BF35B2 /* libFLAC.12.dylib in CopyFiles */,
|
||||
836EF0CB27BB91EE00BF35B2 /* libFLAC.14.dylib in CopyFiles */,
|
||||
836EF0CA27BB91EB00BF35B2 /* libvorbis.0.dylib in CopyFiles */,
|
||||
83256B69286661FC0036D9C0 /* libmpg123.0.dylib in CopyFiles */,
|
||||
836EF0C927BB91E900BF35B2 /* libvorbisfile.3.dylib in CopyFiles */,
|
||||
|
@ -951,7 +952,7 @@
|
|||
836EF0C427BB919300BF35B2 /* libogg.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libogg.0.dylib; path = ThirdParty/ogg/lib/libogg.0.dylib; sourceTree = "<group>"; };
|
||||
836EF0C527BB91AB00BF35B2 /* libvorbis.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libvorbis.0.dylib; path = ThirdParty/vorbis/lib/libvorbis.0.dylib; sourceTree = "<group>"; };
|
||||
836EF0C627BB91AB00BF35B2 /* libvorbisfile.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libvorbisfile.3.dylib; path = ThirdParty/vorbis/lib/libvorbisfile.3.dylib; sourceTree = "<group>"; };
|
||||
836EF0C727BB91BC00BF35B2 /* libFLAC.12.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libFLAC.12.dylib; path = ThirdParty/flac/lib/libFLAC.12.dylib; sourceTree = "<group>"; };
|
||||
836EF0C727BB91BC00BF35B2 /* libFLAC.14.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libFLAC.14.dylib; path = ThirdParty/flac/lib/libFLAC.14.dylib; sourceTree = "<group>"; };
|
||||
836EF0CC27BB94E100BF35B2 /* libopus.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libopus.0.dylib; path = ThirdParty/opus/lib/libopus.0.dylib; sourceTree = "<group>"; };
|
||||
836EF0CD27BB94F100BF35B2 /* libopusfile.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libopusfile.0.dylib; path = ThirdParty/opusfile/lib/libopusfile.0.dylib; sourceTree = "<group>"; };
|
||||
836F6B2518BDB80D0095E648 /* vgmstream.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = vgmstream.xcodeproj; path = Plugins/vgmstream/vgmstream.xcodeproj; sourceTree = "<group>"; };
|
||||
|
@ -1004,6 +1005,7 @@
|
|||
8399D4E01805A55000B503B1 /* XmlContainer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XmlContainer.m; sourceTree = "<group>"; };
|
||||
8399D4E11805A55000B503B1 /* XmlContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XmlContainer.h; sourceTree = "<group>"; };
|
||||
839B837E286D7F8D00F529EE /* NumberHertzToStringTransformer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = NumberHertzToStringTransformer.swift; path = Transformers/NumberHertzToStringTransformer.swift; sourceTree = "<group>"; };
|
||||
839C95792DF8E70900D007EB /* Cog26.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = Cog26.icon; sourceTree = "<group>"; };
|
||||
839DA7CB274A2D4C001B18E5 /* NSDictionary+Merge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+Merge.h"; sourceTree = "<group>"; };
|
||||
839DA7CE274A2D4C001B18E5 /* NSDictionary+Merge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+Merge.m"; sourceTree = "<group>"; };
|
||||
839E3B53286595D700880EA2 /* GeneralPane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GeneralPane.h; path = Preferences/Preferences/GeneralPane.h; sourceTree = "<group>"; };
|
||||
|
@ -1154,7 +1156,7 @@
|
|||
835FAC7D27BCDF5B00BA8562 /* libavif.a */,
|
||||
836EF0CD27BB94F100BF35B2 /* libopusfile.0.dylib */,
|
||||
836EF0CC27BB94E100BF35B2 /* libopus.0.dylib */,
|
||||
836EF0C727BB91BC00BF35B2 /* libFLAC.12.dylib */,
|
||||
836EF0C727BB91BC00BF35B2 /* libFLAC.14.dylib */,
|
||||
836EF0C527BB91AB00BF35B2 /* libvorbis.0.dylib */,
|
||||
836EF0C627BB91AB00BF35B2 /* libvorbisfile.3.dylib */,
|
||||
836EF0C427BB919300BF35B2 /* libogg.0.dylib */,
|
||||
|
@ -1473,6 +1475,7 @@
|
|||
29B97314FDCFA39411CA2CEA /* Cog */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
839C95792DF8E70900D007EB /* Cog26.icon */,
|
||||
0A1B412E286F6301008A6A44 /* Localizable.stringsdict */,
|
||||
83D0380E24A40DF2004CF90F /* CogAssets.xcassets */,
|
||||
83859520234FEB35004E9946 /* Cog.entitlements */,
|
||||
|
@ -2043,7 +2046,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1500;
|
||||
LastUpgradeCheck = 2600;
|
||||
};
|
||||
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Cog" */;
|
||||
compatibilityVersion = "Xcode 12.0";
|
||||
|
@ -2467,6 +2470,7 @@
|
|||
839614AD286EDA5C00D3EEDB /* SpectrumWindow.xib in Resources */,
|
||||
171B57DD0C091F2B00F6AFAF /* flac.icns in Resources */,
|
||||
171B57DE0C091F2B00F6AFAF /* m4a.icns in Resources */,
|
||||
839C957A2DF8E70900D007EB /* Cog26.icon in Resources */,
|
||||
839E56F52879625100DFB5F4 /* SADIE_D02-96000.mhr in Resources */,
|
||||
830C37A127B95E3000E02BB0 /* Equalizer.xib in Resources */,
|
||||
171B57DF0C091F2B00F6AFAF /* mp3.icns in Resources */,
|
||||
|
@ -2943,10 +2947,15 @@
|
|||
C01FCF4B08A954540054247B /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = Cog26;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = "Cog color";
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
ENABLE_APP_SANDBOX = YES;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES;
|
||||
ENABLE_USER_SELECTED_FILES = readwrite;
|
||||
FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/ThirdParty/Frameworks";
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||
|
@ -2971,6 +2980,7 @@
|
|||
"$(PROJECT_DIR)",
|
||||
"$(PROJECT_DIR)/ThirdParty/rubberband/lib",
|
||||
);
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
OTHER_CFLAGS = (
|
||||
"-D__MACOSX__",
|
||||
"-DHAVE_CONFIG_H",
|
||||
|
@ -2989,6 +2999,9 @@
|
|||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.cog;
|
||||
PRODUCT_NAME = Cog;
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
RUNTIME_EXCEPTION_ALLOW_JIT = YES;
|
||||
RUNTIME_EXCEPTION_DISABLE_LIBRARY_VALIDATION = YES;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Cog-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
|
@ -3000,9 +3013,14 @@
|
|||
C01FCF4C08A954540054247B /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = Cog26;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = "Cog color";
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
ENABLE_APP_SANDBOX = YES;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES;
|
||||
ENABLE_USER_SELECTED_FILES = readwrite;
|
||||
FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/ThirdParty/Frameworks";
|
||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||
HEADER_SEARCH_PATHS = ThirdParty/avif/include;
|
||||
|
@ -3025,6 +3043,7 @@
|
|||
"$(PROJECT_DIR)",
|
||||
"$(PROJECT_DIR)/ThirdParty/rubberband/lib",
|
||||
);
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
OTHER_CFLAGS = (
|
||||
"-D__MACOSX__",
|
||||
"-DHAVE_CONFIG_H",
|
||||
|
@ -3043,6 +3062,9 @@
|
|||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.cogx.cog;
|
||||
PRODUCT_NAME = Cog;
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
RUNTIME_EXCEPTION_ALLOW_JIT = YES;
|
||||
RUNTIME_EXCEPTION_DISABLE_LIBRARY_VALIDATION = YES;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Cog-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
|
@ -3079,7 +3101,7 @@
|
|||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Cog.entitlements;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
|
@ -3093,6 +3115,7 @@
|
|||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -3124,8 +3147,8 @@
|
|||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Cog.entitlements;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
|
@ -3136,6 +3159,7 @@
|
|||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
};
|
||||
name = Release;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.7">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
9
Cog26.icon/Assets/cog.svg
Normal file
9
Cog26.icon/Assets/cog.svg
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 720 720" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<g transform="matrix(1.00628,0.269633,-0.322362,1.20307,-166.912,-364.608)">
|
||||
<g>
|
||||
<path d="M688.647,164.035C696.109,164.437 702.246,169.104 703.433,175.279C705.212,184.454 707.761,197.712 709.467,206.587C710.54,212.171 715.688,216.592 722.334,217.638C735.557,219.762 748.579,222.681 761.306,226.357C767.68,228.229 774.772,226.554 779.036,222.172C785.832,215.21 795.964,204.793 802.977,197.584C807.701,192.727 815.814,191.25 822.524,194.026C834.796,199.178 846.699,204.926 858.161,211.252C864.383,214.721 866.908,221.329 864.244,227.173C860.301,235.863 854.582,248.41 850.754,256.809C848.346,262.095 850.161,268.076 855.292,271.761C865.473,279.131 875.006,287.104 883.831,295.61C888.231,299.897 895.374,301.413 901.686,299.401C911.734,296.214 926.736,291.43 937.119,288.12C944.113,285.889 952.022,288.003 956.173,293.213C963.722,302.807 970.594,312.763 976.739,323.035C980.053,328.641 978.29,335.42 972.49,339.367C963.88,345.243 951.427,353.719 943.091,359.391C937.846,362.961 935.842,368.901 938.083,374.238C942.494,384.878 945.984,395.771 948.542,406.828C949.79,412.381 955.07,416.681 961.74,417.578C972.346,419.02 988.197,421.151 999.17,422.626C1006.56,423.62 1012.15,428.76 1012.63,435.009C1013.43,446.473 1013.43,457.967 1012.61,469.43C1012.13,475.673 1006.55,480.808 999.167,481.801C988.198,483.289 972.346,485.421 961.736,486.847C955.059,487.745 949.774,492.051 948.524,497.61C945.984,508.67 942.495,519.562 938.1,530.207C935.862,535.538 937.864,541.471 943.103,545.037C951.427,550.721 963.88,559.197 972.5,565.063C978.306,569.014 980.071,575.799 976.754,581.411C970.594,591.677 963.722,601.633 956.16,611.219C952.012,616.424 944.112,618.536 937.125,616.308C926.736,613.01 911.734,608.226 901.693,605.025C895.374,603.01 888.223,604.528 883.817,608.82C875.006,617.336 865.473,625.31 855.303,632.691C850.178,636.372 848.366,642.347 850.772,647.626C854.582,656.03 860.301,668.578 864.259,677.263C866.926,683.113 864.398,689.728 858.17,693.201C846.699,699.515 834.796,705.262 822.516,710.402C815.813,713.175 807.709,711.7 802.989,706.848C795.964,699.647 785.832,689.23 779.05,682.258C774.782,677.871 767.681,676.195 761.3,678.069C748.579,681.759 735.557,684.678 722.337,686.817C715.699,687.862 710.557,692.278 709.485,697.856C707.761,706.728 705.212,719.986 703.448,729.163C702.261,735.345 696.118,740.016 688.648,740.419C674.94,741.09 661.196,741.09 647.488,740.405C640.026,740.003 633.889,735.336 632.702,729.161C630.923,719.986 628.375,706.728 626.669,697.854C625.596,692.269 620.448,687.848 613.802,686.802C600.579,684.678 587.557,681.759 574.83,678.083C568.456,676.211 561.364,677.886 557.1,682.268C550.304,689.23 540.172,699.647 533.159,706.856C528.435,711.713 520.322,713.19 513.612,710.414C501.339,705.263 489.437,699.515 477.975,693.189C471.753,689.72 469.228,683.112 471.892,677.268C475.835,668.578 481.554,656.03 485.382,647.632C487.79,642.346 485.975,636.365 480.845,632.68C470.663,625.31 461.13,617.336 452.305,608.83C447.905,604.543 440.762,603.027 434.45,605.039C424.402,608.226 409.4,613.01 399.017,616.32C392.023,618.551 384.114,616.437 379.963,611.227C372.414,601.633 365.542,591.677 359.397,581.405C356.083,575.799 357.846,569.02 363.646,565.073C372.256,559.197 384.709,550.721 393.044,545.049C398.29,541.479 400.294,535.539 398.053,530.202C393.641,519.562 390.152,508.67 387.594,497.613C386.346,492.06 381.066,487.76 374.397,486.863C363.79,485.42 347.939,483.289 336.967,481.813C329.577,480.82 323.992,475.682 323.511,469.434C322.709,457.968 322.709,446.472 323.527,435.007C324.008,428.766 329.587,423.633 336.97,422.64C347.939,421.152 363.79,419.02 374.399,417.594C381.076,416.696 386.362,412.39 387.612,406.831C390.152,395.771 393.642,384.878 398.036,374.232C400.274,368.902 398.272,362.969 393.033,359.403C384.709,353.719 372.256,345.243 363.636,339.377C357.83,335.426 356.065,328.641 359.382,323.029C365.542,312.763 372.414,302.807 379.976,293.221C384.124,288.016 392.024,285.904 399.011,288.132C409.4,291.43 424.402,296.214 434.443,299.415C440.762,301.43 447.913,299.912 452.319,295.62C461.13,287.104 470.663,279.131 480.832,271.75C485.957,268.069 487.77,262.094 485.364,256.815C481.554,248.41 475.835,235.863 471.877,227.178C469.21,221.328 471.738,214.713 477.966,211.24C489.437,204.926 501.339,199.178 513.62,194.038C520.323,191.265 528.427,192.74 533.147,197.592C540.172,204.793 550.304,215.21 557.086,222.182C561.354,226.569 568.455,228.245 574.836,226.371C587.557,222.681 600.579,219.762 613.798,217.623C620.437,216.578 625.579,212.162 626.651,206.584C628.375,197.712 630.923,184.454 632.687,175.278C633.874,169.096 640.018,164.424 647.488,164.022C661.196,163.351 674.94,163.351 688.647,164.035Z" style="fill:rgb(170,170,170);"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5 KiB |
9
Cog26.icon/Assets/orb.svg
Normal file
9
Cog26.icon/Assets/orb.svg
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 444 444" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<g transform="matrix(1,0,0,1,-290.495,-290.495)">
|
||||
<g transform="matrix(1.64928,0,0,2.40966,-344.908,-858.521)">
|
||||
<ellipse cx="519.565" cy="568.761" rx="134.304" ry="91.924" style="fill:rgb(255,200,0);"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 701 B |
9
Cog26.icon/Assets/play.svg
Normal file
9
Cog26.icon/Assets/play.svg
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 207 234" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<g transform="matrix(1,0,0,1,-421.248,-394.96)">
|
||||
<g transform="matrix(11.2166,0,0,11.2166,395.945,394.96)">
|
||||
<path d="M2.256,19.17C2.256,20.322 2.93,20.859 3.721,20.859C4.063,20.859 4.424,20.752 4.766,20.557L19.453,11.924C20.361,11.397 20.693,11.025 20.693,10.43C20.693,9.824 20.361,9.453 19.453,8.926L4.766,0.293C4.424,0.098 4.063,0 3.721,0C2.93,0 2.256,0.527 2.256,1.68L2.256,19.17Z" style="fill:rgb(226,255,0);fill-opacity:0.85;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 950 B |
170
Cog26.icon/icon.json
Normal file
170
Cog26.icon/icon.json
Normal file
|
@ -0,0 +1,170 @@
|
|||
{
|
||||
"fill" : "automatic",
|
||||
"groups" : [
|
||||
{
|
||||
"blend-mode" : "plus-lighter",
|
||||
"blur-material" : 1,
|
||||
"layers" : [
|
||||
{
|
||||
"blend-mode-specializations" : [
|
||||
{
|
||||
"value" : "plus-lighter"
|
||||
},
|
||||
{
|
||||
"appearance" : "tinted",
|
||||
"value" : "plus-darker"
|
||||
}
|
||||
],
|
||||
"fill-specializations" : [
|
||||
{
|
||||
"value" : {
|
||||
"automatic-gradient" : "extended-gray:1.00000,1.00000"
|
||||
}
|
||||
},
|
||||
{
|
||||
"appearance" : "tinted",
|
||||
"value" : {
|
||||
"solid" : "srgb:0.74968,0.74968,0.74968,1.00000"
|
||||
}
|
||||
}
|
||||
],
|
||||
"glass" : true,
|
||||
"image-name" : "play.svg",
|
||||
"name" : "play",
|
||||
"opacity" : 0.51,
|
||||
"position" : {
|
||||
"scale" : 1.06,
|
||||
"translation-in-points" : [
|
||||
21,
|
||||
0
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"shadow" : {
|
||||
"kind" : "layer-color",
|
||||
"opacity" : 1
|
||||
},
|
||||
"specular" : true,
|
||||
"translucency-specializations" : [
|
||||
{
|
||||
"value" : {
|
||||
"enabled" : true,
|
||||
"value" : 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"appearance" : "tinted",
|
||||
"value" : {
|
||||
"enabled" : false,
|
||||
"value" : 1
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"blur-material" : 0.53,
|
||||
"hidden" : false,
|
||||
"layers" : [
|
||||
{
|
||||
"fill-specializations" : [
|
||||
{
|
||||
"value" : {
|
||||
"automatic-gradient" : "srgb:1.00000,0.45770,0.00000,1.00000"
|
||||
}
|
||||
},
|
||||
{
|
||||
"appearance" : "tinted",
|
||||
"value" : {
|
||||
"linear-gradient" : [
|
||||
"gray:0.69290,1.00000",
|
||||
"srgb:0.30390,0.30390,0.30390,1.00000"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"glass" : true,
|
||||
"hidden" : false,
|
||||
"image-name" : "orb.svg",
|
||||
"name" : "orb",
|
||||
"position" : {
|
||||
"scale" : 1.15,
|
||||
"translation-in-points" : [
|
||||
0,
|
||||
0
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"lighting" : "combined",
|
||||
"name" : "Group",
|
||||
"position" : {
|
||||
"scale" : 1,
|
||||
"translation-in-points" : [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"shadow" : {
|
||||
"kind" : "layer-color",
|
||||
"opacity" : 1
|
||||
},
|
||||
"specular" : true,
|
||||
"translucency" : {
|
||||
"enabled" : true,
|
||||
"value" : 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"blur-material" : null,
|
||||
"layers" : [
|
||||
{
|
||||
"blend-mode" : "normal",
|
||||
"fill-specializations" : [
|
||||
{
|
||||
"value" : "automatic"
|
||||
},
|
||||
{
|
||||
"appearance" : "light",
|
||||
"value" : {
|
||||
"automatic-gradient" : "extended-gray:0.45594,1.00000"
|
||||
}
|
||||
},
|
||||
{
|
||||
"appearance" : "dark",
|
||||
"value" : {
|
||||
"automatic-gradient" : "extended-gray:0.57231,1.00000"
|
||||
}
|
||||
}
|
||||
],
|
||||
"hidden" : false,
|
||||
"image-name" : "cog.svg",
|
||||
"name" : "cog",
|
||||
"opacity" : 1,
|
||||
"position" : {
|
||||
"scale" : 1.15,
|
||||
"translation-in-points" : [
|
||||
0,
|
||||
0
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"lighting" : "combined",
|
||||
"shadow" : {
|
||||
"kind" : "layer-color",
|
||||
"opacity" : 1
|
||||
},
|
||||
"specular" : true,
|
||||
"translucency" : {
|
||||
"enabled" : false,
|
||||
"value" : 0.72
|
||||
}
|
||||
}
|
||||
],
|
||||
"supported-platforms" : {
|
||||
"squares" : [
|
||||
"macOS"
|
||||
]
|
||||
}
|
||||
}
|
|
@ -558,7 +558,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 83D3C4CE201C654F005564CB /* Build configuration list for PBXProject "libAdPlug" */;
|
||||
|
@ -743,6 +743,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
|
@ -802,6 +803,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
|
|
|
@ -632,7 +632,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1640;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 8359FF3617FEF39F0060F3ED /* Build configuration list for PBXProject "File_Extractor" */;
|
||||
|
@ -811,6 +811,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -863,6 +864,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -628,7 +628,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
};
|
||||
buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "GME" */;
|
||||
compatibilityVersion = "Xcode 12.0";
|
||||
|
@ -849,6 +849,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Debug;
|
||||
|
@ -896,6 +897,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Release;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -249,7 +249,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 8343792F17F97BDB00584396 /* Build configuration list for PBXProject "HighlyAdvanced" */;
|
||||
|
@ -375,6 +375,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -426,6 +427,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -188,7 +188,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 8360EF0A17F92C91005208A4 /* Build configuration list for PBXProject "HighlyExperimental" */;
|
||||
|
@ -312,6 +312,7 @@
|
|||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -363,6 +364,7 @@
|
|||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -160,7 +160,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 834378D817F96E2600584396 /* Build configuration list for PBXProject "HighlyQuixotic" */;
|
||||
|
@ -284,6 +284,7 @@
|
|||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
SKIP_INSTALL = YES;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -342,6 +343,7 @@
|
|||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
SKIP_INSTALL = YES;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -202,7 +202,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 8343786817F9658E00584396 /* Build configuration list for PBXProject "HighlyTheoretical" */;
|
||||
|
@ -331,6 +331,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -391,6 +392,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -142,7 +142,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 836FB550182053D700B3AD2D /* Build configuration list for PBXProject "HivelyPlayer" */;
|
||||
|
@ -261,6 +261,7 @@
|
|||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
SKIP_INSTALL = YES;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -314,6 +315,7 @@
|
|||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
SKIP_INSTALL = YES;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -243,7 +243,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
};
|
||||
buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "MPCDec" */;
|
||||
compatibilityVersion = "Xcode 12.0";
|
||||
|
@ -410,6 +410,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Debug;
|
||||
|
@ -455,6 +456,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Release;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -2347,7 +2347,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 83E5EFB71FFEF7CC00659F0F /* Build configuration list for PBXProject "libOpenMPT" */;
|
||||
|
@ -2611,6 +2611,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
USE_HEADERMAP = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
|
@ -2684,6 +2685,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
USE_HEADERMAP = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
|
|
|
@ -251,7 +251,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 83848FB21807623F00E7332D /* Build configuration list for PBXProject "SSEQPlayer" */;
|
||||
|
@ -380,6 +380,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -431,6 +432,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -187,7 +187,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
};
|
||||
buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "Shorten" */;
|
||||
compatibilityVersion = "Xcode 12.0";
|
||||
|
@ -362,6 +362,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Debug;
|
||||
|
@ -414,6 +415,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Release;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -230,7 +230,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 83D731161A74968900CA1366 /* Build configuration list for PBXProject "g719" */;
|
||||
|
@ -353,6 +353,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
|
@ -407,6 +408,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -959,7 +959,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 83C8B61C18AF57770071B040 /* Build configuration list for PBXProject "lazyusf2" */;
|
||||
|
@ -1123,6 +1123,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -1175,6 +1176,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -186,7 +186,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
TargetAttributes = {
|
||||
835FC6AF23F61BF0006960FA = {
|
||||
|
@ -308,6 +308,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
|
@ -368,6 +369,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
|
|
|
@ -126,7 +126,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 83D3C675201D37D8005564CB /* Build configuration list for PBXProject "libbinio" */;
|
||||
|
@ -233,6 +233,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
|
@ -292,6 +293,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
|
|
|
@ -274,7 +274,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
TargetAttributes = {
|
||||
83D6761F26539A7100252130 = {
|
||||
CreatedOnToolsVersion = 12.5;
|
||||
|
@ -441,6 +441,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
|
@ -542,6 +543,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
|
|
|
@ -263,7 +263,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
TargetAttributes = {
|
||||
83D676AD26539F4E00252130 = {
|
||||
CreatedOnToolsVersion = 12.5;
|
||||
|
@ -429,6 +429,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
|
@ -530,6 +531,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
|
|
|
@ -1147,7 +1147,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
TargetAttributes = {
|
||||
EDBE8EF825E7E641001EB4A4 = {
|
||||
CreatedOnToolsVersion = 12.5;
|
||||
|
@ -1320,6 +1320,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
|
@ -1380,6 +1381,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
|
|
|
@ -1105,7 +1105,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 83CA240D1D7BC47C00F2EA53 /* Build configuration list for PBXProject "mGBA" */;
|
||||
|
@ -1266,6 +1266,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
|
@ -1324,6 +1325,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -172,7 +172,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 83B066A6180D56B9008E3612 /* Build configuration list for PBXProject "midi_processing" */;
|
||||
|
@ -301,6 +301,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -354,6 +355,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -146,7 +146,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 8343781617F93CB500584396 /* Build configuration list for PBXProject "psflib" */;
|
||||
|
@ -264,6 +264,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -315,6 +316,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -62,7 +62,7 @@
|
|||
8306B0EB20984590000302D4 /* wave_segmented.c in Sources */ = {isa = PBXBuildFile; fileRef = 8306B0D02098458F000302D4 /* wave_segmented.c */; };
|
||||
8306B0EC20984590000302D4 /* pcm_sre.c in Sources */ = {isa = PBXBuildFile; fileRef = 8306B0D12098458F000302D4 /* pcm_sre.c */; };
|
||||
8306B0ED20984590000302D4 /* txtp.c in Sources */ = {isa = PBXBuildFile; fileRef = 8306B0D22098458F000302D4 /* txtp.c */; };
|
||||
8306B0EE20984590000302D4 /* smc_smh.c in Sources */ = {isa = PBXBuildFile; fileRef = 8306B0D32098458F000302D4 /* smc_smh.c */; };
|
||||
8306B0EE20984590000302D4 /* smh_smc.c in Sources */ = {isa = PBXBuildFile; fileRef = 8306B0D32098458F000302D4 /* smh_smc.c */; };
|
||||
8306B0EF20984590000302D4 /* ubi_bao.c in Sources */ = {isa = PBXBuildFile; fileRef = 8306B0D420984590000302D4 /* ubi_bao.c */; };
|
||||
8306B0F020984590000302D4 /* atsl.c in Sources */ = {isa = PBXBuildFile; fileRef = 8306B0D520984590000302D4 /* atsl.c */; };
|
||||
8306B0F120984590000302D4 /* ppst.c in Sources */ = {isa = PBXBuildFile; fileRef = 8306B0D620984590000302D4 /* ppst.c */; };
|
||||
|
@ -154,6 +154,8 @@
|
|||
832BF82B21E0514B006F50F1 /* xopus.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BF81921E0514A006F50F1 /* xopus.c */; };
|
||||
832BF82C21E0514B006F50F1 /* hca_keys_awb.h in Headers */ = {isa = PBXBuildFile; fileRef = 832BF81A21E0514A006F50F1 /* hca_keys_awb.h */; };
|
||||
832BF82D21E0514B006F50F1 /* nus3audio.c in Sources */ = {isa = PBXBuildFile; fileRef = 832BF81B21E0514B006F50F1 /* nus3audio.c */; };
|
||||
832F9EA62E29047F00D08728 /* srcd.c in Sources */ = {isa = PBXBuildFile; fileRef = 832F9EA52E29047F00D08728 /* srcd.c */; };
|
||||
832F9EA82E2905D500D08728 /* mhwk.c in Sources */ = {isa = PBXBuildFile; fileRef = 832F9EA72E2905D500D08728 /* mhwk.c */; };
|
||||
832FC36C278FA4CB0056A860 /* ubi_ckd_cwav_streamfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 832FC367278FA4CB0056A860 /* ubi_ckd_cwav_streamfile.h */; };
|
||||
832FC36D278FA4CB0056A860 /* ubi_ckd_cwav.c in Sources */ = {isa = PBXBuildFile; fileRef = 832FC36B278FA4CB0056A860 /* ubi_ckd_cwav.c */; };
|
||||
832FC36F278FAE3E0056A860 /* encrypted_mc161_streamfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 832FC36E278FAE3E0056A860 /* encrypted_mc161_streamfile.h */; };
|
||||
|
@ -515,7 +517,7 @@
|
|||
836F6F9418BDC2190095E648 /* iivb.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E5818BDC2180095E648 /* iivb.c */; };
|
||||
836F6F9518BDC2190095E648 /* kraw.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E5918BDC2180095E648 /* kraw.c */; };
|
||||
836F6F9618BDC2190095E648 /* lsf.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E5A18BDC2180095E648 /* lsf.c */; };
|
||||
836F6F9818BDC2190095E648 /* mattel_hyperscan.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E5C18BDC2180095E648 /* mattel_hyperscan.c */; };
|
||||
836F6F9818BDC2190095E648 /* kvag.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E5C18BDC2180095E648 /* kvag.c */; };
|
||||
836F6F9918BDC2190095E648 /* maxis_xa.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E5D18BDC2180095E648 /* maxis_xa.c */; };
|
||||
836F6F9A18BDC2190095E648 /* meta.h in Headers */ = {isa = PBXBuildFile; fileRef = 836F6E5E18BDC2180095E648 /* meta.h */; };
|
||||
836F6F9C18BDC2190095E648 /* mp4.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E6018BDC2180095E648 /* mp4.c */; };
|
||||
|
@ -1020,7 +1022,7 @@
|
|||
8306B0D02098458F000302D4 /* wave_segmented.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wave_segmented.c; sourceTree = "<group>"; };
|
||||
8306B0D12098458F000302D4 /* pcm_sre.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pcm_sre.c; sourceTree = "<group>"; };
|
||||
8306B0D22098458F000302D4 /* txtp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = txtp.c; sourceTree = "<group>"; };
|
||||
8306B0D32098458F000302D4 /* smc_smh.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smc_smh.c; sourceTree = "<group>"; };
|
||||
8306B0D32098458F000302D4 /* smh_smc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smh_smc.c; sourceTree = "<group>"; };
|
||||
8306B0D420984590000302D4 /* ubi_bao.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ubi_bao.c; sourceTree = "<group>"; };
|
||||
8306B0D520984590000302D4 /* atsl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = atsl.c; sourceTree = "<group>"; };
|
||||
8306B0D620984590000302D4 /* ppst.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ppst.c; sourceTree = "<group>"; };
|
||||
|
@ -1112,6 +1114,8 @@
|
|||
832BF81921E0514A006F50F1 /* xopus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xopus.c; sourceTree = "<group>"; };
|
||||
832BF81A21E0514A006F50F1 /* hca_keys_awb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hca_keys_awb.h; sourceTree = "<group>"; };
|
||||
832BF81B21E0514B006F50F1 /* nus3audio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nus3audio.c; sourceTree = "<group>"; };
|
||||
832F9EA52E29047F00D08728 /* srcd.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = srcd.c; sourceTree = "<group>"; };
|
||||
832F9EA72E2905D500D08728 /* mhwk.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = mhwk.c; sourceTree = "<group>"; };
|
||||
832FC367278FA4CB0056A860 /* ubi_ckd_cwav_streamfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ubi_ckd_cwav_streamfile.h; sourceTree = "<group>"; };
|
||||
832FC36B278FA4CB0056A860 /* ubi_ckd_cwav.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ubi_ckd_cwav.c; sourceTree = "<group>"; };
|
||||
832FC36E278FAE3E0056A860 /* encrypted_mc161_streamfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = encrypted_mc161_streamfile.h; sourceTree = "<group>"; };
|
||||
|
@ -1473,7 +1477,7 @@
|
|||
836F6E5818BDC2180095E648 /* iivb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = iivb.c; sourceTree = "<group>"; };
|
||||
836F6E5918BDC2180095E648 /* kraw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = kraw.c; sourceTree = "<group>"; };
|
||||
836F6E5A18BDC2180095E648 /* lsf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lsf.c; sourceTree = "<group>"; };
|
||||
836F6E5C18BDC2180095E648 /* mattel_hyperscan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mattel_hyperscan.c; sourceTree = "<group>"; };
|
||||
836F6E5C18BDC2180095E648 /* kvag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = kvag.c; sourceTree = "<group>"; };
|
||||
836F6E5D18BDC2180095E648 /* maxis_xa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = maxis_xa.c; sourceTree = "<group>"; };
|
||||
836F6E5E18BDC2180095E648 /* meta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = meta.h; sourceTree = "<group>"; };
|
||||
836F6E6018BDC2180095E648 /* mp4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mp4.c; sourceTree = "<group>"; };
|
||||
|
@ -2498,6 +2502,7 @@
|
|||
83D20074248DDB760048BD24 /* ktsr.c */,
|
||||
834F7CFE2C7085EA003AC386 /* ktsr_streamfile.h */,
|
||||
830EBE122004656E0023AA10 /* ktss.c */,
|
||||
836F6E5C18BDC2180095E648 /* kvag.c */,
|
||||
8373342423F60CDB00DE14DC /* kwb.c */,
|
||||
835B9B8C2730BF2C00F87EE3 /* lopu_fb.c */,
|
||||
836F6E9918BDC2180095E648 /* lp_ap_lep.c */,
|
||||
|
@ -2509,11 +2514,11 @@
|
|||
8373341F23F60CDB00DE14DC /* lrmd_streamfile.h */,
|
||||
836F6E5A18BDC2180095E648 /* lsf.c */,
|
||||
83EDE5D61A70951A005F5D84 /* madp.c */,
|
||||
836F6E5C18BDC2180095E648 /* mattel_hyperscan.c */,
|
||||
836F6E5D18BDC2180095E648 /* maxis_xa.c */,
|
||||
836F6E9D18BDC2180095E648 /* mcg.c */,
|
||||
83709E011ECBC1A4005C03D3 /* mcss.c */,
|
||||
836F6E5E18BDC2180095E648 /* meta.h */,
|
||||
832F9EA72E2905D500D08728 /* mhwk.c */,
|
||||
834FE0DE215C79EB000A5D3D /* mib_mih.c */,
|
||||
836F6EAC18BDC2180095E648 /* mic_koei.c */,
|
||||
83B73C4A2D8FF19800A57F08 /* mio.c */,
|
||||
|
@ -2660,7 +2665,7 @@
|
|||
83CBF5422D46339200AA2D75 /* skex.c */,
|
||||
836F6EBB18BDC2180095E648 /* sl3.c */,
|
||||
836F6EF218BDC2190095E648 /* sli.c */,
|
||||
8306B0D32098458F000302D4 /* smc_smh.c */,
|
||||
8306B0D32098458F000302D4 /* smh_smc.c */,
|
||||
837CEAEB23487F2B00E62A4A /* smk.c */,
|
||||
83F0AA5C21E2028B004BBC04 /* smp.c */,
|
||||
836F6EBC18BDC2180095E648 /* smpl.c */,
|
||||
|
@ -2679,6 +2684,7 @@
|
|||
83A21F84201D8981000F04B9 /* sqex_sead.c */,
|
||||
837CEAF023487F2C00E62A4A /* sqex_streamfile.h */,
|
||||
83C0C75C2AA435C60056AFD8 /* squeak.c */,
|
||||
832F9EA52E29047F00D08728 /* srcd.c */,
|
||||
834FE0D6215C79E9000A5D3D /* sscf.c */,
|
||||
8396BE792935FC2F00CD0580 /* sscf_encrypted.h */,
|
||||
8396BE782935FC2F00CD0580 /* sscf_encrypted.c */,
|
||||
|
@ -3127,7 +3133,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 836F6B3318BDB8880095E648 /* Build configuration list for PBXProject "libvgmstream" */;
|
||||
|
@ -3245,7 +3251,7 @@
|
|||
83A21F8D201D8982000F04B9 /* sqex_sead.c in Sources */,
|
||||
834F7ED32C70A786003AC386 /* mixing.c in Sources */,
|
||||
83EED5D3203A8BC7008BEB45 /* ea_swvr.c in Sources */,
|
||||
8306B0EE20984590000302D4 /* smc_smh.c in Sources */,
|
||||
8306B0EE20984590000302D4 /* smh_smc.c in Sources */,
|
||||
834F7DAB2C7093EA003AC386 /* asf_decoder.c in Sources */,
|
||||
834F7E0C2C7093EA003AC386 /* ws_decoder.c in Sources */,
|
||||
834F7EDB2C70A786003AC386 /* streamfile_api.c in Sources */,
|
||||
|
@ -3553,7 +3559,7 @@
|
|||
834F7E962C70A45C003AC386 /* txtp_parser.c in Sources */,
|
||||
834FE0EA215C79ED000A5D3D /* aif_asobo.c in Sources */,
|
||||
836F700418BDC2190095E648 /* vas_kceo.c in Sources */,
|
||||
836F6F9818BDC2190095E648 /* mattel_hyperscan.c in Sources */,
|
||||
836F6F9818BDC2190095E648 /* kvag.c in Sources */,
|
||||
8306B0BA20984552000302D4 /* blocked_wsi.c in Sources */,
|
||||
834F7E802C709EA0003AC386 /* adp_ongakukan.c in Sources */,
|
||||
83BAFB6C19F45EB3005DAB60 /* bfstm.c in Sources */,
|
||||
|
@ -3667,6 +3673,7 @@
|
|||
834F7DB62C7093EA003AC386 /* compresswave_lib.c in Sources */,
|
||||
834F7E042C7093EA003AC386 /* vorbis_custom_utils_awc.c in Sources */,
|
||||
8306B0EC20984590000302D4 /* pcm_sre.c in Sources */,
|
||||
832F9EA62E29047F00D08728 /* srcd.c in Sources */,
|
||||
836F6FC818BDC2190095E648 /* pos.c in Sources */,
|
||||
836F6F8918BDC2190095E648 /* gca.c in Sources */,
|
||||
836F6FA418BDC2190095E648 /* nds_hwas.c in Sources */,
|
||||
|
@ -3805,6 +3812,7 @@
|
|||
836F6FA918BDC2190095E648 /* ngc_adpdtk.c in Sources */,
|
||||
836F6FDC18BDC2190095E648 /* iab.c in Sources */,
|
||||
83C7282122BC893D00678B4A /* msf_konami.c in Sources */,
|
||||
832F9EA82E2905D500D08728 /* mhwk.c in Sources */,
|
||||
833E82F72A2858EF00CD0580 /* reader.c in Sources */,
|
||||
83B69B222845A26600D2435A /* bw_mp3_riff.c in Sources */,
|
||||
834F7E192C709A1D003AC386 /* ea_schl_abk.c in Sources */,
|
||||
|
@ -3981,6 +3989,7 @@
|
|||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
SKIP_INSTALL = YES;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -4066,6 +4075,7 @@
|
|||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
SKIP_INSTALL = YES;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.7">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -10,7 +10,6 @@ void decode_tantalus(VGMSTREAMCHANNEL* stream, sample_t* outbuf, int channelspac
|
|||
size_t bytes_per_frame, samples_per_frame;
|
||||
|
||||
int32_t hist1 = stream->adpcm_history1_32;
|
||||
int32_t hist2 = stream->adpcm_history2_32;
|
||||
|
||||
|
||||
/* external interleave (fixed size), mono */
|
||||
|
|
|
@ -347,6 +347,7 @@ static const char* extension_list[] = {
|
|||
"mds",
|
||||
"mdsp",
|
||||
"med",
|
||||
"mhwk",
|
||||
"mjb",
|
||||
"mi4", //fake extension for .mib (renamed, to be removed)
|
||||
"mib",
|
||||
|
@ -536,7 +537,7 @@ static const char* extension_list[] = {
|
|||
"skx",
|
||||
"slb", //txth/reserved [THE Nekomura no Hitobito (PS2)]
|
||||
"sli",
|
||||
"smc",
|
||||
"smh",
|
||||
"smk",
|
||||
"smp",
|
||||
"smv",
|
||||
|
@ -558,6 +559,7 @@ static const char* extension_list[] = {
|
|||
"spsd",
|
||||
"spw",
|
||||
"srsa",
|
||||
"srcd",
|
||||
"ss2",
|
||||
"ssd", //txth/reserved [Zack & Wiki (Wii)]
|
||||
"ssf",
|
||||
|
@ -1253,7 +1255,7 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_LSF_N1NJ4N, "Gizmondo Studios Helsingborg LSF header"},
|
||||
{meta_XWAV, "feelplus XWAV header"},
|
||||
{meta_RAW_SNDS, "PC .snds raw header"},
|
||||
{meta_HYPERSCAN_KVAG, "Mattel Hyperscan KVAG"},
|
||||
{meta_KVAG, "Mattel KVAG header"},
|
||||
{meta_PSND, "Polarbit PSND header"},
|
||||
{meta_ADP_WILDFIRE, "Wildfire ADP! header"},
|
||||
{meta_QD_ADP, "Quantic Dream .ADP header"},
|
||||
|
@ -1479,6 +1481,8 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_AUDIOPKG, "Inevitable .AUDIOPKG header"},
|
||||
{meta_SWAR, "Nintendo SWAR header"},
|
||||
{meta_IVB, "Metro IVB header"},
|
||||
{meta_SRCD, "Capcom SRCD header"},
|
||||
{meta_MHWK, "Broderbund MHWK header"}
|
||||
};
|
||||
|
||||
void get_vgmstream_coding_description(VGMSTREAM* vgmstream, char* out, size_t out_size) {
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
#include "layout.h"
|
||||
#include "../vgmstream.h"
|
||||
|
||||
//MxCh blocked layout as used by Lego Island
|
||||
void block_update_mxch(off_t block_offset, VGMSTREAM * vgmstream) {
|
||||
vgmstream->current_block_offset = block_offset;
|
||||
vgmstream->next_block_offset = block_offset +
|
||||
read_32bitLE(vgmstream->current_block_offset+4,vgmstream->ch[0].streamfile)+8;
|
||||
/* skip pad blocks */
|
||||
while (
|
||||
read_32bitBE(vgmstream->current_block_offset,
|
||||
vgmstream->ch[0].streamfile) == 0x70616420)
|
||||
{
|
||||
vgmstream->current_block_offset = vgmstream->next_block_offset;
|
||||
vgmstream->next_block_offset = vgmstream->current_block_offset +
|
||||
read_32bitLE(vgmstream->current_block_offset+4,vgmstream->ch[0].streamfile)+8;
|
||||
}
|
||||
vgmstream->current_block_size =
|
||||
read_32bitLE(vgmstream->current_block_offset+4, vgmstream->ch[0].streamfile)-0xe;
|
||||
// only one channel for now
|
||||
vgmstream->ch[0].offset = vgmstream->current_block_offset+8+0xe;
|
||||
}
|
||||
#include "layout.h"
|
||||
#include "../vgmstream.h"
|
||||
|
||||
//MxCh blocked layout as used by Lego Island
|
||||
void block_update_mxch(off_t block_offset, VGMSTREAM * vgmstream) {
|
||||
vgmstream->current_block_offset = block_offset;
|
||||
vgmstream->next_block_offset = block_offset +
|
||||
read_32bitLE(vgmstream->current_block_offset+4,vgmstream->ch[0].streamfile)+8;
|
||||
/* skip pad blocks */
|
||||
while (
|
||||
read_32bitBE(vgmstream->current_block_offset,
|
||||
vgmstream->ch[0].streamfile) == 0x70616420)
|
||||
{
|
||||
vgmstream->current_block_offset = vgmstream->next_block_offset;
|
||||
vgmstream->next_block_offset = vgmstream->current_block_offset +
|
||||
read_32bitLE(vgmstream->current_block_offset+4,vgmstream->ch[0].streamfile)+8;
|
||||
}
|
||||
vgmstream->current_block_size =
|
||||
read_32bitLE(vgmstream->current_block_offset+4, vgmstream->ch[0].streamfile)-0xe;
|
||||
// only one channel for now
|
||||
vgmstream->ch[0].offset = vgmstream->current_block_offset+8+0xe;
|
||||
}
|
||||
|
|
|
@ -25,13 +25,13 @@ VGMSTREAM* init_vgmstream_astl(STREAMFILE* sf) {
|
|||
// 28: -1?
|
||||
// 2c: -1?
|
||||
|
||||
if (read_u16le(0x30,sf) != 0x0001) // PCM only
|
||||
return NULL;
|
||||
channels = read_u16le(0x32, sf);
|
||||
int sample_rate = read_s32le(0x34,sf);
|
||||
// 38: bitrate
|
||||
// 3a: block size
|
||||
// 3c: bps
|
||||
// fmt-like
|
||||
int format = read_u16le(0x30 + 0x00, sf);
|
||||
channels = read_u16le(0x30 + 0x02, sf);
|
||||
int sample_rate = read_s32le(0x30 + 0x04, sf);
|
||||
// 08: avg bitrate
|
||||
// 0a: block size
|
||||
// 0e: bps
|
||||
|
||||
loop_flag = 0; // unlike X360 no apparent loop info in the files
|
||||
|
||||
|
@ -42,11 +42,51 @@ VGMSTREAM* init_vgmstream_astl(STREAMFILE* sf) {
|
|||
|
||||
vgmstream->meta_type = meta_ASTL;
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
vgmstream->num_samples = pcm16_bytes_to_samples(data_size, channels);
|
||||
|
||||
vgmstream->coding_type = coding_PCM16LE;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x2;
|
||||
switch(format) {
|
||||
case 0x0001:
|
||||
vgmstream->num_samples = pcm16_bytes_to_samples(data_size, channels);
|
||||
vgmstream->coding_type = coding_PCM16LE;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x2;
|
||||
break;
|
||||
|
||||
#ifdef VGM_USE_FFMPEG
|
||||
case 0xFFFE: { // WAVEFORMATEXTENSIBLE
|
||||
uint32_t avg_bitrate = read_u32le(0x30 + 0x08, sf);
|
||||
uint16_t block_size = read_u16le(0x30 + 0x0c, sf);
|
||||
uint32_t channel_layout = read_u32le(0x30 + 0x14, sf);
|
||||
// actually a GUID but first 32b matches fmt (0x0162 / STATIC_KSDATAFORMAT_SUBTYPE_WMAUDIO3 only?)
|
||||
uint32_t xwma_format = read_u32le(0x30 + 0x18, sf);
|
||||
|
||||
uint32_t dpds_offset = 0x30 + 0x28;
|
||||
uint32_t dpds_size;
|
||||
uint32_t offset = dpds_offset;
|
||||
// TODO channel layout
|
||||
|
||||
vgmstream->codec_data = init_ffmpeg_xwma(sf, start_offset, data_size, xwma_format, channels, sample_rate, avg_bitrate, block_size);
|
||||
if (!vgmstream->codec_data) goto fail;
|
||||
vgmstream->coding_type = coding_FFmpeg;
|
||||
vgmstream->layout_type = layout_none;
|
||||
|
||||
vgmstream->channel_layout = channel_layout;
|
||||
|
||||
// somehow there is no dpds size, so find last value before null padding
|
||||
while (offset < start_offset) {
|
||||
uint32_t sample = read_u32le(offset, sf);
|
||||
if (sample == 0)
|
||||
break;
|
||||
offset += 0x04;
|
||||
}
|
||||
|
||||
dpds_size = offset - dpds_offset;
|
||||
vgmstream->num_samples = xwma_dpds_get_samples(sf, dpds_offset, dpds_size, channels, false);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
default:
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
||||
|
|
|
@ -9,7 +9,7 @@ VGMSTREAM * init_vgmstream_bar(STREAMFILE *streamFile) {
|
|||
off_t start_offset;
|
||||
off_t ch2_start_offset;
|
||||
int loop_flag;
|
||||
int channel_count;
|
||||
int channel_count;
|
||||
long file_size;
|
||||
|
||||
|
||||
|
|
|
@ -175,10 +175,10 @@ VGMSTREAM* init_vgmstream_ea_swvr(STREAMFILE* sf) {
|
|||
do {
|
||||
block_update(vgmstream->next_block_offset,vgmstream);
|
||||
switch(vgmstream->coding_type) {
|
||||
case coding_PSX: num_samples = ps_bytes_to_samples(vgmstream->current_block_size,1); break;
|
||||
case coding_NGC_DSP: num_samples = dsp_bytes_to_samples(vgmstream->current_block_size,1); break;
|
||||
case coding_PSX: num_samples = ps_bytes_to_samples(vgmstream->current_block_size,1); break;
|
||||
case coding_NGC_DSP: num_samples = dsp_bytes_to_samples(vgmstream->current_block_size,1); break;
|
||||
case coding_PCM8_U_int: num_samples = pcm_bytes_to_samples(vgmstream->current_block_size,1,8); break;
|
||||
default: num_samples = 0; break;
|
||||
default: num_samples = 0; break;
|
||||
}
|
||||
vgmstream->num_samples += num_samples;
|
||||
|
||||
|
|
|
@ -50,11 +50,18 @@ VGMSTREAM* init_vgmstream_fsb5_fev_bank(STREAMFILE* sf) {
|
|||
goto fail;
|
||||
|
||||
switch(chunk_type) {
|
||||
case 0x4C495354: /* "LIST" with "SNDH" (usually v0x28 but also in Fall Guys's BNK_Music_RoundReveal) */
|
||||
if (read_u32be(offset + 0x04, sf) == 0x534E4448) {
|
||||
case 0x4C495354: /* "LIST" */
|
||||
// "SNDH" (usually v0x28 but also in Fall Guys's BNK_Music_RoundReveal)
|
||||
if (read_u32be(offset + 0x04, sf) == get_id32be("SNDH")) {
|
||||
bank_offset = offset + 0x0c;
|
||||
bank_size = read_s32le(offset + 0x08,sf);
|
||||
}
|
||||
|
||||
// multiple CrankcaseAudio REV ADM3 [Rennsport (PC)]
|
||||
if (read_u32be(offset + 0x00, sf) == get_id32be("PEFX")) {
|
||||
bank_offset = offset;
|
||||
bank_size = chunk_size;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x534E4448: /* "SNDH" */
|
||||
|
|
|
@ -1572,6 +1572,9 @@ static const hcakey_info hcakey_list[] = {
|
|||
// Sand Land (multi)
|
||||
{910990237314908160}, // 0CA47CCB51010000
|
||||
|
||||
// Patapon 1 & 2 Reloaded (PC)
|
||||
{3316332033470531258}, // 2E05FA69EC4286BA
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,44 +1,45 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
|
||||
/* IDSP - from Inevitable Entertainment games [Defender (GC)] */
|
||||
VGMSTREAM * init_vgmstream_idsp_ie(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag, channel_count;
|
||||
|
||||
|
||||
/* checks */
|
||||
if ( !check_extensions(streamFile,"idsp") )
|
||||
goto fail;
|
||||
if (read_32bitBE(0x00,streamFile) != 0x49445350) /* "IDSP" */
|
||||
goto fail;
|
||||
|
||||
loop_flag = 0;
|
||||
channel_count = read_32bitBE(0x0C,streamFile);
|
||||
if (channel_count > 2) goto fail;
|
||||
start_offset = 0x70;
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_IDSP_IE;
|
||||
vgmstream->sample_rate = read_32bitBE(0x08,streamFile);
|
||||
vgmstream->coding_type = coding_NGC_DSP;
|
||||
vgmstream->num_samples = dsp_bytes_to_samples(read_32bitBE(0x04,streamFile), channel_count);
|
||||
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = read_32bitBE(0x10,streamFile);
|
||||
dsp_read_coefs_be(vgmstream,streamFile,0x14,0x2E);
|
||||
|
||||
if ( !vgmstream_open_stream(vgmstream, streamFile, start_offset) )
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
|
||||
/* IDSP - from Inevitable Entertainment games [Defender (GC)] */
|
||||
VGMSTREAM* init_vgmstream_idsp_ie(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag, channels;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!is_id32be(0x00, sf, "IDSP"))
|
||||
return NULL;
|
||||
if (!check_extensions(sf,"idsp"))
|
||||
return NULL;
|
||||
|
||||
channels = read_s32be(0x0C,sf);
|
||||
if (channels > 2) return NULL;
|
||||
|
||||
loop_flag = 0;
|
||||
start_offset = 0x70;
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_IDSP_IE;
|
||||
vgmstream->sample_rate = read_s32be(0x08,sf);
|
||||
vgmstream->coding_type = coding_NGC_DSP;
|
||||
vgmstream->num_samples = dsp_bytes_to_samples(read_u32be(0x04,sf), channels);
|
||||
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = read_u32be(0x10,sf);
|
||||
dsp_read_coefs_be(vgmstream, sf, 0x14, 0x2E);
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -1,115 +1,113 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* .IMC - from iNiS Gitaroo Man (PS2) */
|
||||
VGMSTREAM * init_vgmstream_imc(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag, channel_count, sample_rate, interleave, blocks;
|
||||
size_t file_size, data_size;
|
||||
|
||||
|
||||
/* checks */
|
||||
/* .imc: extension from the main container */
|
||||
if (!check_extensions(streamFile, "imc"))
|
||||
goto fail;
|
||||
|
||||
channel_count = read_32bitLE(0x00, streamFile);
|
||||
sample_rate = read_32bitLE(0x04, streamFile);
|
||||
interleave = read_32bitLE(0x08, streamFile) * 0x10; /* number of frames in a block */
|
||||
blocks = read_32bitLE(0x0c, streamFile); /* number of interleave blocks (even in mono) */
|
||||
|
||||
file_size = get_streamfile_size(streamFile);
|
||||
loop_flag = 0;
|
||||
start_offset = 0x10;
|
||||
|
||||
/* extra checks since the header is so simple */
|
||||
if (channel_count < 1 || channel_count > 8)
|
||||
goto fail;
|
||||
if (sample_rate < 11025 || sample_rate > 48000)
|
||||
/* game can play 11025, 16000, 22050, 32000, 44100, 48000. Anything else will be
|
||||
silent in-game. ST10.IMC subsongs 42-47 use 22000, those are unused silent audio */
|
||||
goto fail;
|
||||
if (interleave*blocks + start_offset != file_size)
|
||||
goto fail;
|
||||
|
||||
data_size = file_size - start_offset;
|
||||
data_size -= ps_find_padding(streamFile, start_offset, data_size, channel_count, interleave, 0);
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_IMC;
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
vgmstream->num_samples = ps_bytes_to_samples(data_size, channel_count);
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = interleave;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream,streamFile,start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* ****************************************************************************** */
|
||||
|
||||
/* .IMC in containers */
|
||||
VGMSTREAM * init_vgmstream_imc_container(STREAMFILE *streamFile) {
|
||||
VGMSTREAM *vgmstream = NULL;
|
||||
STREAMFILE *temp_streamFile = NULL;
|
||||
off_t header_offset, subfile_offset, next_offset, name_offset;
|
||||
size_t subfile_size;
|
||||
int total_subsongs, target_subsong = streamFile->stream_index;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(streamFile, "imc"))
|
||||
goto fail;
|
||||
|
||||
total_subsongs = read_32bitLE(0x00, streamFile);
|
||||
if (target_subsong == 0) target_subsong = 1;
|
||||
if (target_subsong < 0 || target_subsong > total_subsongs || total_subsongs < 1) goto fail;
|
||||
|
||||
|
||||
header_offset = 0x04 + 0x20*(target_subsong-1);
|
||||
|
||||
name_offset = header_offset + 0x00;
|
||||
/* 0x08: flags? (0x702ADE77|0x002ADE77|0x20000000|etc) */
|
||||
/* 0x0c: same for all songs in single .imc but varies between .imc */
|
||||
subfile_offset = read_32bitLE(header_offset + 0x10,streamFile);
|
||||
/* 0x14: flags/size? (0xF0950000|0x3CFA1200|etc) */
|
||||
/* 0x18: same for all songs in single .imc but varies between .imc */
|
||||
/* 0x1c: flags? (0 or 2) */
|
||||
|
||||
if (target_subsong == total_subsongs) {
|
||||
next_offset = get_streamfile_size(streamFile);
|
||||
}
|
||||
else {
|
||||
next_offset = read_32bitLE(header_offset + 0x20 + 0x10,streamFile);
|
||||
}
|
||||
subfile_size = next_offset - subfile_offset;
|
||||
|
||||
|
||||
temp_streamFile = setup_subfile_streamfile(streamFile, subfile_offset,subfile_size, NULL);
|
||||
if (!temp_streamFile) goto fail;
|
||||
|
||||
vgmstream = init_vgmstream_imc(temp_streamFile);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
close_streamfile(temp_streamFile);
|
||||
vgmstream->num_streams = total_subsongs;
|
||||
read_string(vgmstream->stream_name,0x08+1, name_offset,streamFile);
|
||||
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_streamfile(temp_streamFile);
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* .IMC (subfile) - from iNiS Gitaroo Man (PS2) */
|
||||
VGMSTREAM* init_vgmstream_imc(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
|
||||
/* checks */
|
||||
/* .imc: extension from the main container */
|
||||
if (!check_extensions(sf, "imc"))
|
||||
return NULL;
|
||||
|
||||
int channels = read_s32le(0x00, sf);
|
||||
int sample_rate = read_s32le(0x04, sf);
|
||||
int interleave = read_s32le(0x08, sf) * 0x10; // number of frames in a block
|
||||
int blocks = read_s32le(0x0c, sf); // number of interleave blocks (even in mono)
|
||||
|
||||
uint32_t start_offset = 0x10;
|
||||
uint32_t file_size = get_streamfile_size(sf);
|
||||
bool loop_flag = false;
|
||||
|
||||
// extra checks since the header is so simple
|
||||
if (channels < 1 || channels > 8)
|
||||
return NULL;
|
||||
|
||||
// Game can play 11025, 16000, 22050, 32000, 44100, 48000. Anything else will be
|
||||
// silent in-game. ST10.IMC subsongs 42-47 use 22000, those are unused silent audio
|
||||
if (sample_rate < 11025 || sample_rate > 48000)
|
||||
return NULL;
|
||||
|
||||
if (interleave * blocks + start_offset != file_size)
|
||||
return NULL;
|
||||
|
||||
uint32_t data_size = file_size - start_offset;
|
||||
data_size -= ps_find_padding(sf, start_offset, data_size, channels, interleave, 0);
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_IMC;
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
vgmstream->num_samples = ps_bytes_to_samples(data_size, channels);
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = interleave;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* ****************************************************************************** */
|
||||
|
||||
/* .IMC in containers */
|
||||
VGMSTREAM* init_vgmstream_imc_container(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
STREAMFILE* temp_sf = NULL;
|
||||
off_t header_offset, subfile_offset, next_offset, name_offset;
|
||||
size_t subfile_size;
|
||||
int total_subsongs, target_subsong = sf->stream_index;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(sf, "imc"))
|
||||
return NULL;
|
||||
|
||||
total_subsongs = read_s32le(0x00, sf);
|
||||
if (target_subsong == 0) target_subsong = 1;
|
||||
if (target_subsong < 0 || target_subsong > total_subsongs || total_subsongs < 1) goto fail;
|
||||
|
||||
|
||||
header_offset = 0x04 + 0x20 * (target_subsong - 1);
|
||||
|
||||
name_offset = header_offset + 0x00;
|
||||
/* 0x08: flags? (0x702ADE77|0x002ADE77|0x20000000|etc) */
|
||||
/* 0x0c: same for all songs in single .imc but varies between .imc */
|
||||
subfile_offset = read_u32le(header_offset + 0x10,sf);
|
||||
/* 0x14: flags/size? (0xF0950000|0x3CFA1200|etc) */
|
||||
/* 0x18: same for all songs in single .imc but varies between .imc */
|
||||
/* 0x1c: flags? (0 or 2) */
|
||||
|
||||
if (target_subsong == total_subsongs) {
|
||||
next_offset = get_streamfile_size(sf);
|
||||
}
|
||||
else {
|
||||
next_offset = read_u32le(header_offset + 0x20 + 0x10,sf);
|
||||
}
|
||||
subfile_size = next_offset - subfile_offset;
|
||||
|
||||
|
||||
temp_sf = setup_subfile_streamfile(sf, subfile_offset,subfile_size, NULL);
|
||||
if (!temp_sf) goto fail;
|
||||
|
||||
vgmstream = init_vgmstream_imc(temp_sf);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->num_streams = total_subsongs;
|
||||
read_string(vgmstream->stream_name,0x08+1, name_offset,sf);
|
||||
|
||||
close_streamfile(temp_sf);
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_streamfile(temp_sf);
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
|
32
Frameworks/vgmstream/vgmstream/src/meta/kvag.c
Normal file
32
Frameworks/vgmstream/vgmstream/src/meta/kvag.c
Normal file
|
@ -0,0 +1,32 @@
|
|||
#include "meta.h"
|
||||
#include "../util/meta_utils.h"
|
||||
|
||||
/* KVAG - Mattel Hyperscan games [Marvel Heroes (Hyperscan), X-Men (Hyperscan)] */
|
||||
VGMSTREAM* init_vgmstream_hyperscan_kvag(STREAMFILE* sf) {
|
||||
|
||||
/* checks */
|
||||
if (!is_id32be(0x00,sf, "KVAG"))
|
||||
return NULL;
|
||||
if (!check_extensions(sf,"bvg"))
|
||||
return NULL;
|
||||
|
||||
meta_header_t h = {0};
|
||||
h.meta = meta_KVAG;
|
||||
|
||||
h.stream_size = read_u32le(0x04, sf);
|
||||
h.sample_rate = read_s32le(0x08, sf);
|
||||
h.channels = read_s16le(0x0c, sf) + 1;
|
||||
h.stream_offset = 0x0e;
|
||||
|
||||
if (h.channels > 2) // 2ch is rare [Ben 10's Theme22ks]
|
||||
return NULL;
|
||||
|
||||
h.num_samples = ima_bytes_to_samples(h.stream_size, h.channels);
|
||||
|
||||
h.coding = coding_DVI_IMA;
|
||||
h.layout = layout_none;
|
||||
h.open_stream = true;
|
||||
h.sf = sf;
|
||||
|
||||
return alloc_metastream(&h);
|
||||
}
|
|
@ -1,66 +0,0 @@
|
|||
#include "meta.h"
|
||||
#include "../util.h"
|
||||
|
||||
/* Mattel Hyperscan,
|
||||
- Place all metas for this console here (there are just 5 games) */
|
||||
VGMSTREAM * init_vgmstream_hyperscan_kvag(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
char filename[PATH_LIMIT];
|
||||
off_t start_offset;
|
||||
int loop_flag = 0;
|
||||
int channel_count;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("bvg",filename_extension(filename))) goto fail;
|
||||
|
||||
/* check header */
|
||||
if (read_32bitBE(0x00,streamFile) != 0x4B564147) /* "KVAG" */
|
||||
goto fail;
|
||||
|
||||
channel_count = 1;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
/* fill in the vital statistics */
|
||||
start_offset = 0xE;
|
||||
vgmstream->channels = channel_count;
|
||||
vgmstream->sample_rate = read_32bitLE(0x8,streamFile);
|
||||
vgmstream->coding_type = coding_DVI_IMA;
|
||||
vgmstream->num_samples = read_32bitLE(0x4,streamFile)*2;
|
||||
|
||||
#if 0
|
||||
if (loop_flag) {
|
||||
vgmstream->loop_start_sample = (read_32bitLE(0x08,streamFile)-1)*28;
|
||||
vgmstream->loop_end_sample = (read_32bitLE(0x0c,streamFile)-1)*28;
|
||||
}
|
||||
#endif
|
||||
|
||||
vgmstream->layout_type = layout_none;
|
||||
vgmstream->meta_type = meta_HYPERSCAN_KVAG;
|
||||
|
||||
/* open the file for reading */
|
||||
{
|
||||
int i;
|
||||
STREAMFILE * file;
|
||||
file = streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
if (!file) goto fail;
|
||||
for (i=0;i<channel_count;i++) {
|
||||
vgmstream->ch[i].streamfile = file;
|
||||
|
||||
vgmstream->ch[i].channel_start_offset=
|
||||
vgmstream->ch[i].offset=start_offset+
|
||||
vgmstream->interleave_block_size*i;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return vgmstream;
|
||||
|
||||
/* clean up anything we may have opened */
|
||||
fail:
|
||||
if (vgmstream) close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -1,58 +1,54 @@
|
|||
#include "meta.h"
|
||||
#include "../util.h"
|
||||
|
||||
/* Maxis XA - found in Sim City 3000 (PC), The Sims 2 (PC) */
|
||||
VGMSTREAM * init_vgmstream_maxis_xa(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int avg_byte_rate, channel_count, loop_flag, resolution, sample_align, sample_rate;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
if (!check_extensions(streamFile,"xa"))
|
||||
goto fail;
|
||||
|
||||
/* check header */
|
||||
if ((read_16bitBE(0x00,streamFile) != 0x5841)) /* "XA" */
|
||||
goto fail;
|
||||
|
||||
/* check format tag */
|
||||
if ((read_16bitLE(0x08,streamFile) != 0x0001))
|
||||
goto fail;
|
||||
|
||||
channel_count = read_16bitLE(0x0A,streamFile);
|
||||
sample_rate = read_32bitLE(0x0C,streamFile);
|
||||
avg_byte_rate = read_32bitLE(0x10,streamFile);
|
||||
sample_align = read_16bitLE(0x14,streamFile);
|
||||
resolution = read_16bitLE(0x16,streamFile);
|
||||
|
||||
/* check alignment */
|
||||
if (sample_align != (resolution/8)*channel_count)
|
||||
goto fail;
|
||||
|
||||
/* check average byte rate */
|
||||
if (avg_byte_rate != sample_rate*sample_align)
|
||||
goto fail;
|
||||
|
||||
loop_flag = 0;
|
||||
start_offset = 0x18;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
vgmstream->num_samples = read_32bitLE(0x04,streamFile)/2/channel_count;
|
||||
|
||||
vgmstream->meta_type = meta_MAXIS_XA;
|
||||
vgmstream->coding_type = coding_MAXIS_XA;
|
||||
vgmstream->layout_type = layout_none;
|
||||
|
||||
/* open streams */
|
||||
if (!vgmstream_open_stream(vgmstream,streamFile,start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
#include "meta.h"
|
||||
#include "../util.h"
|
||||
|
||||
/* Maxis XA - found in Sim City 3000 (PC), The Sims 2 (PC) */
|
||||
VGMSTREAM* init_vgmstream_maxis_xa(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
|
||||
/* checks */
|
||||
if ((read_u32be(0x00,sf) & 0xFFFF0000) != get_id32be("XA\0\0")) // 02: "I"/"J"/null (version?)
|
||||
return NULL;
|
||||
|
||||
uint32_t pcm_size = read_u32le(0x04,sf);
|
||||
if (read_u16le(0x08,sf) != 0x0001)
|
||||
return NULL;
|
||||
|
||||
if (!check_extensions(sf,"xa"))
|
||||
return NULL;
|
||||
|
||||
int channels = read_s16le(0x0A,sf);
|
||||
int sample_rate = read_s32le(0x0C,sf);
|
||||
int avg_byte_rate = read_s32le(0x10,sf);
|
||||
int sample_align = read_u16le(0x14,sf);
|
||||
int resolution = read_u16le(0x16,sf);
|
||||
|
||||
/* check alignment */
|
||||
if (sample_align != (resolution / 8) * channels)
|
||||
return NULL;
|
||||
|
||||
/* check average byte rate */
|
||||
if (avg_byte_rate != sample_rate * sample_align)
|
||||
return NULL;
|
||||
|
||||
off_t start_offset = 0x18;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels, false);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
vgmstream->num_samples = pcm_size / sizeof(short) / channels;
|
||||
|
||||
vgmstream->meta_type = meta_MAXIS_XA;
|
||||
vgmstream->coding_type = coding_MAXIS_XA;
|
||||
vgmstream->layout_type = layout_none;
|
||||
|
||||
/* open streams */
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -701,7 +701,7 @@ VGMSTREAM * init_vgmstream_msb_msh(STREAMFILE * streamFile);
|
|||
|
||||
VGMSTREAM * init_vgmstream_txtp(STREAMFILE * streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_smc_smh(STREAMFILE * streamFile);
|
||||
VGMSTREAM* init_vgmstream_smh_smc(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ppst(STREAMFILE *streamFile);
|
||||
|
||||
|
@ -1035,4 +1035,8 @@ VGMSTREAM* init_vgmstream_swar(STREAMFILE* sf);
|
|||
|
||||
VGMSTREAM* init_vgmstream_ivb(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM* init_vgmstream_mhwk(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM* init_vgmstream_srcd(STREAMFILE* sf);
|
||||
|
||||
#endif
|
||||
|
|
104
Frameworks/vgmstream/vgmstream/src/meta/mhwk.c
Normal file
104
Frameworks/vgmstream/vgmstream/src/meta/mhwk.c
Normal file
|
@ -0,0 +1,104 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* MHWK - Broderbund's Mohawk engine (.mhk) */
|
||||
VGMSTREAM* init_vgmstream_mhwk(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
off_t start_offset = 0;
|
||||
int loop_flag = 0, channels = 0, sample_rate = 0, format = 0;
|
||||
int32_t num_samples = 0, loop_start = 0, loop_end = 0;
|
||||
off_t current_offset;
|
||||
uint32_t chunk_id;
|
||||
uint32_t chunk_size;
|
||||
|
||||
/* Check for MHWK magic word */
|
||||
if (!is_id32be(0x00, sf, "MHWK"))
|
||||
return NULL;
|
||||
|
||||
if (!check_extensions(sf, "mhk"))
|
||||
return NULL;
|
||||
|
||||
/* Check for WAVE magic word, which follows the MHWK header */
|
||||
if (!is_id32be(0x08, sf, "WAVE"))
|
||||
goto fail;
|
||||
|
||||
current_offset = 0x0C;
|
||||
|
||||
while (current_offset < get_streamfile_size(sf)) {
|
||||
chunk_id = read_u32be(current_offset, sf);
|
||||
chunk_size = read_u32be(current_offset + 0x04, sf);
|
||||
current_offset += 0x08;
|
||||
|
||||
if (chunk_id == get_id32be("Cue#")) {
|
||||
current_offset += chunk_size;
|
||||
continue;
|
||||
}
|
||||
else if (chunk_id == get_id32be("ADPC")) {
|
||||
current_offset += chunk_size;
|
||||
continue;
|
||||
}
|
||||
else if (chunk_id == get_id32be("Data")) {
|
||||
break;
|
||||
}
|
||||
else {
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
/* Data chunk header */
|
||||
|
||||
/* Header size is consistently 20 bytes from analysis */
|
||||
sample_rate = read_u16be(current_offset + 0x00, sf);
|
||||
num_samples = read_u32be(current_offset + 0x02, sf);
|
||||
/* 0x06: sample width (1 byte), 0x07: channels (1 byte) */
|
||||
channels = read_u8(current_offset + 0x07, sf);
|
||||
format = read_u16be(current_offset + 0x08, sf);
|
||||
|
||||
if (read_u16be(current_offset + 0x0A, sf) == 0xFFFF) {
|
||||
loop_flag = 1;
|
||||
loop_start = read_u32be(current_offset + 0x0C, sf);
|
||||
loop_end = read_u32be(current_offset + 0x10, sf);
|
||||
}
|
||||
|
||||
/* The actual audio data starts after the header's 20 bytes not 28 bytes */
|
||||
start_offset = current_offset + 0x14;
|
||||
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream)
|
||||
goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_MHWK;
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
vgmstream->num_samples = num_samples;
|
||||
vgmstream->loop_start_sample = loop_start;
|
||||
vgmstream->loop_end_sample = loop_end;
|
||||
|
||||
/* Determine coding type based on format ID */
|
||||
switch (format) {
|
||||
|
||||
//Myst 1993
|
||||
case 0x0000: /* 8-bit unsigned PCM. Default */
|
||||
vgmstream->coding_type = coding_PCM8_U;
|
||||
vgmstream->layout_type = layout_interleave; // Usually mono.
|
||||
vgmstream->interleave_block_size = 0x01;
|
||||
break;
|
||||
|
||||
//Carmen Sandiego: Word Detective
|
||||
case 0x0001: /* IMA ADPCM */
|
||||
vgmstream->coding_type = coding_IMA;
|
||||
vgmstream->layout_type = layout_none;
|
||||
break;
|
||||
|
||||
default: /* Unknown format */
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
||||
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -7,37 +7,37 @@
|
|||
static VGMSTREAM* init_vgmstream_mp4_aac_offset(STREAMFILE* sf, uint64_t start, uint64_t size);
|
||||
|
||||
VGMSTREAM* init_vgmstream_mp4_aac(STREAMFILE* sf) {
|
||||
return init_vgmstream_mp4_aac_offset( sf, 0x00, get_streamfile_size(sf));
|
||||
return init_vgmstream_mp4_aac_offset( sf, 0x00, get_streamfile_size(sf));
|
||||
}
|
||||
|
||||
static VGMSTREAM* init_vgmstream_mp4_aac_offset(STREAMFILE* sf, uint64_t start, uint64_t size) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
mp4_aac_codec_data* data = NULL;
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
mp4_aac_codec_data* data = NULL;
|
||||
|
||||
data = init_mp4_aac(sf);
|
||||
if (!data) goto fail;
|
||||
data = init_mp4_aac(sf);
|
||||
if (!data) goto fail;
|
||||
|
||||
int channels = mp4_aac_get_channels(data);
|
||||
int channels = mp4_aac_get_channels(data);
|
||||
|
||||
vgmstream = allocate_vgmstream(channels, 0);
|
||||
if (!vgmstream) goto fail;
|
||||
vgmstream = allocate_vgmstream(channels, 0);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = mp4_aac_get_sample_rate(data);
|
||||
vgmstream->num_samples = mp4_aac_get_samples(data);
|
||||
vgmstream->sample_rate = mp4_aac_get_sample_rate(data);
|
||||
vgmstream->num_samples = mp4_aac_get_samples(data);
|
||||
|
||||
vgmstream->codec_data = data;
|
||||
vgmstream->coding_type = coding_MP4_AAC;
|
||||
vgmstream->codec_data = data;
|
||||
vgmstream->coding_type = coding_MP4_AAC;
|
||||
|
||||
vgmstream->layout_type = layout_none;
|
||||
vgmstream->meta_type = meta_MP4;
|
||||
vgmstream->layout_type = layout_none;
|
||||
vgmstream->meta_type = meta_MP4;
|
||||
|
||||
return vgmstream;
|
||||
return vgmstream;
|
||||
fail:
|
||||
free_mp4_aac(data);
|
||||
if (vgmstream) {
|
||||
vgmstream->codec_data = NULL;
|
||||
close_vgmstream(vgmstream);
|
||||
}
|
||||
return NULL;
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,218 +1,218 @@
|
|||
//MxSt files ripped from Jukebox.si in Lego Island
|
||||
#include "meta.h"
|
||||
#include "../layout/layout.h"
|
||||
#include "../util.h"
|
||||
|
||||
VGMSTREAM * init_vgmstream_pc_mxst(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
char filename[PATH_LIMIT];
|
||||
|
||||
int loop_flag=0;
|
||||
int bits_per_sample;
|
||||
int channel_count;
|
||||
int sample_rate,bytes_per_second;
|
||||
long sample_count;
|
||||
int i;
|
||||
off_t file_size;
|
||||
off_t chunk_list_size=-1;
|
||||
off_t start_offset;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("mxst",filename_extension(filename))) goto fail;
|
||||
|
||||
/* looping info not found yet */
|
||||
//loop_flag = get_streamfile_size(streamFile) > 700000;
|
||||
|
||||
/* check MxSt header */
|
||||
if (0x4d785374 != read_32bitBE(0, streamFile)) goto fail;
|
||||
file_size = read_32bitLE(4, streamFile) + 8;
|
||||
if (file_size != get_streamfile_size(streamFile)) goto fail;
|
||||
|
||||
/* read chunks */
|
||||
{
|
||||
off_t MxDa=-1; /* points inside the MxDa chunk */
|
||||
off_t MxCh=-1; /* point at start of the first MxCh chunk */
|
||||
off_t chunk_offset = 8;
|
||||
uint32_t stream_id;
|
||||
while (chunk_offset < file_size)
|
||||
{
|
||||
uint32_t chunk_size = (read_32bitLE(chunk_offset+4, streamFile)+1)/2*2;
|
||||
switch (read_32bitBE(chunk_offset, streamFile))
|
||||
{
|
||||
case 0x4d784f62: /* MxOb */
|
||||
/* not interesting for playback */
|
||||
break;
|
||||
case 0x20574156: /* " WAV" */
|
||||
if (chunk_size == 1)
|
||||
chunk_size = 8;
|
||||
break;
|
||||
case 0x4c495354: /* LIST */
|
||||
{
|
||||
off_t first_item_offset = chunk_offset+0x14;
|
||||
off_t list_chunk_offset = first_item_offset+
|
||||
read_32bitLE(chunk_offset+0x10,streamFile);
|
||||
|
||||
if (read_32bitBE(chunk_offset+0x8,streamFile) == 0x4d784461) /* MxDa */
|
||||
MxDa = first_item_offset;
|
||||
else
|
||||
goto fail;
|
||||
|
||||
if (read_32bitBE(chunk_offset+0xC,streamFile) ==
|
||||
0x4d784368) /* MxCh */
|
||||
{
|
||||
MxCh = list_chunk_offset;
|
||||
chunk_list_size = chunk_size - (list_chunk_offset-(chunk_offset+8));
|
||||
}
|
||||
else
|
||||
goto fail;
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
goto fail;
|
||||
}
|
||||
|
||||
chunk_offset += 8 + chunk_size;
|
||||
if (chunk_offset > file_size) goto fail;
|
||||
}
|
||||
|
||||
if (MxDa == -1 || MxCh == -1 || chunk_list_size == -1) goto fail;
|
||||
|
||||
/* parse MxDa */
|
||||
{
|
||||
/* ??? */
|
||||
if (0 != read_16bitLE(MxDa+0x00,streamFile)) goto fail;
|
||||
stream_id = read_32bitLE(MxDa+0x2,streamFile);
|
||||
/* First sample (none in MxDa block) */
|
||||
if (-1 != read_32bitLE(MxDa+0x06,streamFile)) goto fail;
|
||||
/* size of format data */
|
||||
if (0x18 != read_32bitLE(MxDa+0x0a,streamFile)) goto fail;
|
||||
/* PCM */
|
||||
if (1 != read_16bitLE(MxDa+0x0e,streamFile)) goto fail;
|
||||
/* channel count */
|
||||
channel_count = read_16bitLE(MxDa+0x10,streamFile);
|
||||
/* only mono known */
|
||||
if (1 != channel_count) goto fail;
|
||||
sample_rate = read_32bitLE(MxDa+0x12,streamFile);
|
||||
bits_per_sample = read_16bitLE(MxDa+0x1c,streamFile);
|
||||
/* bytes per second */
|
||||
bytes_per_second = read_32bitLE(MxDa+0x16,streamFile);
|
||||
if (bits_per_sample/8*channel_count*sample_rate != bytes_per_second) goto fail;
|
||||
/* block align */
|
||||
if (bits_per_sample/8*channel_count !=
|
||||
read_16bitLE(MxDa+0x1a,streamFile)) goto fail;
|
||||
sample_count = read_32bitLE(MxDa+0x1e,streamFile)/(bits_per_sample/8)/channel_count;
|
||||
/* 2c? data offset in normal RIFF WAVE? */
|
||||
if (0x2c != read_32bitLE(MxDa+0x22,streamFile)) goto fail;
|
||||
}
|
||||
|
||||
/* parse through all MxCh for consistency check */
|
||||
{
|
||||
long samples = 0;
|
||||
int split_frames_seen = 0;
|
||||
off_t MxCh_offset = MxCh;
|
||||
while (MxCh_offset < MxCh+chunk_list_size)
|
||||
{
|
||||
uint16_t flags;
|
||||
if (read_32bitBE(MxCh_offset,streamFile)!=0x70616420) /*pad*/
|
||||
{
|
||||
if (read_32bitBE(MxCh_offset,streamFile)!=0x4d784368) /*MxCh*/
|
||||
goto fail;
|
||||
|
||||
flags = read_16bitLE(MxCh_offset+8+0,streamFile);
|
||||
|
||||
if (read_32bitLE(MxCh_offset+8+2,streamFile)!=stream_id)
|
||||
goto fail;
|
||||
|
||||
if (flags & 0x10)
|
||||
{
|
||||
split_frames_seen ++;
|
||||
if (split_frames_seen == 1)
|
||||
{
|
||||
if (read_32bitLE(MxCh_offset+8+6,streamFile)!=(samples*UINT64_C(1000)+sample_rate-1)/sample_rate)
|
||||
goto fail;
|
||||
}
|
||||
else if (split_frames_seen == 2)
|
||||
{
|
||||
if ( read_32bitLE(MxCh_offset+8+0xa,streamFile)!=
|
||||
read_32bitLE(MxCh_offset+4,streamFile)-0xe ) goto fail;
|
||||
split_frames_seen = 0;
|
||||
}
|
||||
else goto fail;
|
||||
}
|
||||
|
||||
if (!(flags & 0x10))
|
||||
{
|
||||
if (split_frames_seen != 0)
|
||||
{
|
||||
goto fail;
|
||||
}
|
||||
if (read_32bitLE(MxCh_offset+8+6,streamFile)!=(samples*UINT64_C(1000)+sample_rate-1)/sample_rate)
|
||||
goto fail;
|
||||
|
||||
if ( read_32bitLE(MxCh_offset+8+0xa,streamFile)!=
|
||||
read_32bitLE(MxCh_offset+4,streamFile)-0xe ) goto fail;
|
||||
}
|
||||
samples += (read_32bitLE(MxCh_offset+4,streamFile)-0xe)/(bits_per_sample/8/channel_count);
|
||||
|
||||
}
|
||||
MxCh_offset += 8 + (read_32bitLE(MxCh_offset+4,streamFile)+1)/2*2;
|
||||
if (MxCh_offset > MxCh+chunk_list_size) goto fail;
|
||||
}
|
||||
//printf("samples=%d sample_count=%d\n",samples,sample_count);
|
||||
//samples = (samples * (bits_per_sample/8) * channel_count + 31)/32*32/(bits_per_sample/8)/channel_count;
|
||||
if (samples < sample_count)
|
||||
{
|
||||
sample_count = samples;
|
||||
}
|
||||
if (samples != sample_count) goto fail;
|
||||
}
|
||||
|
||||
start_offset = MxCh;
|
||||
}
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
/* fill in the vital statistics */
|
||||
vgmstream->channels = channel_count;
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
vgmstream->layout_type = layout_blocked_mxch;
|
||||
|
||||
vgmstream->meta_type = meta_PC_MXST;
|
||||
if(bits_per_sample == 8)
|
||||
{
|
||||
vgmstream->coding_type = coding_PCM8_U;
|
||||
}
|
||||
else if (bits_per_sample == 16)
|
||||
{
|
||||
vgmstream->coding_type = coding_PCM16LE;
|
||||
}
|
||||
else goto fail;
|
||||
vgmstream->num_samples = sample_count;
|
||||
if(loop_flag)
|
||||
{
|
||||
vgmstream->loop_start_sample = 0;
|
||||
vgmstream->loop_end_sample=vgmstream->num_samples;
|
||||
}
|
||||
/* open the file for reading by each channel */
|
||||
{
|
||||
for (i=0;i<channel_count;i++) {
|
||||
vgmstream->ch[i].streamfile =
|
||||
streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
|
||||
if (!vgmstream->ch[i].streamfile) goto fail;
|
||||
}
|
||||
|
||||
}
|
||||
block_update_mxch(start_offset, vgmstream);
|
||||
|
||||
return vgmstream;
|
||||
|
||||
/* clean up anything we may have opened */
|
||||
fail:
|
||||
if (vgmstream) close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
//MxSt files ripped from Jukebox.si in Lego Island
|
||||
#include "meta.h"
|
||||
#include "../layout/layout.h"
|
||||
#include "../util.h"
|
||||
|
||||
VGMSTREAM * init_vgmstream_pc_mxst(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
char filename[PATH_LIMIT];
|
||||
|
||||
int loop_flag=0;
|
||||
int bits_per_sample;
|
||||
int channel_count;
|
||||
int sample_rate,bytes_per_second;
|
||||
long sample_count;
|
||||
int i;
|
||||
off_t file_size;
|
||||
off_t chunk_list_size=-1;
|
||||
off_t start_offset;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("mxst",filename_extension(filename))) goto fail;
|
||||
|
||||
/* looping info not found yet */
|
||||
//loop_flag = get_streamfile_size(streamFile) > 700000;
|
||||
|
||||
/* check MxSt header */
|
||||
if (0x4d785374 != read_32bitBE(0, streamFile)) goto fail;
|
||||
file_size = read_32bitLE(4, streamFile) + 8;
|
||||
if (file_size != get_streamfile_size(streamFile)) goto fail;
|
||||
|
||||
/* read chunks */
|
||||
{
|
||||
off_t MxDa=-1; /* points inside the MxDa chunk */
|
||||
off_t MxCh=-1; /* point at start of the first MxCh chunk */
|
||||
off_t chunk_offset = 8;
|
||||
uint32_t stream_id;
|
||||
while (chunk_offset < file_size)
|
||||
{
|
||||
uint32_t chunk_size = (read_32bitLE(chunk_offset+4, streamFile)+1)/2*2;
|
||||
switch (read_32bitBE(chunk_offset, streamFile))
|
||||
{
|
||||
case 0x4d784f62: /* MxOb */
|
||||
/* not interesting for playback */
|
||||
break;
|
||||
case 0x20574156: /* " WAV" */
|
||||
if (chunk_size == 1)
|
||||
chunk_size = 8;
|
||||
break;
|
||||
case 0x4c495354: /* LIST */
|
||||
{
|
||||
off_t first_item_offset = chunk_offset+0x14;
|
||||
off_t list_chunk_offset = first_item_offset+
|
||||
read_32bitLE(chunk_offset+0x10,streamFile);
|
||||
|
||||
if (read_32bitBE(chunk_offset+0x8,streamFile) == 0x4d784461) /* MxDa */
|
||||
MxDa = first_item_offset;
|
||||
else
|
||||
goto fail;
|
||||
|
||||
if (read_32bitBE(chunk_offset+0xC,streamFile) ==
|
||||
0x4d784368) /* MxCh */
|
||||
{
|
||||
MxCh = list_chunk_offset;
|
||||
chunk_list_size = chunk_size - (list_chunk_offset-(chunk_offset+8));
|
||||
}
|
||||
else
|
||||
goto fail;
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
goto fail;
|
||||
}
|
||||
|
||||
chunk_offset += 8 + chunk_size;
|
||||
if (chunk_offset > file_size) goto fail;
|
||||
}
|
||||
|
||||
if (MxDa == -1 || MxCh == -1 || chunk_list_size == -1) goto fail;
|
||||
|
||||
/* parse MxDa */
|
||||
{
|
||||
/* ??? */
|
||||
if (0 != read_16bitLE(MxDa+0x00,streamFile)) goto fail;
|
||||
stream_id = read_32bitLE(MxDa+0x2,streamFile);
|
||||
/* First sample (none in MxDa block) */
|
||||
if (-1 != read_32bitLE(MxDa+0x06,streamFile)) goto fail;
|
||||
/* size of format data */
|
||||
if (0x18 != read_32bitLE(MxDa+0x0a,streamFile)) goto fail;
|
||||
/* PCM */
|
||||
if (1 != read_16bitLE(MxDa+0x0e,streamFile)) goto fail;
|
||||
/* channel count */
|
||||
channel_count = read_16bitLE(MxDa+0x10,streamFile);
|
||||
/* only mono known */
|
||||
if (1 != channel_count) goto fail;
|
||||
sample_rate = read_32bitLE(MxDa+0x12,streamFile);
|
||||
bits_per_sample = read_16bitLE(MxDa+0x1c,streamFile);
|
||||
/* bytes per second */
|
||||
bytes_per_second = read_32bitLE(MxDa+0x16,streamFile);
|
||||
if (bits_per_sample/8*channel_count*sample_rate != bytes_per_second) goto fail;
|
||||
/* block align */
|
||||
if (bits_per_sample/8*channel_count !=
|
||||
read_16bitLE(MxDa+0x1a,streamFile)) goto fail;
|
||||
sample_count = read_32bitLE(MxDa+0x1e,streamFile)/(bits_per_sample/8)/channel_count;
|
||||
/* 2c? data offset in normal RIFF WAVE? */
|
||||
if (0x2c != read_32bitLE(MxDa+0x22,streamFile)) goto fail;
|
||||
}
|
||||
|
||||
/* parse through all MxCh for consistency check */
|
||||
{
|
||||
long samples = 0;
|
||||
int split_frames_seen = 0;
|
||||
off_t MxCh_offset = MxCh;
|
||||
while (MxCh_offset < MxCh+chunk_list_size)
|
||||
{
|
||||
uint16_t flags;
|
||||
if (read_32bitBE(MxCh_offset,streamFile)!=0x70616420) /*pad*/
|
||||
{
|
||||
if (read_32bitBE(MxCh_offset,streamFile)!=0x4d784368) /*MxCh*/
|
||||
goto fail;
|
||||
|
||||
flags = read_16bitLE(MxCh_offset+8+0,streamFile);
|
||||
|
||||
if (read_32bitLE(MxCh_offset+8+2,streamFile)!=stream_id)
|
||||
goto fail;
|
||||
|
||||
if (flags & 0x10)
|
||||
{
|
||||
split_frames_seen ++;
|
||||
if (split_frames_seen == 1)
|
||||
{
|
||||
if (read_32bitLE(MxCh_offset+8+6,streamFile)!=(samples*UINT64_C(1000)+sample_rate-1)/sample_rate)
|
||||
goto fail;
|
||||
}
|
||||
else if (split_frames_seen == 2)
|
||||
{
|
||||
if ( read_32bitLE(MxCh_offset+8+0xa,streamFile)!=
|
||||
read_32bitLE(MxCh_offset+4,streamFile)-0xe ) goto fail;
|
||||
split_frames_seen = 0;
|
||||
}
|
||||
else goto fail;
|
||||
}
|
||||
|
||||
if (!(flags & 0x10))
|
||||
{
|
||||
if (split_frames_seen != 0)
|
||||
{
|
||||
goto fail;
|
||||
}
|
||||
if (read_32bitLE(MxCh_offset+8+6,streamFile)!=(samples*UINT64_C(1000)+sample_rate-1)/sample_rate)
|
||||
goto fail;
|
||||
|
||||
if ( read_32bitLE(MxCh_offset+8+0xa,streamFile)!=
|
||||
read_32bitLE(MxCh_offset+4,streamFile)-0xe ) goto fail;
|
||||
}
|
||||
samples += (read_32bitLE(MxCh_offset+4,streamFile)-0xe)/(bits_per_sample/8/channel_count);
|
||||
|
||||
}
|
||||
MxCh_offset += 8 + (read_32bitLE(MxCh_offset+4,streamFile)+1)/2*2;
|
||||
if (MxCh_offset > MxCh+chunk_list_size) goto fail;
|
||||
}
|
||||
//printf("samples=%d sample_count=%d\n",samples,sample_count);
|
||||
//samples = (samples * (bits_per_sample/8) * channel_count + 31)/32*32/(bits_per_sample/8)/channel_count;
|
||||
if (samples < sample_count)
|
||||
{
|
||||
sample_count = samples;
|
||||
}
|
||||
if (samples != sample_count) goto fail;
|
||||
}
|
||||
|
||||
start_offset = MxCh;
|
||||
}
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
/* fill in the vital statistics */
|
||||
vgmstream->channels = channel_count;
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
vgmstream->layout_type = layout_blocked_mxch;
|
||||
|
||||
vgmstream->meta_type = meta_PC_MXST;
|
||||
if(bits_per_sample == 8)
|
||||
{
|
||||
vgmstream->coding_type = coding_PCM8_U;
|
||||
}
|
||||
else if (bits_per_sample == 16)
|
||||
{
|
||||
vgmstream->coding_type = coding_PCM16LE;
|
||||
}
|
||||
else goto fail;
|
||||
vgmstream->num_samples = sample_count;
|
||||
if(loop_flag)
|
||||
{
|
||||
vgmstream->loop_start_sample = 0;
|
||||
vgmstream->loop_end_sample=vgmstream->num_samples;
|
||||
}
|
||||
/* open the file for reading by each channel */
|
||||
{
|
||||
for (i=0;i<channel_count;i++) {
|
||||
vgmstream->ch[i].streamfile =
|
||||
streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
|
||||
if (!vgmstream->ch[i].streamfile) goto fail;
|
||||
}
|
||||
|
||||
}
|
||||
block_update_mxch(start_offset, vgmstream);
|
||||
|
||||
return vgmstream;
|
||||
|
||||
/* clean up anything we may have opened */
|
||||
fail:
|
||||
if (vgmstream) close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -1,256 +1,256 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
|
||||
/* Headerless PS-ADPCM
|
||||
* Guesses interleave/channels/loops by testing data and using the file extension for sample rate.
|
||||
* This is an ugly crutch for older sets, use TXTH to properly play headerless data instead. */
|
||||
VGMSTREAM * init_vgmstream_ps_headerless(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset = 0x00;
|
||||
char filename[PATH_LIMIT];
|
||||
|
||||
uint8_t mibBuffer[0x10];
|
||||
uint8_t testBuffer[0x10];
|
||||
|
||||
size_t fileLength;
|
||||
off_t loopStart = 0;
|
||||
off_t loopEnd = 0;
|
||||
off_t interleave = 0;
|
||||
|
||||
off_t readOffset = 0;
|
||||
|
||||
off_t loopStartPoints[0x10] = {0};
|
||||
int loopStartPointsCount=0;
|
||||
off_t loopEndPoints[0x10] = {0};
|
||||
int loopEndPointsCount=0;
|
||||
int loopToEnd=0;
|
||||
int forceNoLoop=0;
|
||||
int gotEmptyLine=0;
|
||||
|
||||
int i, channel_count=0;
|
||||
|
||||
|
||||
/* checks
|
||||
* .mib: common, but many ext-less files are renamed to this.
|
||||
* .mi4: fake .mib to force another sample rate */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("mib",filename_extension(filename)) &&
|
||||
strcasecmp("mi4",filename_extension(filename)))
|
||||
goto fail;
|
||||
|
||||
/* test if raw PS-ADPCM */
|
||||
if (!ps_check_format(streamFile, 0x00, 0x2000))
|
||||
goto fail;
|
||||
|
||||
|
||||
fileLength = get_streamfile_size(streamFile);
|
||||
|
||||
/* Search for interleave value (checking channel starts) and loop points (using PS-ADPCM flags).
|
||||
* Channel start will by 0x0000, 0x0002, 0x0006 followed by 12 zero values.
|
||||
* Interleave value is the offset where those repeat, and channels the number of times.
|
||||
* Loop flags in second byte are: 0x06 = start, 0x03 = end (per channel).
|
||||
* Interleave can be large (up to 0x20000 found so far) and is always a 0x10 multiple value. */
|
||||
readOffset+=(off_t)read_streamfile(mibBuffer,0,0x10,streamFile);
|
||||
mibBuffer[0]=0;
|
||||
{
|
||||
uint8_t doChannelUpdate=1;
|
||||
uint8_t bDoUpdateInterleave=1;
|
||||
|
||||
readOffset=0;
|
||||
do {
|
||||
readOffset+=(off_t)read_streamfile(testBuffer,readOffset,0x10,streamFile);
|
||||
// be sure to point to an interleave value
|
||||
if(readOffset<(int32_t)(fileLength*0.5)) {
|
||||
|
||||
if(memcmp(testBuffer+2, mibBuffer+2,0x0e)) {
|
||||
if(doChannelUpdate) {
|
||||
doChannelUpdate=0;
|
||||
channel_count++;
|
||||
}
|
||||
if(channel_count<2)
|
||||
bDoUpdateInterleave=1;
|
||||
}
|
||||
|
||||
testBuffer[0]=0;
|
||||
if(!memcmp(testBuffer,mibBuffer,0x10)) {
|
||||
gotEmptyLine=1;
|
||||
|
||||
if(bDoUpdateInterleave) {
|
||||
bDoUpdateInterleave=0;
|
||||
interleave=readOffset-0x10;
|
||||
}
|
||||
if(readOffset-0x10 == channel_count*interleave) {
|
||||
doChannelUpdate=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Loop Start ...
|
||||
if(testBuffer[0x01]==0x06) {
|
||||
if(loopStartPointsCount<0x10) {
|
||||
loopStartPoints[loopStartPointsCount] = readOffset-0x10;
|
||||
loopStartPointsCount++;
|
||||
}
|
||||
}
|
||||
|
||||
// Loop End ...
|
||||
if(testBuffer[0x01]==0x03 && testBuffer[0x03]!=0x77) {
|
||||
if(loopEndPointsCount<0x10) {
|
||||
loopEndPoints[loopEndPointsCount] = readOffset;
|
||||
loopEndPointsCount++;
|
||||
}
|
||||
}
|
||||
|
||||
if(testBuffer[0x01]==0x04) {
|
||||
// 0x04 loop points flag can't be with a 0x03 loop points flag
|
||||
if(loopStartPointsCount<0x10) {
|
||||
loopStartPoints[loopStartPointsCount] = readOffset-0x10;
|
||||
loopStartPointsCount++;
|
||||
|
||||
// Loop end value is not set by flags ...
|
||||
// go until end of file
|
||||
loopToEnd=1;
|
||||
}
|
||||
}
|
||||
|
||||
} while (readOffset<((int32_t)fileLength));
|
||||
}
|
||||
|
||||
if(testBuffer[0]==0x0c && testBuffer[1]==0)
|
||||
forceNoLoop=1;
|
||||
|
||||
if(channel_count==0)
|
||||
channel_count=1;
|
||||
|
||||
// Calc Loop Points & Interleave ...
|
||||
if(loopStartPointsCount>=2) {
|
||||
// can't get more then 0x10 loop point !
|
||||
if(loopStartPointsCount<=0x0F) {
|
||||
// Always took the first 2 loop points
|
||||
interleave=loopStartPoints[1]-loopStartPoints[0];
|
||||
loopStart=loopStartPoints[1];
|
||||
|
||||
// Can't be one channel .mib with interleave values
|
||||
if(interleave>0 && channel_count==1)
|
||||
channel_count=2;
|
||||
} else {
|
||||
loopStart=0;
|
||||
}
|
||||
}
|
||||
|
||||
if(loopEndPointsCount>=2) {
|
||||
// can't get more then 0x10 loop point !
|
||||
if(loopEndPointsCount<=0x0F) {
|
||||
// No need to recalculate interleave value ...
|
||||
loopEnd=loopEndPoints[loopEndPointsCount-1];
|
||||
|
||||
// Can't be one channel .mib with interleave values
|
||||
if(channel_count==1)
|
||||
channel_count=2;
|
||||
} else {
|
||||
loopToEnd=0;
|
||||
loopEnd=0;
|
||||
}
|
||||
}
|
||||
|
||||
if (loopToEnd)
|
||||
loopEnd=fileLength;
|
||||
|
||||
if(forceNoLoop)
|
||||
loopEnd=0;
|
||||
|
||||
if(interleave>0x10 && channel_count==1)
|
||||
channel_count=2;
|
||||
|
||||
if(interleave==0)
|
||||
interleave=0x10;
|
||||
|
||||
// further check on channel_count ...
|
||||
if(gotEmptyLine) {
|
||||
int newChannelCount = 0;
|
||||
|
||||
readOffset=0;
|
||||
|
||||
/* count empty lines at interleave = channels */
|
||||
do {
|
||||
newChannelCount++;
|
||||
read_streamfile(testBuffer,readOffset,0x10,streamFile);
|
||||
readOffset+=interleave;
|
||||
} while(!memcmp(testBuffer,mibBuffer,16));
|
||||
|
||||
newChannelCount--;
|
||||
if(newChannelCount>channel_count)
|
||||
channel_count=newChannelCount;
|
||||
}
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,(loopEnd!=0));
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = (channel_count == 1) ? layout_none : layout_interleave;
|
||||
|
||||
vgmstream->interleave_block_size = interleave;
|
||||
|
||||
if(!strcasecmp("mib",filename_extension(filename)))
|
||||
vgmstream->sample_rate = 44100;
|
||||
|
||||
if(!strcasecmp("mi4",filename_extension(filename)))
|
||||
vgmstream->sample_rate = 48000;
|
||||
|
||||
vgmstream->num_samples = (int32_t)(fileLength/16/channel_count*28);
|
||||
|
||||
if(loopEnd!=0) {
|
||||
if(vgmstream->channels==1) {
|
||||
vgmstream->loop_start_sample = loopStart/16*18; //todo 18 instead of 28 probably a bug
|
||||
vgmstream->loop_end_sample = loopEnd/16*28;
|
||||
} else {
|
||||
vgmstream->loop_start_sample = ((((loopStart/vgmstream->interleave_block_size)-1)*vgmstream->interleave_block_size)/16*14*channel_count)/channel_count;
|
||||
if(loopStart%vgmstream->interleave_block_size) {
|
||||
vgmstream->loop_start_sample += (((loopStart%vgmstream->interleave_block_size)-1)/16*14*channel_count);
|
||||
}
|
||||
|
||||
if(loopEnd==fileLength) {
|
||||
vgmstream->loop_end_sample=(loopEnd/16*28)/channel_count;
|
||||
} else {
|
||||
vgmstream->loop_end_sample = ((((loopEnd/vgmstream->interleave_block_size)-1)*vgmstream->interleave_block_size)/16*14*channel_count)/channel_count;
|
||||
if(loopEnd%vgmstream->interleave_block_size) {
|
||||
vgmstream->loop_end_sample += (((loopEnd%vgmstream->interleave_block_size)-1)/16*14*channel_count);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(loopToEnd) {
|
||||
// try to find if there's no empty line ...
|
||||
int emptySamples=0;
|
||||
|
||||
for(i=0; i<16;i++) {
|
||||
mibBuffer[i]=0; //memset
|
||||
}
|
||||
|
||||
readOffset=fileLength-0x10;
|
||||
do {
|
||||
read_streamfile(testBuffer,readOffset,0x10,streamFile);
|
||||
if(!memcmp(mibBuffer,testBuffer,16)) {
|
||||
emptySamples+=28;
|
||||
}
|
||||
readOffset-=0x10;
|
||||
} while(!memcmp(testBuffer,mibBuffer,16));
|
||||
|
||||
vgmstream->loop_end_sample-=(emptySamples*channel_count);
|
||||
}
|
||||
|
||||
vgmstream->meta_type = meta_PS_HEADERLESS;
|
||||
vgmstream->allow_dual_stereo = 1;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream,streamFile,start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
|
||||
/* Headerless PS-ADPCM
|
||||
* Guesses interleave/channels/loops by testing data and using the file extension for sample rate.
|
||||
* This is an ugly crutch for older sets, use TXTH to properly play headerless data instead. */
|
||||
VGMSTREAM * init_vgmstream_ps_headerless(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset = 0x00;
|
||||
char filename[PATH_LIMIT];
|
||||
|
||||
uint8_t mibBuffer[0x10];
|
||||
uint8_t testBuffer[0x10];
|
||||
|
||||
size_t fileLength;
|
||||
off_t loopStart = 0;
|
||||
off_t loopEnd = 0;
|
||||
off_t interleave = 0;
|
||||
|
||||
off_t readOffset = 0;
|
||||
|
||||
off_t loopStartPoints[0x10] = {0};
|
||||
int loopStartPointsCount=0;
|
||||
off_t loopEndPoints[0x10] = {0};
|
||||
int loopEndPointsCount=0;
|
||||
int loopToEnd=0;
|
||||
int forceNoLoop=0;
|
||||
int gotEmptyLine=0;
|
||||
|
||||
int i, channel_count=0;
|
||||
|
||||
|
||||
/* checks
|
||||
* .mib: common, but many ext-less files are renamed to this.
|
||||
* .mi4: fake .mib to force another sample rate */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("mib",filename_extension(filename)) &&
|
||||
strcasecmp("mi4",filename_extension(filename)))
|
||||
goto fail;
|
||||
|
||||
/* test if raw PS-ADPCM */
|
||||
if (!ps_check_format(streamFile, 0x00, 0x2000))
|
||||
goto fail;
|
||||
|
||||
|
||||
fileLength = get_streamfile_size(streamFile);
|
||||
|
||||
/* Search for interleave value (checking channel starts) and loop points (using PS-ADPCM flags).
|
||||
* Channel start will by 0x0000, 0x0002, 0x0006 followed by 12 zero values.
|
||||
* Interleave value is the offset where those repeat, and channels the number of times.
|
||||
* Loop flags in second byte are: 0x06 = start, 0x03 = end (per channel).
|
||||
* Interleave can be large (up to 0x20000 found so far) and is always a 0x10 multiple value. */
|
||||
readOffset+=(off_t)read_streamfile(mibBuffer,0,0x10,streamFile);
|
||||
mibBuffer[0]=0;
|
||||
{
|
||||
uint8_t doChannelUpdate=1;
|
||||
uint8_t bDoUpdateInterleave=1;
|
||||
|
||||
readOffset=0;
|
||||
do {
|
||||
readOffset+=(off_t)read_streamfile(testBuffer,readOffset,0x10,streamFile);
|
||||
// be sure to point to an interleave value
|
||||
if(readOffset<(int32_t)(fileLength*0.5)) {
|
||||
|
||||
if(memcmp(testBuffer+2, mibBuffer+2,0x0e)) {
|
||||
if(doChannelUpdate) {
|
||||
doChannelUpdate=0;
|
||||
channel_count++;
|
||||
}
|
||||
if(channel_count<2)
|
||||
bDoUpdateInterleave=1;
|
||||
}
|
||||
|
||||
testBuffer[0]=0;
|
||||
if(!memcmp(testBuffer,mibBuffer,0x10)) {
|
||||
gotEmptyLine=1;
|
||||
|
||||
if(bDoUpdateInterleave) {
|
||||
bDoUpdateInterleave=0;
|
||||
interleave=readOffset-0x10;
|
||||
}
|
||||
if(readOffset-0x10 == channel_count*interleave) {
|
||||
doChannelUpdate=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Loop Start ...
|
||||
if(testBuffer[0x01]==0x06) {
|
||||
if(loopStartPointsCount<0x10) {
|
||||
loopStartPoints[loopStartPointsCount] = readOffset-0x10;
|
||||
loopStartPointsCount++;
|
||||
}
|
||||
}
|
||||
|
||||
// Loop End ...
|
||||
if(testBuffer[0x01]==0x03 && testBuffer[0x03]!=0x77) {
|
||||
if(loopEndPointsCount<0x10) {
|
||||
loopEndPoints[loopEndPointsCount] = readOffset;
|
||||
loopEndPointsCount++;
|
||||
}
|
||||
}
|
||||
|
||||
if(testBuffer[0x01]==0x04) {
|
||||
// 0x04 loop points flag can't be with a 0x03 loop points flag
|
||||
if(loopStartPointsCount<0x10) {
|
||||
loopStartPoints[loopStartPointsCount] = readOffset-0x10;
|
||||
loopStartPointsCount++;
|
||||
|
||||
// Loop end value is not set by flags ...
|
||||
// go until end of file
|
||||
loopToEnd=1;
|
||||
}
|
||||
}
|
||||
|
||||
} while (readOffset<((int32_t)fileLength));
|
||||
}
|
||||
|
||||
if(testBuffer[0]==0x0c && testBuffer[1]==0)
|
||||
forceNoLoop=1;
|
||||
|
||||
if(channel_count==0)
|
||||
channel_count=1;
|
||||
|
||||
// Calc Loop Points & Interleave ...
|
||||
if(loopStartPointsCount>=2) {
|
||||
// can't get more then 0x10 loop point !
|
||||
if(loopStartPointsCount<=0x0F) {
|
||||
// Always took the first 2 loop points
|
||||
interleave=loopStartPoints[1]-loopStartPoints[0];
|
||||
loopStart=loopStartPoints[1];
|
||||
|
||||
// Can't be one channel .mib with interleave values
|
||||
if(interleave>0 && channel_count==1)
|
||||
channel_count=2;
|
||||
} else {
|
||||
loopStart=0;
|
||||
}
|
||||
}
|
||||
|
||||
if(loopEndPointsCount>=2) {
|
||||
// can't get more then 0x10 loop point !
|
||||
if(loopEndPointsCount<=0x0F) {
|
||||
// No need to recalculate interleave value ...
|
||||
loopEnd=loopEndPoints[loopEndPointsCount-1];
|
||||
|
||||
// Can't be one channel .mib with interleave values
|
||||
if(channel_count==1)
|
||||
channel_count=2;
|
||||
} else {
|
||||
loopToEnd=0;
|
||||
loopEnd=0;
|
||||
}
|
||||
}
|
||||
|
||||
if (loopToEnd)
|
||||
loopEnd=fileLength;
|
||||
|
||||
if(forceNoLoop)
|
||||
loopEnd=0;
|
||||
|
||||
if(interleave>0x10 && channel_count==1)
|
||||
channel_count=2;
|
||||
|
||||
if(interleave==0)
|
||||
interleave=0x10;
|
||||
|
||||
// further check on channel_count ...
|
||||
if(gotEmptyLine) {
|
||||
int newChannelCount = 0;
|
||||
|
||||
readOffset=0;
|
||||
|
||||
/* count empty lines at interleave = channels */
|
||||
do {
|
||||
newChannelCount++;
|
||||
read_streamfile(testBuffer,readOffset,0x10,streamFile);
|
||||
readOffset+=interleave;
|
||||
} while(!memcmp(testBuffer,mibBuffer,16));
|
||||
|
||||
newChannelCount--;
|
||||
if(newChannelCount>channel_count)
|
||||
channel_count=newChannelCount;
|
||||
}
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,(loopEnd!=0));
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = (channel_count == 1) ? layout_none : layout_interleave;
|
||||
|
||||
vgmstream->interleave_block_size = interleave;
|
||||
|
||||
if(!strcasecmp("mib",filename_extension(filename)))
|
||||
vgmstream->sample_rate = 44100;
|
||||
|
||||
if(!strcasecmp("mi4",filename_extension(filename)))
|
||||
vgmstream->sample_rate = 48000;
|
||||
|
||||
vgmstream->num_samples = (int32_t)(fileLength/16/channel_count*28);
|
||||
|
||||
if(loopEnd!=0) {
|
||||
if(vgmstream->channels==1) {
|
||||
vgmstream->loop_start_sample = loopStart/16*18; //todo 18 instead of 28 probably a bug
|
||||
vgmstream->loop_end_sample = loopEnd/16*28;
|
||||
} else {
|
||||
vgmstream->loop_start_sample = ((((loopStart/vgmstream->interleave_block_size)-1)*vgmstream->interleave_block_size)/16*14*channel_count)/channel_count;
|
||||
if(loopStart%vgmstream->interleave_block_size) {
|
||||
vgmstream->loop_start_sample += (((loopStart%vgmstream->interleave_block_size)-1)/16*14*channel_count);
|
||||
}
|
||||
|
||||
if(loopEnd==fileLength) {
|
||||
vgmstream->loop_end_sample=(loopEnd/16*28)/channel_count;
|
||||
} else {
|
||||
vgmstream->loop_end_sample = ((((loopEnd/vgmstream->interleave_block_size)-1)*vgmstream->interleave_block_size)/16*14*channel_count)/channel_count;
|
||||
if(loopEnd%vgmstream->interleave_block_size) {
|
||||
vgmstream->loop_end_sample += (((loopEnd%vgmstream->interleave_block_size)-1)/16*14*channel_count);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(loopToEnd) {
|
||||
// try to find if there's no empty line ...
|
||||
int emptySamples=0;
|
||||
|
||||
for(i=0; i<16;i++) {
|
||||
mibBuffer[i]=0; //memset
|
||||
}
|
||||
|
||||
readOffset=fileLength-0x10;
|
||||
do {
|
||||
read_streamfile(testBuffer,readOffset,0x10,streamFile);
|
||||
if(!memcmp(mibBuffer,testBuffer,16)) {
|
||||
emptySamples+=28;
|
||||
}
|
||||
readOffset-=0x10;
|
||||
} while(!memcmp(testBuffer,mibBuffer,16));
|
||||
|
||||
vgmstream->loop_end_sample-=(emptySamples*channel_count);
|
||||
}
|
||||
|
||||
vgmstream->meta_type = meta_PS_HEADERLESS;
|
||||
vgmstream->allow_dual_stereo = 1;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream,streamFile,start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -1,38 +1,38 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* RAW - RAW format is native 44khz PCM file */
|
||||
VGMSTREAM * init_vgmstream_raw_pcm(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag, channel_count;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(streamFile, "raw"))
|
||||
goto fail;
|
||||
|
||||
channel_count = 2;
|
||||
loop_flag = 0;
|
||||
start_offset = 0x00;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_RAW_PCM;
|
||||
vgmstream->sample_rate = 44100;
|
||||
vgmstream->num_samples = pcm_bytes_to_samples(get_streamfile_size(streamFile), channel_count, 16);
|
||||
|
||||
vgmstream->coding_type = coding_PCM16LE;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x02;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream,streamFile,start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* RAW - RAW format is native 44khz PCM file */
|
||||
VGMSTREAM * init_vgmstream_raw_pcm(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag, channel_count;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(streamFile, "raw"))
|
||||
goto fail;
|
||||
|
||||
channel_count = 2;
|
||||
loop_flag = 0;
|
||||
start_offset = 0x00;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_RAW_PCM;
|
||||
vgmstream->sample_rate = 44100;
|
||||
vgmstream->num_samples = pcm_bytes_to_samples(get_streamfile_size(streamFile), channel_count, 16);
|
||||
|
||||
vgmstream->coding_type = coding_PCM16LE;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x02;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream,streamFile,start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -1,36 +1,36 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* WAVM - headerless format which can be found on XBOX */
|
||||
VGMSTREAM * init_vgmstream_raw_wavm(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset = 0;
|
||||
int loop_flag, channel_count;
|
||||
|
||||
/* check extension */
|
||||
if (!check_extensions(streamFile,"wavm"))
|
||||
goto fail;
|
||||
|
||||
start_offset = 0;
|
||||
loop_flag = 0;
|
||||
channel_count = 2;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_RAW_WAVM;
|
||||
vgmstream->sample_rate = 44100;
|
||||
vgmstream->num_samples = xbox_ima_bytes_to_samples(get_streamfile_size(streamFile), vgmstream->channels);
|
||||
|
||||
vgmstream->coding_type = coding_XBOX_IMA;
|
||||
vgmstream->layout_type = layout_none;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, streamFile, start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* WAVM - headerless format which can be found on XBOX */
|
||||
VGMSTREAM * init_vgmstream_raw_wavm(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset = 0;
|
||||
int loop_flag, channel_count;
|
||||
|
||||
/* check extension */
|
||||
if (!check_extensions(streamFile,"wavm"))
|
||||
goto fail;
|
||||
|
||||
start_offset = 0;
|
||||
loop_flag = 0;
|
||||
channel_count = 2;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_RAW_WAVM;
|
||||
vgmstream->sample_rate = 44100;
|
||||
vgmstream->num_samples = xbox_ima_bytes_to_samples(get_streamfile_size(streamFile), vgmstream->channels);
|
||||
|
||||
vgmstream->coding_type = coding_XBOX_IMA;
|
||||
vgmstream->layout_type = layout_none;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, streamFile, start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -1,53 +1,54 @@
|
|||
#include "meta.h"
|
||||
|
||||
|
||||
/* .seb - Game Arts games [Grandia (PS1), Grandia II/III/X (PS2)] */
|
||||
VGMSTREAM * init_vgmstream_seb(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag, channel_count;
|
||||
|
||||
|
||||
/* checks */
|
||||
/* .seb: found in Grandia II (PS2) .idx */
|
||||
/* .gms: fake? (.stz+idx bigfile without names, except in Grandia II) */
|
||||
if (!check_extensions(streamFile, "seb,gms,"))
|
||||
goto fail;
|
||||
|
||||
channel_count = read_32bitLE(0x00,streamFile);
|
||||
if (channel_count > 2) goto fail; /* mono or stereo */
|
||||
/* 0x08/0c: unknown count, possibly related to looping */
|
||||
|
||||
start_offset = 0x800;
|
||||
|
||||
if (read_32bitLE(0x10,streamFile) > get_streamfile_size(streamFile) || /* loop start offset */
|
||||
read_32bitLE(0x18,streamFile) > get_streamfile_size(streamFile)) /* loop end offset */
|
||||
goto fail;
|
||||
/* in Grandia III sometimes there is a value at 0x24/34 */
|
||||
|
||||
loop_flag = (read_32bitLE(0x20,streamFile) == 0);
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_SEB;
|
||||
vgmstream->sample_rate = read_32bitLE(0x04,streamFile);
|
||||
|
||||
vgmstream->num_samples = read_32bitLE(0x1c,streamFile);
|
||||
vgmstream->loop_start_sample = read_32bitLE(0x14,streamFile);
|
||||
vgmstream->loop_end_sample = read_32bitLE(0x1c,streamFile);
|
||||
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x800;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream,streamFile,start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
#include "meta.h"
|
||||
|
||||
|
||||
/* .seb - Game Arts games [Grandia (PS1), Grandia II/III/X (PS2)] */
|
||||
VGMSTREAM* init_vgmstream_seb(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag, channels;
|
||||
|
||||
|
||||
/* checks */
|
||||
channels = read_32bitLE(0x00,sf);
|
||||
if (channels > 2)
|
||||
return NULL;
|
||||
// 0x08/0c: unknown count, possibly related to looping
|
||||
|
||||
/* .seb: found in Grandia II (PS2) .idx */
|
||||
/* .gms: fake? (.stz+idx bigfile without names, except in Grandia II) */
|
||||
if (!check_extensions(sf, "seb,gms,"))
|
||||
return NULL;
|
||||
|
||||
start_offset = 0x800;
|
||||
|
||||
if (read_u32le(0x10,sf) > get_streamfile_size(sf) || // loop start offset
|
||||
read_u32le(0x18,sf) > get_streamfile_size(sf)) // loop end offset
|
||||
return NULL;
|
||||
/* in Grandia III sometimes there is a value at 0x24/34 */
|
||||
|
||||
loop_flag = (read_s32le(0x20,sf) == 0);
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_SEB;
|
||||
vgmstream->sample_rate = read_s32le(0x04,sf);
|
||||
|
||||
vgmstream->num_samples = read_s32le(0x1c,sf);
|
||||
vgmstream->loop_start_sample = read_s32le(0x14,sf);
|
||||
vgmstream->loop_end_sample = read_s32le(0x1c,sf);
|
||||
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x800;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -1,65 +0,0 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* SMC+SMH - from Wangan Midnight 1/R (System246) */
|
||||
VGMSTREAM * init_vgmstream_smc_smh(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
STREAMFILE * streamHeader = NULL;
|
||||
off_t start_offset, header_offset = 0;
|
||||
size_t stream_size;
|
||||
int loop_flag = 0, channel_count, sample_rate;
|
||||
int total_subsongs, target_subsong = streamFile->stream_index;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(streamFile, "smc"))
|
||||
goto fail;
|
||||
|
||||
streamHeader = open_streamfile_by_ext(streamFile, "smh");
|
||||
if (!streamHeader) goto fail;
|
||||
|
||||
|
||||
total_subsongs = read_32bitLE(0x00,streamHeader);
|
||||
if (target_subsong == 0) target_subsong = 1;
|
||||
if (target_subsong < 0 || target_subsong > total_subsongs || total_subsongs < 1) goto fail;
|
||||
|
||||
if (total_subsongs*0x10 + 0x10 != get_streamfile_size(streamHeader))
|
||||
goto fail;
|
||||
|
||||
header_offset = 0x10 + (target_subsong-1)*0x10;
|
||||
|
||||
start_offset = read_32bitLE(header_offset+0x00, streamHeader);
|
||||
stream_size = read_32bitLE(header_offset+0x04, streamHeader);
|
||||
sample_rate = read_32bitLE(header_offset+0x08, streamHeader);
|
||||
/* 0x0c(2): always 0x10, frame size? */
|
||||
channel_count = read_16bitLE(header_offset+0x0e, streamHeader);
|
||||
loop_flag = 0;
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
vgmstream->num_samples = ps_bytes_to_samples(stream_size,channel_count);
|
||||
|
||||
vgmstream->num_streams = total_subsongs;
|
||||
vgmstream->stream_size = stream_size;
|
||||
vgmstream->meta_type = meta_SMC_SMH;
|
||||
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = read_32bitLE(0x04, streamHeader);
|
||||
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream,streamFile,start_offset))
|
||||
goto fail;
|
||||
|
||||
close_streamfile(streamHeader);
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_streamfile(streamHeader);
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
64
Frameworks/vgmstream/vgmstream/src/meta/smh_smc.c
Normal file
64
Frameworks/vgmstream/vgmstream/src/meta/smh_smc.c
Normal file
|
@ -0,0 +1,64 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* SMH+SMC - from Wangan Midnight 1/R (System246) */
|
||||
VGMSTREAM* init_vgmstream_smh_smc(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
STREAMFILE* sb = NULL;
|
||||
off_t start_offset, header_offset = 0;
|
||||
size_t stream_size;
|
||||
int loop_flag = 0, channels, sample_rate;
|
||||
int total_subsongs, target_subsong = sf->stream_index;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(sf, "smh"))
|
||||
return NULL;
|
||||
|
||||
total_subsongs = read_s32le(0x00,sf);
|
||||
if (target_subsong == 0) target_subsong = 1;
|
||||
if (target_subsong < 0 || target_subsong > total_subsongs || total_subsongs < 1) goto fail;
|
||||
|
||||
if (total_subsongs * 0x10 + 0x10 != get_streamfile_size(sf))
|
||||
return NULL;
|
||||
|
||||
sb = open_streamfile_by_ext(sf, "smc");
|
||||
if (!sb) goto fail;
|
||||
|
||||
header_offset = 0x10 + (target_subsong - 1) * 0x10;
|
||||
|
||||
start_offset = read_u32le(header_offset+0x00, sf);
|
||||
stream_size = read_u32le(header_offset+0x04, sf);
|
||||
sample_rate = read_u32le(header_offset+0x08, sf);
|
||||
// 0x0c(2): always 0x10, frame size?
|
||||
channels = read_u16le(header_offset+0x0e, sf);
|
||||
loop_flag = 0;
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
vgmstream->num_samples = ps_bytes_to_samples(stream_size, channels);
|
||||
|
||||
vgmstream->num_streams = total_subsongs;
|
||||
vgmstream->stream_size = stream_size;
|
||||
vgmstream->meta_type = meta_SMC_SMH;
|
||||
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = read_32bitLE(0x04, sf);
|
||||
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sb, start_offset))
|
||||
goto fail;
|
||||
|
||||
close_streamfile(sb);
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_streamfile(sb);
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
124
Frameworks/vgmstream/vgmstream/src/meta/srcd.c
Normal file
124
Frameworks/vgmstream/vgmstream/src/meta/srcd.c
Normal file
|
@ -0,0 +1,124 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* srcd - Capcom RE Engine */
|
||||
VGMSTREAM* init_vgmstream_srcd(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
STREAMFILE* subfile = NULL;
|
||||
off_t start_offset = 0;
|
||||
int loop_flag = 0;
|
||||
int32_t loop_start_sample = 0, loop_end_sample = 0;
|
||||
uint32_t container_type;
|
||||
const char* extension = NULL;
|
||||
VGMSTREAM* (*init_vgmstream_function)(STREAMFILE*) = NULL;
|
||||
|
||||
if (!is_id32be(0x00, sf, "srcd"))
|
||||
return NULL;
|
||||
|
||||
if (!check_extensions(sf, "srcd,asrc,14,21,26,31"))
|
||||
return NULL;
|
||||
|
||||
{
|
||||
enum versions { VERSION_31, VERSION_21_26, VERSION_14, VERSION_UNKNOWN };
|
||||
enum versions ver = VERSION_UNKNOWN;
|
||||
|
||||
//v31 - AJ_AAT
|
||||
if (read_u32le(0x18, sf) > 0x02) {
|
||||
ver = VERSION_31;
|
||||
}
|
||||
//v21 - CAS2
|
||||
else if (read_u32le(0x41, sf) == 0x49) {
|
||||
ver = VERSION_21_26;
|
||||
}
|
||||
//v26 - GTPD
|
||||
else if (read_u32le(0x46, sf) == 0x4E) {
|
||||
ver = VERSION_21_26;
|
||||
}
|
||||
//v14 - CAS
|
||||
else if (read_u8(0x3A, sf) == 0x42) {
|
||||
ver = VERSION_14;
|
||||
}
|
||||
|
||||
switch (ver) {
|
||||
case VERSION_31:
|
||||
loop_flag = read_u8(0x34, sf);
|
||||
loop_start_sample = read_u32le(0x35, sf);
|
||||
loop_end_sample = read_u32le(0x39, sf);
|
||||
break;
|
||||
|
||||
case VERSION_21_26:
|
||||
loop_flag = read_u8(0x2C, sf);
|
||||
loop_start_sample = read_u32le(0x2D, sf);
|
||||
loop_end_sample = read_u32le(0x31, sf);
|
||||
break;
|
||||
|
||||
case VERSION_14:
|
||||
loop_flag = read_u8(0x28, sf);
|
||||
loop_start_sample = read_u32le(0x29, sf);
|
||||
loop_end_sample = read_u32le(0x2D, sf);
|
||||
break;
|
||||
|
||||
default:
|
||||
VGM_LOG("SRCD: Unknown version, disabling loop\n");
|
||||
loop_flag = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
container_type = read_u32be(0x0C, sf);
|
||||
{
|
||||
const off_t scan_start = 0x40;
|
||||
const size_t scan_size = 0x100; //Should be small
|
||||
off_t current_offset;
|
||||
uint32_t magic_to_find = 0;
|
||||
|
||||
if (container_type == get_id32be("wav ")) {
|
||||
magic_to_find = get_id32be("RIFF");
|
||||
} else if (container_type == get_id32be("ogg ")) {
|
||||
magic_to_find = get_id32be("OggS");
|
||||
}
|
||||
|
||||
if (magic_to_find) {
|
||||
for (current_offset = scan_start; current_offset < scan_start + scan_size; current_offset++) {
|
||||
if (read_u32be(current_offset, sf) == magic_to_find) {
|
||||
start_offset = current_offset;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (start_offset == 0)
|
||||
goto fail;
|
||||
|
||||
|
||||
/* Select the appropriate init function and extension based on container type */
|
||||
if (container_type == get_id32be("wav ")) {
|
||||
extension = "wav";
|
||||
init_vgmstream_function = init_vgmstream_riff;
|
||||
} else if (container_type == get_id32be("ogg ")) {
|
||||
extension = "ogg";
|
||||
init_vgmstream_function = init_vgmstream_ogg_vorbis;
|
||||
} else {
|
||||
VGM_LOG("SRCD: Codec not recognized");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
subfile = setup_subfile_streamfile(sf, start_offset, get_streamfile_size(sf) - start_offset, extension);
|
||||
if (!subfile) goto fail;
|
||||
|
||||
vgmstream = init_vgmstream_function(subfile);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_SRCD;
|
||||
|
||||
vgmstream_force_loop(vgmstream, loop_flag, loop_start_sample, loop_end_sample);
|
||||
|
||||
close_streamfile(subfile);
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_streamfile(subfile);
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -1,55 +1,55 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* WV6 - Gorilla Systems PC games [Spy Kids: Mega Mission Zone (PC), Lilo & Stitch: Hawaiian Adventure (PC)] */
|
||||
VGMSTREAM * init_vgmstream_wv6(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag, channel_count;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(streamFile, "wv6"))
|
||||
goto fail;
|
||||
|
||||
if (read_32bitLE(0x00,streamFile) != get_streamfile_size(streamFile))
|
||||
goto fail;
|
||||
if (read_32bitBE(0x2c,streamFile) != 0x57563620 || /* "WV6 " */
|
||||
read_32bitBE(0x30,streamFile) != 0x494D415F) /* "IMA_" ("WV6 IMA_ADPCM COMPRESSED 16 BIT AUDIO") */
|
||||
goto fail;
|
||||
|
||||
/* 0x54/58/5c/60/6c: unknown (reject to catch possible stereo files, but don't seem to exist) */
|
||||
if (read_32bitLE(0x54,streamFile) != 0x01 ||
|
||||
read_32bitLE(0x58,streamFile) != 0x01 ||
|
||||
read_32bitLE(0x5c,streamFile) != 0x10 ||
|
||||
read_32bitLE(0x68,streamFile) != 0x01 ||
|
||||
read_32bitLE(0x6c,streamFile) != 0x88)
|
||||
goto fail;
|
||||
/* 0x64: PCM size (samples*channels*2) */
|
||||
|
||||
channel_count = 1;
|
||||
loop_flag = 0;
|
||||
start_offset = 0x8c;
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = read_32bitLE(0x60, streamFile);
|
||||
vgmstream->num_samples = ima_bytes_to_samples(read_32bitLE(0x88,streamFile), channel_count);
|
||||
|
||||
vgmstream->meta_type = meta_WV6;
|
||||
vgmstream->coding_type = coding_WV6_IMA;
|
||||
vgmstream->layout_type = layout_none;
|
||||
|
||||
read_string(vgmstream->stream_name,0x1c+1, 0x04,streamFile);
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream,streamFile,start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* WV6 - Gorilla Systems PC games [Spy Kids: Mega Mission Zone (PC), Lilo & Stitch: Hawaiian Adventure (PC)] */
|
||||
VGMSTREAM* init_vgmstream_wv6(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag, channels;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (read_u32le(0x00,sf) != get_streamfile_size(sf))
|
||||
return NULL;
|
||||
// 04: filename
|
||||
if (!is_id32be(0x2c,sf, "WV6 ") || !is_id32be(0x30,sf, "IMA_")) // "WV6 IMA_ADPCM COMPRESSED 16 BIT AUDIO"
|
||||
return NULL;
|
||||
|
||||
if (!check_extensions(sf, "wv6"))
|
||||
return NULL;
|
||||
|
||||
// 0x54/58/5c/60/6c: unknown (reject to catch possible stereo files, but don't seem to exist)
|
||||
if (read_s32le(0x54,sf) != 0x01 ||
|
||||
read_s32le(0x58,sf) != 0x01 ||
|
||||
read_s32le(0x5c,sf) != 0x10 ||
|
||||
read_s32le(0x68,sf) != 0x01 ||
|
||||
read_s32le(0x6c,sf) != 0x88)
|
||||
return NULL;
|
||||
// 0x64: PCM size (samples * channels * 2)
|
||||
|
||||
channels = 1;
|
||||
loop_flag = 0;
|
||||
start_offset = 0x8c;
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = read_s32le(0x60, sf);
|
||||
vgmstream->num_samples = ima_bytes_to_samples(read_u32le(0x88,sf), channels);
|
||||
|
||||
vgmstream->meta_type = meta_WV6;
|
||||
vgmstream->coding_type = coding_WV6_IMA;
|
||||
vgmstream->layout_type = layout_none;
|
||||
|
||||
read_string(vgmstream->stream_name, 0x1c + 1, 0x04,sf);
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream,sf,start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ enum {
|
|||
VGMSTREAM_MAX_CHANNELS = 64, /* +40ch multilayers */
|
||||
VGMSTREAM_MIN_SAMPLE_RATE = 300, /* 300 is Wwise min */
|
||||
VGMSTREAM_MAX_SAMPLE_RATE = 192000, /* found in some FSB5 */
|
||||
VGMSTREAM_MAX_SUBSONGS = 65535, /* +20000 isn't that uncommon */
|
||||
VGMSTREAM_MAX_SUBSONGS = 90000, /* +20000 isn't that uncommon, known max is 89734 in EA NHL 14 sbs+sbr */
|
||||
VGMSTREAM_MAX_NUM_SAMPLES = 1000000000, /* no ~5h vgm hopefully */
|
||||
};
|
||||
|
||||
|
|
|
@ -317,7 +317,6 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_ubi_lyn_container,
|
||||
init_vgmstream_msb_msh,
|
||||
init_vgmstream_txtp,
|
||||
init_vgmstream_smc_smh,
|
||||
init_vgmstream_ppst,
|
||||
init_vgmstream_sps_n1_segmented,
|
||||
init_vgmstream_ubi_bao_pk,
|
||||
|
@ -330,7 +329,6 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_xmd,
|
||||
init_vgmstream_cks,
|
||||
init_vgmstream_ckb,
|
||||
init_vgmstream_wv6,
|
||||
init_vgmstream_str_wav,
|
||||
init_vgmstream_wavebatch,
|
||||
init_vgmstream_hd3_bd3,
|
||||
|
@ -368,8 +366,6 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_dsp_adpx,
|
||||
init_vgmstream_ogg_opus,
|
||||
init_vgmstream_nus3audio,
|
||||
init_vgmstream_imc,
|
||||
init_vgmstream_imc_container,
|
||||
init_vgmstream_smp,
|
||||
init_vgmstream_gin,
|
||||
init_vgmstream_dsf,
|
||||
|
@ -512,6 +508,8 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_audiopkg,
|
||||
init_vgmstream_swar,
|
||||
init_vgmstream_ivb,
|
||||
init_vgmstream_srcd,
|
||||
init_vgmstream_mhwk,
|
||||
|
||||
/* lower priority metas (no clean header identity, somewhat ambiguous, or need extension/companion file to identify) */
|
||||
init_vgmstream_agsc,
|
||||
|
@ -539,6 +537,10 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_vai,
|
||||
init_vgmstream_ezw,
|
||||
init_vgmstream_vgs_old,
|
||||
init_vgmstream_imc,
|
||||
init_vgmstream_imc_container,
|
||||
init_vgmstream_wv6,
|
||||
init_vgmstream_smh_smc,
|
||||
/* need companion files */
|
||||
init_vgmstream_pos,
|
||||
init_vgmstream_sli_loops,
|
||||
|
|
|
@ -496,7 +496,7 @@ typedef enum {
|
|||
meta_LSF_N1NJ4N, /* .lsf n1nj4n Fastlane Street Racing (iPhone) */
|
||||
meta_XWAV,
|
||||
meta_RAW_SNDS,
|
||||
meta_HYPERSCAN_KVAG, /* Hyperscan KVAG/BVG */
|
||||
meta_KVAG,
|
||||
meta_PSND,
|
||||
meta_ADP_WILDFIRE,
|
||||
meta_QD_ADP,
|
||||
|
@ -721,6 +721,8 @@ typedef enum {
|
|||
meta_AUDIOPKG,
|
||||
meta_SWAR,
|
||||
meta_IVB,
|
||||
meta_SRCD,
|
||||
meta_MHWK
|
||||
} meta_t;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -295,7 +295,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 83DE0C00180A9BD400269051 /* Build configuration list for PBXProject "vio2sf" */;
|
||||
|
@ -428,6 +428,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -480,6 +481,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -656,6 +656,7 @@
|
|||
<string>mds</string>
|
||||
<string>mdsp</string>
|
||||
<string>med</string>
|
||||
<string>mhwk</string>
|
||||
<string>mjb</string>
|
||||
<string>mi4</string>
|
||||
<string>mib</string>
|
||||
|
@ -829,7 +830,7 @@
|
|||
<string>skx</string>
|
||||
<string>slb</string>
|
||||
<string>sli</string>
|
||||
<string>smc</string>
|
||||
<string>smh</string>
|
||||
<string>smk</string>
|
||||
<string>smp</string>
|
||||
<string>smv</string>
|
||||
|
@ -851,6 +852,7 @@
|
|||
<string>spsd</string>
|
||||
<string>spw</string>
|
||||
<string>srsa</string>
|
||||
<string>srcd</string>
|
||||
<string>ss2</string>
|
||||
<string>ssd</string>
|
||||
<string>ssf</string>
|
||||
|
|
|
@ -156,7 +156,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
};
|
||||
buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "APL" */;
|
||||
compatibilityVersion = "Xcode 12.0";
|
||||
|
@ -242,6 +242,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Debug;
|
||||
|
@ -287,6 +288,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Release;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -185,7 +185,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 83D3C5EE201C674D005564CB /* Build configuration list for PBXProject "AdPlug" */;
|
||||
|
@ -315,6 +315,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -370,6 +371,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
|
@ -189,7 +189,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
ORGANIZATIONNAME = "";
|
||||
};
|
||||
buildConfigurationList = 8359FF1217FEF35C0060F3ED /* Build configuration list for PBXProject "ArchiveSource" */;
|
||||
|
@ -330,6 +330,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -382,6 +383,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -160,7 +160,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
};
|
||||
buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "CoreAudio" */;
|
||||
compatibilityVersion = "Xcode 12.0";
|
||||
|
@ -285,6 +285,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Debug;
|
||||
|
@ -330,6 +331,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Release;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -190,7 +190,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
};
|
||||
buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "CueSheet" */;
|
||||
compatibilityVersion = "Xcode 12.0";
|
||||
|
@ -339,6 +339,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Debug;
|
||||
|
@ -384,6 +385,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Release;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -245,7 +245,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
};
|
||||
buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "FFMPEG" */;
|
||||
compatibilityVersion = "Xcode 12.0";
|
||||
|
@ -376,6 +376,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -425,6 +426,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Release;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.7">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -184,7 +184,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
};
|
||||
buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "FileSource" */;
|
||||
compatibilityVersion = "Xcode 12.0";
|
||||
|
@ -332,6 +332,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Debug;
|
||||
|
@ -377,6 +378,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Release;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
17C93F080B8FF67A008627D6 /* FlacDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 17C93F040B8FF67A008627D6 /* FlacDecoder.m */; };
|
||||
8301C147287805F500651A6E /* NSDictionary+Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = 8301C146287805F500651A6E /* NSDictionary+Merge.m */; };
|
||||
834D18FE2D7F949900F13B89 /* CogAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 834D18FD2D7F949900F13B89 /* CogAudio.framework */; };
|
||||
836EF0DA27BB970B00BF35B2 /* libFLAC.12.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 836EF0D927BB970B00BF35B2 /* libFLAC.12.dylib */; };
|
||||
836EF0DA27BB970B00BF35B2 /* libFLAC.14.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 836EF0D927BB970B00BF35B2 /* libFLAC.14.dylib */; };
|
||||
83AA660B27B7DAE40098D4B8 /* cuesheet.m in Sources */ = {isa = PBXBuildFile; fileRef = 83AA660A27B7DAE40098D4B8 /* cuesheet.m */; };
|
||||
8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
@ -40,7 +40,7 @@
|
|||
834A42B4287AF7AA00EB9D9B /* AudioChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioChunk.h; path = ../../Audio/Chain/AudioChunk.h; sourceTree = "<group>"; };
|
||||
834D18FD2D7F949900F13B89 /* CogAudio.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CogAudio.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
8356BD1927B3CCBB0074E50C /* HTTPSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTTPSource.h; path = ../HTTPSource/HTTPSource.h; sourceTree = "<group>"; };
|
||||
836EF0D927BB970B00BF35B2 /* libFLAC.12.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libFLAC.12.dylib; path = ../../ThirdParty/flac/lib/libFLAC.12.dylib; sourceTree = "<group>"; };
|
||||
836EF0D927BB970B00BF35B2 /* libFLAC.14.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libFLAC.14.dylib; path = ../../ThirdParty/flac/lib/libFLAC.14.dylib; sourceTree = "<group>"; };
|
||||
83747C4A2862DCF40021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
|
||||
8384912D180816C900E7332D /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logging.h; path = ../../Utils/Logging.h; sourceTree = "<group>"; };
|
||||
83AA660A27B7DAE40098D4B8 /* cuesheet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = cuesheet.m; sourceTree = "<group>"; };
|
||||
|
@ -56,7 +56,7 @@
|
|||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
834D18FE2D7F949900F13B89 /* CogAudio.framework in Frameworks */,
|
||||
836EF0DA27BB970B00BF35B2 /* libFLAC.12.dylib in Frameworks */,
|
||||
836EF0DA27BB970B00BF35B2 /* libFLAC.14.dylib in Frameworks */,
|
||||
8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
|
@ -115,7 +115,7 @@
|
|||
1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
836EF0D927BB970B00BF35B2 /* libFLAC.12.dylib */,
|
||||
836EF0D927BB970B00BF35B2 /* libFLAC.14.dylib */,
|
||||
1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */,
|
||||
);
|
||||
name = "Linked Frameworks";
|
||||
|
@ -193,7 +193,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
};
|
||||
buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "Flac" */;
|
||||
compatibilityVersion = "Xcode 12.0";
|
||||
|
@ -334,6 +334,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Debug;
|
||||
|
@ -379,6 +380,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Release;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.7">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -337,6 +337,8 @@ void ErrorCallback(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorS
|
|||
FLAC__StreamDecoderInitStatus ret;
|
||||
|
||||
if(isOggFlac) {
|
||||
FLAC__stream_decoder_set_decode_chained_stream(decoder, true);
|
||||
|
||||
ret = FLAC__stream_decoder_init_ogg_stream(decoder,
|
||||
ReadCallback,
|
||||
([source seekable] ? SeekCallback : NULL),
|
||||
|
@ -384,8 +386,13 @@ void ErrorCallback(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorS
|
|||
AudioChunk *chunk = nil;
|
||||
|
||||
while (blockBufferFrames <= 0) {
|
||||
if(FLAC__stream_decoder_get_state(decoder) == FLAC__STREAM_DECODER_END_OF_STREAM) {
|
||||
FLAC__StreamDecoderState state = FLAC__stream_decoder_get_state(decoder);
|
||||
if(state == FLAC__STREAM_DECODER_END_OF_STREAM) {
|
||||
return nil;
|
||||
} else if(state == FLAC__STREAM_DECODER_END_OF_LINK) {
|
||||
if(!FLAC__stream_decoder_finish_link(decoder)) {
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
if(!FLAC__stream_decoder_process_single(decoder)) {
|
||||
|
|
|
@ -232,7 +232,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
};
|
||||
buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "GME" */;
|
||||
compatibilityVersion = "Xcode 12.0";
|
||||
|
@ -405,6 +405,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Debug;
|
||||
|
@ -451,6 +452,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Release;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
|
@ -183,7 +183,7 @@
|
|||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1620;
|
||||
LastUpgradeCheck = 2600;
|
||||
};
|
||||
buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "HTTPSource" */;
|
||||
compatibilityVersion = "Xcode 12.0";
|
||||
|
@ -314,6 +314,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Debug;
|
||||
|
@ -359,6 +360,7 @@
|
|||
OTHER_CFLAGS = "-Wframe-larger-than=4000";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Wframe-larger-than=16000";
|
||||
SDKROOT = macosx;
|
||||
STRING_CATALOG_GENERATE_SYMBOLS = YES;
|
||||
SYMROOT = ../../build;
|
||||
};
|
||||
name = Release;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
LastUpgradeVersion = "2600"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue