Updated VGMStream to r1951-88-g02d3c3f8

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
This commit is contained in:
Christopher Snowhill 2024-10-30 23:56:21 -07:00
parent 2ac35a0b87
commit 6b8f5df721
19 changed files with 547 additions and 299 deletions

View file

@ -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 = "<group>"; };
836F6E6B18BDC2180095E648 /* nds_strm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nds_strm.c; sourceTree = "<group>"; };
836F6E6D18BDC2180095E648 /* ngc_adpdtk.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ngc_adpdtk.c; sourceTree = "<group>"; };
836F6E7118BDC2180095E648 /* ngc_dsp_konami.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ngc_dsp_konami.c; sourceTree = "<group>"; };
836F6E7218BDC2180095E648 /* ngc_dsp_mpds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ngc_dsp_mpds.c; sourceTree = "<group>"; };
836F6E7318BDC2180095E648 /* ngc_dsp_std.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ngc_dsp_std.c; sourceTree = "<group>"; };
836F6E7418BDC2180095E648 /* dsp_kceje.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsp_kceje.c; sourceTree = "<group>"; };
@ -1567,7 +1565,6 @@
837CEAD423487E8300E62A4A /* bmp_konami.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bmp_konami.c; sourceTree = "<group>"; };
837CEAD623487E8300E62A4A /* acb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = acb.c; sourceTree = "<group>"; };
837CEAD723487E8300E62A4A /* bgw_streamfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bgw_streamfile.h; sourceTree = "<group>"; };
837CEADC23487F2900E62A4A /* xvas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xvas.c; sourceTree = "<group>"; };
837CEADD23487F2A00E62A4A /* raw_pcm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = raw_pcm.c; sourceTree = "<group>"; };
837CEADF23487F2A00E62A4A /* xa_xa30.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xa_xa30.c; sourceTree = "<group>"; };
837CEAE023487F2A00E62A4A /* ubi_hx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ubi_hx.c; sourceTree = "<group>"; };
@ -1718,6 +1715,7 @@
83F1EE2F245D4FC10076E182 /* imuse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = imuse.c; sourceTree = "<group>"; };
83F2CCE125A5B41600F46FA8 /* acx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = acx.c; sourceTree = "<group>"; };
83F5F8821908D0A400C8E65F /* fsb5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fsb5.c; sourceTree = "<group>"; };
83F82CB52CD34747003A1072 /* ubi_apm.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ubi_apm.c; sourceTree = "<group>"; };
83FB238D27B14696003F3062 /* mpeg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mpeg.c; sourceTree = "<group>"; };
83FBB16E2A4FF4EC00CD0580 /* xa2_acclaim.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xa2_acclaim.c; sourceTree = "<group>"; };
83FBB16F2A4FF4EC00CD0580 /* ego_dic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ego_dic.c; sourceTree = "<group>"; };
@ -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 */,

View file

@ -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 */

View file

@ -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"},

View file

@ -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) */

View file

@ -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

View file

@ -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);

View file

@ -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;j<vgmstream->channels;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;
}

View file

@ -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

View file

@ -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))

View file

@ -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;

View file

@ -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;
}

View file

@ -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;

View file

@ -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;

View file

@ -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);

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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,

View file

@ -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) */

View file

@ -396,6 +396,7 @@
<string>ao</string>
<string>ap</string>
<string>apc</string>
<string>apm</string>
<string>as4</string>
<string>asbin</string>
<string>asd</string>
@ -694,7 +695,7 @@
<string>npsf</string>
<string>nsa</string>
<string>nsopus</string>
<string>ntx</string>
<string>nfx</string>
<string>nub</string>
<string>nub2</string>
<string>nus3audio</string>
@ -751,6 +752,7 @@
<string>rsnd</string>
<string>rsp</string>
<string>rstm</string>
<string>rvw</string>
<string>rvws</string>
<string>rwar</string>
<string>rwav</string>
@ -793,6 +795,7 @@
<string>scd</string>
<string>sch</string>
<string>sd9</string>
<string>sdl</string>
<string>sdp</string>
<string>sdf</string>
<string>sdt</string>
@ -879,6 +882,7 @@
<string>um3</string>
<string>utk</string>
<string>uv</string>
<string>v</string>
<string>v0</string>
<string>va3</string>
<string>vab</string>
@ -973,7 +977,6 @@
<string>xsew</string>
<string>xss</string>
<string>xvag</string>
<string>xvas</string>
<string>xwav</string>
<string>xwb</string>
<string>xmd</string>