diff --git a/Frameworks/vgmstream/libvgmstream.xcodeproj/project.pbxproj b/Frameworks/vgmstream/libvgmstream.xcodeproj/project.pbxproj index 566d9c8f9..0f5633786 100644 --- a/Frameworks/vgmstream/libvgmstream.xcodeproj/project.pbxproj +++ b/Frameworks/vgmstream/libvgmstream.xcodeproj/project.pbxproj @@ -529,7 +529,6 @@ 836F6FA518BDC2190095E648 /* nds_rrds.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E6918BDC2180095E648 /* nds_rrds.c */; }; 836F6FA718BDC2190095E648 /* nds_strm.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E6B18BDC2180095E648 /* nds_strm.c */; }; 836F6FA918BDC2190095E648 /* ngc_adpdtk.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E6D18BDC2180095E648 /* ngc_adpdtk.c */; }; - 836F6FAD18BDC2190095E648 /* ngc_dsp_konami.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E7118BDC2180095E648 /* ngc_dsp_konami.c */; }; 836F6FAE18BDC2190095E648 /* ngc_dsp_mpds.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E7218BDC2180095E648 /* ngc_dsp_mpds.c */; }; 836F6FAF18BDC2190095E648 /* ngc_dsp_std.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E7318BDC2180095E648 /* ngc_dsp_std.c */; }; 836F6FB018BDC2190095E648 /* dsp_kceje.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E7418BDC2180095E648 /* dsp_kceje.c */; }; @@ -653,7 +652,6 @@ 837CEAD823487E8300E62A4A /* bmp_konami.c in Sources */ = {isa = PBXBuildFile; fileRef = 837CEAD423487E8300E62A4A /* bmp_konami.c */; }; 837CEADA23487E8300E62A4A /* acb.c in Sources */ = {isa = PBXBuildFile; fileRef = 837CEAD623487E8300E62A4A /* acb.c */; }; 837CEADB23487E8300E62A4A /* bgw_streamfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 837CEAD723487E8300E62A4A /* bgw_streamfile.h */; }; - 837CEAF123487F2C00E62A4A /* xvas.c in Sources */ = {isa = PBXBuildFile; fileRef = 837CEADC23487F2900E62A4A /* xvas.c */; }; 837CEAF223487F2C00E62A4A /* raw_pcm.c in Sources */ = {isa = PBXBuildFile; fileRef = 837CEADD23487F2A00E62A4A /* raw_pcm.c */; }; 837CEAF423487F2C00E62A4A /* xa_xa30.c in Sources */ = {isa = PBXBuildFile; fileRef = 837CEADF23487F2A00E62A4A /* xa_xa30.c */; }; 837CEAF523487F2C00E62A4A /* ubi_hx.c in Sources */ = {isa = PBXBuildFile; fileRef = 837CEAE023487F2A00E62A4A /* ubi_hx.c */; }; @@ -804,6 +802,7 @@ 83F1EE30245D4FC10076E182 /* imuse.c in Sources */ = {isa = PBXBuildFile; fileRef = 83F1EE2F245D4FC10076E182 /* imuse.c */; }; 83F2CCE525A5B41600F46FA8 /* acx.c in Sources */ = {isa = PBXBuildFile; fileRef = 83F2CCE125A5B41600F46FA8 /* acx.c */; }; 83F5F8831908D0A400C8E65F /* fsb5.c in Sources */ = {isa = PBXBuildFile; fileRef = 83F5F8821908D0A400C8E65F /* fsb5.c */; }; + 83F82CB62CD34747003A1072 /* ubi_apm.c in Sources */ = {isa = PBXBuildFile; fileRef = 83F82CB52CD34747003A1072 /* ubi_apm.c */; }; 83FB239127B14696003F3062 /* mpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = 83FB238D27B14696003F3062 /* mpeg.c */; }; 83FBB1712A4FF4EC00CD0580 /* xa2_acclaim.c in Sources */ = {isa = PBXBuildFile; fileRef = 83FBB16E2A4FF4EC00CD0580 /* xa2_acclaim.c */; }; 83FBB1722A4FF4EC00CD0580 /* ego_dic.c in Sources */ = {isa = PBXBuildFile; fileRef = 83FBB16F2A4FF4EC00CD0580 /* ego_dic.c */; }; @@ -1442,7 +1441,6 @@ 836F6E6918BDC2180095E648 /* nds_rrds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nds_rrds.c; sourceTree = ""; }; 836F6E6B18BDC2180095E648 /* nds_strm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nds_strm.c; sourceTree = ""; }; 836F6E6D18BDC2180095E648 /* ngc_adpdtk.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ngc_adpdtk.c; sourceTree = ""; }; - 836F6E7118BDC2180095E648 /* ngc_dsp_konami.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ngc_dsp_konami.c; sourceTree = ""; }; 836F6E7218BDC2180095E648 /* ngc_dsp_mpds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ngc_dsp_mpds.c; sourceTree = ""; }; 836F6E7318BDC2180095E648 /* ngc_dsp_std.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ngc_dsp_std.c; sourceTree = ""; }; 836F6E7418BDC2180095E648 /* dsp_kceje.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsp_kceje.c; sourceTree = ""; }; @@ -1567,7 +1565,6 @@ 837CEAD423487E8300E62A4A /* bmp_konami.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bmp_konami.c; sourceTree = ""; }; 837CEAD623487E8300E62A4A /* acb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = acb.c; sourceTree = ""; }; 837CEAD723487E8300E62A4A /* bgw_streamfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bgw_streamfile.h; sourceTree = ""; }; - 837CEADC23487F2900E62A4A /* xvas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xvas.c; sourceTree = ""; }; 837CEADD23487F2A00E62A4A /* raw_pcm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = raw_pcm.c; sourceTree = ""; }; 837CEADF23487F2A00E62A4A /* xa_xa30.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xa_xa30.c; sourceTree = ""; }; 837CEAE023487F2A00E62A4A /* ubi_hx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ubi_hx.c; sourceTree = ""; }; @@ -1718,6 +1715,7 @@ 83F1EE2F245D4FC10076E182 /* imuse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = imuse.c; sourceTree = ""; }; 83F2CCE125A5B41600F46FA8 /* acx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = acx.c; sourceTree = ""; }; 83F5F8821908D0A400C8E65F /* fsb5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fsb5.c; sourceTree = ""; }; + 83F82CB52CD34747003A1072 /* ubi_apm.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ubi_apm.c; sourceTree = ""; }; 83FB238D27B14696003F3062 /* mpeg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mpeg.c; sourceTree = ""; }; 83FBB16E2A4FF4EC00CD0580 /* xa2_acclaim.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xa2_acclaim.c; sourceTree = ""; }; 83FBB16F2A4FF4EC00CD0580 /* ego_dic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ego_dic.c; sourceTree = ""; }; @@ -2186,8 +2184,8 @@ children = ( 836F6E2918BDC2180095E648 /* 2dx9.c */, 836F6E8D18BDC2180095E648 /* 2pfs.c */, - 83C727FD22BC893900678B4A /* 9tav_streamfile.h */, 83C727FE22BC893900678B4A /* 9tav.c */, + 83C727FD22BC893900678B4A /* 9tav_streamfile.h */, 8351F32A2212B57000A606E4 /* 208.c */, 834FE0C8215C79E7000A5D3D /* a2m.c */, 83709E031ECBC1A4005C03D3 /* aac_triace.c */, @@ -2200,49 +2198,49 @@ 834F7E7F2C709EA0003AC386 /* adp_ongakukan.c */, 83D26A7626E66D98001A9475 /* adp_wildfire.c */, 834FE0CF215C79E8000A5D3D /* adpcm_capcom.c */, - 83852B0A2680247900378854 /* ads_midway.c */, 836F6E8F18BDC2180095E648 /* ads.c */, - 8349A9021FE6258100E26435 /* adx_keys.h */, + 83852B0A2680247900378854 /* ads_midway.c */, 831BA60E1EAC61A500CF89B0 /* adx.c */, + 8349A9021FE6258100E26435 /* adx_keys.h */, 8349A9001FE6258000E26435 /* afc.c */, 836F6E2F18BDC2180095E648 /* agsc.c */, 834FE0E5215C79EC000A5D3D /* ahv.c */, - 836DF626298F864100CD0580 /* ahx_keys.h */, 836F6E3018BDC2180095E648 /* ahx.c */, + 836DF626298F864100CD0580 /* ahx_keys.h */, 834FE0C1215C79E5000A5D3D /* aif_asobo.c */, 836F6E3118BDC2180095E648 /* aifc.c */, - 8349A8F61FE6257E00E26435 /* aix_streamfile.h */, 836F6E3218BDC2180095E648 /* aix.c */, + 8349A8F61FE6257E00E26435 /* aix_streamfile.h */, 836F6E3318BDC2180095E648 /* akb.c */, 836F6EFB18BDC2190095E648 /* alp.c */, 834FE0C0215C79E5000A5D3D /* ao.c */, - 834F7E812C709F5B003AC386 /* apa3_streamfile.h */, 834F7E822C709F5B003AC386 /* apa3.c */, + 834F7E812C709F5B003AC386 /* apa3_streamfile.h */, 834FE0C7215C79E7000A5D3D /* apc.c */, 836F6E3418BDC2180095E648 /* apple_caff.c */, 836F6E3D18BDC2180095E648 /* asd_naxat.c */, 8315958820FEC83F007002F0 /* asf.c */, + 836F6E3518BDC2180095E648 /* ast.c */, 835B9B8B2730BF2C00F87EE3 /* ast_mmv.c */, 835B9B8A2730BF2C00F87EE3 /* ast_mv.c */, - 836F6E3518BDC2180095E648 /* ast.c */, 83AB8C741E8072A100086084 /* astb.c */, 8306B0D520984590000302D4 /* atsl.c */, 83EED5D2203A8BC7008BEB45 /* aus.c */, 83A16D2722D2ADE700B90C4C /* awb.c */, + 83AA5D201F6E2F9B0020821C /* awc.c */, 834F7D162C708700003AC386 /* awc_decryption_streamfile.h */, 834F7D172C708701003AC386 /* awc_streamfile.h */, 8306B0C32098458C000302D4 /* awc_xma_streamfile.h */, - 83AA5D201F6E2F9B0020821C /* awc.c */, 83FBB1702A4FF4EC00CD0580 /* awd.c */, 836F6E3618BDC2180095E648 /* baf.c */, - 8349A8F81FE6257E00E26435 /* bar_streamfile.h */, 8349A9051FE6258100E26435 /* bar.c */, + 8349A8F81FE6257E00E26435 /* bar_streamfile.h */, 836F6E3718BDC2180095E648 /* bcstm.c */, 83BAFB6B19F45EB3005DAB60 /* bfstm.c */, 83A5F75E198DF021009AF94C /* bfwav.c */, 836F6E9518BDC2180095E648 /* bg00.c */, - 837CEAD723487E8300E62A4A /* bgw_streamfile.h */, 836F6E3818BDC2180095E648 /* bgw.c */, + 837CEAD723487E8300E62A4A /* bgw_streamfile.h */, 8319018328F67F2B00B70711 /* bigrp.c */, 83299FCE1E7660C7003A3242 /* bik.c */, 83031ECF243C50DE00C3F3E0 /* bkhd.c */, @@ -2250,8 +2248,8 @@ 839FBFFA26C354E70016A78A /* bnk_relic.c */, 834FE0CA215C79E7000A5D3D /* bnk_sony.c */, 836F6F0018BDC2190095E648 /* bns.c */, - 8373342523F60CDC00DE14DC /* bnsf_keys.h */, 836F6E3918BDC2180095E648 /* bnsf.c */, + 8373342523F60CDC00DE14DC /* bnsf_keys.h */, 836F6E3A18BDC2180095E648 /* brstm.c */, 83AA7F762519C042004C5298 /* bsf.c */, 83EDE5D71A70951A005F5D84 /* btsnd.c */, @@ -2270,8 +2268,8 @@ 836F6E3F18BDC2180095E648 /* dc_idvi.c */, 836F6E4018BDC2180095E648 /* dc_kcey.c */, 83C7280C22BC893D00678B4A /* dcs_wav.c */, - 8373342123F60CDB00DE14DC /* deblock_streamfile.c */, 8373341E23F60CDB00DE14DC /* deblock_streamfile.h */, + 8373342123F60CDB00DE14DC /* deblock_streamfile.c */, 8349A8EE1FE6257C00E26435 /* dec.c */, 834FE0CD215C79E8000A5D3D /* derf.c */, 8385D4E2245174C600FF8E67 /* diva.c */, @@ -2281,31 +2279,31 @@ 83299FCF1E7660C7003A3242 /* dsp_adx.c */, 836F6E7418BDC2180095E648 /* dsp_kceje.c */, 8349A8FF1FE6258000E26435 /* ea_1snh.c */, + 8349A8F71FE6257E00E26435 /* ea_eaac.c */, 834F7D042C7085EB003AC386 /* ea_eaac_abk.c */, 834F7D052C7085EB003AC386 /* ea_eaac_hdr_sth_dat.c */, 834F7D032C7085EB003AC386 /* ea_eaac_mpf_mus.c */, 83AFABBA23795202002F3947 /* ea_eaac_opus_streamfile.h */, - 834F7D022C7085EB003AC386 /* ea_eaac_sbr_harmony.c */, 834F7D062C7085EB003AC386 /* ea_eaac_sbr.c */, + 834F7D022C7085EB003AC386 /* ea_eaac_sbr_harmony.c */, 834F7D012C7085EB003AC386 /* ea_eaac_standard.c */, 8306B0BD2098458B000302D4 /* ea_eaac_streamfile.h */, 834F7D072C7085EB003AC386 /* ea_eaac_tmx.c */, - 8349A8F71FE6257E00E26435 /* ea_eaac.c */, 834F7D302C709231003AC386 /* ea_sbk.c */, + 836F6E4618BDC2180095E648 /* ea_schl.c */, 834F7E152C709A1D003AC386 /* ea_schl_abk.c */, 830165981F256BD000CA0941 /* ea_schl_fixed.c */, 834F7E122C709A1D003AC386 /* ea_schl_hdr_dat.c */, 834F7E132C709A1D003AC386 /* ea_schl_map_mpf_mus.c */, 834F7E142C709A1D003AC386 /* ea_schl_standard.c */, 834FE0DA215C79EA000A5D3D /* ea_schl_streamfile.h */, - 836F6E4618BDC2180095E648 /* ea_schl.c */, 83EED5D1203A8BC7008BEB45 /* ea_swvr.c */, 8306B0C42098458D000302D4 /* ea_wve_ad10.c */, 8306B0BF2098458C000302D4 /* ea_wve_au00.c */, 83FBB16F2A4FF4EC00CD0580 /* ego_dic.c */, + 83031ECE243C50DE00C3F3E0 /* encrypted.c */, 83AF2CC826226BA500538240 /* encrypted_bgm_streamfile.h */, 832FC36E278FAE3E0056A860 /* encrypted_mc161_streamfile.h */, - 83031ECE243C50DE00C3F3E0 /* encrypted.c */, 836F46B02820874D005B9B87 /* esf.c */, 836F6E4918BDC2180095E648 /* exakt_sc.c */, 836F6E4A18BDC2180095E648 /* excitebots.c */, @@ -2317,14 +2315,14 @@ 838BDB6D1D3B043C0022CA6F /* ffmpeg.c */, 836F6E9B18BDC2180095E648 /* filp.c */, 8349A8FD1FE6257F00E26435 /* flx.c */, - 83D20072248DDB760048BD24 /* fsb_encrypted_streamfile.h */, + 836F6E4C18BDC2180095E648 /* fsb.c */, 83A21F81201D8981000F04B9 /* fsb_encrypted.c */, + 83D20072248DDB760048BD24 /* fsb_encrypted_streamfile.h */, 834FE0C4215C79E6000A5D3D /* fsb_interleave_streamfile.h */, 83A21F7E201D8980000F04B9 /* fsb_keys.h */, - 836F6E4C18BDC2180095E648 /* fsb.c */, + 83F5F8821908D0A400C8E65F /* fsb5.c */, 83C7280522BC893B00678B4A /* fsb5_fev.c */, 83031ED0243C50DF00C3F3E0 /* fsb5_streamfile.h */, - 83F5F8821908D0A400C8E65F /* fsb5.c */, 8373342323F60CDB00DE14DC /* fwse.c */, 834D3A6D19F47C98001C54F6 /* g1l.c */, 836F6E9C18BDC2180095E648 /* gbts.c */, @@ -2338,17 +2336,17 @@ 834F7D002C7085EA003AC386 /* gwb_gwd.c */, 8342469020C4D22F00926E48 /* h4m.c */, 836F6E5218BDC2180095E648 /* halpst.c */, - 835B9B8D2730BF2D00F87EE3 /* hca_bf.h */, - 832BF81A21E0514A006F50F1 /* hca_keys_awb.h */, - 83AA5D211F6E2F9C0020821C /* hca_keys.h */, 8323894F1D2246C300482226 /* hca.c */, + 835B9B8D2730BF2D00F87EE3 /* hca_bf.h */, + 83AA5D211F6E2F9C0020821C /* hca_keys.h */, + 832BF81A21E0514A006F50F1 /* hca_keys_awb.h */, 834FE0DF215C79EB000A5D3D /* hd3_bd3.c */, 836F6E9E18BDC2180095E648 /* hgc1.c */, 836F6E5318BDC2180095E648 /* his.c */, 836F6E9818BDC2180095E648 /* hxd.c */, 834FE0E0215C79EB000A5D3D /* idsp_ie.c */, - 8346D97525BF838C00D1A8B0 /* idtech_streamfile.h */, 8346D97425BF838C00D1A8B0 /* idtech.c */, + 8346D97525BF838C00D1A8B0 /* idtech_streamfile.h */, 8399335C2591E8C0001855AF /* ifs.c */, 836F6E5818BDC2180095E648 /* iivb.c */, 83C7280922BC893C00678B4A /* ikm.c */, @@ -2359,26 +2357,26 @@ 83AFABBB23795202002F3947 /* isb.c */, 836F6E5618BDC2180095E648 /* ish_isd.c */, 83269DD12399F5DE00F49FE3 /* ivag.c */, - 837CEAE923487F2B00E62A4A /* jstm_streamfile.h */, 837CEAEF23487F2C00E62A4A /* jstm.c */, + 837CEAE923487F2B00E62A4A /* jstm_streamfile.h */, 83D20075248DDB760048BD24 /* kat.c */, - 834FE0C3215C79E6000A5D3D /* kma9_streamfile.h */, 83A21F83201D8981000F04B9 /* kma9.c */, + 834FE0C3215C79E6000A5D3D /* kma9_streamfile.h */, 836F6EF618BDC2190095E648 /* knon.c */, 836F6E5918BDC2180095E648 /* kraw.c */, 8346D97625BF838C00D1A8B0 /* ktac.c */, 83AA7F792519C042004C5298 /* ktsc.c */, - 834F7CFE2C7085EA003AC386 /* ktsr_streamfile.h */, 83D20074248DDB760048BD24 /* ktsr.c */, + 834F7CFE2C7085EA003AC386 /* ktsr_streamfile.h */, 830EBE122004656E0023AA10 /* ktss.c */, 8373342423F60CDB00DE14DC /* kwb.c */, 835B9B8C2730BF2C00F87EE3 /* lopu_fb.c */, - 83A8BAE125667AA7000F5F3F /* lp_ap_lep_streamfile.h */, 836F6E9918BDC2180095E648 /* lp_ap_lep.c */, + 83A8BAE125667AA7000F5F3F /* lp_ap_lep_streamfile.h */, 839C3D22270D49FF00E13653 /* lpcm_fb.c */, 835B9B8E2730BF2D00F87EE3 /* lpcm_shade.c */, - 8373341F23F60CDB00DE14DC /* lrmd_streamfile.h */, 8373342223F60CDB00DE14DC /* lrmd.c */, + 8373341F23F60CDB00DE14DC /* lrmd_streamfile.h */, 836F6E5A18BDC2180095E648 /* lsf.c */, 836F6E5C18BDC2180095E648 /* mattel_hyperscan.c */, 836F6E5D18BDC2180095E648 /* maxis_xa.c */, @@ -2390,24 +2388,24 @@ 8346D97725BF838C00D1A8B0 /* mjb_mjh.c */, 836F6E5F18BDC2180095E648 /* mn_str.c */, 8349A9031FE6258100E26435 /* mogg.c */, - 839FBFF926C354E70016A78A /* mp4_faac.c */, 836F6E6018BDC2180095E648 /* mp4.c */, + 839FBFF926C354E70016A78A /* mp4_faac.c */, 83FB238D27B14696003F3062 /* mpeg.c */, 83FBB17E2A4FF94C00CD0580 /* msa.c */, 8306B0CB2098458E000302D4 /* msb_msh.c */, + 83C7280A22BC893C00678B4A /* msf.c */, 832BF81721E0514A006F50F1 /* msf_banpresto.c */, 83C7280D22BC893D00678B4A /* msf_konami.c */, 832BF80B21E05148006F50F1 /* msf_tamasoft.c */, - 83C7280A22BC893C00678B4A /* msf.c */, 83709E011ECBC1A4005C03D3 /* mss.c */, 834FE0E7215C79EC000A5D3D /* msv.c */, - 83C7280E22BC893D00678B4A /* mta2_streamfile.h */, 83C727FF22BC893900678B4A /* mta2.c */, + 83C7280E22BC893D00678B4A /* mta2_streamfile.h */, 83C7280322BC893A00678B4A /* mtaf.c */, - 83031ED5243C510400C3F3E0 /* mul_streamfile.h */, 832BF81221E05149006F50F1 /* mul.c */, - 83D20073248DDB760048BD24 /* mups_streamfile.h */, + 83031ED5243C510400C3F3E0 /* mul_streamfile.h */, 83D20077248DDB770048BD24 /* mups.c */, + 83D20073248DDB760048BD24 /* mups_streamfile.h */, 836F6E6218BDC2180095E648 /* mus_acm.c */, 836F6F0118BDC2190095E648 /* mus_krome.c */, 83C7280622BC893B00678B4A /* mus_vc.c */, @@ -2418,11 +2416,10 @@ 836F6E6618BDC2180095E648 /* naomi_adpcm.c */, 836F6E6818BDC2180095E648 /* nds_hwas.c */, 836F6E6918BDC2180095E648 /* nds_rrds.c */, - 830165991F256BD000CA0941 /* nds_strm_ffta2.c */, 836F6E6B18BDC2180095E648 /* nds_strm.c */, + 830165991F256BD000CA0941 /* nds_strm_ffta2.c */, 836F6E6D18BDC2180095E648 /* ngc_adpdtk.c */, 834F7D322C70932C003AC386 /* ngc_dsp_asura.c */, - 836F6E7118BDC2180095E648 /* ngc_dsp_konami.c */, 836F6E7218BDC2180095E648 /* ngc_dsp_mpds.c */, 836F6E7318BDC2180095E648 /* ngc_dsp_std.c */, 836F6E7518BDC2180095E648 /* ngc_ffcc_str.c */, @@ -2435,21 +2432,21 @@ 83C727FC22BC893900678B4A /* npsf.c */, 837CEAE223487F2A00E62A4A /* nub.c */, 832BF81B21E0514B006F50F1 /* nus3audio.c */, - 83269DD02399F5DD00F49FE3 /* nus3bank_streamfile.h */, 834FE0D1215C79E9000A5D3D /* nus3bank.c */, + 83269DD02399F5DD00F49FE3 /* nus3bank_streamfile.h */, 836F6E8118BDC2180095E648 /* nwa.c */, 832BF81421E0514A006F50F1 /* nwav.c */, 834FE0DB215C79EA000A5D3D /* nxa1.c */, 8306B0C02098458C000302D4 /* nxap.c */, 834F7CFC2C70834D003AC386 /* nxof.c */, 832BF81321E05149006F50F1 /* ogg_opus.c */, - 835C883522CC17BE001B4B3F /* ogg_vorbis_streamfile.h */, 83A21F7F201D8980000F04B9 /* ogg_vorbis.c */, + 835C883522CC17BE001B4B3F /* ogg_vorbis_streamfile.h */, 831BA60F1EAC61A500CF89B0 /* ogl.c */, 83AF2CC726226BA400538240 /* ogv_3rdeye.c */, 8349A8FB1FE6257F00E26435 /* omu.c */, - 8306B0CD2098458E000302D4 /* opus_interleave_streamfile.h */, 8306B0CE2098458E000302D4 /* opus.c */, + 8306B0CD2098458E000302D4 /* opus_interleave_streamfile.h */, 836F6E8318BDC2180095E648 /* otm.c */, 836F6EB218BDC2180095E648 /* p2bt_move_visa.c */, 836F6E8418BDC2180095E648 /* p3d.c */, @@ -2463,8 +2460,8 @@ 834FBCE926BBC7E50095647F /* piff_tpcm.c */, 836F6E8B18BDC2180095E648 /* pona.c */, 836F6E8C18BDC2180095E648 /* pos.c */, - 8306B0C52098458D000302D4 /* ppst_streamfile.h */, 8306B0D620984590000302D4 /* ppst.c */, + 8306B0C52098458D000302D4 /* ppst_streamfile.h */, 834FE0D5215C79E9000A5D3D /* ps_headerless.c */, 836F6E8E18BDC2180095E648 /* ps2_adm.c */, 836F6E9118BDC2180095E648 /* ps2_ass.c */, @@ -2491,8 +2488,8 @@ 836F6E5518BDC2180095E648 /* psnd.c */, 83FBB1742A4FF59E00CD0580 /* pwb.c */, 83997F5722D9569E00633184 /* rad.c */, - 834F7D2E2C708D31003AC386 /* rage_aud_streamfile.h */, 836F6E5718BDC2180095E648 /* rage_aud.c */, + 834F7D2E2C708D31003AC386 /* rage_aud_streamfile.h */, 837CEAED23487F2C00E62A4A /* raw_int.c */, 837CEADD23487F2A00E62A4A /* raw_pcm.c */, 836F6EE718BDC2190095E648 /* raw_rsf.c */, @@ -2501,8 +2498,8 @@ 837CEAE723487F2B00E62A4A /* raw_wavm.c */, 836F6EE218BDC2190095E648 /* redspark.c */, 834FE0D9215C79EA000A5D3D /* rfrm.c */, - 83FBD502235D31F700D35BCD /* riff_ogg_streamfile.h */, 836F6EE318BDC2190095E648 /* riff.c */, + 83FBD502235D31F700D35BCD /* riff_ogg_streamfile.h */, 836F6EE418BDC2190095E648 /* rkv.c */, 836F6EE518BDC2190095E648 /* rs03.c */, 836F6EE618BDC2190095E648 /* rsd.c */, @@ -2513,8 +2510,8 @@ 836F6EE818BDC2190095E648 /* rwsd.c */, 83852B092680247900378854 /* rxws.c */, 8383A62B281203C50062E49E /* s3v.c */, - 83AA7F772519C042004C5298 /* sab_streamfile.h */, 8349A8F11FE6257D00E26435 /* sab.c */, + 83AA7F772519C042004C5298 /* sab_streamfile.h */, 83D20078248DDB770048BD24 /* sadf.c */, 83D20079248DDB770048BD24 /* sadl.c */, 836F6EEB18BDC2190095E648 /* sat_baka.c */, @@ -2528,8 +2525,8 @@ 836F6EEF18BDC2190095E648 /* sdt.c */, 837CEB062348809400E62A4A /* seb.c */, 836F6EF018BDC2190095E648 /* seg.c */, - 83C7280422BC893B00678B4A /* sfh_streamfile.h */, 83C7280822BC893C00678B4A /* sfh.c */, + 83C7280422BC893B00678B4A /* sfh_streamfile.h */, 836F6EF118BDC2190095E648 /* sfl.c */, 831BA6111EAC61A500CF89B0 /* sgxd.c */, 83AA7F782519C042004C5298 /* silence.c */, @@ -2553,9 +2550,9 @@ 83A21F84201D8981000F04B9 /* sqex_sead.c */, 837CEAF023487F2C00E62A4A /* sqex_streamfile.h */, 83C0C75C2AA435C60056AFD8 /* squeak.c */, - 8396BE782935FC2F00CD0580 /* sscf_encrypted.c */, - 8396BE792935FC2F00CD0580 /* sscf_encrypted.h */, 834FE0D6215C79E9000A5D3D /* sscf.c */, + 8396BE792935FC2F00CD0580 /* sscf_encrypted.h */, + 8396BE782935FC2F00CD0580 /* sscf_encrypted.c */, 8339B322280FDF250076F74B /* sspf.c */, 8317C24826982CC1007DD0B8 /* sspr.c */, 836F6EBA18BDC2180095E648 /* ster.c */, @@ -2563,8 +2560,8 @@ 83AA5D231F6E2F9C0020821C /* stma.c */, 836F6E4118BDC2180095E648 /* str_sega.c */, 836F6EF718BDC2190095E648 /* str_snds.c */, - 834F7CFF2C7085EA003AC386 /* str_wav_streamfile.h */, 834FE0C2215C79E6000A5D3D /* str_wav.c */, + 834F7CFF2C7085EA003AC386 /* str_wav_streamfile.h */, 83C7280722BC893B00678B4A /* strm_abylight.c */, 836F6F0618BDC2190095E648 /* sts.c */, 83AA7F752519C041004C5298 /* svag_kcet.c */, @@ -2576,25 +2573,26 @@ 8373342E23F60D4100DE14DC /* tgc.c */, 836F6EFA18BDC2190095E648 /* thp.c */, 836F46AF2820874D005B9B87 /* tt_ad.c */, - 83C7280122BC893A00678B4A /* txth_streamfile.h */, 830165971F256BD000CA0941 /* txth.c */, + 83C7280122BC893A00678B4A /* txth_streamfile.h */, + 834F7E952C70A45C003AC386 /* txtp.h */, + 8306B0D22098458F000302D4 /* txtp.c */, 834F7E932C70A45B003AC386 /* txtp_parser.c */, 834F7E942C70A45B003AC386 /* txtp_process.c */, - 8306B0D22098458F000302D4 /* txtp.c */, - 834F7E952C70A45C003AC386 /* txtp.h */, - 8351F32B2212B57000A606E4 /* ubi_bao_streamfile.h */, + 83F82CB52CD34747003A1072 /* ubi_apm.c */, 8306B0D420984590000302D4 /* ubi_bao.c */, - 832FC367278FA4CB0056A860 /* ubi_ckd_cwav_streamfile.h */, - 832FC36B278FA4CB0056A860 /* ubi_ckd_cwav.c */, + 8351F32B2212B57000A606E4 /* ubi_bao_streamfile.h */, 836F6EFC18BDC2190095E648 /* ubi_ckd.c */, + 832FC36B278FA4CB0056A860 /* ubi_ckd_cwav.c */, + 832FC367278FA4CB0056A860 /* ubi_ckd_cwav_streamfile.h */, 837CEAE023487F2A00E62A4A /* ubi_hx.c */, 8306B0D720984590000302D4 /* ubi_jade.c */, - 83031ED4243C510400C3F3E0 /* ubi_lyn_streamfile.h */, 8306B0CA2098458E000302D4 /* ubi_lyn.c */, + 83031ED4243C510400C3F3E0 /* ubi_lyn_streamfile.h */, 831BA6131EAC61A500CF89B0 /* ubi_raki.c */, + 8349A8F41FE6257D00E26435 /* ubi_sb.c */, 8399335D2591E8C0001855AF /* ubi_sb_garbage_streamfile.h */, 8375737521F950EC00F01AF5 /* ubi_sb_streamfile.h */, - 8349A8F41FE6257D00E26435 /* ubi_sb.c */, 834FE0C5215C79E6000A5D3D /* ue4opus.c */, 834FE0DD215C79EB000A5D3D /* utk.c */, 83D1189228B2F33400AF3370 /* vab.c */, @@ -2602,25 +2600,25 @@ 834FE0D3215C79E9000A5D3D /* vai.c */, 836F6EC818BDC2190095E648 /* vas_kceo.c */, 834F7D282C708A2F003AC386 /* vas_rockstar.c */, - 836F6ECA18BDC2190095E648 /* vgs_ps.c */, 836F6EFD18BDC2190095E648 /* vgs.c */, + 836F6ECA18BDC2190095E648 /* vgs_ps.c */, 83031ED7243C510400C3F3E0 /* vid1.c */, 836F6EA618BDC2180095E648 /* vig_kces.c */, 834FE0CE215C79E8000A5D3D /* vis.c */, 836F6ECD18BDC2190095E648 /* voi.c */, 834FE0D4215C79E9000A5D3D /* vpk.c */, + 836F6EFE18BDC2190095E648 /* vs.c */, 832BF81821E0514A006F50F1 /* vs_square.c */, 832BF81021E05149006F50F1 /* vs_str.c */, - 836F6EFE18BDC2190095E648 /* vs.c */, - 8349A8F91FE6257E00E26435 /* vsf_tta.c */, 836F6EFF18BDC2190095E648 /* vsf.c */, - 83F0AA5D21E2028B004BBC04 /* vsv_streamfile.h */, + 8349A8F91FE6257E00E26435 /* vsf_tta.c */, 83F0AA5E21E2028C004BBC04 /* vsv.c */, + 83F0AA5D21E2028B004BBC04 /* vsv_streamfile.h */, 8349A9011FE6258000E26435 /* vxn.c */, 83A8BAE025667AA7000F5F3F /* wady.c */, 8306B0C22098458C000302D4 /* waf.c */, - 8306B0D02098458F000302D4 /* wave_segmented.c */, 8306B0C92098458E000302D4 /* wave.c */, + 8306B0D02098458F000302D4 /* wave_segmented.c */, 834FE0D0215C79E8000A5D3D /* wavebatch.c */, 836F6ED018BDC2190095E648 /* wb.c */, 83349715275DD2AC00302E21 /* wbk.c */, @@ -2634,44 +2632,43 @@ 836F6F0918BDC2190095E648 /* wvs.c */, 83FF0EBB1E93282100C58054 /* wwise.c */, 839FBFF826C354E60016A78A /* wxd_wxh.c */, + 832BF81521E0514A006F50F1 /* xa.c */, 837CEAE523487F2B00E62A4A /* xa_04sw.c */, 837CEADF23487F2A00E62A4A /* xa_xa30.c */, - 832BF81521E0514A006F50F1 /* xa.c */, 83FBB16E2A4FF4EC00CD0580 /* xa2_acclaim.c */, - 834FE0D2215C79E9000A5D3D /* xau_konami.c */, 833A7A2D1ED11961003EC53E /* xau.c */, - 837CEAEE23487F2C00E62A4A /* xavs_streamfile.h */, + 834FE0D2215C79E9000A5D3D /* xau_konami.c */, 837CEAE423487F2A00E62A4A /* xavs.c */, + 837CEAEE23487F2C00E62A4A /* xavs_streamfile.h */, 836F6F0C18BDC2190095E648 /* xbox_ims.c */, - 83FC176A23AC58D100E1025F /* xma_ue3.c */, 8350C0541E071881009E0A93 /* xma.c */, + 83FC176A23AC58D100E1025F /* xma_ue3.c */, 834FE0DC215C79EA000A5D3D /* xmd.c */, 837CEAEC23487F2C00E62A4A /* xmu.c */, + 830EBE112004656E0023AA10 /* xnb.c */, 83031ED6243C510400C3F3E0 /* xnb_lz4mg.h */, 83031ED8243C510500C3F3E0 /* xnb_streamfile.h */, - 830EBE112004656E0023AA10 /* xnb.c */, 832BF81921E0514A006F50F1 /* xopus.c */, 832BF80A21E05148006F50F1 /* xpcm.c */, 832BF80C21E05148006F50F1 /* xps.c */, 83FC417226D3304D009A2022 /* xsh_xsd_xss.c */, 836F6F1218BDC2190095E648 /* xss.c */, 83AFABB923795201002F3947 /* xssb.c */, - 834FE0C6215C79E7000A5D3D /* xvag_streamfile.h */, 83345A4E1F8AEB2800B2EAA4 /* xvag.c */, - 837CEADC23487F2900E62A4A /* xvas.c */, + 834FE0C6215C79E7000A5D3D /* xvag_streamfile.h */, 83A8BAE325667AA7000F5F3F /* xwav.c */, - 83C727FB22BC893800678B4A /* xwb_xsb.h */, 836F6F1318BDC2190095E648 /* xwb.c */, + 83C727FB22BC893800678B4A /* xwb_xsb.h */, 83A21F7D201D8980000F04B9 /* xwc.c */, - 83C7280222BC893A00678B4A /* xwma_konami_streamfile.h */, - 83C7280B22BC893C00678B4A /* xwma_konami.c */, 832BF81621E0514A006F50F1 /* xwma.c */, + 83C7280B22BC893C00678B4A /* xwma_konami.c */, + 83C7280222BC893A00678B4A /* xwma_konami_streamfile.h */, 837CEAE323487F2A00E62A4A /* xwv_valve.c */, 836F6F1418BDC2190095E648 /* ydsp.c */, 836F6E7E18BDC2180095E648 /* ymf.c */, 836F6F1518BDC2190095E648 /* zsd.c */, - 832BF80E21E05149006F50F1 /* zsnd_streamfile.h */, 832BF80F21E05149006F50F1 /* zsnd.c */, + 832BF80E21E05149006F50F1 /* zsnd_streamfile.h */, 836F6F1618BDC2190095E648 /* zwdsp.c */, 83AA7F7C2519C042004C5298 /* zwv.c */, ); @@ -3097,7 +3094,6 @@ 834F7ED32C70A786003AC386 /* mixing.c in Sources */, 83EED5D3203A8BC7008BEB45 /* ea_swvr.c in Sources */, 8306B0EE20984590000302D4 /* smc_smh.c in Sources */, - 836F6FAD18BDC2190095E648 /* ngc_dsp_konami.c in Sources */, 834F7DAB2C7093EA003AC386 /* asf_decoder.c in Sources */, 834F7E0C2C7093EA003AC386 /* ws_decoder.c in Sources */, 834F7EDB2C70A786003AC386 /* streamfile_api.c in Sources */, @@ -3364,6 +3360,7 @@ 8306B0F120984590000302D4 /* ppst.c in Sources */, 834F7DC22C7093EA003AC386 /* ffmpeg_decoder_utils.c in Sources */, 832BF81C21E0514B006F50F1 /* xpcm.c in Sources */, + 83F82CB62CD34747003A1072 /* ubi_apm.c in Sources */, 836F702B18BDC2190095E648 /* sdt.c in Sources */, 836F6FDA18BDC2190095E648 /* hgc1.c in Sources */, 836F702C18BDC2190095E648 /* seg.c in Sources */, @@ -3636,7 +3633,6 @@ 834F7DAF2C7093EA003AC386 /* circus_vq_lib.c in Sources */, 834FE0F2215C79ED000A5D3D /* wv6.c in Sources */, 836F6FA218BDC2190095E648 /* naomi_adpcm.c in Sources */, - 837CEAF123487F2C00E62A4A /* xvas.c in Sources */, 836F6FBF18BDC2190095E648 /* otm.c in Sources */, 8399335F2591E8C1001855AF /* ifs.c in Sources */, 8373342A23F60CDC00DE14DC /* lrmd.c in Sources */, diff --git a/Frameworks/vgmstream/vgmstream/src/base/render.c b/Frameworks/vgmstream/vgmstream/src/base/render.c index 700d92b2f..de878d4f4 100644 --- a/Frameworks/vgmstream/vgmstream/src/base/render.c +++ b/Frameworks/vgmstream/vgmstream/src/base/render.c @@ -181,6 +181,7 @@ static void play_op_trim(VGMSTREAM* vgmstream, sbuf_t* sbuf) { if (to_do > buf_samples) to_do = buf_samples; + sbuf_tmp.filled = 0; sbuf_tmp.samples = to_do; int done = render_layout(&sbuf_tmp, vgmstream); /* no mixing */ diff --git a/Frameworks/vgmstream/vgmstream/src/formats.c b/Frameworks/vgmstream/vgmstream/src/formats.c index ef4fbde15..332417168 100644 --- a/Frameworks/vgmstream/vgmstream/src/formats.c +++ b/Frameworks/vgmstream/vgmstream/src/formats.c @@ -70,6 +70,7 @@ static const char* extension_list[] = { "ao", "ap", "apc", + "apm", "as4", "asbin", "asd", @@ -687,7 +688,6 @@ static const char* extension_list[] = { "xsew", "xss", "xvag", - "xvas", "xwav", //fake extension for .wav (renamed, to be removed) "xwb", "xmd", @@ -956,7 +956,7 @@ static const layout_info layout_info_list[] = { {layout_blocked_ea_1snh, "blocked (EA 1SNh)"}, {layout_blocked_caf, "blocked (CAF)"}, {layout_blocked_wsi, "blocked (WSI)"}, - {layout_blocked_xvas, "blocked (.xvas)"}, + {layout_blocked_xvas, "blocked (.vas)"}, {layout_blocked_str_snds, "blocked (.str SNDS)"}, {layout_blocked_ws_aud, "blocked (Westwood Studios .aud)"}, {layout_blocked_dec, "blocked (DEC)"}, @@ -1110,7 +1110,6 @@ static const meta_info meta_info_list[] = { {meta_STR_SEGA, "Sega Stream Asset Builder header"}, {meta_STR_SEGA_custom, "Sega Stream Asset Builder header (custom)"}, {meta_XMU, "Outrage XMU header"}, - {meta_XVAS, "Konami .XVAS header"}, {meta_XA2_ACCLAIM, "Acclaim .XA2 header"}, {meta_SAP, "VING .SAP header"}, {meta_DC_IDVI, "Capcom IDVI header"}, @@ -1191,7 +1190,6 @@ static const meta_info meta_info_list[] = { {meta_PONA_3DO, "Policenauts BGM header"}, {meta_PONA_PSX, "Policenauts BGM header"}, {meta_NGC_DSP_AAAP, "Acclaim Austin AAAp DSP header"}, - {meta_NGC_DSP_KONAMI, "Konami DSP header"}, {meta_BNSF, "Namco Bandai BNSF header"}, {meta_WB, "Triangle Service .WB header"}, {meta_S14, "Namco .S14 raw header"}, @@ -1289,6 +1287,7 @@ static const meta_info meta_info_list[] = { {meta_OPUS, "Nintendo Switch OPUS header"}, {meta_PC_AST, "Capcom AST (PC) header"}, {meta_UBI_SB, "Ubisoft SBx header"}, + {meta_UBI_APM, "Ubisoft APM header"}, {meta_NAAC, "Namco NAAC header"}, {meta_EZW, "EZ2DJ EZWAVE header"}, {meta_VXN, "Gameloft VXN header"}, diff --git a/Frameworks/vgmstream/vgmstream/src/meta/fsb_keys.h b/Frameworks/vgmstream/vgmstream/src/meta/fsb_keys.h index 35603bafd..4b1cbabca 100644 --- a/Frameworks/vgmstream/vgmstream/src/meta/fsb_keys.h +++ b/Frameworks/vgmstream/vgmstream/src/meta/fsb_keys.h @@ -69,6 +69,7 @@ static const fsbkey_info fsbkey_list[] = { { MODE_FSB5, FSBKEY_ADD("resoforce") }, // Rivals of Aether 2 (PC) { MODE_FSB5, FSBKEY_ADD("3cfe772db5b55b806541d3faf894020e") }, // Final Fantasy XV: War for Eos (Android) { MODE_FSB5, FSBKEY_ADD("aj#$kLucf2lh}eqh") }, // Forza Motorsport 2023 (PC) + { MODE_FSB4, FSBKEY_ADD("dpdjeoqkr") }, // AirRider CrazyRacing (PC) /* some games use a key per file, generated from the filename * (could add all of them but there are a lot of songs, so external .fsbkey are probably better) */ diff --git a/Frameworks/vgmstream/vgmstream/src/meta/hca_keys.h b/Frameworks/vgmstream/vgmstream/src/meta/hca_keys.h index 0396ef590..445a3cb72 100644 --- a/Frameworks/vgmstream/vgmstream/src/meta/hca_keys.h +++ b/Frameworks/vgmstream/vgmstream/src/meta/hca_keys.h @@ -427,6 +427,7 @@ static const hcakey_info hcakey_list[] = { {0xbb8f42a806d1fa6}, //music_0000008 {0xfd6e5a721921d936}, //music_0000009 {0x7749847207a5f0da}, //music_0000010 + {0x5fcc1b142892c55c}, //music_0000011 {0x52d065d9ccdb8696}, //music_0110001 {0xba26e58923a5da5d}, //music_0110002 {0x5b877af6e52af19b}, //music_0110003 @@ -458,6 +459,10 @@ static const hcakey_info hcakey_list[] = { {0xff2ae68fa067f80a}, //music_0110031 {0x422ca19b0fa5c7c0}, //music_0110032 {0x3b11592a696da747}, //music_0110033 + {0x4ad3b8c0afc555bf}, //music_0110034 + {0xc642361141842f89}, //music_0110035 + {0x9eb82f449eb4f3f6}, //music_0110036 + {0x417822c4c107541c}, //music_0110037 {0xfb647d074e53fab6}, //music_0120001 {0xc24049b9f7ed3105}, //music_0120002 {0xdc128f2fd48bf4b}, //music_0120003 @@ -479,6 +484,10 @@ static const hcakey_info hcakey_list[] = { {0xfd61f2c3b89f3888}, //music_0120019 {0x514fa9879fd07278}, //music_0120021 {0x3841dd3467659916}, //music_0120022 + {0xe6b3826413d0dbfc}, //music_0120023 + {0x1cc0a87f19dd7ca}, //music_0120024 + {0x480905d4a216f5a6}, //music_0120025 + {0x253fe8e15f9682b6}, //music_0140001 {0x4fffee4065d22bec}, //music_0210001 {0x7678588b0adf59df}, //music_0210002 {0xa0316b536c8b7540}, //music_0210003 @@ -500,6 +509,11 @@ static const hcakey_info hcakey_list[] = { {0x3399e970670db2ba}, //music_0210019 {0x1cb76530af356c05}, //music_0210020 {0x2ae40b627c7125d7}, //music_0210021 + {0xcc7e1e54049f4719}, //music_0210022 + {0x4c06e4b2e072abaa}, //music_0210023 + {0xc60bc5aeec280870}, //music_0210024 + {0xc59613fc788cec7}, //music_0210025 + {0xf61a0cfac4072903}, //music_0210026 {0x15bb78c31db0a0b6}, //music_0220001 {0x59b1257242c40109}, //music_0220002 {0xdb402bd08d522f34}, //music_0220003 @@ -521,6 +535,7 @@ static const hcakey_info hcakey_list[] = { {0x3b6b0023a2dd8c3d}, //music_0220020 {0x318f65f564daa549}, //music_0220021 {0x3dac12b26997f628}, //music_0220022 + {0xdd4dc0afe201fd53}, //music_0240001 {0x6a15a9610d10d210}, //music_0310001 {0x57111c24801b44a1}, //music_0310002 {0x40443974a0a86b8b}, //music_0310003 @@ -542,6 +557,10 @@ static const hcakey_info hcakey_list[] = { {0x86ca86794400f49d}, //music_0310019 {0x7a2bbc195b9bfac1}, //music_0310020 {0x1c1f029bb47594b1}, //music_0310021 + {0xa3aad605838eefd7}, //music_0310022 + {0xf950f96b2066b16e}, //music_0310023 + {0x9e3d6943ba67b424}, //music_0310024 + {0xb58259c9d1f9ebc1}, //music_0310025 {0xb921c3992807dadd}, //music_0320001 {0x38ad99a045dc971f}, //music_0320002 {0xf616642579ba5850}, //music_0320003 @@ -561,6 +580,8 @@ static const hcakey_info hcakey_list[] = { {0x641af19c287d4a2e}, //music_0320017 {0x82de7b71b30d7bc2}, //music_0320019 {0x100b7ca3075996fe}, //music_0320020 + {0x4d1f0819b42520fc}, //music_0320021 + {0xd8126b12e1ea087d}, //music_0340001 {0x776c4aded0bca5d1}, //music_0410001 {0xb7bff4fbf66be43f}, //music_0410002 {0x904f50c5ce8ec6e4}, //music_0410003 @@ -582,6 +603,10 @@ static const hcakey_info hcakey_list[] = { {0x75927596a180f3e3}, //music_0410019 {0xc3d36676d54255c5}, //music_0410020 {0x41283c6f06db3cdd}, //music_0410021 + {0x198c53b5d345997}, //music_0410022 + {0xd5dcbaceb12dd205}, //music_0410023 + {0x4b71388640b83c6c}, //music_0410024 + {0x5b7c2a41095c7b76}, //music_0410025 {0x5d1f3fdbbb036f8d}, //music_0420001 {0xc04264e8f34ad5c0}, //music_0420002 {0x8f0e96b4f71f724f}, //music_0420003 @@ -600,6 +625,8 @@ static const hcakey_info hcakey_list[] = { {0xc94236c936f50cc}, //music_0420016 {0xbf8a2d951bc01dff}, //music_0420017 {0xb945505638f972e4}, //music_0420018 + {0xe00590890f7f3219}, //music_0420019 + {0x8f7e24e32cbceb6a}, //music_0440001 {0xdf31e26a7b036a2}, //music_0510001 {0xb2770dced3cfd9a7}, //music_0510002 {0x6c6c1fd51e28a1e7}, //music_0510003 @@ -623,6 +650,9 @@ static const hcakey_info hcakey_list[] = { {0xf85695960e2dcb7f}, //music_0510021 {0x212604f36a4ddb0c}, //music_0510022 {0xef7ee9169b194770}, //music_0510023 + {0xf3bc872fcb7784b}, //music_0510024 + {0x8e779c6c28690617}, //music_0510025 + {0x468e4ffeae5afa0e}, //music_0510027 {0x15f82c1617013c36}, //music_0520001 {0xc7da8e6f0e2fe399}, //music_0520002 {0xe350bffcdc9cb686}, //music_0520003 @@ -640,6 +670,9 @@ static const hcakey_info hcakey_list[] = { {0x6721ad5109e4840d}, //music_0520015 {0xc488dd62fc89090}, //music_0520016 {0xd3d24f1db0b74363}, //music_0520019 + {0xbc99855ebbfa8e97}, //music_0520020 + {0xb2b54877e3fa1bc6}, //music_0520021 + {0x207ae64e50eeba80}, //music_0540001 {0xd2ce91dbfc209b10}, //music_0610001 {0xa662be1601e49476}, //music_0610002 {0xe5e83d31e64273f8}, //music_0610003 @@ -665,6 +698,9 @@ static const hcakey_info hcakey_list[] = { {0x415eef25f84e8c2e}, //music_0610023 {0xfd2237157af70152}, //music_0610024 {0xf6c91cba66c3fe68}, //music_0610025 + {0xfdb798f20efbf4ac}, //music_0610026 + {0x9f37cb27968428fa}, //music_0610027 + {0x36024c4a109520ec}, //music_0610028 {0x8258ddd6a1d0849b}, //music_0620001 {0x1dd21a1244ca12f1}, //music_0620002 {0xfdec74b23d8b494b}, //music_0620003 @@ -684,23 +720,40 @@ static const hcakey_info hcakey_list[] = { {0x5c1195d8afcb1901}, //music_0620017 {0x1ad8db767d9ba4a7}, //music_0620018 {0x9bc820aa161b0f08}, //music_0620019 + {0x7d1d8c5dd43cabfc}, //music_0620020 + {0x6cccc0684c8b2664}, //music_0640001 {0x85f26fa7befc2b5a}, //music_0810000 {0xd1df27a57399613e}, //music_0810001 {0xd37ec4cb304e16ae}, //music_0810002 {0x4582fedda6a62aa8}, //music_0810003 {0xb31ea911ea8aba81}, //music_0810004 + {0xd63e9ce2913178a4}, //music_0810005 + {0xef287bc5146b1743}, //music_0810006 + {0x1f3c1d0817b3d4be}, //music_0810008 + {0x2e5c9e00274e0f2a}, //music_0810009 {0x1e99d14d97ab82c5}, //music_0820001 {0x5bf7cefecda8bcb2}, //music_0820002 {0x9cf7ab0ccafa374e}, //music_0820003 + {0xbaac3fa8d2d4b6cb}, //music_0820004 + {0x9fd373d1412b4d27}, //music_0840001 {0x7a9e4b710716a8e2}, //music_0910000 {0x972b52f3dfaa387a}, //music_0910001 {0x407a4b6c3dcf2509}, //music_0910002 {0x838be1aa4dc372bb}, //music_0910003 {0xc03bac003c24471d}, //music_0910004 {0xf864df0abe22ec49}, //music_0910005 + {0x66cdc54206ac6583}, //music_0910006 + {0xef56bb830245a94d}, //music_0910007 + {0x6cb33fe1e8506d0f}, //music_0910008 + {0xfaf9830ee551c6c4}, //music_0910009 + {0xf7c51ef55106e4a0}, //music_0910010 {0x4683c57919dbdeee}, //music_0920001 {0x126d0d20ad7f0401}, //music_0920002 {0x1652eb8bf3cea8f5}, //music_0920003 + {0x7bd591da4640bd99}, //music_0920004 + {0x353e9b0a47ed61bc}, //music_0940001 + {0x1b06e24d34d67ac8}, //music_1010001 + {0xab02c0d6f229df05}, //music_1010002 {0x2a47feac8dc3ca9c}, //music_3010001 {0x9ebbaf63ffe9d9ef}, //music_3010002 {0xe553dba6592293d8}, //music_3010003 @@ -728,6 +781,17 @@ static const hcakey_info hcakey_list[] = { {0xe0f08378be17633b}, //music_3010026 {0xaf81e107cd20ba90}, //music_3010027 {0x4efe51d362dcb6b1}, //music_3010028 + {0xc054cfc97a5cc13d}, //music_3010029 + {0x521db4dcc2aa84fd}, //music_3010030 + {0x2898fbc6d7a571ff}, //music_3010031 + {0x1deb4339b0961fb1}, //music_3010032 + {0x2ceae501b33507b4}, //music_3010033 + {0x46e91ff3014e07f5}, //music_3010034 + {0xf1895742954806b8}, //music_3010035 + {0x189b84400394043d}, //music_3010036 + {0x637e592d471df60}, //music_3010037 + {0xa633022c4198673a}, //music_3010038 + {0x8d410b922905a207}, //music_3010039 {0xfd3ea450350d666f}, //music_3020001 {0x5e91a3790c32e2b3}, //music_3020002 {0x358adfd1bbd3a95e}, //music_3020003 @@ -738,6 +802,7 @@ static const hcakey_info hcakey_list[] = { {0x729efd67aede1a40}, //music_3020008 {0xb7b9a143742fa51e}, //music_3020009 {0xc7750328bcd329f}, //music_3020010 + {0xc3dba12eeb4cc308}, //music_3020011 {0x5761fe7462b17a3b}, //music_3020012 {0x98c7a1d1c45df640}, //music_3020013 {0x3d01826fe053ddda}, //music_3020014 @@ -747,14 +812,26 @@ static const hcakey_info hcakey_list[] = { {0x4429ed54ca45a36d}, //music_3020018 {0xcc935f3ebbb7bb94}, //music_3020019 {0x4a1d57f0db140c12}, //music_3020020 + {0xbd9651254d9f6f95}, //music_3020021 {0x8ddea25a12f93099}, //music_3020022 {0xf754248dcd46287e}, //music_3020023 {0xa3c06ffa7775a274}, //music_3020024 {0x427be43aa233382c}, //music_3020025 {0x4ec96dd7db2adfd7}, //music_3020026 + {0x4876142f5d34d944}, //music_3020027 {0x9f12a5003f112aaa}, //music_3020028 + {0xc8c46d327667edc}, //music_3020029 {0x38edf73f19401e1c}, //music_3020030 {0xfa2c72797fa3e388}, //music_3020031 + {0x3966399f31d9de81}, //music_3020032 + {0xe9df82eee5800cde}, //music_3020033 + {0x9faba30aa051f691}, //music_3020034 + {0xaa06f3d3301a97d2}, //music_3020037 + {0x5b6e11b92acc7903}, //music_3020038 + {0x44c84f5efae5311}, //music_3020039 + {0x49ade60a55212fc5}, //music_3020040 + {0xabd145c0bc3a69dc}, //music_3020041 + {0xd8883291d950e928}, //music_3040001 {0xdfad847a86a126bb}, //music_5030001 {0x711ef85045b8c26e}, //music_5030002 {0xff7640b46d72b337}, //music_5030003 @@ -856,6 +933,10 @@ static const hcakey_info hcakey_list[] = { {0xdbb0f41e90b30452}, //music_5030099 {0x2eb141954bb3bd25}, //music_5030101 {0xaee2837e71b2bb97}, //music_5030102 + {0xa4b16fbd969bf071}, //music_5030103 + {0x9b1fdeafe8007f41}, //music_5030104 + {0xace06e1ff0e92427}, //music_5030105 + {0x5b6614302dee85c2}, //music_5030106 {0x444dda6d55d76095}, //music_5040001 {0xcbf4f1324081e0a6}, //music_5040002 {0xf1db3c1d9542063a}, //music_5040003 @@ -877,6 +958,7 @@ static const hcakey_info hcakey_list[] = { {0xa4481f97a8d4d01c}, //music_5040021 {0x7465c7c473e53a40}, //music_5040022 {0xfadb1b0f28e951e1}, //music_5040023 + {0x2f1a04b23ceef9d4}, //music_5040024 {0x5e3eba376e0b3dd}, //music_5050001 {0xa8ee7a3a20ce822}, //music_5050002 {0xf42d31b5ecd1aec1}, //music_5050003 @@ -1041,6 +1123,10 @@ static const hcakey_info hcakey_list[] = { {0x2550e145b93723ae}, //music_5050169 {0xb512188a55b8b698}, //music_5050170 {0x26e5bf2c66a9898d}, //music_5050171 + {0x12c07d8b1b9c6e8e}, //music_5050172 + {0xe2b8148cc265cda2}, //music_5050173 + {0x5275e4ca06cb46ca}, //music_5050174 + {0x851f3b41203ff5ed}, //music_5050175 {0xd93d0a1764e85d4d}, //music_5050176 {0xff8c5c13833b1049}, //music_5050177 {0x59efd868058a402e}, //music_5050178 @@ -1090,13 +1176,64 @@ static const hcakey_info hcakey_list[] = { {0x5856576aa5c0a59f}, //music_5050222 {0xe8286a95b8f38dd1}, //music_5050223 {0x48015b291de44ff3}, //music_5050224 + {0x7b1a2559ece20f11}, //music_5050225 {0x4521644fd1682bc0}, //music_5050226 {0x808e307ec28b9ef0}, //music_5050227 {0x6a4493f6e7dcce6c}, //music_5050228 {0xd6bc23de632b00e0}, //music_5050229 {0x7268ea33e33cbcfa}, //music_5050230 {0x2de61d98bc2cea48}, //music_5050231 + {0x249fb9a25c75632b}, //music_5050232 + {0x60cf8b7ef1f1ba8c}, //music_5050233 + {0xe42f74d5567bd5e}, //music_5050234 + {0x3e2b8152d40c4111}, //music_5050235 + {0x812e320bf455509e}, //music_5050236 + {0x55882d342d85c5bf}, //music_5050237 + {0x7731e49facd28485}, //music_5050238 + {0x2555ab1e06fdb167}, //music_5050239 + {0x3890abb5245d6c6f}, //music_5050240 + {0x2107ffff2a8fd88a}, //music_5050241 {0xd8bdb31ab72c355b}, //music_5050242 + {0x2ade6f09d4c00bdf}, //music_5050245 + {0xa92c33355f232b5a}, //music_5050246 + {0xa0a3629f5d35eef4}, //music_5050247 + {0x7e30b53c3bc4efe}, //music_5050248 + {0x3fcd37732e64f44a}, //music_5050249 + {0x8e42f8b651700386}, //music_5050250 + {0x51e07b700d1bc711}, //music_5050251 + {0x7271a9fca4d4a183}, //music_5050252 + {0x457e9e3b040915bb}, //music_5050253 + {0xfc5419996922fc03}, //music_5050254 + {0x6d2e7b90423ac71d}, //music_5050255 + {0xa4b16fbd969bf071}, //music_5050256 + {0xca4073d3b6fafc65}, //music_5050257 + {0x7ce2075bcd63e8ee}, //music_5050258 + {0x532d1f45db13c367}, //music_5050259 + {0xb86e633c85e819c4}, //music_5050260 + {0x717100eb7bac3d19}, //music_5050261 + {0xdd1041820d825da4}, //music_5050262 + {0x11e9578c3c12a4ad}, //music_5050263 + {0xc74ff984f50113d3}, //music_5050264 + {0x84d2e4313779511b}, //music_5050265 + {0x780e8260c79e77b9}, //music_5050268 + {0xf72c77898bfc4678}, //music_5050269 + {0xbe0d5c4c95e909ff}, //music_5050270 + {0x1f74bfe24e614687}, //music_5050271 + {0x2b24e5c7c7b6e9d}, //music_5050272 + {0xf48f21a99fda09cf}, //music_5050273 + {0x5ef1786f364bce23}, //music_5050274 + {0x9577c9645a6ffd5e}, //music_5050275 + {0xafc13a64a56884e8}, //music_5050276 + {0x76dfb4c3728fe8d9}, //music_5050277 + {0x71a776b3ed5ab17}, //music_5050278 + {0x880a35323f69b612}, //music_5050284 + {0x5c8623402d1c822d}, //music_5050286 + {0xca545af62852a7b7}, //music_5050287 + {0x518c6e5c4a268161}, //music_5050288 + {0xcc73017924bfaaae}, //music_5050295 + {0xd2197c8cf0ea08f9}, //music_5050296 + {0x481c17fb41e25dbb}, //music_5050303 + {0xe259362b1d601f93}, //music_5050304 {0x52c250eade92393b}, //music_9010001 {0xf66e6bb5b0599b07}, //music_9010002 {0x8582b5a60dbbf948}, //music_9010003 @@ -1327,11 +1464,22 @@ static const hcakey_info hcakey_list[] = { {9182735170}, // 0000000223556B42 // Super Robot Wars DD (Android) - {464113616464131416}, // 0670DCE00CC43558 + {464113616464131416}, // 0670DCE00CC43558 // Ange Re:Link (Android) {9666854456}, // 0000000240307E38 + // Metaphor: ReFantazio Demo (PC) + {572184256205070254}, // 07F0CE8CA92C9FAE + + // DanMachi BATTLE CHRONICLE (Android) + {8893372566804407}, // 001F9879A8B317B7 + + // DRAGON BALL: Sparking! ZERO (multi) + {13238534807163085345u}, // B7B8B9442F99A221 + + // TOUHOU GENSOU MAHJONG (both demo and main) + {7757726886}, }; -#endif/*_HCA_KEYS_H_*/ +#endif diff --git a/Frameworks/vgmstream/vgmstream/src/meta/meta.h b/Frameworks/vgmstream/vgmstream/src/meta/meta.h index 754eca880..14467beac 100644 --- a/Frameworks/vgmstream/vgmstream/src/meta/meta.h +++ b/Frameworks/vgmstream/vgmstream/src/meta/meta.h @@ -271,8 +271,6 @@ VGMSTREAM* init_vgmstream_vs_mh(STREAMFILE* sf); VGMSTREAM * init_vgmstream_xmu(STREAMFILE *streamFile); -VGMSTREAM * init_vgmstream_xvas(STREAMFILE *streamFile); - VGMSTREAM * init_vgmstream_sat_sap(STREAMFILE *streamFile); VGMSTREAM * init_vgmstream_dc_idvi(STREAMFILE *streamFile); @@ -427,8 +425,6 @@ VGMSTREAM* init_vgmstream_ast_mmv(STREAMFILE* sf); VGMSTREAM * init_vgmstream_dmsg(STREAMFILE* streamFile); -VGMSTREAM * init_vgmstream_ngc_dsp_konami(STREAMFILE* streamFile); - VGMSTREAM * init_vgmstream_bnsf(STREAMFILE* streamFile); VGMSTREAM* init_vgmstream_wb(STREAMFILE* sf); @@ -638,6 +634,7 @@ VGMSTREAM * init_vgmstream_ubi_dat(STREAMFILE * streamFile); VGMSTREAM * init_vgmstream_ubi_bnm(STREAMFILE * streamFile); VGMSTREAM * init_vgmstream_ubi_bnm_ps2(STREAMFILE * streamFile); VGMSTREAM * init_vgmstream_ubi_blk(STREAMFILE * streamFile); +VGMSTREAM * init_vgmstream_ubi_apm(STREAMFILE * streamFile); VGMSTREAM * init_vgmstream_ezw(STREAMFILE * streamFile); diff --git a/Frameworks/vgmstream/vgmstream/src/meta/ngc_dsp_konami.c b/Frameworks/vgmstream/vgmstream/src/meta/ngc_dsp_konami.c deleted file mode 100644 index 4096a6c9f..000000000 --- a/Frameworks/vgmstream/vgmstream/src/meta/ngc_dsp_konami.c +++ /dev/null @@ -1,78 +0,0 @@ -#include "meta.h" -#include "../util.h" - -/* DSP - Teenage Mutant Ninja Turtles 2 (NGC) -*/ -VGMSTREAM * init_vgmstream_ngc_dsp_konami(STREAMFILE *streamFile) { - VGMSTREAM * vgmstream = NULL; - char filename[PATH_LIMIT]; - int loop_flag = 0; - int channel_count; - int i, j; - off_t ch1_start; - off_t ch2_start; - off_t coef_table[2] = {0x90, 0xD0}; - - /* check extension, case insensitive */ - streamFile->get_name(streamFile,filename,sizeof(filename)); - if (strcasecmp("dsp",filename_extension(filename))) - goto fail; - - /* check header */ - if ((read_32bitBE(0x00,streamFile)+0x800) != (get_streamfile_size(streamFile))) - goto fail; - - loop_flag = (read_32bitBE(0x10,streamFile) != 0x0); - channel_count = 2; - - /* 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 = read_32bitBE(0x04,streamFile); - vgmstream->coding_type = coding_NGC_DSP; - vgmstream->num_samples = (read_32bitBE(0x00,streamFile)/channel_count/8*14); - if (loop_flag) { - vgmstream->loop_start_sample = (read_32bitBE(0x14,streamFile)/channel_count/8*14); - vgmstream->loop_end_sample = (read_32bitBE(0x00,streamFile)/channel_count/8*14); - } - - vgmstream->layout_type = layout_interleave; - vgmstream->interleave_block_size = 0x100; - vgmstream->meta_type = meta_NGC_DSP_KONAMI; - - ch1_start = 0x800; - ch2_start = 0x800 + vgmstream->interleave_block_size; - - // COEFFS - { - for (j=0;jchannels;j++) { - for (i=0;i<16;i++) { - vgmstream->ch[j].adpcm_coef[i] = read_16bitBE(coef_table[j]+i*2,streamFile); - } - } - } - - /* open the file for reading */ - /* Channel 1 */ - vgmstream->ch[0].streamfile = streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE); - if (!vgmstream->ch[0].streamfile) - goto fail; - vgmstream->ch[0].channel_start_offset = vgmstream->ch[0].offset=ch1_start; - - /* Channel 1 */ - vgmstream->ch[1].streamfile = streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE); - if (!vgmstream->ch[1].streamfile) - goto fail; - vgmstream->ch[1].channel_start_offset = vgmstream->ch[1].offset=ch2_start; - - return vgmstream; - -fail: - /* clean up anything we may have opened */ - if (vgmstream) close_vgmstream(vgmstream); - return NULL; -} diff --git a/Frameworks/vgmstream/vgmstream/src/meta/ogg_vorbis.c b/Frameworks/vgmstream/vgmstream/src/meta/ogg_vorbis.c index e51bbf26f..8f3188d6f 100644 --- a/Frameworks/vgmstream/vgmstream/src/meta/ogg_vorbis.c +++ b/Frameworks/vgmstream/vgmstream/src/meta/ogg_vorbis.c @@ -739,6 +739,11 @@ static VGMSTREAM* _init_vgmstream_ogg_vorbis_config(STREAMFILE* sf, off_t start, loop_end_found = 1; } } + else if (strstr(comment,"L=") == comment) { /* Kamaitachi no Yoru 2 (PS2) */ + //sscanf(strrchr(comment,'=')+1,"%d", &loop_start); + loop_start = atol(strrchr(comment,'=')+1); + loop_flag = 1; + } /* Hatsune Miku Project DIVA games, though only 'Arcade Future Tone' has >4ch files * ENCODER tag is common but ogg_vorbis_encode looks unique enough diff --git a/Frameworks/vgmstream/vgmstream/src/meta/sndx.c b/Frameworks/vgmstream/vgmstream/src/meta/sndx.c index 798990cd6..801e838d0 100644 --- a/Frameworks/vgmstream/vgmstream/src/meta/sndx.c +++ b/Frameworks/vgmstream/vgmstream/src/meta/sndx.c @@ -10,7 +10,7 @@ VGMSTREAM* init_vgmstream_sndx(STREAMFILE* sf) { off_t start_offset, chunk_offset, first_offset = 0x60, name_offset = 0; size_t chunk_size, stream_size = 0; - int is_dual, is_external; + bool is_dual, is_external; int loop_flag, channels, codec, sample_rate; int32_t num_samples, loop_start_sample, loop_end_sample; uint32_t flags, at9_config_data = 0; @@ -18,11 +18,14 @@ VGMSTREAM* init_vgmstream_sndx(STREAMFILE* sf) { /* checks */ + if (!is_id32be(0x00, sf, "SXDF") && !is_id32be(0x00, sf, "SXDS")) + return NULL; + /* .sxd: header+data (SXDF) * .sxd1: header (SXDF) + .sxd2 = data (SXDS) * .sxd3: sxd1 + sxd2 pasted together (found in some PS4 games, ex. Fate Extella)*/ if (!check_extensions(sf,"sxd,sxd2,sxd3")) - goto fail; + return NULL; /* setup head/body variations */ if (check_extensions(sf,"sxd2")) { @@ -33,7 +36,7 @@ VGMSTREAM* init_vgmstream_sndx(STREAMFILE* sf) { sf_sxd1 = sf_h; sf_sxd2 = sf; - is_dual = 1; + is_dual = true; } else if (check_extensions(sf,"sxd3")) { /* sxd3: make subfiles for head and body to simplify parsing */ @@ -50,13 +53,13 @@ VGMSTREAM* init_vgmstream_sndx(STREAMFILE* sf) { sf_sxd1 = sf_h; sf_sxd2 = sf_b; - is_dual = 1; + is_dual = true; } else { /* sxd: use the current file as header */ sf_sxd1 = sf; sf_sxd2 = NULL; - is_dual = 0; + is_dual = false; } if (sf_sxd1 && !is_id32be(0x00, sf_sxd1, "SXDF")) @@ -225,6 +228,14 @@ VGMSTREAM* init_vgmstream_sndx(STREAMFILE* sf) { goto fail; } + /* .sxd have names but they are a bit complex: + * - WAVE chunk has N subsongs + * - NAME chunk may define M names but usually doesn't match with subsongs (may be less or more) + * - LVRN may define some state and LVAR its possible values (battle_state=bgm_battle_start/win/intro) + * - TRNS also has names based on possible transition + * - final WAVE seem to depend on NAME (event?) + state=value, similar to Wwise + * - presumably TONE/REQD/SEQD chunks have WAVE<>event matching info since they seem to always appear + */ /* open the file for reading */ if (!vgmstream_open_stream(vgmstream, sf_data, start_offset)) diff --git a/Frameworks/vgmstream/vgmstream/src/meta/txth.c b/Frameworks/vgmstream/vgmstream/src/meta/txth.c index c9c7728f3..ac0acba52 100644 --- a/Frameworks/vgmstream/vgmstream/src/meta/txth.c +++ b/Frameworks/vgmstream/vgmstream/src/meta/txth.c @@ -922,6 +922,16 @@ static int is_string(const char* val, const char* cmp); static int get_bytes_to_samples(txth_header* txth, uint32_t bytes); static int get_padding_size(txth_header* txth, int discard_empty); +static void string_trim(char* str) { + int str_len = strlen(str); + int i; + for (i = str_len - 1; i >= 0; i--) { + if (str[i] != ' ') + break; + str[i] = '\0'; + } +} + /* Simple text parser of "key = value" lines. * The code is meh and error handling not exactly the best. */ static int parse_txth(txth_header* txth) { @@ -1418,6 +1428,9 @@ static int parse_keyval(STREAMFILE* sf_, txth_header* txth, const char* key, cha txth->sf_head_opened = 0; } + /* manual trim since this is not handled by sscanf/parse_string and opens may need it */ + string_trim(val); + if (is_string(val,"null")) { /* reset */ if (!txth->streamfile_is_txth) { txth->sf_head = txth->sf; /* base non-txth file */ @@ -1446,6 +1459,9 @@ static int parse_keyval(STREAMFILE* sf_, txth_header* txth, const char* key, cha txth->sf_body_opened = 0; } + /* manual trim since this is not handled by sscanf/parse_string and opens may need it */ + string_trim(val); + if (is_string(val,"null")) { /* reset */ if (!txth->streamfile_is_txth) { txth->sf_body = txth->sf; /* base non-txth file */ @@ -1622,6 +1638,7 @@ static uint16_t get_string_wchar(const char* val, int pos, int* csize) { return wchar; } + static int is_string_match(const char* text, const char* pattern) { int t_pos = 0, p_pos = 0, t_len = 0, p_len = 0; int p_size, t_size; @@ -1735,16 +1752,6 @@ fail: return 0; } -static void string_trim(char* str) { - int str_len = strlen(str); - int i; - for (i = str_len - 1; i >= 0; i--) { - if (str[i] != ' ') - break; - str[i] = '\0'; - } -} - static int read_name_table_keyval(txth_header* txth, const char* line, char* key, char* val) { int ok; int subsong; diff --git a/Frameworks/vgmstream/vgmstream/src/meta/ubi_apm.c b/Frameworks/vgmstream/vgmstream/src/meta/ubi_apm.c new file mode 100644 index 000000000..a0967da65 --- /dev/null +++ b/Frameworks/vgmstream/vgmstream/src/meta/ubi_apm.c @@ -0,0 +1,85 @@ +#include "meta.h" +#include "../coding/coding.h" + +/* .APM - seen in old Ubisoft games [Rayman 2: The Great Escape (PC), Donald Duck: Goin' Quackers (PC)] */ +VGMSTREAM* init_vgmstream_ubi_apm(STREAMFILE* sf) { + VGMSTREAM* vgmstream = NULL; + uint32_t channels, sample_rate, file_size, nibble_size; + off_t start_offset; + int loop_flag; + uint32_t i; + + if (read_u16le(0x00, sf) != 0x2000 || !is_id32be(0x14, sf, "vs12")) + goto fail; + + if (!check_extensions(sf, "apm")) + goto fail; + + /* (info from https://github.com/Synthesis/ray2get) + * 0x00(2): format tag (0x2000 for Ubisoft ADPCM) + * 0x02(2): channels + * 0x04(4): sample rate + * 0x08(4): byte rate? PCM samples? + * 0x0C(2): block align + * 0x0E(2): bits per sample + * 0x10(4): header size + * 0x14(4): "vs12" + * 0x18(4): file size + * 0x1C(4): nibble size + * 0x20(4): -1? + * 0x24(4): 0? + * 0x28(4): high/low nibble flag (when loaded in memory) + * 0x2C(N): ADPCM info per channel, last to first + * - 0x00(4): ADPCM hist + * - 0x04(4): ADPCM step index + * - 0x08(4): copy of ADPCM data (after interleave, ex. R from data + 0x01) + * 0x60(4): "DATA" + * 0x64(N): ADPCM data + */ + + channels = read_u16le(0x02, sf); + sample_rate = read_u32le(0x04, sf); + file_size = read_u32le(0x18, sf); + nibble_size = read_u32le(0x1c, sf); + + start_offset = 0x64; + + if (file_size != get_streamfile_size(sf)) + goto fail; + + if (nibble_size > (file_size - start_offset)) + goto fail; + + if (!is_id32be(0x60, sf, "DATA")) + goto fail; + + loop_flag = 0; + + /* build the VGMSTREAM */ + vgmstream = allocate_vgmstream(channels, loop_flag); + if (!vgmstream) goto fail; + + vgmstream->meta_type = meta_UBI_APM; + vgmstream->coding_type = coding_DVI_IMA_int; + vgmstream->layout_type = layout_interleave; + vgmstream->interleave_block_size = 0x01; + vgmstream->sample_rate = sample_rate; + vgmstream->num_samples = ima_bytes_to_samples(file_size - start_offset, channels); + + /* read initial hist (last to first) */ + for (i = 0; i < channels; i++) { + vgmstream->ch[i].adpcm_history1_32 = read_s32le(0x2c + 0x0c * (channels - 1 - i) + 0x00, sf); + vgmstream->ch[i].adpcm_step_index = read_s32le(0x2c + 0x0c * (channels - 1 - i) + 0x04, sf); + } + //todo supposedly APM IMA removes lower 3b after assigning step, but wave looks a bit off (Rayman 2 only?): + // ...; step = adpcm_table[step_index]; delta = (step >> 3); step &= (~7); ... + + if (!vgmstream_open_stream(vgmstream, sf, start_offset)) + goto fail; + + return vgmstream; + +fail: + close_vgmstream(vgmstream); + return NULL; +} diff --git a/Frameworks/vgmstream/vgmstream/src/meta/ubi_raki.c b/Frameworks/vgmstream/vgmstream/src/meta/ubi_raki.c index 82626b29e..2e490ab6d 100644 --- a/Frameworks/vgmstream/vgmstream/src/meta/ubi_raki.c +++ b/Frameworks/vgmstream/vgmstream/src/meta/ubi_raki.c @@ -183,7 +183,8 @@ VGMSTREAM* init_vgmstream_ubi_raki(STREAMFILE* sf) { #endif #ifdef VGM_USE_FFMPEG - case 0x58333630786D6132: { /* "X360xma2" */ + case 0x58333630786D6132: /* "X360xma2" */ + case 0x44757261786D6132: { /* "Duraxma2" */ /* chunks: "seek" (XMA2 seek table), "data" */ if (!block_align) goto fail; diff --git a/Frameworks/vgmstream/vgmstream/src/meta/ubi_sb.c b/Frameworks/vgmstream/vgmstream/src/meta/ubi_sb.c index 49be60161..efa5aba32 100644 --- a/Frameworks/vgmstream/vgmstream/src/meta/ubi_sb.c +++ b/Frameworks/vgmstream/vgmstream/src/meta/ubi_sb.c @@ -1196,27 +1196,7 @@ static VGMSTREAM* init_vgmstream_ubi_sb_base(ubi_sb_header* sb, STREAMFILE* sf_h case FMT_APM: /* APM is a full format though most fields are repeated from .bnm - * (info from https://github.com/Synthesis/ray2get) - * 0x00(2): format tag (0x2000 for Ubisoft ADPCM) - * 0x02(2): channels - * 0x04(4): sample rate - * 0x08(4): byte rate? PCM samples? - * 0x0C(2): block align - * 0x0E(2): bits per sample - * 0x10(4): header size - * 0x14(4): "vs12" - * 0x18(4): file size - * 0x1C(4): nibble size - * 0x20(4): -1? - * 0x24(4): 0? - * 0x28(4): high/low nibble flag (when loaded in memory) - * 0x2C(N): ADPCM info per channel, last to first - * - 0x00(4): ADPCM hist - * - 0x04(4): ADPCM step index - * - 0x08(4): copy of ADPCM data (after interleave, ex. R from data + 0x01) - * 0x60(4): "DATA" - * 0x64(N): ADPCM data - */ + * see ubi_apm.c for documentation */ vgmstream->coding_type = coding_DVI_IMA_int; vgmstream->layout_type = layout_interleave; diff --git a/Frameworks/vgmstream/vgmstream/src/meta/vas_kceo.c b/Frameworks/vgmstream/vgmstream/src/meta/vas_kceo.c index 4dd8d05c3..90497234a 100644 --- a/Frameworks/vgmstream/vgmstream/src/meta/vas_kceo.c +++ b/Frameworks/vgmstream/vgmstream/src/meta/vas_kceo.c @@ -1,43 +1,165 @@ #include "meta.h" #include "../coding/coding.h" +typedef enum { PSX, DSP, IMA, PCM } vas_codec_t; -/* .VAS - from Konami Computer Enterntainment Osaka games [Jikkyou Powerful Pro Yakyuu 8 (PS2), Jikkyou World Soccer 2000 (PS2)] */ +/* .VAS - from Konami Computer Enterntainment Osaka games [Jikkyou Powerful Pro Yakyuu 8 (PS2), TMNT 2: Battle Nexus (multi)] */ VGMSTREAM* init_vgmstream_vas_kceo(STREAMFILE* sf) { VGMSTREAM* vgmstream = NULL; off_t start_offset; - int loop_flag, channels; + int loop_flag, channels, block_size, sample_rate, volume, dummy; + uint32_t loop_start, loop_end, data_size; + vas_codec_t codec; /* checks */ - if (!check_extensions(sf, "vas")) - return NULL; - if (read_u32le(0x00,sf) + 0x800 != get_streamfile_size(sf)) + /* .vas: bigfile extension (internally files just seem to be referred as 'bgm' or 'stream') + * .dsp: assumed (GC bigfile is just .bin and has no table) */ + if (!check_extensions(sf, "vas,dsp")) + return NULL; + + if (read_u32le(0x00, sf) == 0x01) { /* PC */ + channels = read_u32le(0x04, sf); + block_size = read_u32le(0x08, sf); + sample_rate = read_s32le(0x0c, sf); + loop_start = read_u32le(0x10, sf); + loop_end = read_u32le(0x14, sf); + volume = read_u32le(0x18, sf); + loop_flag = read_u32le(0x1c, sf) != 0; // unknown size (low-ish), 0 if no loop + // 20: 0x8000 if loop? + data_size = read_u32le(0x24, sf); + // 28: null? + // 2c: null? + dummy = read_u32le(0x30, sf); + + if (block_size != channels * 0x02) + return NULL; + codec = PCM; + } + else if (read_u32le(0x00, sf) == 0x69) { /* Xbox */ + channels = read_u32le(0x04, sf); + block_size = read_u32le(0x08, sf); + sample_rate = read_s32le(0x0c, sf); + loop_start = read_u32le(0x10, sf); + loop_end = read_u32le(0x14, sf); + volume = read_u32le(0x18, sf); + loop_flag = read_u32le(0x1c, sf) != 0; // unknown size (low-ish), 0 if no loop + // 20: 0x8000 if loop? + data_size = read_u32le(0x24, sf); + // 28: null or some kind of hash (TMNT3) + // 2c: null or codec + channels (TMNT3) + dummy = read_u32le(0x30, sf); + + if (block_size != channels * 0x24) + return NULL; + codec = IMA; + } + else if (read_u32le(0x00,sf) + 0x800 == get_streamfile_size(sf)) { /* PS2 */ + data_size = read_u32le(0x00, sf); + sample_rate = read_s32le(0x04,sf); + volume = read_u32le(0x08, sf); + dummy = read_u32le(0x0c, sf); + loop_flag = read_u32le(0x10, sf) != 0; // 0/1 + loop_start = read_u32le(0x14,sf); + + channels = 2; + codec = PSX; + + loop_end = data_size; + + if (!ps_check_format(sf, 0x800, 0x1000)) + return NULL; + } + else if (read_u32be(0x00,sf) + 0x800 == get_streamfile_size(sf)) { /* GC */ + data_size = read_u32be(0x00, sf); + sample_rate = read_s32be(0x04,sf); + volume = read_u32be(0x08, sf); + dummy = read_u32be(0x0c, sf); + loop_flag = read_u32be(0x10, sf) != 0; // 0/1 + loop_start = read_u32be(0x14,sf); + + channels = 2; + codec = DSP; + + loop_end = data_size; + + // DSP header variation at 0x80 (loop_end seems smaller but not correct?) + if (read_u32be(0x8c, sf) != 0x0002) // codec + return NULL; + } + else { + return NULL; + } + + /* simple header so do a few extra checks */ + if (channels != 2) // voices have a slightly different, simpler format + return NULL; + if (sample_rate > 48000 || sample_rate < 8000) + return NULL; + if (volume <= 0x00 || volume > 0xFF) /* typically 0x96, some PS2 use ~0xC0 */ + return NULL; + if (dummy != 0) return NULL; - loop_flag = (read_u32le(0x10,sf) != 0); - channels = 2; start_offset = 0x800; - /* header is too simple so test a bit */ - if (!ps_check_format(sf, start_offset, 0x1000)) - goto fail; - - /* build the VGMSTREAM */ vgmstream = allocate_vgmstream(channels, loop_flag); if (!vgmstream) goto fail; vgmstream->meta_type = meta_VAS_KCEO; - vgmstream->sample_rate = read_s32le(0x04,sf); + vgmstream->sample_rate = sample_rate; - vgmstream->coding_type = coding_PSX; - vgmstream->layout_type = layout_interleave; - vgmstream->interleave_block_size = 0x200; + switch (codec) { + case PCM: + vgmstream->coding_type = coding_PCM16LE; + vgmstream->layout_type = layout_interleave; + vgmstream->interleave_block_size = 0x02; - vgmstream->num_samples = ps_bytes_to_samples(read_u32le(0x00,sf), channels); - vgmstream->loop_start_sample = ps_bytes_to_samples(read_u32le(0x14,sf), channels); - vgmstream->loop_end_sample = vgmstream->num_samples; + vgmstream->num_samples = pcm16_bytes_to_samples(data_size, vgmstream->channels); + vgmstream->loop_start_sample = pcm16_bytes_to_samples(loop_start, vgmstream->channels); + vgmstream->loop_end_sample = pcm16_bytes_to_samples(loop_end, vgmstream->channels); + break; + + case IMA: + vgmstream->coding_type = coding_XBOX_IMA; + vgmstream->layout_type = layout_blocked_xvas; + + /* blocks of 0x20000 with padding */ + data_size -= (data_size / 0x20000) * 0x20; + loop_start -= (loop_start / 0x20000) * 0x20; + loop_end -= (loop_end / 0x20000) * 0x20; + + vgmstream->num_samples = xbox_ima_bytes_to_samples(data_size, vgmstream->channels); + vgmstream->loop_start_sample = xbox_ima_bytes_to_samples(loop_start, vgmstream->channels); + vgmstream->loop_end_sample = xbox_ima_bytes_to_samples(loop_end, vgmstream->channels); + break; + + case PSX: + vgmstream->coding_type = coding_PSX; + vgmstream->layout_type = layout_interleave; + vgmstream->interleave_block_size = 0x200; + + vgmstream->num_samples = ps_bytes_to_samples(data_size, channels); + vgmstream->loop_start_sample = ps_bytes_to_samples(loop_start, channels); + vgmstream->loop_end_sample = ps_bytes_to_samples(loop_end, channels); + break; + + case DSP: + vgmstream->coding_type = coding_NGC_DSP; + vgmstream->layout_type = layout_interleave; + vgmstream->interleave_block_size = 0x100; + + vgmstream->num_samples = dsp_bytes_to_samples(data_size, channels); + vgmstream->loop_start_sample = dsp_bytes_to_samples(loop_start, channels); + vgmstream->loop_end_sample = dsp_bytes_to_samples(loop_end, channels); + + dsp_read_coefs_be(vgmstream, sf, 0x90, 0x40); + break; + + default: + goto fail; + } if (!vgmstream_open_stream(vgmstream, sf, start_offset)) goto fail; @@ -53,8 +175,8 @@ fail: VGMSTREAM* init_vgmstream_vas_kceo_container(STREAMFILE* sf) { VGMSTREAM* vgmstream = NULL; STREAMFILE* temp_sf = NULL; - off_t subfile_offset = 0; - size_t subfile_size = 0; + uint32_t subfile_offset = 0; + uint32_t subfile_size = 0; int total_subsongs, target_subsong = sf->stream_index; @@ -62,23 +184,26 @@ VGMSTREAM* init_vgmstream_vas_kceo_container(STREAMFILE* sf) { if (!check_extensions(sf, "vas")) return NULL; - if (read_u32be(0x00, sf) == 0xAB8A5A00) { /* fixed value */ + if (read_u32be(0x00, sf) == 0xAB8A5A00) { /* PS2 (fixed value) */ - /* just in case */ + /* unknown size/id */ if (read_u32le(0x04, sf) * 0x800 + 0x800 != get_streamfile_size(sf)) - goto fail; + return NULL; total_subsongs = read_s32le(0x08, sf); /* also at 0x10 */ if (target_subsong == 0) target_subsong = 1; if (target_subsong < 0 || target_subsong > total_subsongs || total_subsongs < 1) goto fail; + if (total_subsongs > 0x100) /* arbitrary max */ + return NULL; + /* check offset table flag, 0x98 has table size */ - if (read_32bitLE(0x94, sf)) { + if (read_u32le(0x94, sf)) { off_t header_offset = 0x800 + 0x10*(target_subsong-1); /* some values are repeats found in the file sub-header */ - subfile_offset = read_32bitLE(header_offset + 0x00,sf) * 0x800; - subfile_size = read_32bitLE(header_offset + 0x08,sf) + 0x800; + subfile_offset = read_u32le(header_offset + 0x00,sf) * 0x800; + subfile_size = read_u32le(header_offset + 0x08,sf) + 0x800; } else { /* a bunch of files */ @@ -86,7 +211,7 @@ VGMSTREAM* init_vgmstream_vas_kceo_container(STREAMFILE* sf) { int i; for (i = 0; i < total_subsongs; i++) { - size_t size = read_32bitLE(offset, sf) + 0x800; + size_t size = read_u32le(offset, sf) + 0x800; if (i + 1 == target_subsong) { subfile_offset = offset; @@ -97,23 +222,43 @@ VGMSTREAM* init_vgmstream_vas_kceo_container(STREAMFILE* sf) { offset += size; } if (i == total_subsongs) - goto fail; + return NULL; } } + else if (read_u32le(0x00, sf) == 0x800) { /* Xbox/PC (start?) */ +VGM_STEP(); + + total_subsongs = read_s32le(0x04, sf); + if (target_subsong == 0) target_subsong = 1; + if (target_subsong < 0 || target_subsong > total_subsongs || total_subsongs < 1) goto fail; + + if (total_subsongs > 0x100) /* arbitrary max */ + return NULL; + if (read_u32le(0x08, sf) != 0x800) + return NULL; + + /* table of offset + ? size */ + uint32_t header_offset = 0x08 + 0x08 * (target_subsong - 1); + subfile_offset = read_u32le(header_offset + 0x00,sf); + uint32_t next_offset = (target_subsong == total_subsongs) ? + get_streamfile_size(sf) : + read_u32le(header_offset + 0x08,sf); + subfile_size = next_offset - subfile_offset; + } else { /* some .vas are just files pasted together, better extracted externally but whatevs */ - size_t file_size = get_streamfile_size(sf); - off_t offset = 0; + uint32_t file_size = get_streamfile_size(sf); + uint32_t offset = 0; /* must have multiple .vas */ - if (read_32bitLE(0x00,sf) + 0x800 >= file_size) + if (read_u32le(0x00,sf) + 0x800 >= file_size) goto fail; total_subsongs = 0; if (target_subsong == 0) target_subsong = 1; while (offset < file_size) { - size_t size = read_32bitLE(offset,sf) + 0x800; + uint32_t size = read_u32le(offset,sf) + 0x800; /* some files can be null, ignore */ if (size > 0x800) { @@ -136,7 +281,7 @@ VGMSTREAM* init_vgmstream_vas_kceo_container(STREAMFILE* sf) { } - temp_sf = setup_subfile_streamfile(sf, subfile_offset,subfile_size, NULL); + temp_sf = setup_subfile_streamfile(sf, subfile_offset, subfile_size, NULL); if (!temp_sf) goto fail; vgmstream = init_vgmstream_vas_kceo(temp_sf); diff --git a/Frameworks/vgmstream/vgmstream/src/meta/xa.c b/Frameworks/vgmstream/vgmstream/src/meta/xa.c index ee5d73197..8dae8951d 100644 --- a/Frameworks/vgmstream/vgmstream/src/meta/xa.c +++ b/Frameworks/vgmstream/vgmstream/src/meta/xa.c @@ -11,7 +11,7 @@ VGMSTREAM* init_vgmstream_xa(STREAMFILE* sf) { VGMSTREAM* vgmstream = NULL; uint32_t start_offset, stream_size = 0; int loop_flag = 0, channels, sample_rate, bps; - int is_riff = 0, is_form2 = 0, is_blocked; + bool is_riff = false, is_form2 = false, is_blocked; int total_subsongs = 0, target_subsong = sf->stream_index; uint16_t target_config = 0; @@ -19,13 +19,13 @@ VGMSTREAM* init_vgmstream_xa(STREAMFILE* sf) { /* checks */ if (read_u32be(0x00,sf) == 0x00FFFFFF && read_u32be(0x04,sf) == 0xFFFFFFFF && read_u32be(0x08,sf) == 0xFFFFFF00) { /* sector sync word = raw data */ - is_blocked = 1; + is_blocked = true; start_offset = 0x00; } else if (is_id32be(0x00,sf, "RIFF") && is_id32be(0x08,sf, "CDXA") && is_id32be(0x0C,sf, "fmt ")) { /* RIFF header = raw with header (optional, added by CD drivers when copying and not part of the CD data) */ - is_blocked = 1; - is_riff = 1; + is_blocked = true; + is_riff = true; start_offset = 0x2c; /* after "data", ignore RIFF values as often are wrong */ } else { @@ -49,7 +49,7 @@ VGMSTREAM* init_vgmstream_xa(STREAMFILE* sf) { /* test for XA data, since format is raw-ish (with RIFF it's assumed to be ok) */ if (!is_riff && !xa_check_format(sf, start_offset, is_blocked)) - goto fail; + return NULL; /* find subsongs as XA can interleave sectors using 'file' and 'channel' makers (see blocked_xa.c) */ if (/*!is_riff &&*/ is_blocked) { @@ -182,12 +182,12 @@ static int xa_check_format(STREAMFILE *sf, off_t offset, int is_blocked) { for (int i = 0; i < (sector_size / frame_size); i++) { read_streamfile(frame_hdr, test_offset, sizeof(frame_hdr), sf); - /* XA frame checks: filter indexes should be 0..3, and shifts 0..C */ + /* XA frame checks: filter indexes should be 0..3 and shifts 0..C, but somehow Planet Laika movies have D */ for (int j = 0; j < 16; j++) { uint8_t header = get_u8(frame_hdr + j); if (((header >> 4) & 0xF) > 0x03) goto fail; - if (((header >> 0) & 0xF) > 0x0c) + if (((header >> 0) & 0xF) > 0x0d) goto fail; } diff --git a/Frameworks/vgmstream/vgmstream/src/meta/xvas.c b/Frameworks/vgmstream/vgmstream/src/meta/xvas.c deleted file mode 100644 index 5aad6b280..000000000 --- a/Frameworks/vgmstream/vgmstream/src/meta/xvas.c +++ /dev/null @@ -1,51 +0,0 @@ -#include "meta.h" -#include "../layout/layout.h" -#include "../coding/coding.h" - -/* XVAS - found in TMNT 2 & TMNT 3 (Xbox) */ -VGMSTREAM * init_vgmstream_xvas(STREAMFILE *streamFile) { - VGMSTREAM * vgmstream = NULL; - off_t start_offset; - int loop_flag, channel_count; - size_t data_size; - - - /* checks */ - if (!check_extensions(streamFile,"xvas")) - goto fail; - if (read_32bitLE(0x00,streamFile) != 0x69 && /* codec */ - read_32bitLE(0x08,streamFile) != 0x48) /* block size (probably 0x24 for mono) */ - goto fail; - - start_offset = 0x800; - channel_count = read_32bitLE(0x04,streamFile); /* always stereo files */ - loop_flag = (read_32bitLE(0x14,streamFile) == read_32bitLE(0x24,streamFile)); - data_size = read_32bitLE(0x24,streamFile); - data_size -= (data_size / 0x20000) * 0x20; /* blocks of 0x20000 with padding */ - - - /* build the VGMSTREAM */ - vgmstream = allocate_vgmstream(channel_count,loop_flag); - if (!vgmstream) goto fail; - - vgmstream->meta_type = meta_XVAS; - vgmstream->sample_rate = read_32bitLE(0x0c,streamFile); - vgmstream->num_samples = xbox_ima_bytes_to_samples(data_size, vgmstream->channels); - if(loop_flag) { - size_t loop_size = read_32bitLE(0x10,streamFile); - loop_size -= (loop_size / 0x20000) * 0x20; - vgmstream->loop_start_sample = xbox_ima_bytes_to_samples(loop_size, vgmstream->channels); - vgmstream->loop_end_sample = vgmstream->num_samples; - } - - vgmstream->coding_type = coding_XBOX_IMA; - vgmstream->layout_type = layout_blocked_xvas; - - if (!vgmstream_open_stream(vgmstream, streamFile, start_offset)) - goto fail; - return vgmstream; - -fail: - close_vgmstream(vgmstream); - return NULL; -} diff --git a/Frameworks/vgmstream/vgmstream/src/vgmstream_init.c b/Frameworks/vgmstream/vgmstream/src/vgmstream_init.c index c2ad5cca7..e8c4a5ab9 100644 --- a/Frameworks/vgmstream/vgmstream/src/vgmstream_init.c +++ b/Frameworks/vgmstream/vgmstream/src/vgmstream_init.c @@ -90,7 +90,6 @@ init_vgmstream_t init_vgmstream_functions[] = { init_vgmstream_str_sega_custom, init_vgmstream_dec, init_vgmstream_xmu, - init_vgmstream_xvas, init_vgmstream_sat_sap, init_vgmstream_dc_idvi, init_vgmstream_ps2_rnd, @@ -174,7 +173,6 @@ init_vgmstream_t init_vgmstream_functions[] = { init_vgmstream_ast_mv, init_vgmstream_dmsg, init_vgmstream_ngc_dsp_aaap, - init_vgmstream_ngc_dsp_konami, init_vgmstream_wb, init_vgmstream_bnsf, init_vgmstream_ps2_gcm, @@ -292,6 +290,7 @@ init_vgmstream_t init_vgmstream_functions[] = { init_vgmstream_ubi_bnm_ps2, init_vgmstream_ubi_dat, init_vgmstream_ubi_blk, + init_vgmstream_ubi_apm, init_vgmstream_ezw, init_vgmstream_vxn, init_vgmstream_ea_snr_sns, diff --git a/Frameworks/vgmstream/vgmstream/src/vgmstream_types.h b/Frameworks/vgmstream/vgmstream/src/vgmstream_types.h index 1a7674aa6..eeb21c14e 100644 --- a/Frameworks/vgmstream/vgmstream/src/vgmstream_types.h +++ b/Frameworks/vgmstream/vgmstream/src/vgmstream_types.h @@ -391,12 +391,10 @@ typedef enum { meta_PS2_VSF_TTA, /* Tiny Toon Adventures: Defenders of the Universe */ meta_ADS_MIDWAY, meta_PS2_SPS, /* Ape Escape 2 */ - meta_NGC_DSP_KONAMI, /* Konami DSP header, found in various games */ meta_UBI_CKD, /* Ubisoft CKD RIFF header (Rayman Origins Wii) */ meta_RAW_WAVM, meta_WVS, meta_XMU, - meta_XVAS, meta_EA_SCHL, /* Electronic Arts SCHl with variable header */ meta_EA_SCHL_fixed, /* Electronic Arts SCHl with fixed header */ meta_EA_BNK, /* Electronic Arts BNK */ @@ -550,6 +548,7 @@ typedef enum { meta_PC_AST, /* Dead Rising (PC) */ meta_NAAC, /* Namco AAC (3DS) */ meta_UBI_SB, /* Ubisoft banks */ + meta_UBI_APM, /* Ubisoft APM */ meta_EZW, /* EZ2DJ (Arcade) EZWAV */ meta_VXN, /* Gameloft mobile games */ meta_EA_SNR_SNS, /* Electronic Arts SNR+SNS (Burnout Paradise) */ diff --git a/Info.plist.template b/Info.plist.template index 1e721391a..bb2cd6593 100644 --- a/Info.plist.template +++ b/Info.plist.template @@ -396,6 +396,7 @@ ao ap apc + apm as4 asbin asd @@ -694,7 +695,7 @@ npsf nsa nsopus - ntx + nfx nub nub2 nus3audio @@ -751,6 +752,7 @@ rsnd rsp rstm + rvw rvws rwar rwav @@ -793,6 +795,7 @@ scd sch sd9 + sdl sdp sdf sdt @@ -879,6 +882,7 @@ um3 utk uv + v v0 va3 vab @@ -973,7 +977,6 @@ xsew xss xvag - xvas xwav xwb xmd