Updated VGMStream to r1843-92-g740a4048
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
This commit is contained in:
parent
270cf79bb7
commit
0be8dbe7c5
92 changed files with 2351 additions and 2455 deletions
|
@ -27,7 +27,6 @@
|
|||
830595D8277EEAA500EBFAAE /* ffmpeg_decoder_custom_mp4.c in Sources */ = {isa = PBXBuildFile; fileRef = 830595D7277EEAA500EBFAAE /* ffmpeg_decoder_custom_mp4.c */; };
|
||||
8306B08520984518000302D4 /* yamaha_decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 8306B08220984517000302D4 /* yamaha_decoder.c */; };
|
||||
8306B08620984518000302D4 /* fadpcm_decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 8306B08320984517000302D4 /* fadpcm_decoder.c */; };
|
||||
8306B0A220984552000302D4 /* blocked_bdsp.c in Sources */ = {isa = PBXBuildFile; fileRef = 8306B0872098454C000302D4 /* blocked_bdsp.c */; };
|
||||
8306B0A320984552000302D4 /* blocked_ast.c in Sources */ = {isa = PBXBuildFile; fileRef = 8306B0882098454C000302D4 /* blocked_ast.c */; };
|
||||
8306B0A420984552000302D4 /* segmented.c in Sources */ = {isa = PBXBuildFile; fileRef = 8306B0892098454D000302D4 /* segmented.c */; };
|
||||
8306B0A520984552000302D4 /* blocked_ea_wve_au00.c in Sources */ = {isa = PBXBuildFile; fileRef = 8306B08A2098454D000302D4 /* blocked_ea_wve_au00.c */; };
|
||||
|
@ -100,7 +99,6 @@
|
|||
831BA61F1EAC61A500CF89B0 /* cxs.c in Sources */ = {isa = PBXBuildFile; fileRef = 831BA6151EAC61A500CF89B0 /* cxs.c */; };
|
||||
831BA6211EAC61A500CF89B0 /* pasx.c in Sources */ = {isa = PBXBuildFile; fileRef = 831BA6171EAC61A500CF89B0 /* pasx.c */; };
|
||||
831BA6281EAC61CB00CF89B0 /* coding_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 831BA6221EAC61CB00CF89B0 /* coding_utils.c */; };
|
||||
8322ECE7240268BB009E9429 /* raw_al.c in Sources */ = {isa = PBXBuildFile; fileRef = 8322ECE6240268BA009E9429 /* raw_al.c */; };
|
||||
832389501D2246C300482226 /* hca.c in Sources */ = {isa = PBXBuildFile; fileRef = 8323894F1D2246C300482226 /* hca.c */; };
|
||||
832389521D224C0800482226 /* hca_decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 832389511D224C0800482226 /* hca_decoder.c */; };
|
||||
83256BC8286662840036D9C0 /* libmpg123.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 83256BC7286662610036D9C0 /* libmpg123.0.dylib */; };
|
||||
|
@ -239,7 +237,6 @@
|
|||
8349A9111FE6258200E26435 /* bar_streamfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8349A8F81FE6257E00E26435 /* bar_streamfile.h */; };
|
||||
8349A9121FE6258200E26435 /* vsf_tta.c in Sources */ = {isa = PBXBuildFile; fileRef = 8349A8F91FE6257E00E26435 /* vsf_tta.c */; };
|
||||
8349A9141FE6258200E26435 /* omu.c in Sources */ = {isa = PBXBuildFile; fileRef = 8349A8FB1FE6257F00E26435 /* omu.c */; };
|
||||
8349A9151FE6258200E26435 /* ps2_xa2_rrp.c in Sources */ = {isa = PBXBuildFile; fileRef = 8349A8FC1FE6257F00E26435 /* ps2_xa2_rrp.c */; };
|
||||
8349A9161FE6258200E26435 /* flx.c in Sources */ = {isa = PBXBuildFile; fileRef = 8349A8FD1FE6257F00E26435 /* flx.c */; };
|
||||
8349A9171FE6258200E26435 /* pc_adp_otns.c in Sources */ = {isa = PBXBuildFile; fileRef = 8349A8FE1FE6257F00E26435 /* pc_adp_otns.c */; };
|
||||
8349A9181FE6258200E26435 /* ea_1snh.c in Sources */ = {isa = PBXBuildFile; fileRef = 8349A8FF1FE6258000E26435 /* ea_1snh.c */; };
|
||||
|
@ -380,7 +377,6 @@
|
|||
836F6F7C18BDC2190095E648 /* dc_kcey.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E4018BDC2180095E648 /* dc_kcey.c */; };
|
||||
836F6F7D18BDC2190095E648 /* dc_str.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E4118BDC2180095E648 /* dc_str.c */; };
|
||||
836F6F7F18BDC2190095E648 /* dmsg_segh.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E4318BDC2180095E648 /* dmsg_segh.c */; };
|
||||
836F6F8018BDC2190095E648 /* dsp_bdsp.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E4418BDC2180095E648 /* dsp_bdsp.c */; };
|
||||
836F6F8218BDC2190095E648 /* ea_schl.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E4618BDC2180095E648 /* ea_schl.c */; };
|
||||
836F6F8518BDC2190095E648 /* exakt_sc.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E4918BDC2180095E648 /* exakt_sc.c */; };
|
||||
836F6F8618BDC2190095E648 /* excitebots.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E4A18BDC2180095E648 /* excitebots.c */; };
|
||||
|
@ -413,7 +409,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 */; };
|
||||
836F6FAA18BDC2190095E648 /* ngc_bh2pcm.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E6E18BDC2180095E648 /* ngc_bh2pcm.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 */; };
|
||||
|
@ -425,7 +420,7 @@
|
|||
836F6FB618BDC2190095E648 /* ngc_sck_dsp.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E7A18BDC2180095E648 /* ngc_sck_dsp.c */; };
|
||||
836F6FB718BDC2190095E648 /* ngc_ssm.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E7B18BDC2180095E648 /* ngc_ssm.c */; };
|
||||
836F6FB818BDC2190095E648 /* ngc_tydsp.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E7C18BDC2180095E648 /* ngc_tydsp.c */; };
|
||||
836F6FBA18BDC2190095E648 /* ngc_ymf.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E7E18BDC2180095E648 /* ngc_ymf.c */; };
|
||||
836F6FBA18BDC2190095E648 /* ymf.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E7E18BDC2180095E648 /* ymf.c */; };
|
||||
836F6FBD18BDC2190095E648 /* nwa.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E8118BDC2180095E648 /* nwa.c */; };
|
||||
836F6FBF18BDC2190095E648 /* otm.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E8318BDC2180095E648 /* otm.c */; };
|
||||
836F6FC018BDC2190095E648 /* p3d.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E8418BDC2180095E648 /* p3d.c */; };
|
||||
|
@ -440,44 +435,38 @@
|
|||
836F6FD118BDC2190095E648 /* ps2_bg00.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E9518BDC2180095E648 /* ps2_bg00.c */; };
|
||||
836F6FD218BDC2190095E648 /* ps2_bmdx.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E9618BDC2180095E648 /* ps2_bmdx.c */; };
|
||||
836F6FD418BDC2190095E648 /* hxd.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E9818BDC2180095E648 /* hxd.c */; };
|
||||
836F6FD518BDC2190095E648 /* ps2_enth.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E9918BDC2180095E648 /* ps2_enth.c */; };
|
||||
836F6FD518BDC2190095E648 /* lp_ap_lep.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E9918BDC2180095E648 /* lp_ap_lep.c */; };
|
||||
836F6FD718BDC2190095E648 /* ps2_filp.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E9B18BDC2180095E648 /* ps2_filp.c */; };
|
||||
836F6FD818BDC2190095E648 /* ps2_gbts.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E9C18BDC2180095E648 /* ps2_gbts.c */; };
|
||||
836F6FD918BDC2190095E648 /* ps2_gcm.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E9D18BDC2180095E648 /* ps2_gcm.c */; };
|
||||
836F6FDA18BDC2190095E648 /* ps2_hgc1.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E9E18BDC2180095E648 /* ps2_hgc1.c */; };
|
||||
836F6FDB18BDC2190095E648 /* ps2_hsf.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6E9F18BDC2180095E648 /* ps2_hsf.c */; };
|
||||
836F6FDC18BDC2190095E648 /* ps2_iab.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EA018BDC2180095E648 /* ps2_iab.c */; };
|
||||
836F6FDE18BDC2190095E648 /* ps2_ild.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EA218BDC2180095E648 /* ps2_ild.c */; };
|
||||
836F6FDE18BDC2190095E648 /* ild.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EA218BDC2180095E648 /* ild.c */; };
|
||||
836F6FE018BDC2190095E648 /* ps2_joe.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EA418BDC2180095E648 /* ps2_joe.c */; };
|
||||
836F6FE218BDC2190095E648 /* ps2_kces.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EA618BDC2180095E648 /* ps2_kces.c */; };
|
||||
836F6FE418BDC2190095E648 /* ps2_leg.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EA818BDC2180095E648 /* ps2_leg.c */; };
|
||||
836F6FE618BDC2190095E648 /* ps2_mcg.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EAA18BDC2180095E648 /* ps2_mcg.c */; };
|
||||
836F6FE818BDC2190095E648 /* ps2_mic.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EAC18BDC2180095E648 /* ps2_mic.c */; };
|
||||
836F6FE918BDC2190095E648 /* ps2_mihb.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EAD18BDC2180095E648 /* ps2_mihb.c */; };
|
||||
836F6FEA18BDC2190095E648 /* ps2_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EAE18BDC2180095E648 /* ps2_msa.c */; };
|
||||
836F6FEE18BDC2190095E648 /* ps2_p2bt.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EB218BDC2180095E648 /* ps2_p2bt.c */; };
|
||||
836F6FEF18BDC2190095E648 /* ps2_pnb.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EB318BDC2180095E648 /* ps2_pnb.c */; };
|
||||
836F6FF218BDC2190095E648 /* ps2_rnd.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EB618BDC2180095E648 /* ps2_rnd.c */; };
|
||||
836F6FF318BDC2190095E648 /* ps2_rstm.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EB718BDC2180095E648 /* ps2_rstm.c */; };
|
||||
836F6FF418BDC2190095E648 /* rws.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EB818BDC2180095E648 /* rws.c */; };
|
||||
836F6FF418BDC2190095E648 /* rws_80d.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EB818BDC2180095E648 /* rws_80d.c */; };
|
||||
836F6FF618BDC2190095E648 /* ster.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EBA18BDC2180095E648 /* ster.c */; };
|
||||
836F6FF718BDC2190095E648 /* ps2_sl3.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EBB18BDC2180095E648 /* ps2_sl3.c */; };
|
||||
836F6FF818BDC2190095E648 /* ps2_smpl.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EBC18BDC2180095E648 /* ps2_smpl.c */; };
|
||||
836F6FF818BDC2190095E648 /* smpl.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EBC18BDC2180095E648 /* smpl.c */; };
|
||||
836F6FF918BDC2190095E648 /* ps2_snd.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EBD18BDC2180095E648 /* ps2_snd.c */; };
|
||||
836F6FFA18BDC2190095E648 /* spm.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EBE18BDC2190095E648 /* spm.c */; };
|
||||
836F6FFB18BDC2190095E648 /* ps2_sps.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EBF18BDC2190095E648 /* ps2_sps.c */; };
|
||||
836F700118BDC2190095E648 /* ps2_tec.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EC518BDC2190095E648 /* ps2_tec.c */; };
|
||||
836F700218BDC2190095E648 /* ps2_tk5.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EC618BDC2190095E648 /* ps2_tk5.c */; };
|
||||
836F700418BDC2190095E648 /* ps2_vas.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EC818BDC2190095E648 /* ps2_vas.c */; };
|
||||
836F700518BDC2190095E648 /* ps2_vbk.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EC918BDC2190095E648 /* ps2_vbk.c */; };
|
||||
836F700618BDC2190095E648 /* vgs_ps.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6ECA18BDC2190095E648 /* vgs_ps.c */; };
|
||||
836F700718BDC2190095E648 /* ps2_vgv.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6ECB18BDC2190095E648 /* ps2_vgv.c */; };
|
||||
836F700818BDC2190095E648 /* ps2_vms.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6ECC18BDC2190095E648 /* ps2_vms.c */; };
|
||||
836F700918BDC2190095E648 /* ps2_voi.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6ECD18BDC2190095E648 /* ps2_voi.c */; };
|
||||
836F700918BDC2190095E648 /* voi.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6ECD18BDC2190095E648 /* voi.c */; };
|
||||
836F700B18BDC2190095E648 /* ps2_wad.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6ECF18BDC2190095E648 /* ps2_wad.c */; };
|
||||
836F700C18BDC2190095E648 /* ps2_wb.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6ED018BDC2190095E648 /* ps2_wb.c */; };
|
||||
836F700D18BDC2190095E648 /* ps2_wmus.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6ED118BDC2190095E648 /* ps2_wmus.c */; };
|
||||
836F700E18BDC2190095E648 /* ps2_xa2.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6ED218BDC2190095E648 /* ps2_xa2.c */; };
|
||||
836F700F18BDC2190095E648 /* ps2_xa30.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6ED318BDC2190095E648 /* ps2_xa30.c */; };
|
||||
836F701518BDC2190095E648 /* ps3_past.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6ED918BDC2190095E648 /* ps3_past.c */; };
|
||||
836F701E18BDC2190095E648 /* redspark.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EE218BDC2190095E648 /* redspark.c */; };
|
||||
|
@ -485,10 +474,10 @@
|
|||
836F702018BDC2190095E648 /* rkv.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EE418BDC2190095E648 /* rkv.c */; };
|
||||
836F702118BDC2190095E648 /* rs03.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EE518BDC2190095E648 /* rs03.c */; };
|
||||
836F702218BDC2190095E648 /* rsd.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EE618BDC2190095E648 /* rsd.c */; };
|
||||
836F702318BDC2190095E648 /* rsf.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EE718BDC2190095E648 /* rsf.c */; };
|
||||
836F702318BDC2190095E648 /* raw_rsf.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EE718BDC2190095E648 /* raw_rsf.c */; };
|
||||
836F702418BDC2190095E648 /* rwsd.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EE818BDC2190095E648 /* rwsd.c */; };
|
||||
836F702518BDC2190095E648 /* rwx.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EE918BDC2190095E648 /* rwx.c */; };
|
||||
836F702618BDC2190095E648 /* s14_sss.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EEA18BDC2190095E648 /* s14_sss.c */; };
|
||||
836F702518BDC2190095E648 /* rwax.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EE918BDC2190095E648 /* rwax.c */; };
|
||||
836F702618BDC2190095E648 /* raw_s14_sss.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EEA18BDC2190095E648 /* raw_s14_sss.c */; };
|
||||
836F702718BDC2190095E648 /* sat_baka.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EEB18BDC2190095E648 /* sat_baka.c */; };
|
||||
836F702818BDC2190095E648 /* sat_dvi.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EEC18BDC2190095E648 /* sat_dvi.c */; };
|
||||
836F702918BDC2190095E648 /* sat_sap.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6EED18BDC2190095E648 /* sat_sap.c */; };
|
||||
|
@ -512,7 +501,7 @@
|
|||
836F703D18BDC2190095E648 /* wii_mus.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6F0118BDC2190095E648 /* wii_mus.c */; };
|
||||
836F703E18BDC2190095E648 /* wii_ras.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6F0218BDC2190095E648 /* wii_ras.c */; };
|
||||
836F704018BDC2190095E648 /* wii_sng.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6F0418BDC2190095E648 /* wii_sng.c */; };
|
||||
836F704218BDC2190095E648 /* wii_sts.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6F0618BDC2190095E648 /* wii_sts.c */; };
|
||||
836F704218BDC2190095E648 /* sts.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6F0618BDC2190095E648 /* sts.c */; };
|
||||
836F704318BDC2190095E648 /* wpd.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6F0718BDC2190095E648 /* wpd.c */; };
|
||||
836F704418BDC2190095E648 /* ws_aud.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6F0818BDC2190095E648 /* ws_aud.c */; };
|
||||
836F704518BDC2190095E648 /* wvs.c in Sources */ = {isa = PBXBuildFile; fileRef = 836F6F0918BDC2190095E648 /* wvs.c */; };
|
||||
|
@ -604,7 +593,6 @@
|
|||
839933602591E8C1001855AF /* ubi_sb_garbage_streamfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8399335D2591E8C0001855AF /* ubi_sb_garbage_streamfile.h */; };
|
||||
839933612591E8C1001855AF /* sbk.c in Sources */ = {isa = PBXBuildFile; fileRef = 8399335E2591E8C0001855AF /* sbk.c */; };
|
||||
83997F5B22D9569E00633184 /* rad.c in Sources */ = {isa = PBXBuildFile; fileRef = 83997F5722D9569E00633184 /* rad.c */; };
|
||||
839B54521EEE1D9600048A2D /* ngc_ulw.c in Sources */ = {isa = PBXBuildFile; fileRef = 831BD11F1EEE1CF200198540 /* ngc_ulw.c */; };
|
||||
839C3D27270D49FF00E13653 /* lpcm_fb.c in Sources */ = {isa = PBXBuildFile; fileRef = 839C3D22270D49FF00E13653 /* lpcm_fb.c */; };
|
||||
839E21E01F2EDAF100EE54D7 /* vorbis_custom_data_fsb.h in Headers */ = {isa = PBXBuildFile; fileRef = 839E21D61F2EDAF000EE54D7 /* vorbis_custom_data_fsb.h */; };
|
||||
839E21E11F2EDAF100EE54D7 /* vorbis_custom_decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 839E21D71F2EDAF000EE54D7 /* vorbis_custom_decoder.c */; };
|
||||
|
@ -637,7 +625,7 @@
|
|||
83A8BADD256679C5000F5F3F /* wady_decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 83A8BADC256679C5000F5F3F /* wady_decoder.c */; };
|
||||
83A8BADF256679E3000F5F3F /* blocked_xwav.c in Sources */ = {isa = PBXBuildFile; fileRef = 83A8BADE256679E3000F5F3F /* blocked_xwav.c */; };
|
||||
83A8BAE525667AA8000F5F3F /* wady.c in Sources */ = {isa = PBXBuildFile; fileRef = 83A8BAE025667AA7000F5F3F /* wady.c */; };
|
||||
83A8BAE625667AA8000F5F3F /* ps2_enth_streamfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 83A8BAE125667AA7000F5F3F /* ps2_enth_streamfile.h */; };
|
||||
83A8BAE625667AA8000F5F3F /* lp_ap_lep_streamfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 83A8BAE125667AA7000F5F3F /* lp_ap_lep_streamfile.h */; };
|
||||
83A8BAE725667AA8000F5F3F /* sdrh.c in Sources */ = {isa = PBXBuildFile; fileRef = 83A8BAE225667AA7000F5F3F /* sdrh.c */; };
|
||||
83A8BAE825667AA8000F5F3F /* xwav.c in Sources */ = {isa = PBXBuildFile; fileRef = 83A8BAE325667AA7000F5F3F /* xwav.c */; };
|
||||
83A8BAE925667AA8000F5F3F /* cpk.c in Sources */ = {isa = PBXBuildFile; fileRef = 83A8BAE425667AA7000F5F3F /* cpk.c */; };
|
||||
|
@ -649,7 +637,7 @@
|
|||
83AA5D1E1F6E2F800020821C /* blocked_awc.c in Sources */ = {isa = PBXBuildFile; fileRef = 83AA5D1B1F6E2F7F0020821C /* blocked_awc.c */; };
|
||||
83AA5D241F6E2F9C0020821C /* awc.c in Sources */ = {isa = PBXBuildFile; fileRef = 83AA5D201F6E2F9B0020821C /* awc.c */; };
|
||||
83AA5D251F6E2F9C0020821C /* hca_keys.h in Headers */ = {isa = PBXBuildFile; fileRef = 83AA5D211F6E2F9C0020821C /* hca_keys.h */; };
|
||||
83AA5D271F6E2F9C0020821C /* stm.c in Sources */ = {isa = PBXBuildFile; fileRef = 83AA5D231F6E2F9C0020821C /* stm.c */; };
|
||||
83AA5D271F6E2F9C0020821C /* stma.c in Sources */ = {isa = PBXBuildFile; fileRef = 83AA5D231F6E2F9C0020821C /* stma.c */; };
|
||||
83AA7D17279EBD0400087AA4 /* libavcodec.59.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 83AA7D13279EBCF900087AA4 /* libavcodec.59.dylib */; };
|
||||
83AA7D18279EBD0900087AA4 /* libavformat.59.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 83AA7D14279EBCF900087AA4 /* libavformat.59.dylib */; };
|
||||
83AA7D19279EBD0B00087AA4 /* libavutil.57.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 83AA7D16279EBCF900087AA4 /* libavutil.57.dylib */; };
|
||||
|
@ -705,7 +693,7 @@
|
|||
83D2007F248DDB770048BD24 /* mups.c in Sources */ = {isa = PBXBuildFile; fileRef = 83D20077248DDB770048BD24 /* mups.c */; };
|
||||
83D20080248DDB770048BD24 /* sadf.c in Sources */ = {isa = PBXBuildFile; fileRef = 83D20078248DDB770048BD24 /* sadf.c */; };
|
||||
83D20081248DDB770048BD24 /* sadl.c in Sources */ = {isa = PBXBuildFile; fileRef = 83D20079248DDB770048BD24 /* sadl.c */; };
|
||||
83D26A7A26E66D98001A9475 /* adp_bos.c in Sources */ = {isa = PBXBuildFile; fileRef = 83D26A7626E66D98001A9475 /* adp_bos.c */; };
|
||||
83D26A7A26E66D98001A9475 /* adp_wildfire.c in Sources */ = {isa = PBXBuildFile; fileRef = 83D26A7626E66D98001A9475 /* adp_wildfire.c */; };
|
||||
83D26A8126E66DC2001A9475 /* log.c in Sources */ = {isa = PBXBuildFile; fileRef = 83D26A7D26E66DC2001A9475 /* log.c */; };
|
||||
83D26A8226E66DC2001A9475 /* chunks.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D26A7E26E66DC2001A9475 /* chunks.h */; };
|
||||
83D26A8326E66DC2001A9475 /* log.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D26A7F26E66DC2001A9475 /* log.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
|
@ -740,6 +728,15 @@
|
|||
83F2CCE525A5B41600F46FA8 /* acx.c in Sources */ = {isa = PBXBuildFile; fileRef = 83F2CCE125A5B41600F46FA8 /* acx.c */; };
|
||||
83F5F8831908D0A400C8E65F /* fsb5.c in Sources */ = {isa = PBXBuildFile; fileRef = 83F5F8821908D0A400C8E65F /* fsb5.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 */; };
|
||||
83FBB1732A4FF4EC00CD0580 /* awd.c in Sources */ = {isa = PBXBuildFile; fileRef = 83FBB1702A4FF4EC00CD0580 /* awd.c */; };
|
||||
83FBB1752A4FF59E00CD0580 /* pwb.c in Sources */ = {isa = PBXBuildFile; fileRef = 83FBB1742A4FF59E00CD0580 /* pwb.c */; };
|
||||
83FBB1782A4FF71B00CD0580 /* rws_809.c in Sources */ = {isa = PBXBuildFile; fileRef = 83FBB1762A4FF71B00CD0580 /* rws_809.c */; };
|
||||
83FBB1792A4FF71B00CD0580 /* rstm_rockstar.c in Sources */ = {isa = PBXBuildFile; fileRef = 83FBB1772A4FF71B00CD0580 /* rstm_rockstar.c */; };
|
||||
83FBB17C2A4FF87200CD0580 /* sf_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 83FBB17A2A4FF87200CD0580 /* sf_utils.h */; };
|
||||
83FBB17D2A4FF87200CD0580 /* sf_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 83FBB17B2A4FF87200CD0580 /* sf_utils.c */; };
|
||||
83FBB17F2A4FF94C00CD0580 /* msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 83FBB17E2A4FF94C00CD0580 /* msa.c */; };
|
||||
83FBD506235D31F800D35BCD /* riff_ogg_streamfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 83FBD502235D31F700D35BCD /* riff_ogg_streamfile.h */; };
|
||||
83FC176D23AC58D100E1025F /* xma_ue3.c in Sources */ = {isa = PBXBuildFile; fileRef = 83FC176A23AC58D100E1025F /* xma_ue3.c */; };
|
||||
83FC176E23AC58D100E1025F /* csb.c in Sources */ = {isa = PBXBuildFile; fileRef = 83FC176B23AC58D100E1025F /* csb.c */; };
|
||||
|
@ -868,7 +865,6 @@
|
|||
830595D7277EEAA500EBFAAE /* ffmpeg_decoder_custom_mp4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ffmpeg_decoder_custom_mp4.c; sourceTree = "<group>"; };
|
||||
8306B08220984517000302D4 /* yamaha_decoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = yamaha_decoder.c; sourceTree = "<group>"; };
|
||||
8306B08320984517000302D4 /* fadpcm_decoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fadpcm_decoder.c; sourceTree = "<group>"; };
|
||||
8306B0872098454C000302D4 /* blocked_bdsp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = blocked_bdsp.c; sourceTree = "<group>"; };
|
||||
8306B0882098454C000302D4 /* blocked_ast.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = blocked_ast.c; sourceTree = "<group>"; };
|
||||
8306B0892098454D000302D4 /* segmented.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = segmented.c; sourceTree = "<group>"; };
|
||||
8306B08A2098454D000302D4 /* blocked_ea_wve_au00.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = blocked_ea_wve_au00.c; sourceTree = "<group>"; };
|
||||
|
@ -941,8 +937,6 @@
|
|||
831BA6151EAC61A500CF89B0 /* cxs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cxs.c; sourceTree = "<group>"; };
|
||||
831BA6171EAC61A500CF89B0 /* pasx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pasx.c; sourceTree = "<group>"; };
|
||||
831BA6221EAC61CB00CF89B0 /* coding_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = coding_utils.c; sourceTree = "<group>"; };
|
||||
831BD11F1EEE1CF200198540 /* ngc_ulw.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ngc_ulw.c; sourceTree = "<group>"; };
|
||||
8322ECE6240268BA009E9429 /* raw_al.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = raw_al.c; sourceTree = "<group>"; };
|
||||
8323894F1D2246C300482226 /* hca.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hca.c; sourceTree = "<group>"; };
|
||||
832389511D224C0800482226 /* hca_decoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hca_decoder.c; sourceTree = "<group>"; };
|
||||
83256BC7286662610036D9C0 /* libmpg123.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libmpg123.0.dylib; sourceTree = "<group>"; };
|
||||
|
@ -1081,7 +1075,6 @@
|
|||
8349A8F81FE6257E00E26435 /* bar_streamfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bar_streamfile.h; sourceTree = "<group>"; };
|
||||
8349A8F91FE6257E00E26435 /* vsf_tta.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vsf_tta.c; sourceTree = "<group>"; };
|
||||
8349A8FB1FE6257F00E26435 /* omu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = omu.c; sourceTree = "<group>"; };
|
||||
8349A8FC1FE6257F00E26435 /* ps2_xa2_rrp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_xa2_rrp.c; sourceTree = "<group>"; };
|
||||
8349A8FD1FE6257F00E26435 /* flx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = flx.c; sourceTree = "<group>"; };
|
||||
8349A8FE1FE6257F00E26435 /* pc_adp_otns.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pc_adp_otns.c; sourceTree = "<group>"; };
|
||||
8349A8FF1FE6258000E26435 /* ea_1snh.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ea_1snh.c; sourceTree = "<group>"; };
|
||||
|
@ -1223,7 +1216,6 @@
|
|||
836F6E4018BDC2180095E648 /* dc_kcey.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dc_kcey.c; sourceTree = "<group>"; };
|
||||
836F6E4118BDC2180095E648 /* dc_str.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dc_str.c; sourceTree = "<group>"; };
|
||||
836F6E4318BDC2180095E648 /* dmsg_segh.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dmsg_segh.c; sourceTree = "<group>"; };
|
||||
836F6E4418BDC2180095E648 /* dsp_bdsp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dsp_bdsp.c; sourceTree = "<group>"; };
|
||||
836F6E4618BDC2180095E648 /* ea_schl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ea_schl.c; sourceTree = "<group>"; };
|
||||
836F6E4918BDC2180095E648 /* exakt_sc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = exakt_sc.c; sourceTree = "<group>"; };
|
||||
836F6E4A18BDC2180095E648 /* excitebots.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = excitebots.c; sourceTree = "<group>"; };
|
||||
|
@ -1256,7 +1248,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>"; };
|
||||
836F6E6E18BDC2180095E648 /* ngc_bh2pcm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ngc_bh2pcm.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>"; };
|
||||
|
@ -1268,7 +1259,7 @@
|
|||
836F6E7A18BDC2180095E648 /* ngc_sck_dsp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ngc_sck_dsp.c; sourceTree = "<group>"; };
|
||||
836F6E7B18BDC2180095E648 /* ngc_ssm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ngc_ssm.c; sourceTree = "<group>"; };
|
||||
836F6E7C18BDC2180095E648 /* ngc_tydsp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ngc_tydsp.c; sourceTree = "<group>"; };
|
||||
836F6E7E18BDC2180095E648 /* ngc_ymf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ngc_ymf.c; sourceTree = "<group>"; };
|
||||
836F6E7E18BDC2180095E648 /* ymf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ymf.c; sourceTree = "<group>"; };
|
||||
836F6E8118BDC2180095E648 /* nwa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nwa.c; sourceTree = "<group>"; };
|
||||
836F6E8318BDC2180095E648 /* otm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = otm.c; sourceTree = "<group>"; };
|
||||
836F6E8418BDC2180095E648 /* p3d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = p3d.c; sourceTree = "<group>"; };
|
||||
|
@ -1283,44 +1274,38 @@
|
|||
836F6E9518BDC2180095E648 /* ps2_bg00.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_bg00.c; sourceTree = "<group>"; };
|
||||
836F6E9618BDC2180095E648 /* ps2_bmdx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_bmdx.c; sourceTree = "<group>"; };
|
||||
836F6E9818BDC2180095E648 /* hxd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hxd.c; sourceTree = "<group>"; };
|
||||
836F6E9918BDC2180095E648 /* ps2_enth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_enth.c; sourceTree = "<group>"; };
|
||||
836F6E9918BDC2180095E648 /* lp_ap_lep.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lp_ap_lep.c; sourceTree = "<group>"; };
|
||||
836F6E9B18BDC2180095E648 /* ps2_filp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_filp.c; sourceTree = "<group>"; };
|
||||
836F6E9C18BDC2180095E648 /* ps2_gbts.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_gbts.c; sourceTree = "<group>"; };
|
||||
836F6E9D18BDC2180095E648 /* ps2_gcm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_gcm.c; sourceTree = "<group>"; };
|
||||
836F6E9E18BDC2180095E648 /* ps2_hgc1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_hgc1.c; sourceTree = "<group>"; };
|
||||
836F6E9F18BDC2180095E648 /* ps2_hsf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_hsf.c; sourceTree = "<group>"; };
|
||||
836F6EA018BDC2180095E648 /* ps2_iab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_iab.c; sourceTree = "<group>"; };
|
||||
836F6EA218BDC2180095E648 /* ps2_ild.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_ild.c; sourceTree = "<group>"; };
|
||||
836F6EA218BDC2180095E648 /* ild.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ild.c; sourceTree = "<group>"; };
|
||||
836F6EA418BDC2180095E648 /* ps2_joe.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_joe.c; sourceTree = "<group>"; };
|
||||
836F6EA618BDC2180095E648 /* ps2_kces.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_kces.c; sourceTree = "<group>"; };
|
||||
836F6EA818BDC2180095E648 /* ps2_leg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_leg.c; sourceTree = "<group>"; };
|
||||
836F6EAA18BDC2180095E648 /* ps2_mcg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_mcg.c; sourceTree = "<group>"; };
|
||||
836F6EAC18BDC2180095E648 /* ps2_mic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_mic.c; sourceTree = "<group>"; };
|
||||
836F6EAD18BDC2180095E648 /* ps2_mihb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_mihb.c; sourceTree = "<group>"; };
|
||||
836F6EAE18BDC2180095E648 /* ps2_msa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_msa.c; sourceTree = "<group>"; };
|
||||
836F6EB218BDC2180095E648 /* ps2_p2bt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_p2bt.c; sourceTree = "<group>"; };
|
||||
836F6EB318BDC2180095E648 /* ps2_pnb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_pnb.c; sourceTree = "<group>"; };
|
||||
836F6EB618BDC2180095E648 /* ps2_rnd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_rnd.c; sourceTree = "<group>"; };
|
||||
836F6EB718BDC2180095E648 /* ps2_rstm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_rstm.c; sourceTree = "<group>"; };
|
||||
836F6EB818BDC2180095E648 /* rws.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rws.c; sourceTree = "<group>"; };
|
||||
836F6EB818BDC2180095E648 /* rws_80d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rws_80d.c; sourceTree = "<group>"; };
|
||||
836F6EBA18BDC2180095E648 /* ster.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ster.c; sourceTree = "<group>"; };
|
||||
836F6EBB18BDC2180095E648 /* ps2_sl3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_sl3.c; sourceTree = "<group>"; };
|
||||
836F6EBC18BDC2180095E648 /* ps2_smpl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_smpl.c; sourceTree = "<group>"; };
|
||||
836F6EBC18BDC2180095E648 /* smpl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smpl.c; sourceTree = "<group>"; };
|
||||
836F6EBD18BDC2180095E648 /* ps2_snd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_snd.c; sourceTree = "<group>"; };
|
||||
836F6EBE18BDC2190095E648 /* spm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = spm.c; sourceTree = "<group>"; };
|
||||
836F6EBF18BDC2190095E648 /* ps2_sps.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_sps.c; sourceTree = "<group>"; };
|
||||
836F6EC518BDC2190095E648 /* ps2_tec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_tec.c; sourceTree = "<group>"; };
|
||||
836F6EC618BDC2190095E648 /* ps2_tk5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_tk5.c; sourceTree = "<group>"; };
|
||||
836F6EC818BDC2190095E648 /* ps2_vas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_vas.c; sourceTree = "<group>"; };
|
||||
836F6EC918BDC2190095E648 /* ps2_vbk.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_vbk.c; sourceTree = "<group>"; };
|
||||
836F6ECA18BDC2190095E648 /* vgs_ps.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vgs_ps.c; sourceTree = "<group>"; };
|
||||
836F6ECB18BDC2190095E648 /* ps2_vgv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_vgv.c; sourceTree = "<group>"; };
|
||||
836F6ECC18BDC2190095E648 /* ps2_vms.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_vms.c; sourceTree = "<group>"; };
|
||||
836F6ECD18BDC2190095E648 /* ps2_voi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_voi.c; sourceTree = "<group>"; };
|
||||
836F6ECD18BDC2190095E648 /* voi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = voi.c; sourceTree = "<group>"; };
|
||||
836F6ECF18BDC2190095E648 /* ps2_wad.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_wad.c; sourceTree = "<group>"; };
|
||||
836F6ED018BDC2190095E648 /* ps2_wb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_wb.c; sourceTree = "<group>"; };
|
||||
836F6ED118BDC2190095E648 /* ps2_wmus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_wmus.c; sourceTree = "<group>"; };
|
||||
836F6ED218BDC2190095E648 /* ps2_xa2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_xa2.c; sourceTree = "<group>"; };
|
||||
836F6ED318BDC2190095E648 /* ps2_xa30.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps2_xa30.c; sourceTree = "<group>"; };
|
||||
836F6ED918BDC2190095E648 /* ps3_past.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ps3_past.c; sourceTree = "<group>"; };
|
||||
836F6EE218BDC2190095E648 /* redspark.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = redspark.c; sourceTree = "<group>"; };
|
||||
|
@ -1328,10 +1313,10 @@
|
|||
836F6EE418BDC2190095E648 /* rkv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rkv.c; sourceTree = "<group>"; };
|
||||
836F6EE518BDC2190095E648 /* rs03.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rs03.c; sourceTree = "<group>"; };
|
||||
836F6EE618BDC2190095E648 /* rsd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsd.c; sourceTree = "<group>"; };
|
||||
836F6EE718BDC2190095E648 /* rsf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rsf.c; sourceTree = "<group>"; };
|
||||
836F6EE718BDC2190095E648 /* raw_rsf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = raw_rsf.c; sourceTree = "<group>"; };
|
||||
836F6EE818BDC2190095E648 /* rwsd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rwsd.c; sourceTree = "<group>"; };
|
||||
836F6EE918BDC2190095E648 /* rwx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rwx.c; sourceTree = "<group>"; };
|
||||
836F6EEA18BDC2190095E648 /* s14_sss.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s14_sss.c; sourceTree = "<group>"; };
|
||||
836F6EE918BDC2190095E648 /* rwax.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rwax.c; sourceTree = "<group>"; };
|
||||
836F6EEA18BDC2190095E648 /* raw_s14_sss.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = raw_s14_sss.c; sourceTree = "<group>"; };
|
||||
836F6EEB18BDC2190095E648 /* sat_baka.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sat_baka.c; sourceTree = "<group>"; };
|
||||
836F6EEC18BDC2190095E648 /* sat_dvi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sat_dvi.c; sourceTree = "<group>"; };
|
||||
836F6EED18BDC2190095E648 /* sat_sap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sat_sap.c; sourceTree = "<group>"; };
|
||||
|
@ -1355,7 +1340,7 @@
|
|||
836F6F0118BDC2190095E648 /* wii_mus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wii_mus.c; sourceTree = "<group>"; };
|
||||
836F6F0218BDC2190095E648 /* wii_ras.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wii_ras.c; sourceTree = "<group>"; };
|
||||
836F6F0418BDC2190095E648 /* wii_sng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wii_sng.c; sourceTree = "<group>"; };
|
||||
836F6F0618BDC2190095E648 /* wii_sts.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wii_sts.c; sourceTree = "<group>"; };
|
||||
836F6F0618BDC2190095E648 /* sts.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sts.c; sourceTree = "<group>"; };
|
||||
836F6F0718BDC2190095E648 /* wpd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wpd.c; sourceTree = "<group>"; };
|
||||
836F6F0818BDC2190095E648 /* ws_aud.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ws_aud.c; sourceTree = "<group>"; };
|
||||
836F6F0918BDC2190095E648 /* wvs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wvs.c; sourceTree = "<group>"; };
|
||||
|
@ -1481,7 +1466,7 @@
|
|||
83A8BADC256679C5000F5F3F /* wady_decoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wady_decoder.c; sourceTree = "<group>"; };
|
||||
83A8BADE256679E3000F5F3F /* blocked_xwav.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = blocked_xwav.c; sourceTree = "<group>"; };
|
||||
83A8BAE025667AA7000F5F3F /* wady.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wady.c; sourceTree = "<group>"; };
|
||||
83A8BAE125667AA7000F5F3F /* ps2_enth_streamfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ps2_enth_streamfile.h; sourceTree = "<group>"; };
|
||||
83A8BAE125667AA7000F5F3F /* lp_ap_lep_streamfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lp_ap_lep_streamfile.h; sourceTree = "<group>"; };
|
||||
83A8BAE225667AA7000F5F3F /* sdrh.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sdrh.c; sourceTree = "<group>"; };
|
||||
83A8BAE325667AA7000F5F3F /* xwav.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xwav.c; sourceTree = "<group>"; };
|
||||
83A8BAE425667AA7000F5F3F /* cpk.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cpk.c; sourceTree = "<group>"; };
|
||||
|
@ -1493,7 +1478,7 @@
|
|||
83AA5D1B1F6E2F7F0020821C /* blocked_awc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = blocked_awc.c; sourceTree = "<group>"; };
|
||||
83AA5D201F6E2F9B0020821C /* awc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = awc.c; sourceTree = "<group>"; };
|
||||
83AA5D211F6E2F9C0020821C /* hca_keys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hca_keys.h; sourceTree = "<group>"; };
|
||||
83AA5D231F6E2F9C0020821C /* stm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stm.c; sourceTree = "<group>"; };
|
||||
83AA5D231F6E2F9C0020821C /* stma.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stma.c; sourceTree = "<group>"; };
|
||||
83AA7D13279EBCF900087AA4 /* libavcodec.59.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libavcodec.59.dylib; path = ../../ThirdParty/ffmpeg/lib/libavcodec.59.dylib; sourceTree = "<group>"; };
|
||||
83AA7D14279EBCF900087AA4 /* libavformat.59.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libavformat.59.dylib; path = ../../ThirdParty/ffmpeg/lib/libavformat.59.dylib; sourceTree = "<group>"; };
|
||||
83AA7D15279EBCF900087AA4 /* libswresample.4.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libswresample.4.dylib; path = ../../ThirdParty/ffmpeg/lib/libswresample.4.dylib; sourceTree = "<group>"; };
|
||||
|
@ -1549,7 +1534,7 @@
|
|||
83D20077248DDB770048BD24 /* mups.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mups.c; sourceTree = "<group>"; };
|
||||
83D20078248DDB770048BD24 /* sadf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sadf.c; sourceTree = "<group>"; };
|
||||
83D20079248DDB770048BD24 /* sadl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sadl.c; sourceTree = "<group>"; };
|
||||
83D26A7626E66D98001A9475 /* adp_bos.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = adp_bos.c; sourceTree = "<group>"; };
|
||||
83D26A7626E66D98001A9475 /* adp_wildfire.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = adp_wildfire.c; sourceTree = "<group>"; };
|
||||
83D26A7D26E66DC2001A9475 /* log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = log.c; sourceTree = "<group>"; };
|
||||
83D26A7E26E66DC2001A9475 /* chunks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = chunks.h; sourceTree = "<group>"; };
|
||||
83D26A7F26E66DC2001A9475 /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = "<group>"; };
|
||||
|
@ -1582,6 +1567,15 @@
|
|||
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>"; };
|
||||
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>"; };
|
||||
83FBB1702A4FF4EC00CD0580 /* awd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = awd.c; sourceTree = "<group>"; };
|
||||
83FBB1742A4FF59E00CD0580 /* pwb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pwb.c; sourceTree = "<group>"; };
|
||||
83FBB1762A4FF71B00CD0580 /* rws_809.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rws_809.c; sourceTree = "<group>"; };
|
||||
83FBB1772A4FF71B00CD0580 /* rstm_rockstar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rstm_rockstar.c; sourceTree = "<group>"; };
|
||||
83FBB17A2A4FF87200CD0580 /* sf_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sf_utils.h; sourceTree = "<group>"; };
|
||||
83FBB17B2A4FF87200CD0580 /* sf_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sf_utils.c; sourceTree = "<group>"; };
|
||||
83FBB17E2A4FF94C00CD0580 /* msa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = msa.c; sourceTree = "<group>"; };
|
||||
83FBD502235D31F700D35BCD /* riff_ogg_streamfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = riff_ogg_streamfile.h; sourceTree = "<group>"; };
|
||||
83FC176A23AC58D100E1025F /* xma_ue3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xma_ue3.c; sourceTree = "<group>"; };
|
||||
83FC176B23AC58D100E1025F /* csb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = csb.c; sourceTree = "<group>"; };
|
||||
|
@ -1940,7 +1934,6 @@
|
|||
8306B08E2098454E000302D4 /* blocked_adm.c */,
|
||||
8306B0882098454C000302D4 /* blocked_ast.c */,
|
||||
83AA5D1B1F6E2F7F0020821C /* blocked_awc.c */,
|
||||
8306B0872098454C000302D4 /* blocked_bdsp.c */,
|
||||
8306B0922098454E000302D4 /* blocked_caf.c */,
|
||||
8349A8E21FE6253800E26435 /* blocked_dec.c */,
|
||||
8349A8E31FE6253800E26435 /* blocked_ea_1snh.c */,
|
||||
|
@ -2001,8 +1994,8 @@
|
|||
836F6E2B18BDC2180095E648 /* acm.c */,
|
||||
83F2CCE125A5B41600F46FA8 /* acx.c */,
|
||||
836F46B12820874D005B9B87 /* adm3.c */,
|
||||
83D26A7626E66D98001A9475 /* adp_bos.c */,
|
||||
83AA7F7A2519C042004C5298 /* adp_konami.c */,
|
||||
83D26A7626E66D98001A9475 /* adp_wildfire.c */,
|
||||
834FE0CF215C79E8000A5D3D /* adpcm_capcom.c */,
|
||||
83852B0A2680247900378854 /* ads_midway.c */,
|
||||
836F6E8F18BDC2180095E648 /* ads.c */,
|
||||
|
@ -2033,6 +2026,7 @@
|
|||
83A16D2722D2ADE700B90C4C /* awb.c */,
|
||||
8306B0C32098458C000302D4 /* awc_xma_streamfile.h */,
|
||||
83AA5D201F6E2F9B0020821C /* awc.c */,
|
||||
83FBB1702A4FF4EC00CD0580 /* awd.c */,
|
||||
836F6E3618BDC2180095E648 /* baf.c */,
|
||||
8349A8F81FE6257E00E26435 /* bar_streamfile.h */,
|
||||
8349A9051FE6258100E26435 /* bar.c */,
|
||||
|
@ -2077,7 +2071,6 @@
|
|||
83AA7F742519C041004C5298 /* dsb.c */,
|
||||
8351F32C2212B57000A606E4 /* dsf.c */,
|
||||
83299FCF1E7660C7003A3242 /* dsp_adx.c */,
|
||||
836F6E4418BDC2180095E648 /* dsp_bdsp.c */,
|
||||
8349A8FF1FE6258000E26435 /* ea_1snh.c */,
|
||||
83AFABBA23795202002F3947 /* ea_eaac_opus_streamfile.h */,
|
||||
8306B0BD2098458B000302D4 /* ea_eaac_streamfile.h */,
|
||||
|
@ -2088,6 +2081,7 @@
|
|||
83EED5D1203A8BC7008BEB45 /* ea_swvr.c */,
|
||||
8306B0C42098458D000302D4 /* ea_wve_ad10.c */,
|
||||
8306B0BF2098458C000302D4 /* ea_wve_au00.c */,
|
||||
83FBB16F2A4FF4EC00CD0580 /* ego_dic.c */,
|
||||
83AF2CC826226BA500538240 /* encrypted_bgm_streamfile.h */,
|
||||
832FC36E278FAE3E0056A860 /* encrypted_mc161_streamfile.h */,
|
||||
83031ECE243C50DE00C3F3E0 /* encrypted.c */,
|
||||
|
@ -2133,6 +2127,7 @@
|
|||
8346D97425BF838C00D1A8B0 /* idtech.c */,
|
||||
8399335C2591E8C0001855AF /* ifs.c */,
|
||||
83C7280922BC893C00678B4A /* ikm.c */,
|
||||
836F6EA218BDC2180095E648 /* ild.c */,
|
||||
837CEAE623487F2B00E62A4A /* ima.c */,
|
||||
832BF81121E05149006F50F1 /* imc.c */,
|
||||
83F1EE2F245D4FC10076E182 /* imuse.c */,
|
||||
|
@ -2155,6 +2150,8 @@
|
|||
830EBE122004656E0023AA10 /* ktss.c */,
|
||||
8373342423F60CDB00DE14DC /* kwb.c */,
|
||||
835B9B8C2730BF2C00F87EE3 /* lopu_fb.c */,
|
||||
83A8BAE125667AA7000F5F3F /* lp_ap_lep_streamfile.h */,
|
||||
836F6E9918BDC2180095E648 /* lp_ap_lep.c */,
|
||||
839C3D22270D49FF00E13653 /* lpcm_fb.c */,
|
||||
835B9B8E2730BF2D00F87EE3 /* lpcm_shade.c */,
|
||||
8373341F23F60CDB00DE14DC /* lrmd_streamfile.h */,
|
||||
|
@ -2172,6 +2169,7 @@
|
|||
839FBFF926C354E70016A78A /* mp4_faac.c */,
|
||||
836F6E6018BDC2180095E648 /* mp4.c */,
|
||||
83FB238D27B14696003F3062 /* mpeg.c */,
|
||||
83FBB17E2A4FF94C00CD0580 /* msa.c */,
|
||||
8306B0CB2098458E000302D4 /* msb_msh.c */,
|
||||
832BF81721E0514A006F50F1 /* msf_banpresto.c */,
|
||||
83C7280D22BC893D00678B4A /* msf_konami.c */,
|
||||
|
@ -2198,7 +2196,6 @@
|
|||
830165991F256BD000CA0941 /* nds_strm_ffta2.c */,
|
||||
836F6E6B18BDC2180095E648 /* nds_strm.c */,
|
||||
836F6E6D18BDC2180095E648 /* ngc_adpdtk.c */,
|
||||
836F6E6E18BDC2180095E648 /* ngc_bh2pcm.c */,
|
||||
836F6E7118BDC2180095E648 /* ngc_dsp_konami.c */,
|
||||
836F6E7218BDC2180095E648 /* ngc_dsp_mpds.c */,
|
||||
836F6E7318BDC2180095E648 /* ngc_dsp_std.c */,
|
||||
|
@ -2211,8 +2208,6 @@
|
|||
836F6E7B18BDC2180095E648 /* ngc_ssm.c */,
|
||||
8306B0BE2098458C000302D4 /* ngc_str_cauldron.c */,
|
||||
836F6E7C18BDC2180095E648 /* ngc_tydsp.c */,
|
||||
831BD11F1EEE1CF200198540 /* ngc_ulw.c */,
|
||||
836F6E7E18BDC2180095E648 /* ngc_ymf.c */,
|
||||
83C727FC22BC893900678B4A /* nps.c */,
|
||||
837CEAE223487F2A00E62A4A /* nub.c */,
|
||||
832BF81B21E0514B006F50F1 /* nus3audio.c */,
|
||||
|
@ -2250,53 +2245,43 @@
|
|||
836F6E9418BDC2180095E648 /* ps2_b1s.c */,
|
||||
836F6E9518BDC2180095E648 /* ps2_bg00.c */,
|
||||
836F6E9618BDC2180095E648 /* ps2_bmdx.c */,
|
||||
83A8BAE125667AA7000F5F3F /* ps2_enth_streamfile.h */,
|
||||
836F6E9918BDC2180095E648 /* ps2_enth.c */,
|
||||
836F6E9B18BDC2180095E648 /* ps2_filp.c */,
|
||||
836F6E9C18BDC2180095E648 /* ps2_gbts.c */,
|
||||
836F6E9D18BDC2180095E648 /* ps2_gcm.c */,
|
||||
836F6E9E18BDC2180095E648 /* ps2_hgc1.c */,
|
||||
836F6E9F18BDC2180095E648 /* ps2_hsf.c */,
|
||||
836F6EA018BDC2180095E648 /* ps2_iab.c */,
|
||||
836F6EA218BDC2180095E648 /* ps2_ild.c */,
|
||||
836F6EA418BDC2180095E648 /* ps2_joe.c */,
|
||||
836F6EA618BDC2180095E648 /* ps2_kces.c */,
|
||||
836F6EA818BDC2180095E648 /* ps2_leg.c */,
|
||||
836F6EAA18BDC2180095E648 /* ps2_mcg.c */,
|
||||
836F6EAC18BDC2180095E648 /* ps2_mic.c */,
|
||||
836F6EAD18BDC2180095E648 /* ps2_mihb.c */,
|
||||
836F6EAE18BDC2180095E648 /* ps2_msa.c */,
|
||||
836F6EB218BDC2180095E648 /* ps2_p2bt.c */,
|
||||
8349A8F21FE6257D00E26435 /* ps2_pcm.c */,
|
||||
836F6EB318BDC2180095E648 /* ps2_pnb.c */,
|
||||
836F6EB618BDC2180095E648 /* ps2_rnd.c */,
|
||||
836F6EB718BDC2180095E648 /* ps2_rstm.c */,
|
||||
836F6EBB18BDC2180095E648 /* ps2_sl3.c */,
|
||||
836F6EBC18BDC2180095E648 /* ps2_smpl.c */,
|
||||
836F6EBD18BDC2180095E648 /* ps2_snd.c */,
|
||||
836F6EBF18BDC2190095E648 /* ps2_sps.c */,
|
||||
836F6EC518BDC2190095E648 /* ps2_tec.c */,
|
||||
836F6EC618BDC2190095E648 /* ps2_tk5.c */,
|
||||
832BF80D21E05148006F50F1 /* ps2_va3.c */,
|
||||
836F6EC818BDC2190095E648 /* ps2_vas.c */,
|
||||
836F6EC918BDC2190095E648 /* ps2_vbk.c */,
|
||||
831BA6101EAC61A500CF89B0 /* ps2_vds_vdm.c */,
|
||||
836F6ECB18BDC2190095E648 /* ps2_vgv.c */,
|
||||
836F6ECC18BDC2190095E648 /* ps2_vms.c */,
|
||||
836F6ECD18BDC2190095E648 /* ps2_voi.c */,
|
||||
836F6ECF18BDC2190095E648 /* ps2_wad.c */,
|
||||
836F6ED018BDC2190095E648 /* ps2_wb.c */,
|
||||
836F6ED118BDC2190095E648 /* ps2_wmus.c */,
|
||||
8349A8FC1FE6257F00E26435 /* ps2_xa2_rrp.c */,
|
||||
836F6ED218BDC2190095E648 /* ps2_xa2.c */,
|
||||
836F6ED318BDC2190095E648 /* ps2_xa30.c */,
|
||||
836F6ED918BDC2190095E648 /* ps3_past.c */,
|
||||
8315868326F586E200803A3A /* psb.c */,
|
||||
837CEAE823487F2B00E62A4A /* psf.c */,
|
||||
83FBB1742A4FF59E00CD0580 /* pwb.c */,
|
||||
83997F5722D9569E00633184 /* rad.c */,
|
||||
8322ECE6240268BA009E9429 /* raw_al.c */,
|
||||
837CEAED23487F2C00E62A4A /* raw_int.c */,
|
||||
837CEADD23487F2A00E62A4A /* raw_pcm.c */,
|
||||
836F6EE718BDC2190095E648 /* raw_rsf.c */,
|
||||
836F6EEA18BDC2190095E648 /* raw_s14_sss.c */,
|
||||
837CEAEA23487F2B00E62A4A /* raw_snds.c */,
|
||||
837CEAE723487F2B00E62A4A /* raw_wavm.c */,
|
||||
836F6EE218BDC2190095E648 /* redspark.c */,
|
||||
|
@ -2306,13 +2291,13 @@
|
|||
836F6EE418BDC2190095E648 /* rkv.c */,
|
||||
836F6EE518BDC2190095E648 /* rs03.c */,
|
||||
836F6EE618BDC2190095E648 /* rsd.c */,
|
||||
836F6EE718BDC2190095E648 /* rsf.c */,
|
||||
836F6EB818BDC2180095E648 /* rws.c */,
|
||||
83FBB1772A4FF71B00CD0580 /* rstm_rockstar.c */,
|
||||
836F6EE918BDC2190095E648 /* rwax.c */,
|
||||
836F6EB818BDC2180095E648 /* rws_80d.c */,
|
||||
83FBB1762A4FF71B00CD0580 /* rws_809.c */,
|
||||
836F6EE818BDC2190095E648 /* rwsd.c */,
|
||||
836F6EE918BDC2190095E648 /* rwx.c */,
|
||||
83852B092680247900378854 /* rxws.c */,
|
||||
8383A62B281203C50062E49E /* s3v.c */,
|
||||
836F6EEA18BDC2190095E648 /* s14_sss.c */,
|
||||
83AA7F772519C042004C5298 /* sab_streamfile.h */,
|
||||
8349A8F11FE6257D00E26435 /* sab.c */,
|
||||
83D20078248DDB770048BD24 /* sadf.c */,
|
||||
|
@ -2338,6 +2323,7 @@
|
|||
8306B0D32098458F000302D4 /* smc_smh.c */,
|
||||
837CEAEB23487F2B00E62A4A /* smk.c */,
|
||||
83F0AA5C21E2028B004BBC04 /* smp.c */,
|
||||
836F6EBC18BDC2180095E648 /* smpl.c */,
|
||||
8306B0C72098458D000302D4 /* smv.c */,
|
||||
835559FB2869102B005FE93A /* sndz.c */,
|
||||
836F6EBE18BDC2190095E648 /* spm.c */,
|
||||
|
@ -2354,10 +2340,11 @@
|
|||
8317C24826982CC1007DD0B8 /* sspr.c */,
|
||||
836F6EBA18BDC2180095E648 /* ster.c */,
|
||||
8306B0C12098458C000302D4 /* sthd.c */,
|
||||
83AA5D231F6E2F9C0020821C /* stm.c */,
|
||||
83AA5D231F6E2F9C0020821C /* stma.c */,
|
||||
836F6EF718BDC2190095E648 /* str_snds.c */,
|
||||
834FE0C2215C79E6000A5D3D /* str_wav.c */,
|
||||
83C7280722BC893B00678B4A /* strm_abylight.c */,
|
||||
836F6F0618BDC2190095E648 /* sts.c */,
|
||||
83AA7F752519C041004C5298 /* svag_kcet.c */,
|
||||
83AA7F7B2519C042004C5298 /* svag_snk.c */,
|
||||
834FE0D7215C79EA000A5D3D /* svg.c */,
|
||||
|
@ -2393,6 +2380,7 @@
|
|||
836F6EFD18BDC2190095E648 /* vgs.c */,
|
||||
83031ED7243C510400C3F3E0 /* vid1.c */,
|
||||
834FE0CE215C79E8000A5D3D /* vis.c */,
|
||||
836F6ECD18BDC2190095E648 /* voi.c */,
|
||||
834FE0D4215C79E9000A5D3D /* vpk.c */,
|
||||
832BF81821E0514A006F50F1 /* vs_square.c */,
|
||||
832BF81021E05149006F50F1 /* vs_str.c */,
|
||||
|
@ -2412,7 +2400,6 @@
|
|||
836F6F0118BDC2190095E648 /* wii_mus.c */,
|
||||
836F6F0218BDC2190095E648 /* wii_ras.c */,
|
||||
836F6F0418BDC2190095E648 /* wii_sng.c */,
|
||||
836F6F0618BDC2190095E648 /* wii_sts.c */,
|
||||
836F6F0718BDC2190095E648 /* wpd.c */,
|
||||
836F6F0818BDC2190095E648 /* ws_aud.c */,
|
||||
834FE0CB215C79E8000A5D3D /* wsi.c */,
|
||||
|
@ -2424,6 +2411,7 @@
|
|||
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 */,
|
||||
|
@ -2454,6 +2442,7 @@
|
|||
832BF81621E0514A006F50F1 /* xwma.c */,
|
||||
837CEAE323487F2A00E62A4A /* xwv_valve.c */,
|
||||
836F6F1418BDC2190095E648 /* ydsp.c */,
|
||||
836F6E7E18BDC2180095E648 /* ymf.c */,
|
||||
836F6F1518BDC2190095E648 /* zsd.c */,
|
||||
832BF80E21E05149006F50F1 /* zsnd_streamfile.h */,
|
||||
832BF80F21E05149006F50F1 /* zsnd.c */,
|
||||
|
@ -2504,6 +2493,8 @@
|
|||
833E82F52A2858EF00CD0580 /* reader.c */,
|
||||
833E82CD2A2856B200CD0580 /* samples_ops.c */,
|
||||
833E82CE2A2856B200CD0580 /* samples_ops.h */,
|
||||
83FBB17B2A4FF87200CD0580 /* sf_utils.c */,
|
||||
83FBB17A2A4FF87200CD0580 /* sf_utils.h */,
|
||||
8339B324280FDF4B0076F74B /* text_reader.c */,
|
||||
8339B325280FDF4B0076F74B /* text_reader.h */,
|
||||
);
|
||||
|
@ -2565,6 +2556,7 @@
|
|||
836F46B8282087A6005B9B87 /* cri_utf.h in Headers */,
|
||||
83A21F87201D8981000F04B9 /* fsb_keys.h in Headers */,
|
||||
83E7FD6325EF2B0C00683FD2 /* tac_decoder_lib_data.h in Headers */,
|
||||
83FBB17C2A4FF87200CD0580 /* sf_utils.h in Headers */,
|
||||
832FC36C278FA4CB0056A860 /* ubi_ckd_cwav_streamfile.h in Headers */,
|
||||
83E7FD6125EF2B0C00683FD2 /* tac_decoder_lib.h in Headers */,
|
||||
834FE0EC215C79ED000A5D3D /* kma9_streamfile.h in Headers */,
|
||||
|
@ -2645,7 +2637,7 @@
|
|||
836F6F9A18BDC2190095E648 /* meta.h in Headers */,
|
||||
8319017B28F67EE100B70711 /* miniz.h in Headers */,
|
||||
833E82FA2A28595A00CD0580 /* bitstream_lsb.h in Headers */,
|
||||
83A8BAE625667AA8000F5F3F /* ps2_enth_streamfile.h in Headers */,
|
||||
83A8BAE625667AA8000F5F3F /* lp_ap_lep_streamfile.h in Headers */,
|
||||
83256CE428666C620036D9C0 /* abi_align.h in Headers */,
|
||||
8306B0D820984590000302D4 /* ea_eaac_streamfile.h in Headers */,
|
||||
837CEB0523487F2C00E62A4A /* sqex_streamfile.h in Headers */,
|
||||
|
@ -2848,10 +2840,9 @@
|
|||
8349A8DF1FE6251F00E26435 /* vorbis_custom_utils_vid1.c in Sources */,
|
||||
83A21F8D201D8982000F04B9 /* sqex_sead.c in Sources */,
|
||||
83EED5D3203A8BC7008BEB45 /* ea_swvr.c in Sources */,
|
||||
839B54521EEE1D9600048A2D /* ngc_ulw.c in Sources */,
|
||||
8306B0EE20984590000302D4 /* smc_smh.c in Sources */,
|
||||
836F6FAD18BDC2190095E648 /* ngc_dsp_konami.c in Sources */,
|
||||
836F6FF818BDC2190095E648 /* ps2_smpl.c in Sources */,
|
||||
836F6FF818BDC2190095E648 /* smpl.c in Sources */,
|
||||
83D1189328B2F33400AF3370 /* vab.c in Sources */,
|
||||
836F703818BDC2190095E648 /* ubi_ckd.c in Sources */,
|
||||
8373341B23F60C7B00DE14DC /* g7221_decoder_lib.c in Sources */,
|
||||
|
@ -2866,10 +2857,11 @@
|
|||
836F6F7D18BDC2190095E648 /* dc_str.c in Sources */,
|
||||
83A5F75F198DF021009AF94C /* bfwav.c in Sources */,
|
||||
8373341723F60C7B00DE14DC /* g7221_decoder_aes.c in Sources */,
|
||||
83FBB1792A4FF71B00CD0580 /* rstm_rockstar.c in Sources */,
|
||||
8339B326280FDF4B0076F74B /* text_reader.c in Sources */,
|
||||
836F702018BDC2190095E648 /* rkv.c in Sources */,
|
||||
834FE0F4215C79ED000A5D3D /* wsi.c in Sources */,
|
||||
83D26A7A26E66D98001A9475 /* adp_bos.c in Sources */,
|
||||
83D26A7A26E66D98001A9475 /* adp_wildfire.c in Sources */,
|
||||
836F703218BDC2190095E648 /* knon.c in Sources */,
|
||||
837CEB0223487F2C00E62A4A /* raw_int.c in Sources */,
|
||||
836F702818BDC2190095E648 /* sat_dvi.c in Sources */,
|
||||
|
@ -2903,7 +2895,7 @@
|
|||
8306B0B320984552000302D4 /* blocked_thp.c in Sources */,
|
||||
832BF80921E05135006F50F1 /* fag.c in Sources */,
|
||||
834FE0B6215C798C000A5D3D /* derf_decoder.c in Sources */,
|
||||
836F702318BDC2190095E648 /* rsf.c in Sources */,
|
||||
836F702318BDC2190095E648 /* raw_rsf.c in Sources */,
|
||||
834FE109215C79ED000A5D3D /* idsp_ie.c in Sources */,
|
||||
83299FD01E7660C7003A3242 /* bik.c in Sources */,
|
||||
8346D97C25BF838C00D1A8B0 /* mjb_mjh.c in Sources */,
|
||||
|
@ -2926,7 +2918,6 @@
|
|||
836F6F8D18BDC2190095E648 /* gsp_gsb.c in Sources */,
|
||||
836F704518BDC2190095E648 /* wvs.c in Sources */,
|
||||
839FBFFB26C354E70016A78A /* wxd_wxh.c in Sources */,
|
||||
8322ECE7240268BB009E9429 /* raw_al.c in Sources */,
|
||||
83EDE5D91A70951A005F5D84 /* btsnd.c in Sources */,
|
||||
8306B0E420984590000302D4 /* wave.c in Sources */,
|
||||
8349A9171FE6258200E26435 /* pc_adp_otns.c in Sources */,
|
||||
|
@ -2948,6 +2939,7 @@
|
|||
83C7281922BC893D00678B4A /* fsb5_fev.c in Sources */,
|
||||
8349A8EA1FE6253900E26435 /* blocked_ea_schl.c in Sources */,
|
||||
836F705118BDC2190095E648 /* zsd.c in Sources */,
|
||||
83FBB17D2A4FF87200CD0580 /* sf_utils.c in Sources */,
|
||||
8349A91F1FE6258200E26435 /* naac.c in Sources */,
|
||||
83AFABBE23795202002F3947 /* isb.c in Sources */,
|
||||
836F6FD218BDC2190095E648 /* ps2_bmdx.c in Sources */,
|
||||
|
@ -2964,7 +2956,6 @@
|
|||
836F6F6E18BDC2190095E648 /* aix.c in Sources */,
|
||||
836F6F8718BDC2190095E648 /* ffw.c in Sources */,
|
||||
8349A9141FE6258200E26435 /* omu.c in Sources */,
|
||||
836F6FE418BDC2190095E648 /* ps2_leg.c in Sources */,
|
||||
833E82E32A2857F700CD0580 /* render.c in Sources */,
|
||||
836F705618BDC2190095E648 /* util.c in Sources */,
|
||||
8306B0A820984552000302D4 /* blocked_ps2_iab.c in Sources */,
|
||||
|
@ -3028,6 +3019,7 @@
|
|||
8319017C28F67EE100B70711 /* miniz.c in Sources */,
|
||||
8346D97B25BF838C00D1A8B0 /* ktac.c in Sources */,
|
||||
8349A8ED1FE6253900E26435 /* blocked_ea_sns.c in Sources */,
|
||||
83FBB1782A4FF71B00CD0580 /* rws_809.c in Sources */,
|
||||
830595D8277EEAA500EBFAAE /* ffmpeg_decoder_custom_mp4.c in Sources */,
|
||||
836F6F6F18BDC2190095E648 /* akb.c in Sources */,
|
||||
83EED5D6203A8BD7008BEB45 /* blocked_ea_swvr.c in Sources */,
|
||||
|
@ -3046,7 +3038,6 @@
|
|||
834FE0E9215C79ED000A5D3D /* ao.c in Sources */,
|
||||
836F6FE218BDC2190095E648 /* ps2_kces.c in Sources */,
|
||||
8306B08520984518000302D4 /* yamaha_decoder.c in Sources */,
|
||||
836F6FEF18BDC2190095E648 /* ps2_pnb.c in Sources */,
|
||||
836F6FCB18BDC2190095E648 /* ads.c in Sources */,
|
||||
834FE108215C79ED000A5D3D /* hd3_bd3.c in Sources */,
|
||||
83C7281C22BC893D00678B4A /* sfh.c in Sources */,
|
||||
|
@ -3065,7 +3056,6 @@
|
|||
836F46AE28208735005B9B87 /* blocked_tt_ad.c in Sources */,
|
||||
836F6FF918BDC2190095E648 /* ps2_snd.c in Sources */,
|
||||
836F6F2918BDC2190095E648 /* l5_555_decoder.c in Sources */,
|
||||
836F6FF318BDC2190095E648 /* ps2_rstm.c in Sources */,
|
||||
8373342923F60CDC00DE14DC /* deblock_streamfile.c in Sources */,
|
||||
836F6F7918BDC2190095E648 /* dc_asd.c in Sources */,
|
||||
836F703B18BDC2190095E648 /* vsf.c in Sources */,
|
||||
|
@ -3078,7 +3068,7 @@
|
|||
8350C0551E071881009E0A93 /* xma.c in Sources */,
|
||||
837CEAF523487F2C00E62A4A /* ubi_hx.c in Sources */,
|
||||
836F6F3218BDC2190095E648 /* ngc_dsp_decoder.c in Sources */,
|
||||
836F704218BDC2190095E648 /* wii_sts.c in Sources */,
|
||||
836F704218BDC2190095E648 /* sts.c in Sources */,
|
||||
83C7281722BC893D00678B4A /* mtaf.c in Sources */,
|
||||
836F703918BDC2190095E648 /* vgs.c in Sources */,
|
||||
834FE0F8215C79ED000A5D3D /* adpcm_capcom.c in Sources */,
|
||||
|
@ -3093,21 +3083,21 @@
|
|||
836F702B18BDC2190095E648 /* sdt.c in Sources */,
|
||||
836F6FDA18BDC2190095E648 /* ps2_hgc1.c in Sources */,
|
||||
836F702C18BDC2190095E648 /* seg.c in Sources */,
|
||||
836F700918BDC2190095E648 /* ps2_voi.c in Sources */,
|
||||
836F700918BDC2190095E648 /* voi.c in Sources */,
|
||||
836F6FE018BDC2190095E648 /* ps2_joe.c in Sources */,
|
||||
832BF82721E0514B006F50F1 /* xa.c in Sources */,
|
||||
837CEAD823487E8300E62A4A /* bmp_konami.c in Sources */,
|
||||
8306B0A220984552000302D4 /* blocked_bdsp.c in Sources */,
|
||||
836F700118BDC2190095E648 /* ps2_tec.c in Sources */,
|
||||
8373341C23F60C7B00DE14DC /* relic_decoder.c in Sources */,
|
||||
832BF82121E0514B006F50F1 /* zsnd.c in Sources */,
|
||||
836F703018BDC2190095E648 /* sqex_scd.c in Sources */,
|
||||
8306B0A320984552000302D4 /* blocked_ast.c in Sources */,
|
||||
836F6FD518BDC2190095E648 /* ps2_enth.c in Sources */,
|
||||
836F6FD518BDC2190095E648 /* lp_ap_lep.c in Sources */,
|
||||
8306B0DC20984590000302D4 /* sthd.c in Sources */,
|
||||
836F6FAE18BDC2190095E648 /* ngc_dsp_mpds.c in Sources */,
|
||||
8315958720FEC832007002F0 /* asf_decoder.c in Sources */,
|
||||
836F705218BDC2190095E648 /* zwdsp.c in Sources */,
|
||||
83FBB1722A4FF4EC00CD0580 /* ego_dic.c in Sources */,
|
||||
836F6FFB18BDC2190095E648 /* ps2_sps.c in Sources */,
|
||||
836F6F2018BDC2190095E648 /* adx_decoder.c in Sources */,
|
||||
834FE0EA215C79ED000A5D3D /* aif_asobo.c in Sources */,
|
||||
|
@ -3124,14 +3114,14 @@
|
|||
8349A90D1FE6258200E26435 /* ubi_sb.c in Sources */,
|
||||
83C7281D22BC893D00678B4A /* ikm.c in Sources */,
|
||||
834FE0BB215C798C000A5D3D /* celt_fsb_decoder.c in Sources */,
|
||||
836F702518BDC2190095E648 /* rwx.c in Sources */,
|
||||
836F702518BDC2190095E648 /* rwax.c in Sources */,
|
||||
836F6F3A18BDC2190095E648 /* sdx2_decoder.c in Sources */,
|
||||
83FBB1752A4FF59E00CD0580 /* pwb.c in Sources */,
|
||||
836F6FAF18BDC2190095E648 /* ngc_dsp_std.c in Sources */,
|
||||
836F6F7118BDC2190095E648 /* ast.c in Sources */,
|
||||
834FE0BF215C79A9000A5D3D /* flat.c in Sources */,
|
||||
83AA7F7D2519C042004C5298 /* dsb.c in Sources */,
|
||||
836F6F6B18BDC2190095E648 /* agsc.c in Sources */,
|
||||
836F700E18BDC2190095E648 /* ps2_xa2.c in Sources */,
|
||||
837CEB0023487F2C00E62A4A /* smk.c in Sources */,
|
||||
83C7281022BC893D00678B4A /* nps.c in Sources */,
|
||||
83E7FD6025EF2B0C00683FD2 /* tac_decoder_lib.c in Sources */,
|
||||
|
@ -3163,8 +3153,7 @@
|
|||
8373342B23F60CDC00DE14DC /* fwse.c in Sources */,
|
||||
837CEAFF23487F2C00E62A4A /* raw_snds.c in Sources */,
|
||||
83031EDC243C510500C3F3E0 /* vid1.c in Sources */,
|
||||
836F700218BDC2190095E648 /* ps2_tk5.c in Sources */,
|
||||
83AA5D271F6E2F9C0020821C /* stm.c in Sources */,
|
||||
83AA5D271F6E2F9C0020821C /* stma.c in Sources */,
|
||||
831BA61D1EAC61A500CF89B0 /* ubi_raki.c in Sources */,
|
||||
8306B0A520984552000302D4 /* blocked_ea_wve_au00.c in Sources */,
|
||||
836F6FB818BDC2190095E648 /* ngc_tydsp.c in Sources */,
|
||||
|
@ -3205,7 +3194,6 @@
|
|||
836F700D18BDC2190095E648 /* ps2_wmus.c in Sources */,
|
||||
83031EC8243C50A800C3F3E0 /* circus_decoder_lib.c in Sources */,
|
||||
831BA61C1EAC61A500CF89B0 /* sxd.c in Sources */,
|
||||
836F6F8018BDC2190095E648 /* dsp_bdsp.c in Sources */,
|
||||
836F6F9618BDC2190095E648 /* lsf.c in Sources */,
|
||||
8306B0AB20984552000302D4 /* layered.c in Sources */,
|
||||
833E82E92A2857F700CD0580 /* mixing.c in Sources */,
|
||||
|
@ -3258,7 +3246,7 @@
|
|||
837CEAFA23487F2C00E62A4A /* xa_04sw.c in Sources */,
|
||||
836F6F8618BDC2190095E648 /* excitebots.c in Sources */,
|
||||
8385D4E6245174C700FF8E67 /* diva.c in Sources */,
|
||||
836F6FF418BDC2190095E648 /* rws.c in Sources */,
|
||||
836F6FF418BDC2190095E648 /* rws_80d.c in Sources */,
|
||||
834FE100215C79ED000A5D3D /* svg.c in Sources */,
|
||||
833E82D22A2856B200CD0580 /* reader_put.c in Sources */,
|
||||
836F6F2518BDC2190095E648 /* g721_decoder.c in Sources */,
|
||||
|
@ -3268,12 +3256,13 @@
|
|||
8317C24C26982CC1007DD0B8 /* sspr.c in Sources */,
|
||||
832BF82521E0514B006F50F1 /* ogg_opus.c in Sources */,
|
||||
83709E091ECBC1A4005C03D3 /* aac_triace.c in Sources */,
|
||||
83FBB1732A4FF4EC00CD0580 /* awd.c in Sources */,
|
||||
836F6F9118BDC2190095E648 /* ios_psnd.c in Sources */,
|
||||
836F700618BDC2190095E648 /* vgs_ps.c in Sources */,
|
||||
834FE10F215C79ED000A5D3D /* sdf.c in Sources */,
|
||||
834FE0FF215C79ED000A5D3D /* sscf.c in Sources */,
|
||||
8373341A23F60C7B00DE14DC /* relic_decoder_mixfft.c in Sources */,
|
||||
836F6FAA18BDC2190095E648 /* ngc_bh2pcm.c in Sources */,
|
||||
83FBB1712A4FF4EC00CD0580 /* xa2_acclaim.c in Sources */,
|
||||
831BA6211EAC61A500CF89B0 /* pasx.c in Sources */,
|
||||
832BF82621E0514B006F50F1 /* nwav.c in Sources */,
|
||||
836F6F3018BDC2190095E648 /* nds_procyon_decoder.c in Sources */,
|
||||
|
@ -3299,7 +3288,8 @@
|
|||
836DF627298F864100CD0580 /* cps.c in Sources */,
|
||||
8319018128F67F1500B70711 /* ice_decoder_icelib.c in Sources */,
|
||||
836F6FEE18BDC2190095E648 /* ps2_p2bt.c in Sources */,
|
||||
836F702618BDC2190095E648 /* s14_sss.c in Sources */,
|
||||
83FBB17F2A4FF94C00CD0580 /* msa.c in Sources */,
|
||||
836F702618BDC2190095E648 /* raw_s14_sss.c in Sources */,
|
||||
834FE102215C79ED000A5D3D /* rfrm.c in Sources */,
|
||||
835B9B8F2730BF2D00F87EE3 /* ast_mv.c in Sources */,
|
||||
83AA5D1D1F6E2F800020821C /* blocked_vgs.c in Sources */,
|
||||
|
@ -3307,10 +3297,9 @@
|
|||
8339B323280FDF250076F74B /* sspf.c in Sources */,
|
||||
833E82D32A2856B200CD0580 /* samples_ops.c in Sources */,
|
||||
83AA7F822519C042004C5298 /* ktsc.c in Sources */,
|
||||
836F6FDE18BDC2190095E648 /* ps2_ild.c in Sources */,
|
||||
836F6FDE18BDC2190095E648 /* ild.c in Sources */,
|
||||
836F703E18BDC2190095E648 /* wii_ras.c in Sources */,
|
||||
834FE0EE215C79ED000A5D3D /* ue4opus.c in Sources */,
|
||||
836F6FEA18BDC2190095E648 /* ps2_msa.c in Sources */,
|
||||
836F6F3618BDC2190095E648 /* ogg_vorbis_decoder.c in Sources */,
|
||||
8306B0E520984590000302D4 /* ubi_lyn.c in Sources */,
|
||||
83D2007D248DDB770048BD24 /* kat.c in Sources */,
|
||||
|
@ -3365,12 +3354,11 @@
|
|||
836F6F9218BDC2190095E648 /* ish_isd.c in Sources */,
|
||||
833E82F12A28587D00CD0580 /* paths.c in Sources */,
|
||||
836F6F2A18BDC2190095E648 /* lsf_decoder.c in Sources */,
|
||||
8349A9151FE6258200E26435 /* ps2_xa2_rrp.c in Sources */,
|
||||
836F703518BDC2190095E648 /* svs.c in Sources */,
|
||||
836F6FA318BDC2190095E648 /* spsd.c in Sources */,
|
||||
8306B0B920984552000302D4 /* blocked_matx.c in Sources */,
|
||||
83A21F7B201D895B000F04B9 /* blocked_xvag.c in Sources */,
|
||||
836F6FBA18BDC2190095E648 /* ngc_ymf.c in Sources */,
|
||||
836F6FBA18BDC2190095E648 /* ymf.c in Sources */,
|
||||
83F1EE2E245D4FB20076E182 /* vadpcm_decoder.c in Sources */,
|
||||
836F705018BDC2190095E648 /* ydsp.c in Sources */,
|
||||
83D2007E248DDB770048BD24 /* pcm_success.c in Sources */,
|
||||
|
|
|
@ -449,7 +449,7 @@ int decode_get_samples_per_frame(VGMSTREAM* vgmstream) {
|
|||
return 28;
|
||||
case coding_PSX_cfg:
|
||||
case coding_PSX_pivotal:
|
||||
return (vgmstream->interleave_block_size - 0x01) * 2; /* size 0x01 header */
|
||||
return (vgmstream->frame_size - 0x01) * 2; /* size 0x01 header */
|
||||
|
||||
case coding_EA_XA:
|
||||
case coding_EA_XA_int:
|
||||
|
@ -669,7 +669,7 @@ int decode_get_frame_size(VGMSTREAM* vgmstream) {
|
|||
return 0x10;
|
||||
case coding_PSX_cfg:
|
||||
case coding_PSX_pivotal:
|
||||
return vgmstream->interleave_block_size;
|
||||
return vgmstream->frame_size;
|
||||
|
||||
case coding_EA_XA:
|
||||
return 0x1E;
|
||||
|
@ -998,14 +998,14 @@ void decode_vgmstream(VGMSTREAM* vgmstream, int samples_written, int samples_to_
|
|||
for (ch = 0; ch < vgmstream->channels; ch++) {
|
||||
decode_psx_configurable(&vgmstream->ch[ch], buffer+ch,
|
||||
vgmstream->channels, vgmstream->samples_into_block, samples_to_do,
|
||||
vgmstream->interleave_block_size, vgmstream->codec_config);
|
||||
vgmstream->frame_size, vgmstream->codec_config);
|
||||
}
|
||||
break;
|
||||
case coding_PSX_pivotal:
|
||||
for (ch = 0; ch < vgmstream->channels; ch++) {
|
||||
decode_psx_pivotal(&vgmstream->ch[ch], buffer+ch,
|
||||
vgmstream->channels, vgmstream->samples_into_block, samples_to_do,
|
||||
vgmstream->interleave_block_size);
|
||||
vgmstream->frame_size);
|
||||
}
|
||||
break;
|
||||
case coding_HEVAG:
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#include "../coding/coding.h"
|
||||
#include "mixing.h"
|
||||
#include "../util/channel_mappings.h"
|
||||
|
||||
#include "../util/sf_utils.h"
|
||||
|
||||
/*******************************************************************************/
|
||||
/* TEXT */
|
||||
|
|
|
@ -285,7 +285,6 @@ int render_layout(sample_t* buf, int32_t sample_count, VGMSTREAM* vgmstream) {
|
|||
case layout_blocked_ivaud:
|
||||
case layout_blocked_ea_swvr:
|
||||
case layout_blocked_adm:
|
||||
case layout_blocked_bdsp:
|
||||
case layout_blocked_ps2_iab:
|
||||
case layout_blocked_vs_str:
|
||||
case layout_blocked_rws:
|
||||
|
|
|
@ -213,7 +213,7 @@ static int lzxpcm_decompress(lzxpcm_stream_t* strm) {
|
|||
default:
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
buffer_end:
|
||||
strm->next_out += dst_pos;
|
||||
|
@ -232,65 +232,65 @@ fail:
|
|||
#if 0
|
||||
/* non-streamed form that XPCM originally uses, assumes buffers are big enough */
|
||||
static int lzxpcm_decompress_full(uint8_t* dst, size_t dst_size, const uint8_t* src, size_t src_size) {
|
||||
int src_pos = 0;
|
||||
int dst_pos = 0;
|
||||
uint32_t flags = 0;
|
||||
int src_pos = 0;
|
||||
int dst_pos = 0;
|
||||
uint32_t flags = 0;
|
||||
|
||||
|
||||
while (src_pos < src_size && dst_pos < dst_size) {
|
||||
flags >>= 1;
|
||||
while (src_pos < src_size && dst_pos < dst_size) {
|
||||
flags >>= 1;
|
||||
|
||||
if ((flags & 0x0100) == 0) {
|
||||
flags = 0xFF00 | src[src_pos++];
|
||||
}
|
||||
|
||||
if (flags & 1) {
|
||||
if ((flags & 0x0100) == 0) {
|
||||
flags = 0xFF00 | src[src_pos++];
|
||||
}
|
||||
|
||||
if (flags & 1) {
|
||||
/* uncompressed byte per bit */
|
||||
dst[dst_pos++] = src[src_pos++];
|
||||
}
|
||||
else {
|
||||
dst[dst_pos++] = src[src_pos++];
|
||||
}
|
||||
else {
|
||||
/* compressed data */
|
||||
uint32_t length;
|
||||
uint32_t offset;
|
||||
const uint32_t token = src[src_pos++];
|
||||
uint32_t length;
|
||||
uint32_t offset;
|
||||
const uint32_t token = src[src_pos++];
|
||||
|
||||
if (token >= 0xC0) {
|
||||
length = ((token >> 2) & 0x0F) + 4; /* 6b */
|
||||
if (token >= 0xC0) {
|
||||
length = ((token >> 2) & 0x0F) + 4; /* 6b */
|
||||
|
||||
offset = ((token & 3) << 8) | src[src_pos++]; /* upper 2b + lower 8b */
|
||||
}
|
||||
else if (token >= 0x80) {
|
||||
length = ((token >> 5) & 3) + 2; /* 2b */
|
||||
offset = ((token & 3) << 8) | src[src_pos++]; /* upper 2b + lower 8b */
|
||||
}
|
||||
else if (token >= 0x80) {
|
||||
length = ((token >> 5) & 3) + 2; /* 2b */
|
||||
|
||||
offset = token & 0x1F; /* 5b */
|
||||
if (offset == 0) {
|
||||
offset = src[src_pos++];
|
||||
}
|
||||
}
|
||||
else if (token == 0x7F) {
|
||||
length = (uint16_t)(src[src_pos] | src[src_pos+1] << 8u) + 2;
|
||||
src_pos += 2;
|
||||
offset = token & 0x1F; /* 5b */
|
||||
if (offset == 0) {
|
||||
offset = src[src_pos++];
|
||||
}
|
||||
}
|
||||
else if (token == 0x7F) {
|
||||
length = (uint16_t)(src[src_pos] | src[src_pos+1] << 8u) + 2;
|
||||
src_pos += 2;
|
||||
|
||||
offset = (uint16_t)(src[src_pos] | src[src_pos+1] << 8u);
|
||||
src_pos += 2;
|
||||
}
|
||||
else {
|
||||
length = token + 4;
|
||||
offset = (uint16_t)(src[src_pos] | src[src_pos+1] << 8u);
|
||||
src_pos += 2;
|
||||
}
|
||||
else {
|
||||
length = token + 4;
|
||||
|
||||
offset = (uint16_t)(src[src_pos] | src[src_pos+1] << 8u);
|
||||
src_pos += 2;
|
||||
}
|
||||
offset = (uint16_t)(src[src_pos] | src[src_pos+1] << 8u);
|
||||
src_pos += 2;
|
||||
}
|
||||
|
||||
if (dst_pos + length > dst_size) {
|
||||
length = dst_size - dst_pos;
|
||||
}
|
||||
if (dst_pos + length > dst_size) {
|
||||
length = dst_size - dst_pos;
|
||||
}
|
||||
|
||||
for (int i = 0; i < length; i++) {
|
||||
dst[dst_pos] = dst[dst_pos - offset];
|
||||
dst_pos++;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < length; i++) {
|
||||
dst[dst_pos] = dst[dst_pos - offset];
|
||||
dst_pos++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -61,10 +61,9 @@ static const char* extension_list[] = {
|
|||
//"aiff", //common
|
||||
"aix",
|
||||
"akb",
|
||||
"al",
|
||||
"al2",
|
||||
"al", //txth/raw [Dominions 3 - The Awakening (PC)]
|
||||
"al2", //txth/raw [Conquest of Elysium 3 (PC)]
|
||||
"ams", //txth/reserved [Super Dragon Ball Z (PS2) ELF names]
|
||||
"amts", //fake extension/header id for .stm (renamed? to be removed?)
|
||||
"an2",
|
||||
"ao",
|
||||
"ap",
|
||||
|
@ -90,6 +89,7 @@ static const char* extension_list[] = {
|
|||
"awa", //txth/reserved [Missing Parts Side A (PS2)]
|
||||
"awb",
|
||||
"awc",
|
||||
"awd",
|
||||
|
||||
"b1s",
|
||||
"baf",
|
||||
|
@ -99,14 +99,11 @@ static const char* extension_list[] = {
|
|||
"bcstm",
|
||||
"bcwav",
|
||||
"bcv", //txth/reserved [The Bigs (PSP)]
|
||||
"bd3",
|
||||
"bdsp",
|
||||
"bfstm",
|
||||
"bfwav",
|
||||
"bg00",
|
||||
"bgm",
|
||||
"bgw",
|
||||
"bh2pcm",
|
||||
"bigrp",
|
||||
"bik",
|
||||
"bika", //fake extension for .bik (to be removed)
|
||||
|
@ -163,6 +160,7 @@ static const char* extension_list[] = {
|
|||
"ddsp",
|
||||
"de2",
|
||||
"dec",
|
||||
"dic",
|
||||
"diva",
|
||||
"dmsg", //fake extension/header id for .sgt (to be removed)
|
||||
"ds2", //txth/reserved [Star Wars Bounty Hunter (GC)]
|
||||
|
@ -216,7 +214,9 @@ static const char* extension_list[] = {
|
|||
"h4m",
|
||||
"hab",
|
||||
"hca",
|
||||
"hd3",
|
||||
"hdr",
|
||||
"hdt",
|
||||
"hgc1",
|
||||
"his",
|
||||
"hps",
|
||||
|
@ -230,6 +230,8 @@ static const char* extension_list[] = {
|
|||
"hxg",
|
||||
"hxx",
|
||||
"hwas",
|
||||
"hwb",
|
||||
"hwd",
|
||||
|
||||
"iab",
|
||||
"iadp",
|
||||
|
@ -246,6 +248,7 @@ static const char* extension_list[] = {
|
|||
"ilv", //txth/reserved [Star Wars Episode III (PS2)]
|
||||
"ima",
|
||||
"imc",
|
||||
"imf",
|
||||
"imx",
|
||||
"int",
|
||||
"is14",
|
||||
|
@ -289,6 +292,7 @@ static const char* extension_list[] = {
|
|||
"lasf", //fake extension for .asf (various)
|
||||
"lbin", //fake extension for .bin (various)
|
||||
"ldat", //fake extension for .dat
|
||||
"ldt",
|
||||
"leg",
|
||||
"lep",
|
||||
"lflac", //fake extension for .flac, FFmpeg/not parsed
|
||||
|
@ -311,11 +315,12 @@ static const char* extension_list[] = {
|
|||
"lpcm",
|
||||
"lpk",
|
||||
"lps",
|
||||
"lrmb",
|
||||
"lrmh",
|
||||
"lse",
|
||||
"lsf",
|
||||
"lstm", //fake extension for .stm
|
||||
"lwav", //fake extension for .wav
|
||||
"lwd",
|
||||
"lwma", //fake extension for .wma, FFmpeg/not parsed
|
||||
|
||||
"mab",
|
||||
|
@ -338,6 +343,7 @@ static const char* extension_list[] = {
|
|||
"mogg",
|
||||
//"m4a", //common
|
||||
//"m4v", //common
|
||||
//"mov", //common
|
||||
//"mp+", //common [Moonshine Runners (PC)]
|
||||
//"mp2", //common
|
||||
//"mp3", //common
|
||||
|
@ -398,7 +404,7 @@ static const char* extension_list[] = {
|
|||
"opusx",
|
||||
"otm",
|
||||
"oto", //txth/reserved [Vampire Savior (SAT)]
|
||||
"ovb",
|
||||
"ovb", //txth/semi [namCollection: Tekken (PS2), Tekken 5: Tekken 1-3 (PS2)]
|
||||
|
||||
"p04", //txth/reserved [Psychic Force 2012 (DC), Skies of Arcadia (DC)]
|
||||
"p16", //txth/reserved [Astal (SAT)]
|
||||
|
@ -410,15 +416,14 @@ static const char* extension_list[] = {
|
|||
"pcm",
|
||||
"pdt",
|
||||
"pk",
|
||||
"pnb",
|
||||
"pona",
|
||||
"pos",
|
||||
"ps3",
|
||||
"ps2stm", //fake extension for .stm (renamed? to be removed?)
|
||||
"psb",
|
||||
"psf",
|
||||
"psh", //fake extension for .vsv (to be removed)
|
||||
"psnd",
|
||||
"pwb",
|
||||
|
||||
"r",
|
||||
"rac", //txth/reserved [Manhunt (Xbox)]
|
||||
|
@ -502,7 +507,6 @@ static const char* extension_list[] = {
|
|||
"smc",
|
||||
"smk",
|
||||
"smp",
|
||||
"smpl", //fake extension/header id for .v0/v1 (renamed, to be removed)
|
||||
"smv",
|
||||
"snb",
|
||||
"snd",
|
||||
|
@ -529,7 +533,6 @@ static const char* extension_list[] = {
|
|||
"ster",
|
||||
"sth",
|
||||
"stm",
|
||||
"stma", //fake extension/header id for .stm
|
||||
"str",
|
||||
"stream",
|
||||
"strm",
|
||||
|
@ -556,9 +559,9 @@ static const char* extension_list[] = {
|
|||
"tgq",
|
||||
"tgv",
|
||||
"thp",
|
||||
"tk5",
|
||||
"tmx",
|
||||
"tra",
|
||||
"trk",
|
||||
"tun",
|
||||
"txth",
|
||||
"txtp",
|
||||
|
@ -566,7 +569,7 @@ static const char* extension_list[] = {
|
|||
|
||||
"u0",
|
||||
"ue4opus",
|
||||
"ulw",
|
||||
"ulw", //txth/raw [Burnout (GC)]
|
||||
"um3",
|
||||
"utk",
|
||||
"uv",
|
||||
|
@ -704,6 +707,7 @@ static const char* common_extension_list[] = {
|
|||
"flac", //common
|
||||
"m4a", //common
|
||||
"m4v", //common
|
||||
"mov", //common
|
||||
"mp+", //common [Moonshine Runners (PC)]
|
||||
"mp2", //common
|
||||
"mp3", //common
|
||||
|
@ -840,7 +844,7 @@ static const coding_info coding_info_list[] = {
|
|||
{coding_TGC, "Tiger Game.com 4-bit ADPCM"},
|
||||
{coding_NDS_PROCYON, "Procyon Studio Digital Sound Elements NDS 4-bit APDCM"},
|
||||
{coding_L5_555, "Level-5 0x555 4-bit ADPCM"},
|
||||
{coding_LSF, "lsf 4-bit ADPCM"},
|
||||
{coding_LSF, "Gizmondo Studios Helsingborg LSF 4-bit ADPCM"},
|
||||
{coding_MTAF, "Konami MTAF 4-bit ADPCM"},
|
||||
{coding_MTA2, "Konami MTA2 4-bit ADPCM"},
|
||||
{coding_MC3, "Paradigm MC3 3-bit ADPCM"},
|
||||
|
@ -937,7 +941,6 @@ static const layout_info layout_info_list[] = {
|
|||
{layout_blocked_filp, "blocked (FILP)"},
|
||||
{layout_blocked_ea_swvr, "blocked (EA SWVR)"},
|
||||
{layout_blocked_adm, "blocked (ADM)"},
|
||||
{layout_blocked_bdsp, "blocked (BDSP)"},
|
||||
{layout_blocked_ivaud, "blocked (IVAUD)"},
|
||||
{layout_blocked_ps2_iab, "blocked (IAB)"},
|
||||
{layout_blocked_vs_str, "blocked (STR VS)"},
|
||||
|
@ -973,9 +976,9 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_CSMP, "Retro Studios CSMP header"},
|
||||
{meta_RFRM, "Retro Studios RFRM header"},
|
||||
{meta_DTK, "Nintendo DTK raw header"},
|
||||
{meta_RSF, "Retro Studios RSF raw header"},
|
||||
{meta_RSF, "Retro Studios .RSF raw header"},
|
||||
{meta_AFC, "Nintendo .AFC header"},
|
||||
{meta_AST, "Nintendo AST header"},
|
||||
{meta_AST, "Nintendo .AST header"},
|
||||
{meta_HALPST, "HAL Laboratory HALPST header"},
|
||||
{meta_DSP_RS03, "Retro Studios RS03 header"},
|
||||
{meta_DSP_STD, "Nintendo DSP header"},
|
||||
|
@ -984,14 +987,14 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_ADS, "Sony ADS header"},
|
||||
{meta_NPS, "Namco NPSF header"},
|
||||
{meta_RWSD, "Nintendo RWSD header (single stream)"},
|
||||
{meta_RWAR, "Nintendo RWAR header (single RWAV stream)"},
|
||||
{meta_RWAR, "Nintendo RWAR header (single stream)"},
|
||||
{meta_RWAV, "Nintendo RWAV header"},
|
||||
{meta_CWAV, "Nintendo CWAV header"},
|
||||
{meta_FWAV, "Nintendo FWAV header"},
|
||||
{meta_XA, "Sony XA header"},
|
||||
{meta_RXWS, "Sony RXWS header"},
|
||||
{meta_RAW_INT, "PS2 .int raw header"},
|
||||
{meta_PS2_OMU, "Alter Echo OMU Header"},
|
||||
{meta_OMU, "Outrage OMU Header"},
|
||||
{meta_DSP_STM, "Intelligent Systems STM header"},
|
||||
{meta_EXST, "Sony EXST header"},
|
||||
{meta_SVAG_KCET, "Konami SVAG header"},
|
||||
|
@ -1004,16 +1007,15 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_DSP_GCM, "Double DSP header stereo by .gcm extension"},
|
||||
{meta_IDSP_TT, "Traveller's Tales IDSP header"},
|
||||
{meta_RAW_PCM, "PC .raw raw header"},
|
||||
{meta_PS2_VAGi, "Sony VAGi header"},
|
||||
{meta_PS2_VAGp, "Sony VAGp header"},
|
||||
{meta_PS2_pGAV, "Sony pGAV header"},
|
||||
{meta_PS2_VAGp_AAAP, "Acclaim Austin AAAp VAG header"},
|
||||
{meta_VAG, "Sony VAG header"},
|
||||
{meta_VAG_custom, "Sony VAG header (custom)"},
|
||||
{meta_AAAP, "Acclaim Austin AAAp header"},
|
||||
{meta_SEB, "Game Arts .SEB header"},
|
||||
{meta_STR_WAV, "Blitz Games .STR+WAV header"},
|
||||
{meta_ILD, "Tose ILD header"},
|
||||
{meta_PS2_PNB, "assumed PNB (PsychoNauts Bgm File) by .pnb extension"},
|
||||
{meta_PWB, "Double Fine WB header"},
|
||||
{meta_RAW_WAVM, "Xbox .wavm raw header"},
|
||||
{meta_DSP_STR, "assumed Conan Gamecube STR File by .str extension"},
|
||||
{meta_DSP_STR, "Cauldron .STR header"},
|
||||
{meta_EA_SCHL, "Electronic Arts SCHl header (variable)"},
|
||||
{meta_EA_SCHL_fixed, "Electronic Arts SCHl header (fixed)"},
|
||||
{meta_CAF, "tri-Crescendo CAF Header"},
|
||||
|
@ -1026,8 +1028,7 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_AIFC, "Apple AIFF-C (Audio Interchange File Format) header"},
|
||||
{meta_AIFF, "Apple AIFF (Audio Interchange File Format) header"},
|
||||
{meta_STR_SNDS, "3DO SNDS header"},
|
||||
{meta_WS_AUD, "Westwood Studios .aud header"},
|
||||
{meta_WS_AUD_old, "Westwood Studios .aud (old) header"},
|
||||
{meta_WS_AUD, "Westwood Studios .AUD header"},
|
||||
{meta_PS2_IVB, "IVB/BVII header"},
|
||||
{meta_SVS, "Square SVS header"},
|
||||
{meta_RIFF_WAVE, "RIFF WAVE header"},
|
||||
|
@ -1047,19 +1048,18 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_FSB3, "FMOD FSB3 header"},
|
||||
{meta_FSB4, "FMOD FSB4 header"},
|
||||
{meta_FSB5, "FMOD FSB5 header"},
|
||||
{meta_RWX, "RWX Header"},
|
||||
{meta_RWAX, "Konami RWAX header"},
|
||||
{meta_XWB, "Microsoft XWB header"},
|
||||
{meta_PS2_XA30, "Reflections XA30 PS2 header"},
|
||||
{meta_MUSC, "Krome MUSC header"},
|
||||
{meta_MUSX, "Eurocom MUSX header"},
|
||||
{meta_LEG, "Legaia 2 - Duel Saga LEG Header"},
|
||||
{meta_FILP, "Bio Hazard - Gun Survivor FILp Header"},
|
||||
{meta_IKM, "MiCROViSiON IKM header"},
|
||||
{meta_STER, "ALCHEMY STER header"},
|
||||
{meta_STER, "ALCHEMY STER header"},
|
||||
{meta_SAT_DVI, "Konami KCEN DVI. header"},
|
||||
{meta_DC_KCEY, "Konami KCEY KCEYCOMP header"},
|
||||
{meta_BG00, "Falcom BG00 Header"},
|
||||
{meta_PS2_RSTM, "Rockstar Games RSTM Header"},
|
||||
{meta_RSTM_ROCKSTAR, "Rockstar Games RSTM Header"},
|
||||
{meta_ACM, "InterPlay ACM Header"},
|
||||
{meta_MUS_ACM, "InterPlay MUS ACM header"},
|
||||
{meta_PS2_KCES, "Konami KCES Header"},
|
||||
|
@ -1075,7 +1075,7 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_PS2_PCM, "Konami KCEJ East .PCM header"},
|
||||
{meta_PS2_RKV, "Legacy of Kain - Blood Omen 2 RKV PS2 header"},
|
||||
{meta_PS2_VAS, "Konami .VAS header"},
|
||||
{meta_PS2_ENTH, ".enth Header"},
|
||||
{meta_LP_AP_LEP, "Konami LP/AP/LEP header"},
|
||||
{meta_SDT, "High Voltage .sdt header"},
|
||||
{meta_NGC_TYDSP, ".tydsp Header"},
|
||||
{meta_WVS, "Swingin' Ape .WVS header"},
|
||||
|
@ -1086,11 +1086,11 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_DC_STR_V2, "variant of Sega Stream Asset Builder header"},
|
||||
{meta_XMU, "Outrage XMU header"},
|
||||
{meta_XVAS, "Konami .XVAS header"},
|
||||
{meta_PS2_XA2, "Acclaim XA2 Header"},
|
||||
{meta_XA2_ACCLAIM, "Acclaim .XA2 Header"},
|
||||
{meta_SAP, "VING .SAP header"},
|
||||
{meta_DC_IDVI, "Capcom IDVI header"},
|
||||
{meta_KRAW, "Geometry Wars: Galaxies KRAW header"},
|
||||
{meta_NGC_YMF, "YMF DSP Header"},
|
||||
{meta_YMF, "Yuke's .YMF Header"},
|
||||
{meta_FAG, "Radical .FAG Header"},
|
||||
{meta_PS2_MIHB, "Sony MultiStream MIC header"},
|
||||
{meta_DSP_WII_MUS, "mus header"},
|
||||
|
@ -1113,7 +1113,7 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_SPT_SPD, "SPT+SPD DSP Header"},
|
||||
{meta_ISH_ISD, "ISH+ISD DSP Header"},
|
||||
{meta_GSP_GSB, "Tecmo GSP+GSB Header"},
|
||||
{meta_YDSP, "Yuke's DSP (YDSP) Header"},
|
||||
{meta_YDSP, "Yuke's YDSP Header"},
|
||||
{meta_NGC_SSM, "SSM DSP Header"},
|
||||
{meta_PS2_JOE, "Asobo Studio .JOE header"},
|
||||
{meta_VGS, "Guitar Hero VGS Header"},
|
||||
|
@ -1129,20 +1129,18 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_FFCC_STR, "Final Fantasy: Crystal Chronicles STR header"},
|
||||
{meta_SAT_BAKA, "Konami BAKA header"},
|
||||
{meta_SWAV, "Nintendo SWAV header"},
|
||||
{meta_VSF, "Square-Enix VSF header"},
|
||||
{meta_VSF, "Square Enix VSF header"},
|
||||
{meta_NDS_RRDS, "Ridger Racer DS Header"},
|
||||
{meta_PS2_TK5, "Tekken 5 Stream Header"},
|
||||
{meta_PS2_SND, "Might and Magic SSND Header"},
|
||||
{meta_PS2_VSF_TTA, "VSF with SMSS Header"},
|
||||
{meta_ADS_MIDWAY, "Midway ADS header"},
|
||||
{meta_PS2_MCG, "Gunvari MCG Header"},
|
||||
{meta_ZSD, "ZSD Header"},
|
||||
{meta_ZSD, "Konami ZSD header"},
|
||||
{meta_REDSPARK, "RedSpark Header"},
|
||||
{meta_IVAUD, "Rockstar .ivaud header"},
|
||||
{meta_DSP_WII_WSD, ".WSD header"},
|
||||
{meta_WII_NDP, "Icon Games NDP header"},
|
||||
{meta_PS2_SPS, "Ape Escape 2 SPS Header"},
|
||||
{meta_PS2_XA2_RRP, "Acclaim XA2 Header"},
|
||||
{meta_NDS_HWAS, "Vicarious Visions HWAS header"},
|
||||
{meta_NGC_LPS, "Rave Master LPS Header"},
|
||||
{meta_NAOMI_ADPCM, "NAOMI/NAOMI2 Arcade games ADPCM header"},
|
||||
|
@ -1160,7 +1158,7 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_WII_BNS, "Nintendo BNS header"},
|
||||
{meta_WII_WAS, "Sumo Digital iSWS header"},
|
||||
{meta_XBOX_HLWAV, "Half-Life 2 .WAV header"},
|
||||
{meta_MYSPD, "U-Sing .MYSPD header"},
|
||||
{meta_MYSPD, "Punchers Impact .MYSPD header"},
|
||||
{meta_HIS, "Her Interactive HIS header"},
|
||||
{meta_AST_MV, "MicroVision AST header"},
|
||||
{meta_AST_MMV, "Marvelous AST header"},
|
||||
|
@ -1174,13 +1172,13 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_S14, "Namco .S14 raw header"},
|
||||
{meta_SSS, "Namco .SSS raw header"},
|
||||
{meta_PS2_GCM, "Namco GCM header"},
|
||||
{meta_PS2_SMPL, "Homura SMPL header"},
|
||||
{meta_PS2_MSA, "Success .MSA header"},
|
||||
{meta_SMPL, "Skonec SMPL header"},
|
||||
{meta_MSA, "Success .MSA header"},
|
||||
{meta_VOI, "Irem .VOI header"},
|
||||
{meta_NGC_PDT, "Hudson .PDT header"},
|
||||
{meta_NGC_RKV, "Legacy of Kain - Blood Omen 2 RKV GC header"},
|
||||
{meta_DSP_DDSP, ".DDSP header"},
|
||||
{meta_P3D, "Radical P3D header"},
|
||||
{meta_PS2_TK1, "Tekken TK5STRM1 Header"},
|
||||
{meta_NGC_DSP_MPDS, "MPDS DSP header"},
|
||||
{meta_DSP_STR_IG, "Infogrames .DSP header"},
|
||||
{meta_EA_SWVR, "Electronic Arts SWVR header"},
|
||||
|
@ -1198,7 +1196,7 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_PS2_JSTM, "JSTM Header"},
|
||||
{meta_XVAG, "Sony XVAG header"},
|
||||
{meta_CPS, "tri-Crescendo CPS Header"},
|
||||
{meta_SQEX_SCD, "Square-Enix SCD header"},
|
||||
{meta_SQEX_SCD, "Square Enix SCD header"},
|
||||
{meta_NGC_NST_DSP, "Animaniacs NST header"},
|
||||
{meta_BAF, "Bizarre Creations .baf header"},
|
||||
{meta_MSF, "Sony MSF header"},
|
||||
|
@ -1208,20 +1206,18 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_SPM, "Square SPM header"},
|
||||
{meta_VGS_PS, "Princess Soft VGS header"},
|
||||
{meta_PS2_IAB, "Runtime .IAB header"},
|
||||
{meta_VS_STR, "Square .VS STR* header"},
|
||||
{meta_LSF_N1NJ4N, ".lsf !n1nj4n header"},
|
||||
{meta_VS_STR, "Square .VS STRx header"},
|
||||
{meta_LSF_N1NJ4N, "Gizmondo Studios Helsingborg LSF header"},
|
||||
{meta_XWAV, "feelplus XWAV header"},
|
||||
{meta_RAW_SNDS, "PC .snds raw header"},
|
||||
{meta_PS2_WMUS, "assumed The Warriors Sony ADPCM by .wmus extension"},
|
||||
{meta_HYPERSCAN_KVAG, "Mattel Hyperscan KVAG"},
|
||||
{meta_IOS_PSND, "PSND Header"},
|
||||
{meta_BOS_ADP, "ADP! header"},
|
||||
{meta_ADP_WILDFIRE, "Wildfire ADP! header"},
|
||||
{meta_QD_ADP, "Quantic Dream .ADP header"},
|
||||
{meta_EB_SFX, "Excitebots .sfx header"},
|
||||
{meta_EB_SF0, "assumed Excitebots .sf0 by extension"},
|
||||
{meta_MTAF, "Konami MTAF header"},
|
||||
{meta_PS2_VAG1, "Konami VAG1 header"},
|
||||
{meta_PS2_VAG2, "Konami VAG2 header"},
|
||||
{meta_ALP, "High Voltage ALP header"},
|
||||
{meta_WPD, "WPD 'DPW' header"},
|
||||
{meta_MN_STR, "Mini Ninjas 'STR' header"},
|
||||
|
@ -1239,14 +1235,14 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_IDSP_NAMCO, "Namco IDSP header"},
|
||||
{meta_WIIU_BTSND, "Nintendo Wii U Menu Boot Sound"},
|
||||
{meta_MCA, "Capcom MCA header"},
|
||||
{meta_XB3D_ADX, "Xenoblade 3D ADX header"},
|
||||
{meta_ADX_MONSTER, "Monster Games .ADX header"},
|
||||
{meta_HCA, "CRI HCA header"},
|
||||
{meta_SVAG_SNK, "SNK SVAG header"},
|
||||
{meta_PS2_VDS_VDM, "Procyon Studio VDS/VDM header"},
|
||||
{meta_FFMPEG, "FFmpeg supported format"},
|
||||
{meta_FFMPEG_faulty, "FFmpeg supported format (check log)"},
|
||||
{meta_CXS, "tri-Crescendo CXS header"},
|
||||
{meta_AKB, "Square-Enix AKB header"},
|
||||
{meta_AKB, "Square Enix AKB header"},
|
||||
{meta_PASX, "Premium Agency PASX header"},
|
||||
{meta_XMA_RIFF, "Microsoft XMA RIFF header"},
|
||||
{meta_ASTB, "Capcom ASTB header"},
|
||||
|
@ -1258,19 +1254,17 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_GHS, "Hexadrive GHS/S_P_STH header"},
|
||||
{meta_AAC_TRIACE, "tri-Ace AAC header"},
|
||||
{meta_MTA2, "Konami MTA2 header"},
|
||||
{meta_NGC_ULW, "Criterion ULW raw header"},
|
||||
{meta_XA_XA30, "Reflections XA30 header"},
|
||||
{meta_XA_04SW, "Reflections 04SW header"},
|
||||
{meta_TXTH, "TXTH generic header"},
|
||||
{meta_EA_BNK, "Electronic Arts BNK header"},
|
||||
{meta_SK_AUD, "Silicon Knights AUD header"},
|
||||
{meta_AHX, "CRI AHX header"},
|
||||
{meta_STM, "Angel Studios/Rockstar San Diego STMA header"},
|
||||
{meta_STMA, "Angel Studios/Rockstar San Diego STMA header"},
|
||||
{meta_BINK, "RAD Game Tools Bink header"},
|
||||
{meta_EA_SNU, "Electronic Arts SNU header"},
|
||||
{meta_AWC, "Rockstar AWC header"},
|
||||
{meta_OPUS, "Nintendo Switch OPUS header"},
|
||||
{meta_RAW_AL, "Illwinter Game Design .AL raw header"},
|
||||
{meta_PC_AST, "Capcom AST (PC) header"},
|
||||
{meta_UBI_SB, "Ubisoft SBx header"},
|
||||
{meta_NAAC, "Namco NAAC header"},
|
||||
|
@ -1287,12 +1281,12 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_OGG_encrypted, "Ogg Vorbis header (encrypted)"},
|
||||
{meta_KMA9, "Koei Tecmo KMA9 header"},
|
||||
{meta_XWC, "Starbreeze XWC header"},
|
||||
{meta_SQEX_SAB, "Square-Enix SAB header"},
|
||||
{meta_SQEX_MAB, "Square-Enix MAB header"},
|
||||
{meta_SQEX_SAB, "Square Enix SAB header"},
|
||||
{meta_SQEX_MAB, "Square Enix MAB header"},
|
||||
{meta_WAF, "KID WAF header"},
|
||||
{meta_WAVE, "EngineBlack .WAVE header"},
|
||||
{meta_WAVE_segmented, "EngineBlack .WAVE header (segmented)"},
|
||||
{meta_SMV, "Cho Aniki Zero .SMV header"},
|
||||
{meta_SMV, "extreme .SMV header"},
|
||||
{meta_NXAP, "Nex NXAP header"},
|
||||
{meta_EA_WVE_AU00, "Electronic Arts WVE (au00) header"},
|
||||
{meta_EA_WVE_AD10, "Electronic Arts WVE (Ad10) header"},
|
||||
|
@ -1318,7 +1312,7 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_WAVEBATCH, "Firebrand Games WBAT header"},
|
||||
{meta_HD3_BD3, "Sony HD3+BD3 header"},
|
||||
{meta_BNK_SONY, "Sony BNK header"},
|
||||
{meta_SSCF, "Square-Enix SSCF header"},
|
||||
{meta_SSCF, "Square Enix SSCF header"},
|
||||
{meta_DSP_VAG, ".VAG DSP header"},
|
||||
{meta_DSP_ITL, ".ITL DSP header"},
|
||||
{meta_A2M, "Artificial Mind & Movement A2M header"},
|
||||
|
@ -1339,7 +1333,7 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_ADPCM_CAPCOM, "Capcom .ADPCM header"},
|
||||
{meta_UE4OPUS, "Epic Games UE4OPUS header"},
|
||||
{meta_XWMA, "Microsoft XWMA RIFF header"},
|
||||
{meta_VA3, "Konami VA3 header" },
|
||||
{meta_VA3, "Konami VA3 header"},
|
||||
{meta_XOPUS, "Exient XOPUS header"},
|
||||
{meta_VS_SQUARE, "Square VS header"},
|
||||
{meta_NWAV, "Chunsoft NWAV header"},
|
||||
|
@ -1380,7 +1374,7 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_KWB, "Koei Tecmo WaveBank header"},
|
||||
{meta_LRMD, "Sony LRMD header"},
|
||||
{meta_WWISE_FX, "Audiokinetic Wwise FX header"},
|
||||
{meta_DIVA, "DIVA header"},
|
||||
{meta_DIVA, "Sega DIVA header"},
|
||||
{meta_IMUSE, "LucasArts iMUSE header"},
|
||||
{meta_KTSR, "Koei Tecmo KTSR header"},
|
||||
{meta_KAT, "Sega KAT header"},
|
||||
|
@ -1420,6 +1414,8 @@ static const meta_info meta_info_list[] = {
|
|||
{meta_SNDZ, "Sony SNDZ header"},
|
||||
{meta_VAB, "Sony VAB header"},
|
||||
{meta_BIGRP, "Inti Creates .BIGRP header"},
|
||||
{meta_DIC1, "Codemasters DIC1 header"},
|
||||
{meta_AWD, "RenderWare Audio Wave Dictionary header"},
|
||||
};
|
||||
|
||||
void get_vgmstream_coding_description(VGMSTREAM* vgmstream, char* out, size_t out_size) {
|
||||
|
|
|
@ -156,9 +156,6 @@ void block_update(off_t block_offset, VGMSTREAM* vgmstream) {
|
|||
case layout_blocked_adm:
|
||||
block_update_adm(block_offset,vgmstream);
|
||||
break;
|
||||
case layout_blocked_bdsp:
|
||||
block_update_bdsp(block_offset,vgmstream);
|
||||
break;
|
||||
case layout_blocked_ps2_iab:
|
||||
block_update_ps2_iab(block_offset,vgmstream);
|
||||
break;
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
#include "layout.h"
|
||||
#include "../vgmstream.h"
|
||||
|
||||
/* set up for the block at the given offset */
|
||||
void block_update_bdsp(off_t block_offset, VGMSTREAM * vgmstream) {
|
||||
int i;
|
||||
|
||||
vgmstream->current_block_offset = block_offset;
|
||||
vgmstream->current_block_size = read_32bitBE(vgmstream->current_block_offset,vgmstream->ch[0].streamfile)/7*8;
|
||||
vgmstream->next_block_offset = vgmstream->current_block_offset + vgmstream->current_block_size+0xC0;
|
||||
|
||||
for (i=0;i<vgmstream->channels;i++) {
|
||||
|
||||
vgmstream->ch[i].channel_start_offset=
|
||||
vgmstream->ch[i].offset=vgmstream->current_block_offset*i;
|
||||
|
||||
}
|
||||
}
|
|
@ -31,7 +31,6 @@ void block_update_filp(off_t block_offset, VGMSTREAM* vgmstream);
|
|||
void block_update_ivaud(off_t block_offset, VGMSTREAM* vgmstream);
|
||||
void block_update_ea_swvr(off_t block_offset, VGMSTREAM* vgmstream);
|
||||
void block_update_adm(off_t block_offset, VGMSTREAM* vgmstream);
|
||||
void block_update_bdsp(off_t block_offset, VGMSTREAM* vgmstream);
|
||||
void block_update_ps2_iab(off_t block_offset, VGMSTREAM* vgmstream);
|
||||
void block_update_vs_str(off_t block_offset, VGMSTREAM* vgmstream);
|
||||
void block_update_rws(off_t block_offset, VGMSTREAM* vgmstream);
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
#include "meta.h"
|
||||
|
||||
/* ADP - from Balls of Steel */
|
||||
VGMSTREAM* init_vgmstream_adp_bos(STREAMFILE* sf) {
|
||||
/* ADP - from Wildfire Studios games [Balls of Steel (PC)] */
|
||||
VGMSTREAM* init_vgmstream_adp_wildfire(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag = 0;
|
||||
int channels;
|
||||
uint32_t start_offset;
|
||||
int channels, loop_flag = 0;
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(sf,"adp"))
|
||||
goto fail;
|
||||
|
||||
if (!is_id32be(0x00,sf, "ADP!"))
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
if (!check_extensions(sf,"adp"))
|
||||
return NULL;
|
||||
|
||||
|
||||
loop_flag = (-1 != read_s32le(0x08,sf));
|
||||
channels = 1;
|
||||
|
@ -30,7 +30,7 @@ VGMSTREAM* init_vgmstream_adp_bos(STREAMFILE* sf) {
|
|||
|
||||
vgmstream->coding_type = coding_DVI_IMA_int;
|
||||
vgmstream->layout_type = layout_none;
|
||||
vgmstream->meta_type = meta_BOS_ADP;
|
||||
vgmstream->meta_type = meta_ADP_WILDFIRE;
|
||||
|
||||
// 0x10, 0x12 - both initial history?
|
||||
//vgmstream->ch[0].adpcm_history1_32 = read_16bitLE(0x10,sf);
|
159
Frameworks/vgmstream/vgmstream/src/meta/awd.c
Normal file
159
Frameworks/vgmstream/vgmstream/src/meta/awd.c
Normal file
|
@ -0,0 +1,159 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
#include "../util/endianness.h"
|
||||
|
||||
|
||||
/* AWD - Audio Wave Dictionary (RenderWare) */
|
||||
VGMSTREAM* init_vgmstream_awd(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
char header_name[STREAM_NAME_SIZE], stream_name[STREAM_NAME_SIZE];
|
||||
int /*bit_depth = 0,*/ channels = 0, sample_rate = 0, stream_codec = -1, total_subsongs = 0, target_subsong = sf->stream_index;
|
||||
int interleave, loop_flag;
|
||||
off_t data_offset, header_name_offset, misc_data_offset, linked_list_offset, wavedict_offset;
|
||||
off_t entry_info_offset, entry_name_offset, /*entry_uuid_offset,*/ next_entry_offset, prev_entry_offset, stream_offset = 0;
|
||||
read_u32_t read_u32;
|
||||
size_t /*data_size,*/ header_size, /*misc_data_size,*/ stream_size = 0;
|
||||
|
||||
/* checks */
|
||||
if (read_u32le(0x00, sf) != 0x809 && read_u32be(0x00, sf) != 0x809)
|
||||
goto fail;
|
||||
|
||||
/* .awd: standard (Burnout series, Black, Call of Duty: Finest Hour)
|
||||
* .hwd/lwd: high/low vehicle engine sounds (Burnout series)
|
||||
* (Burnout 3: Takedown, Burnout Revenge, Burnout Dominator) */
|
||||
if (!check_extensions(sf, "awd,hwd,lwd"))
|
||||
goto fail;
|
||||
|
||||
read_u32 = read_u8(0x04, sf) ? read_u32be : read_u32le;
|
||||
//read_u32 = guess_endian32(0x00, sf) ? read_u32be : read_u32le;
|
||||
|
||||
data_offset = read_u32(0x08, sf);
|
||||
wavedict_offset = read_u32(0x0C, sf);
|
||||
//data_size = read_u32(0x14, sf);
|
||||
/* Platform UUIDs in big endian
|
||||
* {FD9D32D3-E179-426A-8424-14720AC7F648}: GameCube
|
||||
* {ACC9EAAA-38FC-1749-AE81-64EADBC79353}: PlayStation 2
|
||||
* {042D3A45-5FE4-C84B-81F0-DF758B01F273}: Xbox */
|
||||
//platf_uuid_1 = read_u64be(0x18, sf);
|
||||
//platf_uuid_2 = read_u64be(0x20, sf);
|
||||
header_size = read_u32(0x28, sf);
|
||||
|
||||
if (data_offset != header_size)
|
||||
goto fail;
|
||||
|
||||
header_name_offset = read_u32(wavedict_offset + 0x04, sf);
|
||||
|
||||
if (header_name_offset) /* not used in Black */
|
||||
read_string(header_name, STREAM_NAME_SIZE, header_name_offset, sf);
|
||||
|
||||
if (!target_subsong)
|
||||
target_subsong = 1;
|
||||
|
||||
/* Linked lists have no total subsong count; instead iterating
|
||||
* through all of them until it returns to the 1st entry again */
|
||||
linked_list_offset = wavedict_offset + 0x0C;
|
||||
|
||||
prev_entry_offset = read_u32(linked_list_offset + 0x00, sf);
|
||||
next_entry_offset = read_u32(linked_list_offset + 0x04, sf);
|
||||
|
||||
while (next_entry_offset != linked_list_offset) {
|
||||
total_subsongs++;
|
||||
|
||||
entry_info_offset = read_u32(next_entry_offset + 0x08, sf);
|
||||
|
||||
if (total_subsongs > 1024 || /* in case it gets stuck in an infinite loop */
|
||||
entry_info_offset < wavedict_offset || entry_info_offset > header_size ||
|
||||
prev_entry_offset < wavedict_offset || prev_entry_offset > header_size ||
|
||||
next_entry_offset < wavedict_offset || next_entry_offset > header_size)
|
||||
goto fail;
|
||||
|
||||
prev_entry_offset = read_u32(next_entry_offset + 0x00, sf);
|
||||
next_entry_offset = read_u32(next_entry_offset + 0x04, sf);
|
||||
|
||||
/* is at the correct target song index */
|
||||
if (total_subsongs == target_subsong) {
|
||||
//entry_uuid_offset = read_u32(entry_info_offset + 0x00, sf); /* only used in Burnout games */
|
||||
entry_name_offset = read_u32(entry_info_offset + 0x04, sf);
|
||||
|
||||
sample_rate = read_u32(entry_info_offset + 0x10, sf);
|
||||
stream_codec = read_u32(entry_info_offset + 0x14, sf);
|
||||
stream_size = read_u32(entry_info_offset + 0x18, sf);
|
||||
//bit_depth = read_u8(entry_info_offset + 0x1C, sf);
|
||||
channels = read_u8(entry_info_offset + 0x1D, sf); /* always 1, don't think stereo entries exist */
|
||||
if (channels != 1)
|
||||
goto fail;
|
||||
|
||||
/* stores a "00: GCN ADPCM Header" chunk, otherwise empty */
|
||||
misc_data_offset = read_u32(entry_info_offset + 0x20, sf);
|
||||
//misc_data_size = read_u32(entry_info_offset + 0x24, sf);
|
||||
|
||||
/* entry_info_offset + 0x2C to +0x44 has the target format information,
|
||||
* which in most cases would probably be identical to the input format
|
||||
* variables (from sample_rate to misc_data_size) */
|
||||
|
||||
stream_offset = read_u32(entry_info_offset + 0x4C, sf) + data_offset;
|
||||
|
||||
read_string(stream_name, STREAM_NAME_SIZE, entry_name_offset, sf);
|
||||
}
|
||||
}
|
||||
|
||||
if (total_subsongs < 1 || target_subsong > total_subsongs)
|
||||
goto fail;
|
||||
|
||||
interleave = 0;
|
||||
loop_flag = 0;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream)
|
||||
goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_AWD;
|
||||
vgmstream->layout_type = layout_none;
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
vgmstream->stream_size = stream_size;
|
||||
vgmstream->num_streams = total_subsongs;
|
||||
vgmstream->interleave_block_size = interleave;
|
||||
|
||||
if (header_name_offset)
|
||||
snprintf(vgmstream->stream_name, STREAM_NAME_SIZE, "%s/%s", header_name, stream_name);
|
||||
else
|
||||
snprintf(vgmstream->stream_name, STREAM_NAME_SIZE, "%s", stream_name);
|
||||
|
||||
switch (stream_codec) {
|
||||
case 0x00: /* PS2 (Burnout series, Black, Call of Duty: Finest Hour) */
|
||||
vgmstream->num_samples = ps_bytes_to_samples(stream_size, channels);
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
break;
|
||||
|
||||
case 0x01: /* Xbox (Burnout series, Black) */
|
||||
vgmstream->num_samples = pcm16_bytes_to_samples(stream_size, channels);
|
||||
vgmstream->coding_type = coding_PCM16LE;
|
||||
break;
|
||||
|
||||
case 0x03: /* GCN (Call of Duty: Finest Hour) */
|
||||
vgmstream->num_samples = dsp_bytes_to_samples(stream_size, channels);
|
||||
dsp_read_coefs_be(vgmstream, sf, misc_data_offset + 0x1C, 0);
|
||||
dsp_read_hist_be(vgmstream, sf, misc_data_offset + 0x40, 0);
|
||||
vgmstream->coding_type = coding_NGC_DSP;
|
||||
break;
|
||||
|
||||
case 0x04: /* Xbox (Black, Call of Duty: Finest Hour) */
|
||||
vgmstream->num_samples = xbox_ima_bytes_to_samples(stream_size, channels);
|
||||
vgmstream->coding_type = coding_XBOX_IMA;
|
||||
break;
|
||||
|
||||
default:
|
||||
VGM_LOG("AWD: unknown codec type %d\n", stream_codec);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, stream_offset))
|
||||
goto fail;
|
||||
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -9,10 +9,9 @@ typedef enum { PSX, PCM16, ATRAC9, HEVAG } bnk_codec;
|
|||
VGMSTREAM* init_vgmstream_bnk_sony(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
uint32_t start_offset, stream_offset, name_offset = 0;
|
||||
uint32_t sblk_offset, data_offset;
|
||||
uint32_t stream_size, data_size, interleave = 0;
|
||||
int channels = 0, loop_flag, sample_rate, parts, sblk_version, big_endian;
|
||||
int loop_start = 0, loop_end = 0;
|
||||
uint32_t stream_size, interleave = 0;
|
||||
int channels = 0, loop_flag, sample_rate, big_endian;
|
||||
int32_t loop_start = 0, loop_end = 0;
|
||||
uint32_t center_note, center_fine, flags;
|
||||
uint32_t atrac9_info = 0;
|
||||
|
||||
|
@ -37,25 +36,35 @@ VGMSTREAM* init_vgmstream_bnk_sony(STREAMFILE* sf) {
|
|||
big_endian = 0;
|
||||
}
|
||||
else {
|
||||
goto fail;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(sf, "bnk"))
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
uint32_t sblk_offset, data_offset, data_size;
|
||||
int parts, sblk_version;
|
||||
|
||||
parts = read_u32(0x04,sf);
|
||||
if (parts < 2 || parts > 3) goto fail;
|
||||
if (parts < 2 || parts > 3)
|
||||
return NULL;
|
||||
/* in theory a bank can contain multiple blocks */
|
||||
|
||||
/* section sizes don't include padding (sometimes aligned to 0x10/0x800) */
|
||||
sblk_offset = read_u32(0x08,sf);
|
||||
/* 0x0c: sblk size */
|
||||
//sblk_size = read_u32(0x0c,sf);
|
||||
data_offset = read_u32(0x10,sf);
|
||||
data_size = read_u32(0x14,sf);
|
||||
/* when sblk_offset >= 0x20: */
|
||||
/* 0x18: ZLSD small footer, rare in earlier versions [Yakuza 6's Puyo Puyo (PS4)] */
|
||||
/* 0x1c: ZLSD size */
|
||||
data_size = read_u32(0x14,sf);
|
||||
|
||||
/* ZLSD small footer, rare in earlier versions and more common later [Yakuza 6's Puyo Puyo (PS4)] */
|
||||
//if (sblk_offset >= 0x20) {
|
||||
// zlsd_offset = read_u32(0x18,sf);
|
||||
// zlsd_size = read_u32(0x1c,sf);
|
||||
//}
|
||||
|
||||
if (sblk_offset > 0x20)
|
||||
return NULL;
|
||||
|
||||
/* SE banks, also used for music. Most table fields seems reserved/defaults and
|
||||
* don't change much between subsongs or files, so they aren't described in detail.
|
||||
|
@ -64,7 +73,7 @@ VGMSTREAM* init_vgmstream_bnk_sony(STREAMFILE* sf) {
|
|||
|
||||
/* SBlk part: parse header */
|
||||
if (read_u32(sblk_offset+0x00,sf) != get_id32be("klBS")) /* SBlk = SFX block */
|
||||
goto fail;
|
||||
return NULL;
|
||||
sblk_version = read_u32(sblk_offset+0x04,sf);
|
||||
/* 0x08: flags? (sblk_version>=0x0d?, 0x03=Vita, 0x06=PS4, 0x05=PS5)
|
||||
* - 04: non-fixed bank?
|
||||
|
@ -146,6 +155,7 @@ VGMSTREAM* init_vgmstream_bnk_sony(STREAMFILE* sf) {
|
|||
break;
|
||||
|
||||
case 0x1a: /* Demon's Souls (PS5) */
|
||||
case 0x23: /* The Last of Us (PC) */
|
||||
|
||||
default:
|
||||
vgm_logi("BNK: unknown version %x (report)\n", sblk_version);
|
||||
|
@ -223,7 +233,7 @@ VGMSTREAM* init_vgmstream_bnk_sony(STREAMFILE* sf) {
|
|||
}
|
||||
|
||||
|
||||
//;VGM_LOG("BNK: subsongs %i, table2_entry=%lx, table3_entry=%lx\n", total_subsongs,table2_entry_offset,table3_entry_offset);
|
||||
//;VGM_LOG("BNK: subsongs %i, table2_entry=%x, table3_entry=%x\n", total_subsongs,table2_entry_offset,table3_entry_offset);
|
||||
|
||||
if (target_subsong < 0 || target_subsong > total_subsongs || total_subsongs < 1) goto fail;
|
||||
/* this means some subsongs repeat streams, that can happen in some sfx banks, whatevs */
|
||||
|
@ -314,6 +324,7 @@ VGMSTREAM* init_vgmstream_bnk_sony(STREAMFILE* sf) {
|
|||
break;
|
||||
|
||||
default:
|
||||
VGM_LOG("BNK: missing version\n");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
@ -461,8 +472,10 @@ VGMSTREAM* init_vgmstream_bnk_sony(STREAMFILE* sf) {
|
|||
|
||||
case 0x02: /* ATRAC9 mono */
|
||||
case 0x05: /* ATRAC9 stereo */
|
||||
if (read_u32(start_offset+0x08,sf) + 0x08 != extradata_size) /* repeat? */
|
||||
if (read_u32(start_offset+0x08,sf) + 0x08 != extradata_size) { /* repeat? */
|
||||
VGM_LOG("BNK: unknown subtype\n");
|
||||
goto fail;
|
||||
}
|
||||
channels = (type == 0x02) ? 1 : 2;
|
||||
|
||||
atrac9_info = read_u32be(start_offset+0x0c,sf);
|
||||
|
@ -485,8 +498,10 @@ VGMSTREAM* init_vgmstream_bnk_sony(STREAMFILE* sf) {
|
|||
case 0x0f:
|
||||
case 0x10:
|
||||
type = read_u16(start_offset+0x00,sf);
|
||||
if (read_u32(start_offset+0x04,sf) != 0x01) /* type? */
|
||||
if (read_u32(start_offset+0x04,sf) != 0x01) { /* type? */
|
||||
VGM_LOG("BNK: unknown subtype\n");
|
||||
goto fail;
|
||||
}
|
||||
extradata_size = 0x10 + read_u32(start_offset+0x08,sf); /* 0x80 for AT9, 0x10 for PCM/PS-ADPCM */
|
||||
/* 0x0c: null? */
|
||||
|
||||
|
|
|
@ -75,13 +75,15 @@ VGMSTREAM* init_vgmstream_bwav(STREAMFILE* sf) {
|
|||
vgmstream->allow_dual_stereo = 1; /* Animal Crossing: Happy Home Paradise */
|
||||
break;
|
||||
|
||||
case 0x0002: /* Zelda TOTK (Switch) */
|
||||
#ifdef VGM_USE_FFMPEG
|
||||
case 0x0002: /* The Legend of Zelda: Tears of the Kingdom (Switch) */
|
||||
vgmstream->layout_data = build_layered_data(sf, channels);
|
||||
if (!vgmstream->layout_data) goto fail;
|
||||
vgmstream->coding_type = coding_FFmpeg;
|
||||
vgmstream->layout_type = layout_layered;
|
||||
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
goto fail;
|
||||
}
|
||||
|
|
|
@ -2,36 +2,38 @@
|
|||
#include "../coding/coding.h"
|
||||
#include "../util.h"
|
||||
|
||||
/* .ADX - from Xenoblade 3D (3DS) */
|
||||
VGMSTREAM* init_vgmstream_dsp_adx(STREAMFILE *sf) {
|
||||
/* .ADX - from Monster Games [Xenoblade 3D (3DS)] */
|
||||
VGMSTREAM* init_vgmstream_adx_monster(STREAMFILE *sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
int loop_flag, channels;
|
||||
int channel_header_spacing = 0x34;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(sf,"adx"))
|
||||
goto fail;
|
||||
|
||||
if (read_u32be(0x00,sf) != 0x02000000)
|
||||
return NULL;
|
||||
|
||||
/* .adx: reused from Wii version, but actually DSP */
|
||||
if (!check_extensions(sf,"adx"))
|
||||
return NULL;
|
||||
|
||||
channels = read_s32le(0x0, sf);
|
||||
loop_flag = read_s16le(0x6e, sf);
|
||||
if (channels > 2 || channels < 0)
|
||||
goto fail;
|
||||
|
||||
channels = read_32bitLE(0, sf);
|
||||
loop_flag = read_16bitLE(0x6e, sf);
|
||||
|
||||
if (channels > 2 || channels < 0) goto fail;
|
||||
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_ADX_MONSTER;
|
||||
vgmstream->coding_type = coding_NGC_DSP;
|
||||
vgmstream->layout_type = layout_none;
|
||||
vgmstream->meta_type = meta_XB3D_ADX;
|
||||
vgmstream->sample_rate = read_32bitLE(0x70,sf);
|
||||
vgmstream->num_samples = read_32bitLE(0x74, sf);
|
||||
vgmstream->loop_start_sample = read_32bitLE(0x78, sf);
|
||||
vgmstream->loop_end_sample = read_32bitLE(0x7c, sf);
|
||||
vgmstream->sample_rate = read_s32le(0x70,sf);
|
||||
vgmstream->num_samples = read_s32le(0x74, sf);
|
||||
vgmstream->loop_start_sample = read_s32le(0x78, sf);
|
||||
vgmstream->loop_end_sample = read_s32le(0x7c, sf);
|
||||
|
||||
dsp_read_coefs_le(vgmstream,sf, 0x4, channel_header_spacing);
|
||||
dsp_read_coefs_le(vgmstream,sf, 0x04, channel_header_spacing);
|
||||
|
||||
/* semi-interleave: manually open streams at offset */
|
||||
{
|
||||
|
|
|
@ -1,87 +0,0 @@
|
|||
#include "meta.h"
|
||||
#include "../layout/layout.h"
|
||||
#include "../util.h"
|
||||
|
||||
VGMSTREAM * init_vgmstream_dsp_bdsp(STREAMFILE *streamFile) {
|
||||
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
char filename[PATH_LIMIT];
|
||||
int channel_count;
|
||||
int loop_flag;
|
||||
int i;
|
||||
off_t start_offset;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("bdsp",filename_extension(filename))) goto fail;
|
||||
|
||||
channel_count = 2;
|
||||
loop_flag = 0;
|
||||
|
||||
/* 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(0x8,streamFile);
|
||||
vgmstream->coding_type = coding_NGC_DSP;
|
||||
|
||||
#if 0
|
||||
if(loop_flag) {
|
||||
vgmstream->loop_start_sample = read_32bitBE(0x64,streamFile);
|
||||
vgmstream->loop_end_sample = read_32bitBE(0x68,streamFile);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
vgmstream->layout_type = layout_blocked_bdsp;
|
||||
vgmstream->interleave_block_size = 0x8;
|
||||
vgmstream->meta_type = meta_DSP_BDSP;
|
||||
|
||||
/* open the file for reading by each channel */
|
||||
{
|
||||
for (i=0;i<channel_count;i++) {
|
||||
vgmstream->ch[i].streamfile = streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
|
||||
if (!vgmstream->ch[i].streamfile) goto fail;
|
||||
vgmstream->ch[i].channel_start_offset=
|
||||
vgmstream->ch[i].offset=i*vgmstream->interleave_block_size;
|
||||
}
|
||||
}
|
||||
|
||||
if (vgmstream->coding_type == coding_NGC_DSP) {
|
||||
int i;
|
||||
for (i=0;i<16;i++) {
|
||||
vgmstream->ch[0].adpcm_coef[i] = read_16bitBE(0x1C+i*2,streamFile);
|
||||
}
|
||||
if (vgmstream->channels == 2) {
|
||||
for (i=0;i<16;i++) {
|
||||
vgmstream->ch[1].adpcm_coef[i] = read_16bitBE(0x7C+i*2,streamFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Calc num_samples */
|
||||
start_offset = 0x0;
|
||||
block_update_bdsp(start_offset,vgmstream);
|
||||
vgmstream->num_samples=0;
|
||||
|
||||
do
|
||||
{
|
||||
vgmstream->num_samples += vgmstream->current_block_size*14/8;
|
||||
block_update_bdsp(vgmstream->next_block_offset,vgmstream);
|
||||
}
|
||||
while (vgmstream->next_block_offset<get_streamfile_size(streamFile));
|
||||
|
||||
block_update_bdsp(start_offset,vgmstream);
|
||||
|
||||
|
||||
return vgmstream;
|
||||
|
||||
|
||||
/* clean up anything we may have opened */
|
||||
fail:
|
||||
if (vgmstream) close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -294,10 +294,11 @@ VGMSTREAM* init_vgmstream_ea_bnk(STREAMFILE* sf) {
|
|||
|
||||
/* check extension */
|
||||
/* .bnk: common
|
||||
* .sdt: Harry Potter games
|
||||
* .sdt: Harry Potter games, Burnout games (PSP)
|
||||
* .hdt/ldt: Burnout games (PSP)
|
||||
* .abk: GoldenEye - Rogue Agent
|
||||
* .ast: FIFA 2004 (inside .big) */
|
||||
if (!check_extensions(sf,"bnk,sdt,abk,ast"))
|
||||
if (!check_extensions(sf,"bnk,sdt,hdt,ldt,abk,ast"))
|
||||
goto fail;
|
||||
|
||||
if (target_stream == 0) target_stream = 1;
|
||||
|
|
161
Frameworks/vgmstream/vgmstream/src/meta/ego_dic.c
Normal file
161
Frameworks/vgmstream/vgmstream/src/meta/ego_dic.c
Normal file
|
@ -0,0 +1,161 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
#include "../util/reader_text.h"
|
||||
|
||||
|
||||
/* DIC1 - from Codemaster's Ego engine 'dictionaries' [DiRT (PC), F1 2011 (PC), Race Driver Grid (PC)] */
|
||||
VGMSTREAM* init_vgmstream_ego_dic(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
STREAMFILE* sb = NULL;
|
||||
uint32_t stream_offset = 0, stream_size = 0, codec = 0;
|
||||
int channels = 0, loop_flag = 0, sample_rate = 0;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!is_id32be(0x00, sf, "DIC1"))
|
||||
return NULL;
|
||||
if (!check_extensions(sf, "dic"))
|
||||
return NULL;
|
||||
|
||||
/* 0x04: hash/info? */
|
||||
/* 0x08: version ("0.46": DiRT, "2.00": DiRT 2+ (no diffs?) */
|
||||
int containers = read_s32le(0x0c,sf);
|
||||
|
||||
int total_subsongs = 0;
|
||||
int target_subsong = sf->stream_index;
|
||||
if (target_subsong == 0) target_subsong = 1;
|
||||
|
||||
char container_name[0x10+1];
|
||||
char track_name[0x10+1];
|
||||
char ext[0x04+1];
|
||||
{
|
||||
/* N containers (external files) that may have N tracks, so we'll map all to subsongs */
|
||||
|
||||
bool track_found = false;
|
||||
uint32_t offset = 0x10;
|
||||
for (int i = 0; i < containers; i++) {
|
||||
uint32_t header_offset = read_u32le(offset + 0x00,sf);
|
||||
int tracks = read_s32le(offset + 0x04,sf);
|
||||
|
||||
/* target in container */
|
||||
if (!track_found && target_subsong >= total_subsongs + 1 && target_subsong < total_subsongs + 1 + tracks) {
|
||||
read_string(container_name, 0x10, offset + 0x08, sf);
|
||||
|
||||
int track_pos = target_subsong - total_subsongs - 1;
|
||||
uint32_t track_offset = header_offset + track_pos * 0x18;
|
||||
uint32_t curr_offset, flags, next_offset;
|
||||
|
||||
curr_offset = read_u32le(track_offset + 0x00, sf);
|
||||
sample_rate = read_u16le(track_offset + 0x04, sf);
|
||||
flags = read_u16le(track_offset + 0x06, sf);
|
||||
read_string(track_name, 0x10, track_offset + 0x08, sf);
|
||||
next_offset = read_u32le(track_offset + 0x18, sf); /* always exists as even after last track */
|
||||
|
||||
/* 8ch seen in Race Driver Grid music*.WIM, 2ch in other music tracks */
|
||||
channels = ((flags >> 5) & 0x7) + 1;
|
||||
loop_flag = flags & (1<<4);
|
||||
/* flag 0x8000: ? (common) */
|
||||
/* others: not seen */
|
||||
|
||||
stream_offset = curr_offset;
|
||||
stream_size = next_offset - curr_offset;
|
||||
|
||||
/* after all tracks comes container size + extension/codec */
|
||||
uint32_t ext_offset = header_offset + tracks * 0x18 + 0x04;
|
||||
codec = read_u32be(ext_offset + 0x00, sf);
|
||||
read_string(ext, 0x04, ext_offset + 0x00, sf);
|
||||
|
||||
track_found = true;
|
||||
}
|
||||
|
||||
total_subsongs += tracks;
|
||||
offset += 0x18;
|
||||
}
|
||||
|
||||
if (target_subsong > total_subsongs || total_subsongs <= 0) goto fail;
|
||||
if (!track_found) goto fail;
|
||||
}
|
||||
|
||||
{
|
||||
char resource_name[255];
|
||||
snprintf(resource_name, sizeof(resource_name), "%s.%s", container_name, ext);
|
||||
|
||||
sb = open_streamfile_by_filename(sf, resource_name);
|
||||
if (sb == NULL) {
|
||||
vgm_logi("DIC1: external file '%s' not found (put together)\n", resource_name);
|
||||
/* allow missing as silence since some game use huge .dic that is a bit hard to get */
|
||||
//goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_DIC1;
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
vgmstream->num_streams = total_subsongs;
|
||||
vgmstream->stream_size = stream_size;
|
||||
|
||||
|
||||
switch(codec) {
|
||||
case 0x57495000: //WIP\0
|
||||
vgmstream->coding_type = coding_PCM16LE;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x02;
|
||||
|
||||
vgmstream->num_samples = pcm16_bytes_to_samples(stream_size, channels);
|
||||
break;
|
||||
|
||||
case 0x57494D00: //WIM\0
|
||||
vgmstream->coding_type = coding_ULAW;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x01;
|
||||
|
||||
vgmstream->num_samples = pcm8_bytes_to_samples(stream_size, channels);
|
||||
break;
|
||||
|
||||
case 0x57494100: //WIA\0
|
||||
vgmstream->coding_type = coding_XBOX_IMA;
|
||||
vgmstream->layout_type = layout_none;
|
||||
|
||||
vgmstream->num_samples = xbox_ima_bytes_to_samples(stream_size, channels);
|
||||
stream_offset += 0x04; /* all streams start with 0xFFFFFFFF, may be some delimiter */
|
||||
break;
|
||||
|
||||
#ifdef VGM_USE_VORBIS
|
||||
case 0x57494F00: //WIO\0
|
||||
vgmstream->codec_data = init_ogg_vorbis(sb, stream_offset, stream_size, NULL);
|
||||
if (!vgmstream->codec_data) goto fail;
|
||||
vgmstream->coding_type = coding_OGG_VORBIS;
|
||||
vgmstream->layout_type = layout_none;
|
||||
|
||||
ogg_vorbis_get_samples(vgmstream->codec_data, &vgmstream->num_samples);
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
VGM_LOG("DIC1: unknown codec\n");
|
||||
goto fail;
|
||||
}
|
||||
snprintf(vgmstream->stream_name, STREAM_NAME_SIZE, "%s.%s%s/%s", container_name, ext, sb ? "" : "[MISSING]", track_name);
|
||||
|
||||
vgmstream->loop_start_sample = 0;
|
||||
vgmstream->loop_end_sample = vgmstream->num_samples;
|
||||
if (!sb) {
|
||||
vgmstream->coding_type = coding_SILENCE;
|
||||
vgmstream->layout_type = layout_none;
|
||||
}
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sb, stream_offset))
|
||||
goto fail;
|
||||
|
||||
close_streamfile(sb);
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
close_streamfile(sb);
|
||||
return NULL;
|
||||
}
|
|
@ -119,8 +119,9 @@ VGMSTREAM* init_vgmstream_fsb(STREAMFILE* sf) {
|
|||
/* .fsb: standard
|
||||
* .bnk: Hard Corps Uprising (PS3)
|
||||
* .sfx: Geon Cube (Wii)
|
||||
* .xen: Guitar Hero: World Tour (PC) */
|
||||
if ( !check_extensions(sf, "fsb,bnk,sfx,xen") )
|
||||
* .ps3: Neversoft games (PS3)
|
||||
* .xen: Neversoft games (X360/PC) */
|
||||
if ( !check_extensions(sf, "fsb,bnk,sfx,ps3,xen") )
|
||||
goto fail;
|
||||
|
||||
fsb.id = read_u32be(0x00,sf);
|
||||
|
|
|
@ -25,7 +25,7 @@ typedef struct {
|
|||
|
||||
#define MODE_FSB4_STD (FLAG_FSB4 | FLAG_STD)
|
||||
#define MODE_FSB4_ALT (FLAG_FSB4 | FLAG_ALT)
|
||||
#define MODE_FSB4_ALL (FLAG_FSB4 | FLAG_ALT)
|
||||
#define MODE_FSB4_ALL (FLAG_FSB4 | FLAG_STD | FLAG_ALT)
|
||||
#define MODE_FSB5_STD (FLAG_FSB5 | FLAG_STD)
|
||||
#define MODE_FSB5_ALT (FLAG_FSB5 | FLAG_STD)
|
||||
#define MODE_FSB5_ALL (FLAG_FSB5 | FLAG_STD | FLAG_ALT)
|
||||
|
@ -42,8 +42,8 @@ static const fsbkey_info fsbkey_list[] = {
|
|||
{ MODE_FSB5_STD, FSBKEY_ADD("sTOoeJXI2LjK8jBMOk8h5IDRNZl3jq3I") }, // Slightly Mad Studios: Project CARS (PC?), World of Speed (PC)
|
||||
{ MODE_FSB5_STD, FSBKEY_ADD("%lAn2{Pi*Lhw3T}@7*!kV=?qS$@iNlJ") }, // Ghost in the Shell: First Assault (PC)
|
||||
{ MODE_FSB5_STD, FSBKEY_ADD("1^7%82#&5$~/8sz") }, // RevHeadz Engine Sounds (Mobile)
|
||||
{ MODE_FSB5_ALL, FSBKEY_ADD("FDPrVuT4fAFvdHJYAgyMzRF4EcBAnKg") }, // Dark Souls 3 (PC) [untested]
|
||||
{ MODE_FSB4_ALL, FSBKEY_ADD("p&oACY^c4LK5C2v^x5nIO6kg5vNH$tlj") }, // Need for Speed Shift 2 Unleashed (PC demo?)[untested]
|
||||
{ MODE_FSB5_STD, FSBKEY_ADD("FDPrVuT4fAFvdHJYAgyMzRF4EcBAnKg") }, // Dark Souls 3 (PC)
|
||||
{ MODE_FSB4_STD, FSBKEY_ADD("p&oACY^c4LK5C2v^x5nIO6kg5vNH$tlj") }, // Need for Speed Shift 2 Unleashed (PC)
|
||||
{ MODE_FSB5_STD, FSBKEY_ADD("996164B5FC0F402983F61F220BB51DC6") }, // Mortal Kombat X/XL (PC)
|
||||
{ MODE_FSB5_STD, FSBKEY_ADD("logicsounddesignmwsdev") }, // Mirror War: Reincarnation of Holiness (PC)
|
||||
{ MODE_FSBS_ALL, FSBKEY_ADD("gat@tcqs2010") }, // Xian Xia Chuan (PC) [untested]
|
||||
|
@ -56,8 +56,8 @@ static const fsbkey_info fsbkey_list[] = {
|
|||
{ MODE_FSBS_ALL, FSBKEY_ADD("B2A7BB00") }, // Supreme Commander 2 [untested]
|
||||
{ MODE_FSB4_STD, FSBKEY_ADD("ghfxhslrghfxhslr") }, // Cookie Run: Ovenbreak
|
||||
{ MODE_FSB4_ALT, FSBKEY_ADD("truck/impact/carbody") },// Monster Jam (PS2) [FSB3]
|
||||
{ MODE_FSB4_ALT, FSBKEY_ADD("\xFC\xF9\xE4\xB3\xF5\x57\x5C\xA5\xAC\x13\xEC\x4A\x43\x19\x58\xEB\x4E\xF3\x84\x0B\x8B\x78\xFA\xFD\xBB\x18\x46\x7E\x31\xFB\xD0") },
|
||||
{ MODE_FSB4_ALT, FSBKEY_ADD("\x8C\xFA\xF3\x14\xB1\x53\xDA\xAB\x2B\x82\x6B\xD5\x55\x16\xCF\x01\x90\x20\x28\x14\xB1\x53\xD8") },
|
||||
{ MODE_FSB4_ALT, FSBKEY_ADD("\xFC\xF9\xE4\xB3\xF5\x57\x5C\xA5\xAC\x13\xEC\x4A\x43\x19\x58\xEB\x4E\xF3\x84\x0B\x8B\x78\xFA\xFD\xBB\x18\x46\x7E\x31\xFB\xD0") }, // Guitar Hero 5 (X360)
|
||||
{ MODE_FSB4_ALT, FSBKEY_ADD("\x8C\xFA\xF3\x14\xB1\x53\xDA\xAB\x2B\x82\x6B\xD5\x55\x16\xCF\x01\x90\x20\x28\x14\xB1\x53\xD8") }, // Guitar Hero: Metallica (X360)
|
||||
{ MODE_FSB5_STD, FSBKEY_ADD("G0KTrWjS9syqF7vVD6RaVXlFD91gMgkC") }, // Sekiro: Shadows Die Twice (PC)
|
||||
{ MODE_FSB5_STD, FSBKEY_ADD("BasicEncryptionKey") }, // SCP: Unity (PC)
|
||||
{ MODE_FSB5_STD, FSBKEY_ADD("FXnTffGJ9LS855Gc") }, // Worms Rumble Beta (PC)
|
||||
|
|
|
@ -13,8 +13,8 @@ typedef struct {
|
|||
|
||||
|
||||
/**
|
||||
* List of known keys, extracted from the game files (several found in 2ch.net, others from data analisys).
|
||||
* CRI's tools expect an unsigned 64 bit number string, but keys are commonly found online in hex form.
|
||||
* List of known keys, extracted from the game files (most from data analisys, some from 2ch.net/forums).
|
||||
* CRI's tools expect an unsigned 64 bit numberic string, but keys are commonly found online in hex form.
|
||||
* Keys only use 56 bits though, so the upper 8 bits can be ignored.
|
||||
*
|
||||
* Some ACB+AWB after mid 2018 use a user seed key + a scramble subkey in the AWB (normally 16b LE at 0x0e)
|
||||
|
@ -1181,9 +1181,12 @@ static const hcakey_info hcakey_list[] = {
|
|||
// Love Live! School Idol Festival 2 MIRACLE LIVE (Android)
|
||||
{5067530812966687744}, // 46537c6ceb39d400
|
||||
|
||||
// 404 Game RE:SET Prologue Demo (Android)
|
||||
// 404 Game RE:SET (Android)
|
||||
{21588207721978971}, // 004CB25C4C9B1C5B
|
||||
|
||||
// Disney Star Smash (Android)
|
||||
{3941111674189632}, // 000E006B915C3740
|
||||
|
||||
};
|
||||
|
||||
#endif/*_HCA_KEYS_H_*/
|
||||
|
|
|
@ -1,120 +1,101 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* HD3+BD3 - Sony PS3 bank format [Elevator Action Deluxe (PS3), R-Type Dimensions (PS3)] */
|
||||
VGMSTREAM * init_vgmstream_hd3_bd3(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
STREAMFILE * streamHeader = NULL;
|
||||
off_t start_offset;
|
||||
int channel_count, loop_flag, sample_rate;
|
||||
size_t interleave, stream_size;
|
||||
int total_subsongs, target_subsong = streamFile->stream_index;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(streamFile, "bd3"))
|
||||
goto fail;
|
||||
|
||||
streamHeader = open_streamfile_by_ext(streamFile,"hd3");
|
||||
if (!streamHeader) goto fail;
|
||||
|
||||
if (read_32bitBE(0x00,streamHeader) != 0x50334844) /* "P3HD" */
|
||||
goto fail;
|
||||
|
||||
/* 0x04: section size (not including first 0x08) */
|
||||
/* 0x08: version? 0x00020000 */
|
||||
/* 0x10: "P3PG" offset (seems mostly empty and contains number of subsongs towards the end) */
|
||||
/* 0x14: "P3TN" offset (some kind of config?) */
|
||||
/* 0x18: "P3VA" offset (VAG headers) */
|
||||
{
|
||||
off_t section_offset = read_32bitBE(0x18,streamHeader);
|
||||
off_t header_offset;
|
||||
size_t section_size;
|
||||
int i, entries, is_bgm = 0;
|
||||
|
||||
if (read_32bitBE(section_offset+0x00,streamHeader) != 0x50335641) /* "P3VA" */
|
||||
goto fail;
|
||||
section_size = read_32bitBE(section_offset+0x04,streamHeader); /* (not including first 0x08) */
|
||||
/* 0x08 size of all subsong headers + 0x10 */
|
||||
|
||||
entries = read_32bitBE(section_offset+0x14,streamHeader);
|
||||
/* often there is an extra subsong than written, but may be padding instead */
|
||||
if (read_32bitBE(section_offset + 0x20 + entries*0x10 + 0x04,streamHeader)) /* has sample rate */
|
||||
entries += 1;
|
||||
|
||||
if (entries * 0x10 > section_size) /* just in case, padding after entries is possible */
|
||||
goto fail;
|
||||
|
||||
/* autodetect use of N bank entries as channels [Elevator Action Deluxe (PS3)] */
|
||||
if (entries > 1) {
|
||||
size_t channel_size = read_32bitBE(section_offset+0x20+0x08,streamHeader);
|
||||
is_bgm = 1;
|
||||
|
||||
for (i = 1; i < entries; i++) {
|
||||
size_t next_size = read_32bitBE(section_offset+0x20+(i*0x10)+0x08,streamHeader);
|
||||
if (channel_size != next_size) {
|
||||
is_bgm = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is_bgm) {
|
||||
total_subsongs = 1;
|
||||
if (target_subsong == 0) target_subsong = 1;
|
||||
if (target_subsong < 0 || target_subsong > total_subsongs || total_subsongs < 1) goto fail;
|
||||
|
||||
header_offset = section_offset+0x20+(0)*0x10;
|
||||
start_offset = read_32bitBE(header_offset+0x00,streamHeader); /* 0x00 */
|
||||
sample_rate = read_32bitBE(header_offset+0x04,streamHeader);
|
||||
stream_size = get_streamfile_size(streamFile);
|
||||
if (read_32bitBE(header_offset+0x0c,streamHeader) != -1)
|
||||
goto fail;
|
||||
|
||||
channel_count = entries;
|
||||
interleave = stream_size / channel_count;
|
||||
}
|
||||
else {
|
||||
total_subsongs = entries;
|
||||
if (target_subsong == 0) target_subsong = 1;
|
||||
if (target_subsong < 0 || target_subsong > total_subsongs || total_subsongs < 1) goto fail;
|
||||
|
||||
header_offset = section_offset+0x20+(target_subsong-1)*0x10;
|
||||
start_offset = read_32bitBE(header_offset+0x00,streamHeader);
|
||||
sample_rate = read_32bitBE(header_offset+0x04,streamHeader);
|
||||
stream_size = read_32bitBE(header_offset+0x08,streamHeader);
|
||||
if (read_32bitBE(header_offset+0x0c,streamHeader) != -1)
|
||||
goto fail;
|
||||
|
||||
channel_count = 1;
|
||||
interleave = 0;
|
||||
}
|
||||
}
|
||||
|
||||
loop_flag = 0;
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
vgmstream->num_samples = ps_bytes_to_samples(stream_size, channel_count);
|
||||
vgmstream->num_streams = total_subsongs;
|
||||
vgmstream->stream_size = stream_size;
|
||||
|
||||
vgmstream->meta_type = meta_HD3_BD3;
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = (channel_count == 1) ? layout_none : layout_interleave;
|
||||
vgmstream->interleave_block_size = interleave;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream,streamFile,start_offset))
|
||||
goto fail;
|
||||
|
||||
close_streamfile(streamHeader);
|
||||
return vgmstream;
|
||||
fail:
|
||||
close_streamfile(streamHeader);
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* HD3+BD3 - Sony PS3 bank format [Elevator Action Deluxe (PS3), R-Type Dimensions (PS3)] */
|
||||
VGMSTREAM* init_vgmstream_hd3_bd3(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
STREAMFILE* sb = NULL;
|
||||
uint32_t stream_offset, stream_size;
|
||||
int channels, loop_flag, sample_rate, interleave;
|
||||
int total_subsongs, target_subsong = sf->stream_index;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!is_id32be(0x00,sf, "P3HD"))
|
||||
return NULL;
|
||||
if (!check_extensions(sf, "hd3"))
|
||||
return NULL;
|
||||
|
||||
sb = open_streamfile_by_ext(sf,"bd3");
|
||||
if (!sf) goto fail;
|
||||
|
||||
/* 0x04: section size (not including first 0x08) */
|
||||
/* 0x08: version? 0x00020000 */
|
||||
/* 0x10: "P3PG" offset (seems mostly empty and contains number of subsongs towards the end) */
|
||||
/* 0x14: "P3TN" offset (some kind of config/volumes/etc?) */
|
||||
/* 0x18: "P3VA" offset (VAG headers) */
|
||||
{
|
||||
uint32_t section_offset = read_u32be(0x18,sf);
|
||||
uint32_t section_size;
|
||||
int entries;
|
||||
|
||||
if (!is_id32be(section_offset+0x00,sf, "P3VA"))
|
||||
goto fail;
|
||||
section_size = read_u32be(section_offset+0x04,sf); /* (not including first 0x08) */
|
||||
/* 0x08 size of all subsong headers + 0x10 */
|
||||
|
||||
entries = read_u32be(section_offset+0x14,sf);
|
||||
/* often there is an extra subsong than written, but may be padding instead */
|
||||
if (read_u32be(section_offset + 0x20 + entries*0x10 + 0x04,sf)) /* has sample rate */
|
||||
entries += 1;
|
||||
|
||||
if (entries * 0x10 > section_size) /* just in case, padding after entries is possible */
|
||||
goto fail;
|
||||
|
||||
/* very often subsongs make stereo pairs (even with many), this detects simple cases */ //TODO check if there is some flag or remove hack
|
||||
bool is_bgm = false;
|
||||
if (entries == 2) {
|
||||
uint32_t curr_size = read_u32be(section_offset+0x20+(0*0x10)+0x08,sf);
|
||||
uint32_t next_size = read_u32be(section_offset+0x20+(1*0x10)+0x08,sf);
|
||||
is_bgm = (curr_size == next_size);
|
||||
}
|
||||
|
||||
if (is_bgm) {
|
||||
total_subsongs = 1;
|
||||
channels = entries;
|
||||
}
|
||||
else {
|
||||
total_subsongs = entries;
|
||||
channels = 1;
|
||||
}
|
||||
if (target_subsong == 0) target_subsong = 1;
|
||||
if (target_subsong < 0 || target_subsong > total_subsongs || total_subsongs < 1) goto fail;
|
||||
if (target_subsong == 0) target_subsong = 1;
|
||||
if (target_subsong < 0 || target_subsong > total_subsongs || total_subsongs < 1) goto fail;
|
||||
|
||||
uint32_t header_offset = section_offset+0x20+(target_subsong-1)*0x10;
|
||||
stream_offset = read_u32be(header_offset+0x00,sf);
|
||||
sample_rate = read_u32be(header_offset+0x04,sf);
|
||||
stream_size = read_u32be(header_offset+0x08,sf) * channels;
|
||||
interleave = stream_size / channels;
|
||||
if (read_s32be(header_offset+0x0c,sf) != -1)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
loop_flag = 0;
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
vgmstream->num_samples = ps_bytes_to_samples(stream_size, channels);
|
||||
vgmstream->num_streams = total_subsongs;
|
||||
vgmstream->stream_size = stream_size;
|
||||
|
||||
vgmstream->meta_type = meta_HD3_BD3;
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = (channels == 1) ? layout_none : layout_interleave;
|
||||
vgmstream->interleave_block_size = interleave;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sb, stream_offset))
|
||||
goto fail;
|
||||
|
||||
close_streamfile(sb);
|
||||
return vgmstream;
|
||||
fail:
|
||||
close_streamfile(sb);
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -10,10 +10,10 @@ VGMSTREAM* init_vgmstream_ild(STREAMFILE* sf) {
|
|||
|
||||
/* check ILD Header */
|
||||
if (!is_id32be(0x00,sf, "ILD\0"))
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
if (!check_extensions(sf, "ild"))
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
channels = read_u32le(0x04,sf); /* tracks (seen 2 and 4) */
|
||||
start_offset = read_u32le(0x08,sf);
|
|
@ -1,9 +1,9 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
#include "ps2_enth_streamfile.h"
|
||||
#include "lp_ap_lep_streamfile.h"
|
||||
|
||||
/* LP/AP/LEP - from Konami (KCES)'s Enthusia: Professional Racing (PS2) */
|
||||
VGMSTREAM* init_vgmstream_ps2_enth(STREAMFILE* sf) {
|
||||
VGMSTREAM* init_vgmstream_lp_ap_lep(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
STREAMFILE* temp_sf = NULL;
|
||||
off_t start_offset;
|
||||
|
@ -13,10 +13,13 @@ VGMSTREAM* init_vgmstream_ps2_enth(STREAMFILE* sf) {
|
|||
|
||||
|
||||
/* checks */
|
||||
if (!is_id32be(0x00,sf,"LP ") && !is_id32be(0x00,sf,"AP ") && !is_id32be(0x00,sf,"LEP "))
|
||||
return NULL;
|
||||
|
||||
/* .bin/lbin: internal (no names in bigfiles but exes mention "bgm%05d.bin" and "LEP data")
|
||||
* .lp/lep/ap: header ID */
|
||||
if (!check_extensions(sf, "bin,lbin,lp,lep,ap"))
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
id = read_u32be(0x00,sf);
|
||||
switch (id) {
|
||||
|
@ -49,7 +52,7 @@ VGMSTREAM* init_vgmstream_ps2_enth(STREAMFILE* sf) {
|
|||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_PS2_ENTH;
|
||||
vgmstream->meta_type = meta_LP_AP_LEP;
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
|
||||
switch (id) {
|
|
@ -3,9 +3,10 @@
|
|||
#include "lrmd_streamfile.h"
|
||||
|
||||
/* LRMD - Sony/SCEI's format (Loco Roco Music Data?) [LocoRoco 2 (PSP), LocoRoco: Midnight Carnival (PSP)] */
|
||||
VGMSTREAM * init_vgmstream_lrmd(STREAMFILE *sf) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
STREAMFILE * sf_h = NULL, *temp_sf = NULL;
|
||||
VGMSTREAM* init_vgmstream_lrmd(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
STREAMFILE* sb = NULL;
|
||||
STREAMFILE* temp_sf = NULL;
|
||||
off_t stream_offset, section1_offset, section2_offset, basename_offset, subname_offset;
|
||||
size_t stream_size, max_chunk, block_size = 0, chunk_start, chunk_size;
|
||||
int loop_flag, channel_count, sample_rate, layers;
|
||||
|
@ -14,39 +15,41 @@ VGMSTREAM * init_vgmstream_lrmd(STREAMFILE *sf) {
|
|||
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(sf, "lrmb"))
|
||||
goto fail;
|
||||
sf_h = open_streamfile_by_ext(sf, "lrmh");
|
||||
if (!sf_h) goto fail;
|
||||
|
||||
|
||||
if (read_u32be(0x00, sf_h) != 0x4C524D44) /* "LRMD" */
|
||||
goto fail;
|
||||
if (!is_id32be(0x00, sf, "LRMD"))
|
||||
return NULL;
|
||||
/* 0x00: version 1? */
|
||||
/* 0x08: header size */
|
||||
/* 0x0c: body size */
|
||||
|
||||
if (read_u32be(0x10, sf_h) != 0x52455144) /* "REQD" */
|
||||
goto fail;
|
||||
if (!is_id32be(0x10, sf, "REQD"))
|
||||
return NULL;
|
||||
/* 0x14: chunk size */
|
||||
/* 0x18: null? */
|
||||
/* 0x1c: 1? */
|
||||
|
||||
/* .lrmh+lrmb: actual extensions */
|
||||
if (!check_extensions(sf, "lrmh"))
|
||||
goto fail;
|
||||
|
||||
sb = open_streamfile_by_ext(sf, "lrmb");
|
||||
if (!sb) goto fail;
|
||||
|
||||
/* 0x20: null */
|
||||
basename_offset = read_u32le(0x24, sf_h);
|
||||
if (read_u16le(0x28, sf_h) != 0x4000) { /* pitch? */
|
||||
basename_offset = read_u32le(0x24, sf);
|
||||
if (read_u16le(0x28, sf) != 0x4000) { /* pitch? */
|
||||
VGM_LOG("LRMD: unknown value\n");
|
||||
goto fail;
|
||||
}
|
||||
max_chunk = read_u16le(0x2a, sf_h);
|
||||
num_samples = read_u32le(0x2c, sf_h);
|
||||
max_chunk = read_u16le(0x2a, sf);
|
||||
num_samples = read_u32le(0x2c, sf);
|
||||
/* 0x30: null? */
|
||||
/* 0x34: data size for all layers */
|
||||
layers = read_u32le(0x38, sf_h);
|
||||
section1_offset = read_u32le(0x3c, sf_h);
|
||||
layers = read_u32le(0x38, sf);
|
||||
section1_offset = read_u32le(0x3c, sf);
|
||||
/* 0x40: lip table entries */
|
||||
/* 0x44: lip table offset */
|
||||
/* 0x48: section2 flag */
|
||||
section2_offset = read_u32le(0x4c, sf_h);
|
||||
section2_offset = read_u32le(0x4c, sf);
|
||||
/* 0x40: section3 flag */
|
||||
/* 0x44: section3 (unknown) */
|
||||
|
||||
|
@ -68,11 +71,11 @@ VGMSTREAM * init_vgmstream_lrmd(STREAMFILE *sf) {
|
|||
int layer_channels;
|
||||
|
||||
/* not too sure but needed for LR2's muihouse last 3 layers */
|
||||
layer_channels = read_u8(header_offset + 0x0d, sf_h) != 0 ? 1 : 2;
|
||||
layer_channels = read_u8(header_offset + 0x0d, sf) != 0 ? 1 : 2;
|
||||
|
||||
if (i + 1 == target_subsong) {
|
||||
/* 0x00: null */
|
||||
subname_offset = read_u32le(header_offset + 0x04, sf_h);
|
||||
subname_offset = read_u32le(header_offset + 0x04, sf);
|
||||
/* 0x08: unk */
|
||||
/* 0x0c: flags? */
|
||||
/* 0x10: null? */
|
||||
|
@ -94,9 +97,9 @@ VGMSTREAM * init_vgmstream_lrmd(STREAMFILE *sf) {
|
|||
/* section2: loops */
|
||||
/* 0x00: offset to "loop" name */
|
||||
if (section2_offset > 0) {
|
||||
loop_end = read_u32le(section2_offset + 0x04, sf_h);
|
||||
loop_start = read_u32le(section2_offset + 0x08, sf_h);
|
||||
loop_flag = read_u32le(section2_offset + 0x0c, sf_h);
|
||||
loop_end = read_u32le(section2_offset + 0x04, sf);
|
||||
loop_start = read_u32le(section2_offset + 0x08, sf);
|
||||
loop_flag = read_u32le(section2_offset + 0x0c, sf);
|
||||
}
|
||||
else {
|
||||
loop_end = 0;
|
||||
|
@ -106,7 +109,7 @@ VGMSTREAM * init_vgmstream_lrmd(STREAMFILE *sf) {
|
|||
|
||||
|
||||
/* data de-interleave */
|
||||
temp_sf = setup_lrmd_streamfile(sf, block_size, chunk_start, chunk_size);
|
||||
temp_sf = setup_lrmd_streamfile(sb, block_size, chunk_start, chunk_size);
|
||||
if (!temp_sf) goto fail;
|
||||
|
||||
stream_offset = 0x00;
|
||||
|
@ -142,23 +145,23 @@ VGMSTREAM * init_vgmstream_lrmd(STREAMFILE *sf) {
|
|||
|
||||
/* name custom main + layer name */
|
||||
{
|
||||
int name_len = read_string(vgmstream->stream_name, STREAM_NAME_SIZE - 1, basename_offset, sf_h);
|
||||
int name_len = read_string(vgmstream->stream_name, STREAM_NAME_SIZE - 1, basename_offset, sf);
|
||||
|
||||
strcat(vgmstream->stream_name, "/");
|
||||
name_len++;
|
||||
|
||||
read_string(vgmstream->stream_name + name_len, STREAM_NAME_SIZE - name_len, subname_offset, sf_h);
|
||||
read_string(vgmstream->stream_name + name_len, STREAM_NAME_SIZE - name_len, subname_offset, sf);
|
||||
}
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, temp_sf, stream_offset))
|
||||
goto fail;
|
||||
|
||||
close_streamfile(sf_h);
|
||||
close_streamfile(sb);
|
||||
close_streamfile(temp_sf);
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_streamfile(sf_h);
|
||||
close_streamfile(sb);
|
||||
close_streamfile(temp_sf);
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
|
|
|
@ -1,43 +1,85 @@
|
|||
#include "meta.h"
|
||||
#include "../util.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* .lsf - from Atod games [Fastlane Street Racing (iPhone), Chicane Street Racing prototype (Gizmondo)] */
|
||||
VGMSTREAM * init_vgmstream_lsf_n1nj4n(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag, channel_count;
|
||||
size_t file_size;
|
||||
/* .lsf - from Gizmondo Studios Helsingborg/Atod AB games [Chicane Street Racing (Gizmondo), Fastlane Street Racing (iOS)] */
|
||||
VGMSTREAM* init_vgmstream_lsf_n1nj4n(STREAMFILE *sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
uint32_t start_offset, data_size, loop_start = 0, loop_end = 0;
|
||||
int channels, loop_flag, sample_rate;
|
||||
bool is_v2 = false;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(streamFile, "lsf"))
|
||||
if ((read_u64be(0x00, sf) & 0xFFFFFFFFFFFFFF00) == get_id64be("!n1nj4n\0"))
|
||||
is_v2 = false;
|
||||
else if ((read_u64be(0x00, sf) & 0xFFFFFFFFFFFFFF00) == get_id64be("n1nj4n!\0"))
|
||||
is_v2 = true; /* some files in Agaju: The Sacred Path (Gizmondo) */
|
||||
else
|
||||
return NULL;
|
||||
|
||||
/* .lsf: actual extension, exe strings seem to call this format "LSF" as well */
|
||||
if (!check_extensions(sf, "lsf"))
|
||||
return NULL;
|
||||
|
||||
uint8_t flags = read_u8(0x07, sf);
|
||||
uint32_t offset = 0x08;
|
||||
|
||||
if (flags & 0x01) {
|
||||
loop_start = read_u32le(offset + 0x00,sf);
|
||||
loop_end = read_u32le(offset + 0x04,sf);
|
||||
offset += 0x08;
|
||||
}
|
||||
|
||||
if ((flags & 0x01) && (flags & 0x02)) {
|
||||
//00: loop hist related?
|
||||
offset += 0x04;
|
||||
}
|
||||
|
||||
if (flags & 0x02) {
|
||||
int count = read_u32le(offset + 0x00,sf); /* not channels */
|
||||
// per entry:
|
||||
// 00: channel related?
|
||||
// 04: null?
|
||||
// 0c: ~0x3130?
|
||||
offset += 0x04 + 0x0c * count;
|
||||
}
|
||||
|
||||
sample_rate = read_u32le(offset + 0x00, sf);
|
||||
data_size = read_u32le(offset + 0x04, sf);
|
||||
offset += 0x08;
|
||||
start_offset = offset;
|
||||
|
||||
if (start_offset + data_size != get_streamfile_size(sf))
|
||||
goto fail;
|
||||
|
||||
if (read_32bitBE(0x00, streamFile) != 0x216E316E || // "!n1n"
|
||||
read_32bitBE(0x04, streamFile) != 0x6A346E00) // "j4n\0"
|
||||
goto fail;
|
||||
|
||||
file_size = get_streamfile_size(streamFile);
|
||||
if (read_32bitLE(0x0C, streamFile) + 0x10 != file_size)
|
||||
goto fail;
|
||||
|
||||
loop_flag = 0;
|
||||
channel_count = 1;
|
||||
start_offset = 0x10;
|
||||
|
||||
channels = 1;
|
||||
loop_flag = loop_end > 0;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count, loop_flag);
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_LSF_N1NJ4N;
|
||||
vgmstream->sample_rate = read_32bitLE(0x08, streamFile);
|
||||
vgmstream->num_samples = (file_size-0x10)/0x1c*0x1b*2;
|
||||
vgmstream->coding_type = coding_LSF;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x1c;
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream,streamFile,start_offset))
|
||||
if (is_v2) {
|
||||
vgmstream->coding_type = coding_PSX_cfg;
|
||||
vgmstream->layout_type = layout_none;
|
||||
vgmstream->frame_size = 0x10;
|
||||
}
|
||||
else {
|
||||
/* custom codec but basically obfuscted PSX-cfg */
|
||||
vgmstream->coding_type = coding_LSF;
|
||||
vgmstream->layout_type = layout_interleave; //TODO: flat but decoder doesn't handle it
|
||||
vgmstream->interleave_block_size = 0x1c;
|
||||
vgmstream->frame_size = 0x1c; /* fixed but used below */
|
||||
}
|
||||
|
||||
vgmstream->num_samples = ps_cfg_bytes_to_samples(data_size, vgmstream->frame_size, channels);
|
||||
vgmstream->loop_start_sample = ps_cfg_bytes_to_samples(loop_start, vgmstream->frame_size, channels);
|
||||
vgmstream->loop_end_sample = ps_cfg_bytes_to_samples(loop_end, vgmstream->frame_size, channels);
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream,sf,start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "../vgmstream.h"
|
||||
#include "../util/reader_sf.h"
|
||||
#include "../util/reader_text.h"
|
||||
#include "../util/sf_utils.h"
|
||||
|
||||
typedef VGMSTREAM* (*init_vgmstream_t)(STREAMFILE* sf);
|
||||
|
||||
|
@ -80,7 +81,7 @@ VGMSTREAM * init_vgmstream_nps(STREAMFILE *streamFile);
|
|||
|
||||
VGMSTREAM * init_vgmstream_rs03(STREAMFILE *streamFile);
|
||||
|
||||
VGMSTREAM* init_vgmstream_rsf(STREAMFILE* sf);
|
||||
VGMSTREAM* init_vgmstream_raw_rsf(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_rwsd(STREAMFILE *streamFile);
|
||||
|
||||
|
@ -109,8 +110,6 @@ VGMSTREAM * init_vgmstream_seb(STREAMFILE *streamFile);
|
|||
|
||||
VGMSTREAM * init_vgmstream_ild(STREAMFILE *streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ps2_pnb(STREAMFILE *streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_raw_wavm(STREAMFILE *streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ngc_str(STREAMFILE *streamFile);
|
||||
|
@ -209,7 +208,7 @@ VGMSTREAM * init_vgmstream_fsb4_wav(STREAMFILE * streamFile);
|
|||
|
||||
VGMSTREAM * init_vgmstream_fsb5(STREAMFILE * streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_rwx(STREAMFILE * streamFile);
|
||||
VGMSTREAM* init_vgmstream_rwax(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_xwb(STREAMFILE * streamFile);
|
||||
|
||||
|
@ -219,8 +218,6 @@ VGMSTREAM * init_vgmstream_musc(STREAMFILE * streamFile);
|
|||
|
||||
VGMSTREAM * init_vgmstream_musx(STREAMFILE * streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_leg(STREAMFILE * streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_filp(STREAMFILE * streamFile);
|
||||
|
||||
VGMSTREAM* init_vgmstream_ikm(STREAMFILE* sf);
|
||||
|
@ -233,7 +230,7 @@ VGMSTREAM * init_vgmstream_bg00(STREAMFILE * streamFile);
|
|||
|
||||
VGMSTREAM * init_vgmstream_dc_kcey(STREAMFILE * streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ps2_rstm(STREAMFILE * streamFile);
|
||||
VGMSTREAM* init_vgmstream_rstm_rockstar(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_acm(STREAMFILE * streamFile);
|
||||
|
||||
|
@ -254,7 +251,7 @@ VGMSTREAM * init_vgmstream_ps2_rkv(STREAMFILE * streamFile);
|
|||
VGMSTREAM * init_vgmstream_ps2_vas(STREAMFILE * streamFile);
|
||||
VGMSTREAM * init_vgmstream_ps2_vas_container(STREAMFILE * streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ps2_enth(STREAMFILE * streamFile);
|
||||
VGMSTREAM* init_vgmstream_lp_ap_lep(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_sdt(STREAMFILE * streamFile);
|
||||
|
||||
|
@ -278,8 +275,6 @@ VGMSTREAM * init_vgmstream_xmu(STREAMFILE *streamFile);
|
|||
|
||||
VGMSTREAM * init_vgmstream_xvas(STREAMFILE *streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ngc_bh2pcm(STREAMFILE *streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_sat_sap(STREAMFILE *streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_dc_idvi(STREAMFILE *streamFile);
|
||||
|
@ -288,13 +283,13 @@ VGMSTREAM * init_vgmstream_ps2_rnd(STREAMFILE *streamFile);
|
|||
|
||||
VGMSTREAM * init_vgmstream_kraw(STREAMFILE *streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ps2_omu(STREAMFILE *streamFile);
|
||||
VGMSTREAM* init_vgmstream_omu(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ps2_xa2(STREAMFILE * streamFile);
|
||||
VGMSTREAM* init_vgmstream_xa2_acclaim(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_idsp_ie(STREAMFILE * streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ngc_ymf(STREAMFILE * streamFile);
|
||||
VGMSTREAM* init_vgmstream_ymf(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_sadl(STREAMFILE * streamFile);
|
||||
|
||||
|
@ -371,9 +366,6 @@ VGMSTREAM * init_vgmstream_vsf(STREAMFILE *streamFile);
|
|||
|
||||
VGMSTREAM * init_vgmstream_nds_rrds(STREAMFILE *streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ps2_tk5(STREAMFILE *streamFile);
|
||||
VGMSTREAM * init_vgmstream_ps2_tk1(STREAMFILE* streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ps2_vsf_tta(STREAMFILE *streamFile);
|
||||
|
||||
VGMSTREAM* init_vgmstream_ads_midway(STREAMFILE* sf);
|
||||
|
@ -390,8 +382,6 @@ VGMSTREAM * init_vgmstream_ivaud(STREAMFILE *streamFile);
|
|||
|
||||
VGMSTREAM * init_vgmstream_ps2_sps(STREAMFILE *streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ps2_xa2_rrp(STREAMFILE *streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_nds_hwas(STREAMFILE *streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ngc_lps(STREAMFILE * streamFile);
|
||||
|
@ -445,15 +435,15 @@ VGMSTREAM * init_vgmstream_bnsf(STREAMFILE* streamFile);
|
|||
|
||||
VGMSTREAM * init_vgmstream_ps2_wb(STREAMFILE* streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_s14_sss(STREAMFILE* streamFile);
|
||||
VGMSTREAM* init_vgmstream_raw_s14_sss(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ps2_gcm(STREAMFILE* streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ps2_smpl(STREAMFILE* streamFile);
|
||||
VGMSTREAM* init_vgmstream_smpl(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ps2_msa(STREAMFILE* streamFile);
|
||||
VGMSTREAM* init_vgmstream_msa(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ps2_voi(STREAMFILE* streamFile);
|
||||
VGMSTREAM* init_vgmstream_voi(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ngc_rkv(STREAMFILE* streamFile);
|
||||
|
||||
|
@ -471,8 +461,6 @@ VGMSTREAM * init_vgmstream_ps2_adm(STREAMFILE* streamFile);
|
|||
|
||||
VGMSTREAM* init_vgmstream_lpcm_shade(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_dsp_bdsp(STREAMFILE* streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ps2_vms(STREAMFILE* streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_xau(STREAMFILE* streamFile);
|
||||
|
@ -520,7 +508,7 @@ VGMSTREAM * init_vgmstream_hyperscan_kvag(STREAMFILE* streamFile);
|
|||
|
||||
VGMSTREAM * init_vgmstream_ios_psnd(STREAMFILE* streamFile);
|
||||
|
||||
VGMSTREAM* init_vgmstream_adp_bos(STREAMFILE* sf);
|
||||
VGMSTREAM* init_vgmstream_adp_wildfire(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM* init_vgmstream_adp_qd(STREAMFILE* sf);
|
||||
|
||||
|
@ -576,7 +564,7 @@ VGMSTREAM * init_vgmstream_ps2_vds_vdm(STREAMFILE* streamFile);
|
|||
|
||||
VGMSTREAM * init_vgmstream_cxs(STREAMFILE* streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_dsp_adx(STREAMFILE *streamFile);
|
||||
VGMSTREAM* init_vgmstream_adx_monster(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_akb(STREAMFILE *streamFile);
|
||||
VGMSTREAM * init_vgmstream_akb2(STREAMFILE *streamFile);
|
||||
|
@ -606,8 +594,6 @@ VGMSTREAM * init_vgmstream_va3(STREAMFILE *streamFile);
|
|||
VGMSTREAM * init_vgmstream_mta2(STREAMFILE *streamFile);
|
||||
VGMSTREAM * init_vgmstream_mta2_container(STREAMFILE *streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ngc_ulw(STREAMFILE * streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_xa_xa30(STREAMFILE * streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_xa_04sw(STREAMFILE * streamFile);
|
||||
|
@ -627,7 +613,7 @@ VGMSTREAM * init_vgmstream_ea_schl_fixed(STREAMFILE * streamFile);
|
|||
|
||||
VGMSTREAM * init_vgmstream_sk_aud(STREAMFILE * streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_stm(STREAMFILE * streamFile);
|
||||
VGMSTREAM* init_vgmstream_stma(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_awc(STREAMFILE * streamFile);
|
||||
|
||||
|
@ -646,8 +632,6 @@ VGMSTREAM* init_vgmstream_opus_nsopus(STREAMFILE* sf);
|
|||
VGMSTREAM* init_vgmstream_opus_sqex(STREAMFILE* sf);
|
||||
VGMSTREAM* init_vgmstream_opus_rsnd(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_raw_al(STREAMFILE * streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_pc_ast(STREAMFILE * streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_naac(STREAMFILE * streamFile);
|
||||
|
@ -673,7 +657,7 @@ VGMSTREAM * init_vgmstream_ea_tmx(STREAMFILE * streamFile);
|
|||
VGMSTREAM * init_vgmstream_ea_sbr(STREAMFILE * streamFile);
|
||||
VGMSTREAM * init_vgmstream_ea_sbr_harmony(STREAMFILE * streamFile);
|
||||
|
||||
VGMSTREAM * init_vgmstream_ngc_vid1(STREAMFILE * streamFile);
|
||||
VGMSTREAM* init_vgmstream_vid1(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM * init_vgmstream_flx(STREAMFILE * streamFile);
|
||||
|
||||
|
@ -990,4 +974,12 @@ VGMSTREAM* init_vgmstream_bigrp(STREAMFILE* sf);
|
|||
|
||||
VGMSTREAM* init_vgmstream_sscf_encrypted(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM* init_vgmstream_ego_dic(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM* init_vgmstream_awd(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM* init_vgmstream_rws_809(STREAMFILE* sf);
|
||||
|
||||
VGMSTREAM* init_vgmstream_pwb(STREAMFILE* sf);
|
||||
|
||||
#endif /*_META_H*/
|
||||
|
|
|
@ -34,8 +34,11 @@ VGMSTREAM* init_vgmstream_mpeg(STREAMFILE* sf) {
|
|||
|
||||
/* .mp3/mp2: standard
|
||||
* .lmp3/lmp2: for plugins
|
||||
* .mus: Marc Ecko's Getting Up (PC) */
|
||||
if (!check_extensions(sf, "mp3,mp2,lmp3,lmp2,mus"))
|
||||
* .mus: Marc Ecko's Getting Up (PC)
|
||||
* .imf: Colors (Gizmondo)
|
||||
* .aix: Classic Compendium 2 (Gizmondo)
|
||||
* (extensionless): Interstellar Flames 2 (Gizmondo) */
|
||||
if (!check_extensions(sf, "mp3,mp2,lmp3,lmp2,mus,imf,aix,,"))
|
||||
goto fail;
|
||||
|
||||
loop_flag = 0;
|
||||
|
|
62
Frameworks/vgmstream/vgmstream/src/meta/msa.c
Normal file
62
Frameworks/vgmstream/vgmstream/src/meta/msa.c
Normal file
|
@ -0,0 +1,62 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* MSA - from Sucess games [Psyvariar -Complete Edition- (PS2), Konohana Pack: 3tsu no Jikenbo (PS2)]*/
|
||||
VGMSTREAM* init_vgmstream_msa(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
uint32_t start_offset, data_size, channel_size, file_size;
|
||||
int loop_flag, channels;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (read_u32be(0x00,sf) != 0x00000000 || read_u32be(0x08,sf) != 0x00000000)
|
||||
return NULL;
|
||||
if (!check_extensions(sf, "msa"))
|
||||
return NULL;
|
||||
|
||||
loop_flag = 0;
|
||||
channels = 2;
|
||||
start_offset = 0x14;
|
||||
|
||||
file_size = get_streamfile_size(sf);
|
||||
data_size = read_u32le(0x04,sf); /* wrong, see below */
|
||||
channel_size = read_u32le(0x0c,sf); /* also wrong like data_size */
|
||||
|
||||
if (!ps_check_format(sf, start_offset, 0x100))
|
||||
return NULL;
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_MSA;
|
||||
vgmstream->sample_rate = read_s32le(0x10,sf);
|
||||
if (vgmstream->sample_rate == 0) /* ex. Psyvariar's AME.MSA */
|
||||
vgmstream->sample_rate = 44100;
|
||||
vgmstream->num_samples = ps_bytes_to_samples(data_size, channels);
|
||||
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
|
||||
if (channel_size) /* Konohana Pack */
|
||||
vgmstream->interleave_block_size = 0x6000;
|
||||
else /* Psyvariar */
|
||||
vgmstream->interleave_block_size = 0x4000;
|
||||
|
||||
/* MSAs are strangely truncated, so manually calculate samples.
|
||||
* Data after last usable block is always silence or garbage. */
|
||||
if (data_size > file_size) {
|
||||
uint32_t usable_size = file_size - start_offset;
|
||||
usable_size -= usable_size % (vgmstream->interleave_block_size * channels); /* block-aligned */
|
||||
vgmstream->num_samples = ps_bytes_to_samples(usable_size, channels);
|
||||
}
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -1,38 +1,39 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* .MYSPF - from U-Sing (Wii) */
|
||||
VGMSTREAM * init_vgmstream_myspd(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
int loop_flag = 0, channel_count;
|
||||
off_t start_offset;
|
||||
size_t channel_size;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
if (!check_extensions(streamFile,"myspd"))
|
||||
goto fail;
|
||||
/* .MYSPD - from U-Sing (Wii) */
|
||||
VGMSTREAM* init_vgmstream_myspd(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
int loop_flag = 0, channels;
|
||||
uint32_t start_offset, channel_size;
|
||||
|
||||
channel_count = 2;
|
||||
/* checks */
|
||||
/* .myspd: actual extension */
|
||||
if (!check_extensions(sf,"myspd"))
|
||||
return NULL;
|
||||
|
||||
channels = 2;
|
||||
start_offset = 0x20;
|
||||
channel_size = read_32bitBE(0x00,streamFile);
|
||||
channel_size = read_s32be(0x00,sf);
|
||||
|
||||
/* check size */
|
||||
if ((channel_size * channel_count + start_offset) != get_streamfile_size(streamFile))
|
||||
goto fail;
|
||||
if (channel_size * channels + start_offset != get_streamfile_size(sf))
|
||||
goto fail;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->num_samples = ima_bytes_to_samples(channel_size*channel_count, channel_count);
|
||||
vgmstream->sample_rate = read_32bitBE(0x04,streamFile);
|
||||
vgmstream->num_samples = ima_bytes_to_samples(channel_size*channels, channels);
|
||||
vgmstream->sample_rate = read_s32be(0x04,sf);
|
||||
|
||||
vgmstream->meta_type = meta_MYSPD;
|
||||
vgmstream->coding_type = coding_IMA_int;
|
||||
vgmstream->coding_type = coding_IMA_int;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = channel_size;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream,streamFile,start_offset))
|
||||
if (!vgmstream_open_stream(vgmstream,sf,start_offset))
|
||||
goto fail;
|
||||
|
||||
return vgmstream;
|
||||
|
|
|
@ -11,9 +11,10 @@ VGMSTREAM* init_vgmstream_dtk(STREAMFILE* sf) {
|
|||
|
||||
/* checks */
|
||||
/* .dtk: standard [XGRA (GC)]
|
||||
* .adp: standard [Harvest Moon AWL (GC)]
|
||||
* .adp: standard [Harvest Moon: AWL (GC)]
|
||||
* .trk: Bloody Roar: Primal Fury (GC)
|
||||
* .wav/lwav: Alien Hominid (GC) */
|
||||
if (!check_extensions(sf,"dtk,adp,wav,lwav"))
|
||||
if (!check_extensions(sf,"dtk,adp,trk,wav,lwav"))
|
||||
goto fail;
|
||||
|
||||
/* check valid frames as files have no header, and .adp/wav are common */
|
||||
|
|
|
@ -1,87 +0,0 @@
|
|||
#include "meta.h"
|
||||
#include "../util.h"
|
||||
|
||||
/* BH2PCM (from Bio Hazard 2) */
|
||||
VGMSTREAM * init_vgmstream_ngc_bh2pcm(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
char filename[PATH_LIMIT];
|
||||
off_t start_offset;
|
||||
int channel_count;
|
||||
int format_detect;
|
||||
int loop_flag;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("bh2pcm",filename_extension(filename))) goto fail;
|
||||
|
||||
#if 0
|
||||
/* check header */
|
||||
if (read_32bitBE(0x00,streamFile) != 0x00000000)
|
||||
goto fail;
|
||||
#endif
|
||||
|
||||
loop_flag = 0;
|
||||
channel_count = 2;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
/* fill in the vital statistics */
|
||||
format_detect=read_32bitLE(0x00,streamFile);
|
||||
switch (format_detect) {
|
||||
case 1:
|
||||
start_offset = 0x20;
|
||||
channel_count = 2;
|
||||
vgmstream->channels = channel_count;
|
||||
vgmstream->sample_rate = 32000;
|
||||
vgmstream->num_samples = read_32bitLE(0x04,streamFile)/2;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = read_32bitLE(0x04,streamFile);
|
||||
if (loop_flag) {
|
||||
vgmstream->loop_start_sample = 0;
|
||||
vgmstream->loop_end_sample = read_32bitLE(0x14,streamFile);
|
||||
}
|
||||
break;
|
||||
case 0:
|
||||
start_offset = 0x20;
|
||||
channel_count = 1;
|
||||
vgmstream->channels = channel_count;
|
||||
vgmstream->sample_rate = 32000;
|
||||
vgmstream->num_samples = read_32bitLE(0x0C,streamFile);
|
||||
vgmstream->layout_type = layout_none;
|
||||
if (loop_flag) {
|
||||
vgmstream->loop_start_sample = read_32bitLE(0x08,streamFile);
|
||||
vgmstream->loop_end_sample = read_32bitLE(0x0C,streamFile);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
goto fail;
|
||||
}
|
||||
|
||||
vgmstream->coding_type = coding_PCM16BE;
|
||||
vgmstream->meta_type = meta_NGC_BH2PCM;
|
||||
|
||||
/* open the file for reading */
|
||||
{
|
||||
int i;
|
||||
STREAMFILE * file;
|
||||
file = streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
if (!file) goto fail;
|
||||
for (i=0;i<channel_count;i++) {
|
||||
vgmstream->ch[i].streamfile = file;
|
||||
|
||||
vgmstream->ch[i].channel_start_offset=
|
||||
vgmstream->ch[i].offset=start_offset+
|
||||
vgmstream->interleave_block_size*i;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return vgmstream;
|
||||
|
||||
/* clean up anything we may have opened */
|
||||
fail:
|
||||
if (vgmstream) close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -301,13 +301,13 @@ VGMSTREAM* init_vgmstream_ngc_dsp_std(STREAMFILE* sf) {
|
|||
|
||||
/* checks */
|
||||
if (!read_dsp_header_be(&header, 0x00, sf))
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
/* .dsp: standard
|
||||
* .adp: Dr. Muto/Battalion Wars (GC), Tale of Despereaux (Wii)
|
||||
* (extensionless): Tony Hawk's Downhill Jam (Wii) */
|
||||
if (!check_extensions(sf, "dsp,adp,"))
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
channels = 1;
|
||||
start_offset = header_size;
|
||||
|
@ -418,12 +418,11 @@ VGMSTREAM* init_vgmstream_ngc_dsp_std_le(STREAMFILE* sf) {
|
|||
int i, channels;
|
||||
|
||||
/* checks */
|
||||
if (!read_dsp_header_le(&header, 0x00, sf))
|
||||
return NULL;
|
||||
/* .adpcm: LEGO Worlds */
|
||||
if (!check_extensions(sf, "adpcm"))
|
||||
goto fail;
|
||||
|
||||
if (!read_dsp_header_le(&header, 0x00, sf))
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
channels = 1;
|
||||
start_offset = header_size;
|
||||
|
@ -503,10 +502,9 @@ VGMSTREAM* init_vgmstream_ngc_mdsp_std(STREAMFILE* sf) {
|
|||
|
||||
/* checks */
|
||||
if (!read_dsp_header_be(&header, 0x00, sf))
|
||||
goto fail;
|
||||
|
||||
return NULL;
|
||||
if (!check_extensions(sf, "dsp,mdsp"))
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
channels = header.channels==0 ? 1 : header.channels;
|
||||
start_offset = header_size * channels;
|
||||
|
|
|
@ -1,60 +0,0 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* ULW - headerless U-law, found in Burnout (GC) */
|
||||
VGMSTREAM * init_vgmstream_ngc_ulw(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag = 0, channel_count;
|
||||
|
||||
|
||||
/* check extension, case insensitive */
|
||||
if ( !check_extensions(streamFile,"ulw"))
|
||||
goto fail;
|
||||
|
||||
/* raw data, the info is in the filename (really!) */
|
||||
{
|
||||
char filename[PATH_LIMIT] = {0};
|
||||
|
||||
get_streamfile_filename(streamFile, filename,PATH_LIMIT);
|
||||
|
||||
/* first letter gives the channels */
|
||||
if (filename[0]=='M') /* Mono */
|
||||
channel_count = 1;
|
||||
else if (filename[0]=='S' || filename[0]=='D') /* Stereo/Dolby */
|
||||
channel_count = 2;
|
||||
else
|
||||
goto fail;
|
||||
|
||||
/* not very robust but meh (other tracks don't loop) */
|
||||
if (strcmp(filename,"MMenu.ulw")==0 || strcmp(filename,"DMenu.ulw")==0) {
|
||||
loop_flag = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = 32000;
|
||||
vgmstream->coding_type = coding_ULAW;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x01;
|
||||
vgmstream->meta_type = meta_NGC_ULW;
|
||||
vgmstream->num_samples = pcm_bytes_to_samples(get_streamfile_size(streamFile), channel_count, 8);
|
||||
if (loop_flag) {
|
||||
vgmstream->loop_start_sample = 0;
|
||||
vgmstream->loop_end_sample = vgmstream->num_samples;
|
||||
}
|
||||
|
||||
start_offset = 0;
|
||||
|
||||
if ( !vgmstream_open_stream(vgmstream, streamFile, start_offset) )
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -1,77 +0,0 @@
|
|||
#include "meta.h"
|
||||
#include "../util.h"
|
||||
|
||||
/* YMF (WWE WrestleMania X8) */
|
||||
VGMSTREAM * init_vgmstream_ngc_ymf(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
char filename[PATH_LIMIT];
|
||||
off_t start_offset;
|
||||
int loop_flag;
|
||||
int channel_count;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("ymf",filename_extension(filename))) goto fail;
|
||||
|
||||
/* check header */
|
||||
if (read_32bitBE(0x00,streamFile) != 0x00000180)
|
||||
goto fail;
|
||||
|
||||
loop_flag = 0;
|
||||
channel_count = 2;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
/* fill in the vital statistics */
|
||||
start_offset = 0x180;
|
||||
vgmstream->channels = channel_count;
|
||||
vgmstream->sample_rate = read_32bitBE(0xA8,streamFile);
|
||||
vgmstream->coding_type = coding_NGC_DSP;
|
||||
vgmstream->num_samples = read_32bitBE(0xDC,streamFile);
|
||||
if (loop_flag) {
|
||||
vgmstream->loop_start_sample = 0;
|
||||
vgmstream->loop_end_sample = read_32bitBE(0xDC,streamFile);
|
||||
}
|
||||
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x20000;
|
||||
vgmstream->meta_type = meta_NGC_YMF;
|
||||
|
||||
|
||||
if (vgmstream->coding_type == coding_NGC_DSP) {
|
||||
int i;
|
||||
for (i=0;i<16;i++) {
|
||||
vgmstream->ch[0].adpcm_coef[i] = read_16bitBE(0xAE +i*2,streamFile);
|
||||
}
|
||||
if (vgmstream->channels) {
|
||||
for (i=0;i<16;i++) {
|
||||
vgmstream->ch[1].adpcm_coef[i] = read_16bitBE(0x10E +i*2,streamFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* open the file for reading */
|
||||
{
|
||||
int i;
|
||||
STREAMFILE * file;
|
||||
file = streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
if (!file) goto fail;
|
||||
for (i=0;i<channel_count;i++) {
|
||||
vgmstream->ch[i].streamfile = file;
|
||||
|
||||
vgmstream->ch[i].channel_start_offset=
|
||||
vgmstream->ch[i].offset=start_offset+
|
||||
vgmstream->interleave_block_size*i;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return vgmstream;
|
||||
|
||||
/* clean up anything we may have opened */
|
||||
fail:
|
||||
if (vgmstream) close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -479,7 +479,7 @@ static int _init_vgmstream_ogg_vorbis_tests(STREAMFILE* sf, ogg_vorbis_io_config
|
|||
}
|
||||
}
|
||||
|
||||
/* "Ultramarine3" (???) */
|
||||
/* .um3: Ultramarine / Bruns Engine files */
|
||||
if (check_extensions(sf,"um3")) {
|
||||
if (!is_id32be(0x00,sf, "OggS")) {
|
||||
ovmi->decryption_callback = um3_ogg_decryption_callback;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* OGV - .ogg container (not related to ogv video) [Bloody Rondo (PC)] */
|
||||
/* OGV - .ogg container (not related to ogv video) [Bloody Rondo (PC), Shinigami no Testament (PC)] */
|
||||
VGMSTREAM* init_vgmstream_ogv_3rdeye(STREAMFILE* sf) {
|
||||
uint32_t subfile_offset, subfile_size;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include "meta.h"
|
||||
|
||||
/* IMU - found in Alter Echo (PS2) */
|
||||
VGMSTREAM* init_vgmstream_ps2_omu(STREAMFILE* sf) {
|
||||
VGMSTREAM* init_vgmstream_omu(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag, channels;
|
||||
|
@ -9,13 +9,11 @@ VGMSTREAM* init_vgmstream_ps2_omu(STREAMFILE* sf) {
|
|||
|
||||
/* checks */
|
||||
if (!is_id32be(0x00,sf, "OMU "))
|
||||
goto fail;
|
||||
|
||||
return NULL;
|
||||
if (!check_extensions(sf,"omu"))
|
||||
goto fail;
|
||||
|
||||
return NULL;
|
||||
if (!is_id32be(0x08,sf, "FRMT"))
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
loop_flag = 1;
|
||||
channels = read_u8(0x14,sf);
|
||||
|
@ -33,7 +31,7 @@ VGMSTREAM* init_vgmstream_ps2_omu(STREAMFILE* sf) {
|
|||
vgmstream->coding_type = coding_PCM16LE;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x200;
|
||||
vgmstream->meta_type = meta_PS2_OMU;
|
||||
vgmstream->meta_type = meta_OMU;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
||||
|
|
|
@ -1,55 +1,43 @@
|
|||
#include "meta.h"
|
||||
|
||||
/* .pos - loop points for .wav [Ys I Complete (PC); reused for manual looping] */
|
||||
VGMSTREAM * init_vgmstream_pos(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
STREAMFILE * streamData = NULL;
|
||||
int32_t loop_start, loop_end;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(streamFile, "pos"))
|
||||
goto fail;
|
||||
if (get_streamfile_size(streamFile) != 0x08)
|
||||
goto fail;
|
||||
|
||||
streamData = open_streamfile_by_ext(streamFile, "wav");
|
||||
if (streamData) {
|
||||
vgmstream = init_vgmstream_riff(streamData);
|
||||
if (!vgmstream) goto fail;
|
||||
vgmstream->meta_type = meta_RIFF_WAVE_POS;
|
||||
}
|
||||
else {
|
||||
#ifdef VGM_USE_VORBIS
|
||||
/* hack for Ogg with external loops */
|
||||
streamData = open_streamfile_by_ext(streamFile, "ogg");
|
||||
if (streamData) {
|
||||
vgmstream = init_vgmstream_ogg_vorbis(streamData);
|
||||
if (!vgmstream) goto fail;
|
||||
}
|
||||
else {
|
||||
goto fail;
|
||||
}
|
||||
#else
|
||||
goto fail;
|
||||
#endif
|
||||
}
|
||||
|
||||
close_streamfile(streamData);
|
||||
streamData = NULL;
|
||||
|
||||
/* install loops (wrong values are validated later) */
|
||||
loop_start = read_32bitLE(0x00, streamFile);
|
||||
loop_end = read_32bitLE(0x04, streamFile);
|
||||
if (loop_end <= 0 || (loop_end > vgmstream->num_samples)) {
|
||||
loop_end = vgmstream->num_samples;
|
||||
}
|
||||
vgmstream_force_loop(vgmstream, 1, loop_start, loop_end);
|
||||
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_streamfile(streamData);
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
#include "meta.h"
|
||||
|
||||
/* .pos - loop points for .wav [Ys I-II Complete (PC)] */
|
||||
VGMSTREAM* init_vgmstream_pos(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
STREAMFILE* sf_data = NULL;
|
||||
int32_t loop_start, loop_end;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (get_streamfile_size(sf) != 0x08)
|
||||
return NULL;
|
||||
if (!check_extensions(sf, "pos"))
|
||||
return NULL;
|
||||
|
||||
sf_data = open_streamfile_by_ext(sf, "wav");
|
||||
if (sf_data) {
|
||||
vgmstream = init_vgmstream_riff(sf_data);
|
||||
if (!vgmstream) goto fail;
|
||||
vgmstream->meta_type = meta_RIFF_WAVE_POS;
|
||||
}
|
||||
else {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
close_streamfile(sf_data);
|
||||
sf_data = NULL;
|
||||
|
||||
/* install loops (wrong values are validated later) */
|
||||
loop_start = read_s32le(0x00, sf);
|
||||
loop_end = read_s32le(0x04, sf);
|
||||
if (loop_end <= 0 || (loop_end > vgmstream->num_samples)) {
|
||||
loop_end = vgmstream->num_samples;
|
||||
}
|
||||
vgmstream_force_loop(vgmstream, 1, loop_start, loop_end);
|
||||
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_streamfile(sf_data);
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -1,66 +0,0 @@
|
|||
#include "meta.h"
|
||||
#include "../util.h"
|
||||
|
||||
/* LEG - found in Legaia 2 - Duel Saga (PS2)
|
||||
the headers are stored seperately in the main executable... */
|
||||
VGMSTREAM * init_vgmstream_leg(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
char filename[PATH_LIMIT];
|
||||
off_t start_offset;
|
||||
int loop_flag = 0;
|
||||
int channel_count;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("leg",filename_extension(filename))) goto fail;
|
||||
|
||||
/* comparing the filesize with (num_samples*0x800) + headersize,
|
||||
if it doesn't match, we will abort the vgmstream... */
|
||||
if ((read_32bitLE(0x48,streamFile)*0x800)+0x4C != get_streamfile_size(streamFile))
|
||||
goto fail;
|
||||
|
||||
loop_flag = (read_32bitLE(0x44,streamFile)!=0);
|
||||
channel_count = 2;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
/* fill in the vital statistics */
|
||||
start_offset = 0x4C;
|
||||
vgmstream->channels = channel_count;
|
||||
vgmstream->sample_rate = read_32bitLE(0x40,streamFile);
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->num_samples = (read_32bitLE(0x48,streamFile)*0x800)*28/16/channel_count;
|
||||
if (loop_flag) {
|
||||
vgmstream->loop_start_sample = (read_32bitLE(0x44,streamFile)*0x800)*28/16/channel_count;
|
||||
vgmstream->loop_end_sample = (read_32bitLE(0x48,streamFile)*0x800)*28/16/channel_count;
|
||||
}
|
||||
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x400;
|
||||
vgmstream->meta_type = meta_LEG;
|
||||
|
||||
/* open the file for reading */
|
||||
{
|
||||
int i;
|
||||
STREAMFILE * file;
|
||||
file = streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
if (!file) goto fail;
|
||||
for (i=0;i<channel_count;i++) {
|
||||
vgmstream->ch[i].streamfile = file;
|
||||
|
||||
vgmstream->ch[i].channel_start_offset=
|
||||
vgmstream->ch[i].offset=start_offset+
|
||||
vgmstream->interleave_block_size*i;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return vgmstream;
|
||||
|
||||
/* clean up anything we may have opened */
|
||||
fail:
|
||||
if (vgmstream) close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -1,63 +0,0 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* MSA - from Sucess games [Psyvariar -Complete Edition- (PS2), Konohana Pack: 3tsu no Jikenbo (PS2)]*/
|
||||
VGMSTREAM * init_vgmstream_ps2_msa(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag, channel_count;
|
||||
size_t data_size, channel_size, file_size;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(streamFile, "msa"))
|
||||
goto fail;
|
||||
if (read_32bitBE(0x00,streamFile) != 0x00000000)
|
||||
goto fail;
|
||||
if (read_32bitBE(0x08,streamFile) != 0x00000000)
|
||||
goto fail;
|
||||
|
||||
loop_flag = 0;
|
||||
channel_count = 2;
|
||||
start_offset = 0x14;
|
||||
|
||||
file_size = get_streamfile_size(streamFile);
|
||||
data_size = read_32bitLE(0x04,streamFile); /* wrong, see below */
|
||||
channel_size = read_32bitLE(0x0c,streamFile); /* also wrong like data_size */
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_PS2_MSA;
|
||||
vgmstream->sample_rate = read_32bitLE(0x10,streamFile);
|
||||
if (vgmstream->sample_rate == 0) /* ex. Psyvariar's AME.MSA */
|
||||
vgmstream->sample_rate = 44100;
|
||||
vgmstream->num_samples = ps_bytes_to_samples(data_size, channel_count);
|
||||
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
|
||||
if (channel_size) /* Konohana Pack */
|
||||
vgmstream->interleave_block_size = 0x6000;
|
||||
else /* Psyvariar */
|
||||
vgmstream->interleave_block_size = 0x4000;
|
||||
/* (could also test first frame in various interleaves, as it's always 0'ed) */
|
||||
|
||||
/* MSAs are strangely truncated, so manually calculate samples.
|
||||
* Data after last usable block is always silence or garbage. */
|
||||
if (data_size > file_size) {
|
||||
off_t usable_size = file_size - start_offset;
|
||||
usable_size -= usable_size % (vgmstream->interleave_block_size*channel_count);/* block-aligned */
|
||||
vgmstream->num_samples = ps_bytes_to_samples(usable_size, channel_count);//usable_size * 28 / (16*channel_count);
|
||||
}
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, streamFile, start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -1,66 +0,0 @@
|
|||
#include "meta.h"
|
||||
#include "../util.h"
|
||||
|
||||
/* PNB : PsychoNauts Bgm File */
|
||||
|
||||
VGMSTREAM * init_vgmstream_ps2_pnb(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
char filename[PATH_LIMIT];
|
||||
|
||||
int loop_flag=0;
|
||||
int channel_count;
|
||||
off_t start_offset;
|
||||
int i;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("pnb",filename_extension(filename))) goto fail;
|
||||
|
||||
/* check loop */
|
||||
loop_flag = (read_32bitLE(0x0C,streamFile)!=0xFFFFFFFF);
|
||||
channel_count=1;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
/* fill in the vital statistics */
|
||||
vgmstream->channels = 1;
|
||||
vgmstream->sample_rate = 44100;
|
||||
|
||||
/* Check for Compression Scheme */
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->num_samples = read_32bitBE(0x08,streamFile)/16*28;
|
||||
|
||||
/* Get loop point values */
|
||||
if(vgmstream->loop_flag) {
|
||||
vgmstream->loop_start_sample = read_32bitBE(0x0C,streamFile)/16*28;
|
||||
vgmstream->loop_end_sample = vgmstream->num_samples;
|
||||
}
|
||||
|
||||
vgmstream->interleave_block_size = 0x10;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->meta_type = meta_PS2_PNB;
|
||||
|
||||
start_offset = (off_t)read_32bitBE(0x00,streamFile);
|
||||
|
||||
/* open the file for reading by each channel */
|
||||
{
|
||||
for (i=0;i<channel_count;i++) {
|
||||
vgmstream->ch[i].streamfile = streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
|
||||
if (!vgmstream->ch[i].streamfile) goto fail;
|
||||
|
||||
vgmstream->ch[i].channel_start_offset=
|
||||
vgmstream->ch[i].offset=
|
||||
(off_t)(start_offset+vgmstream->interleave_block_size*i);
|
||||
}
|
||||
}
|
||||
|
||||
return vgmstream;
|
||||
|
||||
/* clean up anything we may have opened */
|
||||
fail:
|
||||
if (vgmstream) close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* RSTM - from Rockstar games [Midnight Club 3, Bully - Canis Canim Edit (PS2)] */
|
||||
VGMSTREAM * init_vgmstream_ps2_rstm(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag, channel_count;
|
||||
|
||||
/* check extension (.rsm: in filelist, .rstm: renamed to header id) */
|
||||
if ( !check_extensions(streamFile,"rsm,rstm") )
|
||||
goto fail;
|
||||
|
||||
/* check header */
|
||||
if (read_32bitBE(0x00,streamFile) != 0x5253544D) /* "RSTM" */
|
||||
goto fail;
|
||||
|
||||
loop_flag = (read_32bitLE(0x24,streamFile)!=0xFFFFFFFF);
|
||||
channel_count = read_32bitLE(0x0C,streamFile);
|
||||
start_offset = 0x800;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = read_32bitLE(0x08,streamFile);
|
||||
vgmstream->num_samples = ps_bytes_to_samples(read_32bitLE(0x20,streamFile),channel_count);
|
||||
vgmstream->loop_start_sample = ps_bytes_to_samples(read_32bitLE(0x24,streamFile),channel_count);
|
||||
vgmstream->loop_end_sample = vgmstream->num_samples;
|
||||
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x10;
|
||||
vgmstream->meta_type = meta_PS2_RSTM;
|
||||
|
||||
/* open the file for reading */
|
||||
if ( !vgmstream_open_stream(vgmstream, streamFile, start_offset) )
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -1,47 +0,0 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* SMPL - from Homura (PS2) */
|
||||
VGMSTREAM * init_vgmstream_ps2_smpl(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag, channel_count;
|
||||
size_t channel_size;
|
||||
|
||||
/* checks*/
|
||||
/* .v0: left channel, .v1: right channel
|
||||
* .smpl: header id */
|
||||
if ( !check_extensions(streamFile,"v0,v1,smpl") )
|
||||
goto fail;
|
||||
if (read_32bitBE(0x00,streamFile) != 0x534D504C) /* "SMPL" */
|
||||
goto fail;
|
||||
|
||||
channel_count = 1;
|
||||
loop_flag = (read_32bitLE(0x30,streamFile) != 0); /* .v1 doesn't have loop points */
|
||||
start_offset = 0x40;
|
||||
channel_size = read_32bitBE(0x0c,streamFile) - 0x10;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = read_32bitBE(0x10,streamFile);
|
||||
vgmstream->num_samples = ps_bytes_to_samples(channel_size*channel_count, channel_count);
|
||||
vgmstream->loop_start_sample = read_32bitLE(0x30,streamFile);
|
||||
vgmstream->loop_end_sample = vgmstream->num_samples;
|
||||
|
||||
vgmstream->meta_type = meta_PS2_SMPL;
|
||||
vgmstream->allow_dual_stereo = 1;
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = layout_none;
|
||||
|
||||
read_string(vgmstream->stream_name,0x10+1, 0x20,streamFile);
|
||||
|
||||
if ( !vgmstream_open_stream(vgmstream, streamFile, start_offset) )
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -1,108 +0,0 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* TK5 (Tekken 5 Streams) */
|
||||
VGMSTREAM * init_vgmstream_ps2_tk5(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
char filename[PATH_LIMIT];
|
||||
off_t start_offset;
|
||||
int loop_flag = 0;
|
||||
int channel_count;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("tk5",filename_extension(filename))) goto fail;
|
||||
|
||||
/* check header */
|
||||
if (read_32bitBE(0x00,streamFile) != 0x544B3553)
|
||||
goto fail;
|
||||
|
||||
loop_flag = (read_32bitLE(0x0C,streamFile)!=0);
|
||||
channel_count = 2;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
/* fill in the vital statistics */
|
||||
start_offset = 0x800;
|
||||
vgmstream->channels = channel_count;
|
||||
vgmstream->sample_rate = 48000;
|
||||
vgmstream->coding_type = coding_PSX_badflags;
|
||||
vgmstream->num_samples = ((get_streamfile_size(streamFile)-0x800))/16*28/2;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x10;
|
||||
vgmstream->meta_type = meta_PS2_TK5;
|
||||
|
||||
if (vgmstream->loop_flag)
|
||||
{
|
||||
vgmstream->loop_start_sample = read_32bitLE(0x08,streamFile)/16*28;
|
||||
vgmstream->loop_end_sample = vgmstream->loop_start_sample + (read_32bitLE(0x0C,streamFile)/16*28);
|
||||
}
|
||||
|
||||
/* open the file for reading */
|
||||
{
|
||||
int i;
|
||||
STREAMFILE * file;
|
||||
file = streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
if (!file) goto fail;
|
||||
for (i=0;i<channel_count;i++) {
|
||||
vgmstream->ch[i].streamfile = file;
|
||||
|
||||
vgmstream->ch[i].channel_start_offset=
|
||||
vgmstream->ch[i].offset=start_offset+
|
||||
vgmstream->interleave_block_size*i;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return vgmstream;
|
||||
|
||||
/* clean up anything we may have opened */
|
||||
fail:
|
||||
if (vgmstream) close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* OVB - Tekken 5 Streams from Tekken (NamCollection) */
|
||||
VGMSTREAM * init_vgmstream_ps2_tk1(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag = 0, channel_count;
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(streamFile, "ovb"))
|
||||
goto fail;
|
||||
|
||||
if (read_32bitBE(0x00,streamFile) != 0x544B3553)
|
||||
goto fail;
|
||||
|
||||
loop_flag = (read_32bitLE(0x0C,streamFile)!=0);
|
||||
channel_count = 2;
|
||||
start_offset = 0x800;
|
||||
/* NamCollection uses 44100 while Tekken 5 48000, no apparent way to tell them apart */
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = 44100;
|
||||
vgmstream->num_samples = ps_bytes_to_samples(read_32bitLE(0x08,streamFile)*channel_count, channel_count);
|
||||
if (vgmstream->loop_flag) {
|
||||
vgmstream->loop_start_sample = read_32bitLE(0x08,streamFile)/16*28;
|
||||
vgmstream->loop_end_sample = vgmstream->loop_start_sample + ps_bytes_to_samples(read_32bitLE(0x0c,streamFile)*channel_count, channel_count);
|
||||
}
|
||||
|
||||
vgmstream->coding_type = coding_PSX_badflags;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x10;
|
||||
vgmstream->meta_type = meta_PS2_TK1;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream,streamFile,start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -1,81 +0,0 @@
|
|||
#include "meta.h"
|
||||
#include "../util.h"
|
||||
|
||||
/* VOI - found in "RAW Danger" (PS2) */
|
||||
VGMSTREAM * init_vgmstream_ps2_voi(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
char filename[PATH_LIMIT];
|
||||
int loop_flag = 0;
|
||||
int channel_count;
|
||||
off_t start_offset;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("voi",filename_extension(filename))) goto fail;
|
||||
|
||||
/* check header */
|
||||
if (((read_32bitLE(0x04,streamFile)*2)+0x800) != (get_streamfile_size(streamFile)))
|
||||
{
|
||||
goto fail;
|
||||
}
|
||||
|
||||
loop_flag = 0;
|
||||
channel_count = read_32bitLE(0x00,streamFile);
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
/* fill in the vital statistics */
|
||||
start_offset = 0x800;
|
||||
vgmstream->channels = channel_count;
|
||||
vgmstream->coding_type = coding_PCM16LE;
|
||||
vgmstream->num_samples = (get_streamfile_size(streamFile)-start_offset)/channel_count/2;
|
||||
|
||||
if (loop_flag)
|
||||
{
|
||||
vgmstream->loop_start_sample = 0;
|
||||
vgmstream->loop_end_sample = (read_32bitLE(0x04,streamFile)/2);
|
||||
}
|
||||
|
||||
if (read_32bitLE(0x08,streamFile) == 0)
|
||||
{
|
||||
vgmstream->sample_rate = 48000;
|
||||
vgmstream->interleave_block_size = 0x200;
|
||||
}
|
||||
else if (read_32bitLE(0x08,streamFile) == 1)
|
||||
{
|
||||
vgmstream->sample_rate = 24000;
|
||||
vgmstream->interleave_block_size = 0x100;
|
||||
}
|
||||
else
|
||||
{
|
||||
goto fail;
|
||||
}
|
||||
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->meta_type = meta_PS2_VOI;
|
||||
|
||||
/* open the file for reading */
|
||||
{
|
||||
int i;
|
||||
STREAMFILE * file;
|
||||
file = streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
if (!file) goto fail;
|
||||
for (i=0;i<channel_count;i++) {
|
||||
vgmstream->ch[i].streamfile = file;
|
||||
|
||||
vgmstream->ch[i].channel_start_offset=
|
||||
vgmstream->ch[i].offset=start_offset+
|
||||
vgmstream->interleave_block_size*i;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return vgmstream;
|
||||
|
||||
/* clean up anything we may have opened */
|
||||
fail:
|
||||
if (vgmstream) close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
#include "meta.h"
|
||||
#include "../util.h"
|
||||
|
||||
/* XA2 (XG3 Extreme-G Racing) */
|
||||
VGMSTREAM * init_vgmstream_ps2_xa2(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
char filename[PATH_LIMIT];
|
||||
off_t start_offset;
|
||||
int loop_flag = 0;
|
||||
int channel_count;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("xa2",filename_extension(filename))) goto fail;
|
||||
|
||||
loop_flag = 0;
|
||||
channel_count = read_32bitLE(0x0,streamFile);
|
||||
|
||||
if (read_32bitLE(0x4,streamFile) > 0x1000) goto fail;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
/* fill in the vital statistics */
|
||||
start_offset = 0x800;
|
||||
vgmstream->channels = channel_count;
|
||||
vgmstream->sample_rate = 44100;
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->num_samples = (get_streamfile_size(streamFile)-start_offset)/channel_count/16*28;
|
||||
if (loop_flag) {
|
||||
vgmstream->loop_start_sample = 0;
|
||||
vgmstream->loop_end_sample = vgmstream->num_samples;
|
||||
}
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = read_32bitLE(0x04,streamFile);
|
||||
vgmstream->meta_type = meta_PS2_XA2;
|
||||
|
||||
/* open the file for reading */
|
||||
{
|
||||
int i;
|
||||
STREAMFILE * file;
|
||||
file = streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
if (!file) goto fail;
|
||||
for (i=0;i<channel_count;i++) {
|
||||
vgmstream->ch[i].streamfile = file;
|
||||
|
||||
vgmstream->ch[i].channel_start_offset=
|
||||
vgmstream->ch[i].offset=start_offset+
|
||||
vgmstream->interleave_block_size*i;
|
||||
}
|
||||
}
|
||||
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
/* clean up anything we may have opened */
|
||||
if (vgmstream) close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -1,62 +0,0 @@
|
|||
#include "meta.h"
|
||||
|
||||
|
||||
/* XA2 (RC Revenge Pro) */
|
||||
VGMSTREAM * init_vgmstream_ps2_xa2_rrp(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
char filename[PATH_LIMIT];
|
||||
off_t start_offset;
|
||||
|
||||
int loop_flag = 0;
|
||||
int channel_count;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("xa2",filename_extension(filename))) goto fail;
|
||||
|
||||
/* check header */
|
||||
if (read_32bitBE(0x50,streamFile) != 0x00000000)
|
||||
goto fail;
|
||||
|
||||
loop_flag = 0;
|
||||
channel_count = read_32bitLE(0x0,streamFile);
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
/* fill in the vital statistics */
|
||||
start_offset = 0x800;
|
||||
vgmstream->channels = channel_count;
|
||||
vgmstream->sample_rate = 44100;
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->num_samples = (get_streamfile_size(streamFile)-0x800)*28/16/channel_count;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
if (channel_count > 2)
|
||||
vgmstream->interleave_block_size = 0x400;
|
||||
else
|
||||
vgmstream->interleave_block_size = 0x1000;
|
||||
vgmstream->meta_type = meta_PS2_XA2_RRP;
|
||||
|
||||
/* open the file for reading */
|
||||
{
|
||||
int i;
|
||||
STREAMFILE * file;
|
||||
file = streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
if (!file) goto fail;
|
||||
for (i=0;i<channel_count;i++) {
|
||||
vgmstream->ch[i].streamfile = file;
|
||||
|
||||
vgmstream->ch[i].channel_start_offset=
|
||||
vgmstream->ch[i].offset=start_offset+
|
||||
vgmstream->interleave_block_size*i;
|
||||
}
|
||||
}
|
||||
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
/* clean up anything we may have opened */
|
||||
if (vgmstream) close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
82
Frameworks/vgmstream/vgmstream/src/meta/pwb.c
Normal file
82
Frameworks/vgmstream/vgmstream/src/meta/pwb.c
Normal file
|
@ -0,0 +1,82 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* WB - from Psychonauts (PS2) */
|
||||
VGMSTREAM* init_vgmstream_pwb(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
int channels, loop_flag;
|
||||
uint32_t stream_offset, stream_size, loop_start, loop_end;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!is_id32be(0x00, sf, "WB\2\0"))
|
||||
return NULL;
|
||||
|
||||
/* .pwb: actual extension (bigfile has only hashes but there are names in internal files)
|
||||
* (some .pwb have a companion .psb, seems cue-related) */
|
||||
if (!check_extensions(sf, "pwb"))
|
||||
return NULL;
|
||||
|
||||
/* 00: ID
|
||||
* 04: null
|
||||
* 08: header offset? (0x20)
|
||||
* 0c: header size? (0x20)
|
||||
* 10: entries offset
|
||||
* 14: entries size
|
||||
* 18: data offset
|
||||
* 1c: data size
|
||||
* 20: always 1 (channels? codec?)
|
||||
* 24: entries count
|
||||
* 28: entry size
|
||||
* 2c: data offset
|
||||
*/
|
||||
|
||||
|
||||
stream_offset = read_u32le(0x18, sf);
|
||||
|
||||
int total_subsongs = read_s32le(0x24, sf);
|
||||
int target_subsong = sf->stream_index;
|
||||
if (target_subsong == 0) target_subsong = 1;
|
||||
if (target_subsong > total_subsongs || total_subsongs <= 0) goto fail;
|
||||
|
||||
|
||||
{
|
||||
uint32_t offset = read_u32le(0x10, sf) + (target_subsong - 1) * read_u32le(0x28, sf);
|
||||
|
||||
/* 0x00: flags? */
|
||||
/* 0x04: always 000AC449 */
|
||||
stream_offset = read_u32le(offset + 0x08, sf) + stream_offset;
|
||||
stream_size = read_u32le(offset + 0x0c, sf);
|
||||
loop_start = read_u32le(offset + 0x10, sf);
|
||||
loop_end = read_u32le(offset + 0x14, sf) + loop_start;
|
||||
loop_flag = loop_end; /* both 0 if no loop */
|
||||
channels = 1;
|
||||
}
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_PWB;
|
||||
vgmstream->sample_rate = 24000;
|
||||
|
||||
vgmstream->num_samples = ps_bytes_to_samples(stream_size, channels);
|
||||
vgmstream->loop_start_sample = ps_bytes_to_samples(loop_start, channels);
|
||||
vgmstream->loop_end_sample = ps_bytes_to_samples(loop_end, channels);
|
||||
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = layout_none;
|
||||
vgmstream->num_streams = total_subsongs;
|
||||
vgmstream->stream_size = stream_size;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, stream_offset))
|
||||
goto fail;
|
||||
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
close_streamfile(sf);
|
||||
return NULL;
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* AL/AL2 - headerless a-law, from Illwinter Game Design games */
|
||||
VGMSTREAM * init_vgmstream_raw_al(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag = 0, channel_count;
|
||||
|
||||
/* checks */
|
||||
/* .al: Dominions 3 - The Awakening (PC)
|
||||
* .al2: Conquest of Elysium 3 (PC) */
|
||||
if ( !check_extensions(streamFile,"al,al2"))
|
||||
goto fail;
|
||||
|
||||
channel_count = check_extensions(streamFile,"al") ? 1 : 2;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = 22050;
|
||||
vgmstream->coding_type = coding_ALAW;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x01;
|
||||
vgmstream->meta_type = meta_RAW_AL;
|
||||
vgmstream->num_samples = pcm_bytes_to_samples(get_streamfile_size(streamFile), channel_count, 8);
|
||||
if (loop_flag) {
|
||||
vgmstream->loop_start_sample = 0;
|
||||
vgmstream->loop_end_sample = vgmstream->num_samples;
|
||||
}
|
||||
|
||||
start_offset = 0;
|
||||
|
||||
if ( !vgmstream_open_stream(vgmstream, streamFile, start_offset) )
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -2,19 +2,17 @@
|
|||
#include "../util.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* .rsf - from Metroid Prime */
|
||||
|
||||
VGMSTREAM* init_vgmstream_rsf(STREAMFILE* sf) {
|
||||
/* .rsf - from Metroid Prime (GC) */
|
||||
VGMSTREAM* init_vgmstream_raw_rsf(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
int channels, loop_flag;
|
||||
uint32_t interleave, file_size;
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(sf,"rsf"))
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
/* this is all we have to go on, rsf is completely headerless */
|
||||
|
||||
file_size = get_streamfile_size(sf);
|
||||
interleave = (file_size + 1) / 2;
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
static int test_interleave(STREAMFILE* sf, int channels, int interleave);
|
||||
|
||||
/* .s14/.sss - headerless siren14 stream [The Idolm@ster (DS), Korogashi Puzzle Katamari Damacy (DS), Taiko no Tatsujin DS 1/2 (DS)] */
|
||||
VGMSTREAM* init_vgmstream_s14_sss(STREAMFILE* sf) {
|
||||
VGMSTREAM* init_vgmstream_raw_s14_sss(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
off_t start_offset = 0;
|
||||
int channels, loop_flag = 0, interleave;
|
||||
|
@ -18,7 +18,7 @@ VGMSTREAM* init_vgmstream_s14_sss(STREAMFILE* sf) {
|
|||
} else if (check_extensions(sf,"s14")) {
|
||||
channels = 1; /* may have dual _0ch.s14 + _1ch.s14, needs .txtp */
|
||||
} else {
|
||||
goto fail;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* raw siren comes in 3 frame sizes, try to guess the correct one */
|
|
@ -191,11 +191,11 @@ static int read_fmt(int big_endian, STREAMFILE* sf, off_t offset, riff_fmt_chunk
|
|||
break;
|
||||
|
||||
#ifdef VGM_USE_MPEG
|
||||
case 0x0055: /* MP3 [Bear in the Big Blue House: Bear's Imagine That! (PC)] (official) */
|
||||
case 0x0055: /* MP3 [Bear in the Big Blue House: Bear's Imagine That! (PC), Eclipse (PC)] (official) */
|
||||
fmt->coding_type = coding_MPEG_custom;
|
||||
/* some oddities, unsure if part of standard:
|
||||
/* some oddities, unsure if part of standard:
|
||||
* - block size is 1 (in mono)
|
||||
* - bps is 16
|
||||
* - bps is 16 for some games
|
||||
* - extra size 0x0c, has channels? and (possibly) approx frame size */
|
||||
break;
|
||||
#endif
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
/* RSD - from Radical Entertainment games */
|
||||
VGMSTREAM* init_vgmstream_rsd(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
off_t start_offset, name_offset;
|
||||
uint32_t start_offset, name_offset, coef_offset;
|
||||
size_t data_size;
|
||||
int loop_flag, channels, sample_rate, interleave;
|
||||
uint32_t codec;
|
||||
|
@ -14,9 +14,9 @@ VGMSTREAM* init_vgmstream_rsd(STREAMFILE* sf) {
|
|||
|
||||
/* checks */
|
||||
if ((read_u32be(0x00,sf) & 0xFFFFFF00) != get_id32be("RSD\00"))
|
||||
goto fail;
|
||||
return NULL;
|
||||
if (!check_extensions(sf,"rsd,rsp"))
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
loop_flag = 0;
|
||||
|
||||
|
@ -32,14 +32,19 @@ VGMSTREAM* init_vgmstream_rsd(STREAMFILE* sf) {
|
|||
interleave = read_u32le(0x14,sf); /* VAG only, 0x04 otherwise */
|
||||
start_offset = read_u32le(0x18,sf);
|
||||
name_offset = 0;
|
||||
coef_offset = 0x1C;
|
||||
|
||||
if ((codec == get_id32be("GADP")))
|
||||
start_offset = 0xA0;
|
||||
break;
|
||||
|
||||
case '4': /* known codecs: VAG/PCM/RADP/PCMB [The Simpsons: Hit & Run, Tetris Worlds, Hulk] */
|
||||
/* 0x14: padding */
|
||||
/* 0x14: padding/coefs */
|
||||
/* 0x18: padding */
|
||||
interleave = 0;
|
||||
start_offset = 0x800;
|
||||
name_offset = 0;
|
||||
coef_offset = 0x14;
|
||||
|
||||
/* PCMB/PCM/GADP normally start early but sometimes have padding [The Simpsons: Hit & Run (GC/Xbox)] */
|
||||
if ((codec == get_id32be("PCM ") || codec == get_id32be("PCMB") || codec == get_id32be("GADP"))
|
||||
|
@ -52,6 +57,7 @@ VGMSTREAM* init_vgmstream_rsd(STREAMFILE* sf) {
|
|||
name_offset = 0x18; /* dev file path */
|
||||
interleave = 0;
|
||||
start_offset = 0x800;
|
||||
coef_offset = 0x00;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -104,8 +110,8 @@ VGMSTREAM* init_vgmstream_rsd(STREAMFILE* sf) {
|
|||
vgmstream->coding_type = coding_NGC_DSP;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x08; /* assumed, known files are mono */
|
||||
dsp_read_coefs_le(vgmstream,sf,0x14,0x2e); /* LE! */
|
||||
dsp_read_hist_le (vgmstream,sf,0x38,0x2e);
|
||||
dsp_read_coefs_le(vgmstream,sf,coef_offset,0x2e); /* LE! */
|
||||
dsp_read_hist_le (vgmstream,sf,coef_offset + 0x24, 0x2e);
|
||||
|
||||
vgmstream->num_samples = dsp_bytes_to_samples(data_size, channels);
|
||||
break;
|
||||
|
|
47
Frameworks/vgmstream/vgmstream/src/meta/rstm_rockstar.c
Normal file
47
Frameworks/vgmstream/vgmstream/src/meta/rstm_rockstar.c
Normal file
|
@ -0,0 +1,47 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* RSTM - from Rockstar games [Midnight Club 3, Bully - Canis Canim Edit (PS2)] */
|
||||
VGMSTREAM* init_vgmstream_rstm_rockstar(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
uint32_t start_offset;
|
||||
int channels, loop_flag;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!is_id32be(0x00, sf, "RSTM"))
|
||||
return NULL;
|
||||
|
||||
/* .rsm: in filelist
|
||||
* .rstm: header id */
|
||||
if (!check_extensions(sf,"rsm,rstm"))
|
||||
return NULL;
|
||||
|
||||
loop_flag = (read_s32le(0x24,sf) > 0);
|
||||
channels = read_s32le(0x0C,sf);
|
||||
start_offset = 0x800;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_RSTM_ROCKSTAR;
|
||||
|
||||
vgmstream->sample_rate = read_s32le(0x08,sf);
|
||||
vgmstream->num_samples = ps_bytes_to_samples(read_u32le(0x20,sf),channels);
|
||||
vgmstream->loop_start_sample = ps_bytes_to_samples(read_u32le(0x24,sf),channels);
|
||||
vgmstream->loop_end_sample = vgmstream->num_samples;
|
||||
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x10;
|
||||
|
||||
/* open the file for reading */
|
||||
if ( !vgmstream_open_stream(vgmstream, sf, start_offset) )
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
42
Frameworks/vgmstream/vgmstream/src/meta/rwax.c
Normal file
42
Frameworks/vgmstream/vgmstream/src/meta/rwax.c
Normal file
|
@ -0,0 +1,42 @@
|
|||
#include "meta.h"
|
||||
#include "../util.h"
|
||||
|
||||
|
||||
/* RWAX - from AirForce Delta Storm (Xbox) */
|
||||
VGMSTREAM* init_vgmstream_rwax(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
uint32_t start_offset;
|
||||
int channels, loop_flag = 0;
|
||||
|
||||
/* checks */
|
||||
if (!is_id32be(0x00,sf, "RAWX"))
|
||||
return NULL;
|
||||
if (!check_extensions(sf,"rwx"))
|
||||
return NULL;
|
||||
|
||||
start_offset = read_u32le(0x04,sf);
|
||||
loop_flag = read_s32le(0x0C,sf);
|
||||
channels = 2;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_RWAX;
|
||||
vgmstream->sample_rate = read_s32le(0x08,sf);
|
||||
vgmstream->num_samples = read_s32le(0x10,sf);
|
||||
vgmstream->loop_start_sample = read_s32le(0x0C,sf);
|
||||
vgmstream->loop_end_sample = read_s32le(0x10,sf);
|
||||
|
||||
vgmstream->coding_type = coding_PCM16LE;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x2;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
149
Frameworks/vgmstream/vgmstream/src/meta/rws_809.c
Normal file
149
Frameworks/vgmstream/vgmstream/src/meta/rws_809.c
Normal file
|
@ -0,0 +1,149 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
#include "../util/endianness.h"
|
||||
|
||||
|
||||
/* RWS - RenderWare Stream (with the tag 0x809) */
|
||||
VGMSTREAM* init_vgmstream_rws_809(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
bool big_endian;
|
||||
char header_name[STREAM_NAME_SIZE], stream_name[STREAM_NAME_SIZE];
|
||||
int channels = 0, idx, interleave, loop_flag, sample_rate = 0, total_subsongs, target_subsong = sf->stream_index;
|
||||
read_u32_t read_u32;
|
||||
off_t chunk_offset, header_offset, misc_data_offset = 0, stream_name_offset, stream_offset = 0;
|
||||
size_t chunk_size, header_size, misc_data_size, stream_size = 0;
|
||||
uint32_t codec_uuid = 0;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (read_u32le(0x00, sf) != 0x809) /* File ID */
|
||||
goto fail;
|
||||
|
||||
/* Burnout 2: Point of Impact (PS2, GCN, Xbox), Neighbours from Hell (GCN, Xbox):
|
||||
* Predecessor to the common 0x80D-0x80F tag RWS with some parts reworked into AWD? */
|
||||
if (!check_extensions(sf, "rws"))
|
||||
goto fail;
|
||||
|
||||
/* Uses the following chunk IDs across the file:
|
||||
* 0x00000809: File ID
|
||||
* 0x0000080A: File header ID
|
||||
* 0x0000080C: File data ID
|
||||
*
|
||||
* 0x00000802: Stream ID
|
||||
* 0x00000803: Stream header ID
|
||||
* 0x00000804: Stream data ID
|
||||
*/
|
||||
|
||||
chunk_offset = 0x0C;
|
||||
if (read_u32le(chunk_offset, sf) != 0x80A) /* File header ID */
|
||||
goto fail;
|
||||
chunk_size = read_u32le(chunk_offset + 0x04, sf); /* usually 0x44 */
|
||||
|
||||
read_string(header_name, STREAM_NAME_SIZE, chunk_offset + 0x40, sf);
|
||||
|
||||
chunk_offset += chunk_size + 0x0C;
|
||||
if (read_u32le(chunk_offset, sf) != 0x80C) /* File data ID */
|
||||
goto fail;
|
||||
|
||||
big_endian = guess_endian32(chunk_offset + 0x0C, sf);
|
||||
read_u32 = big_endian ? read_u32be : read_u32le;
|
||||
|
||||
total_subsongs = read_u32(chunk_offset + 0x0C, sf);
|
||||
|
||||
if (!target_subsong)
|
||||
target_subsong = 1;
|
||||
|
||||
chunk_offset += 0x10;
|
||||
for (idx = 1; idx <= total_subsongs; idx++) {
|
||||
if (read_u32le(chunk_offset, sf) != 0x802) /* Stream ID */
|
||||
goto fail;
|
||||
chunk_size = read_u32le(chunk_offset + 0x04, sf);
|
||||
|
||||
if (idx == target_subsong) {
|
||||
header_offset = chunk_offset + 0x0C;
|
||||
if (read_u32le(header_offset, sf) != 0x803) /* Stream header ID */
|
||||
goto fail;
|
||||
header_size = read_u32le(header_offset + 0x04, sf);
|
||||
|
||||
sample_rate = read_u32(header_offset + 0x10, sf);
|
||||
stream_size = read_u32(header_offset + 0x18, sf);
|
||||
//bit_depth = read_u8(header_offset + 0x1C, sf);
|
||||
channels = read_u8(header_offset + 0x1D, sf); /* always 1? */
|
||||
if (channels != 1)
|
||||
goto fail;
|
||||
|
||||
//misc_data_offset = read_u32(header_offset + 0x20, sf); /* assumed, but wrong? */
|
||||
misc_data_offset = header_offset + 0x3C;
|
||||
misc_data_size = read_u32(header_offset + 0x24, sf); /* 0x60 in GCN if DSP-ADPCM, otherwise 0 */
|
||||
|
||||
codec_uuid = read_u32(header_offset + 0x2C, sf);
|
||||
|
||||
/* (header_offset + 0x3C + misc_data_size) + 0x00 to +0x18 has the target format
|
||||
* info which in most cases would probably be identical to the input format info */
|
||||
|
||||
/* (misc_data_size * 2) should be 0xC0 if it exists */
|
||||
stream_name_offset = header_offset + 0x7C + (misc_data_size * 2);
|
||||
read_string(stream_name, STREAM_NAME_SIZE, stream_name_offset, sf);
|
||||
|
||||
stream_offset = header_offset + header_size + 0x0C;
|
||||
if (read_u32le(stream_offset, sf) != 0x804) /* Stream data ID */
|
||||
goto fail;
|
||||
if (read_u32le(stream_offset + 0x04, sf) != stream_size)
|
||||
goto fail;
|
||||
}
|
||||
chunk_offset += chunk_size + 0x0C;
|
||||
}
|
||||
|
||||
if (total_subsongs < 1 || target_subsong > total_subsongs)
|
||||
goto fail;
|
||||
|
||||
interleave = 0;
|
||||
loop_flag = 0;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream)
|
||||
goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_RWS;
|
||||
vgmstream->layout_type = layout_none;
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
vgmstream->stream_size = stream_size;
|
||||
vgmstream->num_streams = total_subsongs;
|
||||
vgmstream->interleave_block_size = interleave;
|
||||
|
||||
/* Seems to be the same as in rws_80d.c, maybe merge the two switches into one function? */
|
||||
switch (codec_uuid) {
|
||||
case 0xD01BD217: /* {D01BD217-3587-4EED-B9D9-B8E86EA9B995}: PCM Signed 16-bit */
|
||||
vgmstream->num_samples = pcm16_bytes_to_samples(stream_size, channels);
|
||||
vgmstream->coding_type = big_endian ? coding_PCM16BE : coding_PCM16LE;
|
||||
break;
|
||||
|
||||
case 0xD9EA9798: /* {D9EA9798-BBBC-447B-96B2-654759102E16}: PSX-ADPCM */
|
||||
vgmstream->num_samples = ps_bytes_to_samples(stream_size, channels);
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
break;
|
||||
|
||||
case 0xF86215B0: /* {F86215B0-31D5-4C29-BD37-CDBF9BD10C53}: DSP-ADPCM */
|
||||
vgmstream->num_samples = dsp_bytes_to_samples(stream_size, channels);
|
||||
dsp_read_coefs_be(vgmstream, sf, misc_data_offset + 0x1C, 0);
|
||||
dsp_read_hist_be(vgmstream, sf, misc_data_offset + 0x40, 0);
|
||||
vgmstream->coding_type = coding_NGC_DSP;
|
||||
break;
|
||||
|
||||
default:
|
||||
VGM_LOG("RWS: unknown codec 0x%08x\n", codec_uuid);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
snprintf(vgmstream->stream_name, STREAM_NAME_SIZE, "%s/%s", header_name, stream_name);
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, stream_offset + 0x0C))
|
||||
goto fail;
|
||||
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -1,66 +0,0 @@
|
|||
#include "meta.h"
|
||||
#include "../util.h"
|
||||
/* RWX (found in Air Force Delta Storm (XBOX)) */
|
||||
VGMSTREAM * init_vgmstream_rwx(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
char filename[PATH_LIMIT];
|
||||
off_t start_offset;
|
||||
|
||||
int loop_flag = 0;
|
||||
int channel_count;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("rwx",filename_extension(filename))) goto fail;
|
||||
|
||||
/* check header */
|
||||
if (read_32bitBE(0x00,streamFile) != 0x52415758)
|
||||
goto fail;
|
||||
|
||||
|
||||
loop_flag = read_32bitLE(0x0C,streamFile);
|
||||
channel_count = 2;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
|
||||
/* fill in the vital statistics */
|
||||
start_offset = read_32bitLE(0x04,streamFile);
|
||||
vgmstream->channels = channel_count;
|
||||
vgmstream->sample_rate = read_32bitLE(0x08,streamFile);
|
||||
vgmstream->coding_type = coding_PCM16LE;
|
||||
vgmstream->num_samples = read_32bitLE(0x10,streamFile);
|
||||
if (loop_flag) {
|
||||
vgmstream->loop_start_sample = read_32bitLE(0x0C,streamFile);
|
||||
vgmstream->loop_end_sample = read_32bitLE(0x10,streamFile);
|
||||
}
|
||||
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x2;
|
||||
vgmstream->meta_type = meta_RWX;
|
||||
|
||||
/* open the file for reading */
|
||||
{
|
||||
int i;
|
||||
STREAMFILE * file;
|
||||
file = streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
if (!file) goto fail;
|
||||
for (i=0;i<channel_count;i++) {
|
||||
vgmstream->ch[i].streamfile = file;
|
||||
|
||||
vgmstream->ch[i].channel_start_offset=
|
||||
vgmstream->ch[i].offset=start_offset+
|
||||
vgmstream->interleave_block_size*i;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return vgmstream;
|
||||
|
||||
/* clean up anything we may have opened */
|
||||
fail:
|
||||
if (vgmstream) close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -6,11 +6,10 @@
|
|||
/* SEG - from Stormfront games [Eragon (multi), Forgotten Realms: Demon Stone (multi) */
|
||||
VGMSTREAM* init_vgmstream_seg(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag, channel_count;
|
||||
size_t data_size;
|
||||
uint32_t start_offset, data_size;
|
||||
int loop_flag, channels;
|
||||
uint32_t codec;
|
||||
int32_t (*read_32bit)(off_t,STREAMFILE*) = NULL;
|
||||
read_u32_t read_u32;
|
||||
|
||||
|
||||
/* checks */
|
||||
|
@ -19,19 +18,16 @@ VGMSTREAM* init_vgmstream_seg(STREAMFILE* sf) {
|
|||
if (!check_extensions(sf, "seg"))
|
||||
goto fail;
|
||||
|
||||
codec = read_32bitBE(0x04,sf);
|
||||
/* 0x08: version? (2: Eragon, Spiderwick Chronicles Wii / 3: Spiderwick Chronicles X360 / 4: Spiderwick Chronicles PC) */
|
||||
if (guess_endian32(0x08,sf)) {
|
||||
read_32bit = read_32bitBE;
|
||||
} else {
|
||||
read_32bit = read_32bitLE;
|
||||
}
|
||||
codec = read_u32be(0x04,sf);
|
||||
/* 0x08: version? (2: Eragon, Spiderwick Chronicles Wii / 3: Eragon X360, Spiderwick Chronicles X360 / 4: Spiderwick Chronicles PC) */
|
||||
read_u32 = guess_read_u32(0x08, sf);
|
||||
|
||||
/* 0x0c: file size */
|
||||
data_size = read_32bit(0x10, sf); /* including interleave padding */
|
||||
data_size = read_u32(0x10, sf); /* including interleave padding */
|
||||
/* 0x14: null */
|
||||
|
||||
loop_flag = read_32bit(0x20,sf); /* rare */
|
||||
channel_count = read_32bit(0x24,sf);
|
||||
loop_flag = read_u32(0x20,sf); /* rare */
|
||||
channels = read_u32(0x24,sf);
|
||||
/* 0x28: extradata 1 entries (0x08 per entry, unknown) */
|
||||
/* 0x2c: extradata 1 offset */
|
||||
/* 0x30: extradata 2 entries (0x10 or 0x14 per entry, seek/hist table?) */
|
||||
|
@ -41,12 +37,12 @@ VGMSTREAM* init_vgmstream_seg(STREAMFILE* sf) {
|
|||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_SEG;
|
||||
vgmstream->sample_rate = read_32bit(0x18,sf);
|
||||
vgmstream->num_samples = read_32bit(0x1c,sf);
|
||||
vgmstream->sample_rate = read_u32(0x18,sf);
|
||||
vgmstream->num_samples = read_u32(0x1c,sf);
|
||||
if (loop_flag) {
|
||||
vgmstream->loop_start_sample = 0;
|
||||
vgmstream->loop_end_sample = vgmstream->num_samples;
|
||||
|
@ -86,14 +82,29 @@ VGMSTREAM* init_vgmstream_seg(STREAMFILE* sf) {
|
|||
|
||||
#ifdef VGM_USE_FFMPEG
|
||||
case 0x78623300: { /* "xb3\0" */
|
||||
int block_size = 0x4000;
|
||||
/* no apparent flag */
|
||||
if (read_u32be(start_offset, sf) == 0) {
|
||||
/* Eragon (PC) */
|
||||
start_offset += 0x20A; /* one frame */
|
||||
|
||||
vgmstream->codec_data = init_ffmpeg_xma2_raw(sf, start_offset, data_size, vgmstream->num_samples, vgmstream->channels, vgmstream->sample_rate, block_size, 0);
|
||||
if (!vgmstream->codec_data) goto fail;
|
||||
vgmstream->coding_type = coding_FFmpeg;
|
||||
vgmstream->layout_type = layout_none;
|
||||
mpeg_custom_config cfg = {0};
|
||||
|
||||
vgmstream->codec_data = init_mpeg_custom(sf, start_offset, &vgmstream->coding_type, channels, MPEG_STANDARD, &cfg);
|
||||
if (!vgmstream->codec_data) goto fail;
|
||||
vgmstream->layout_type = layout_none;
|
||||
}
|
||||
else {
|
||||
/* The Spiderwick Chronicles (X360) */
|
||||
int block_size = 0x4000;
|
||||
|
||||
vgmstream->codec_data = init_ffmpeg_xma2_raw(sf, start_offset, data_size, vgmstream->num_samples, vgmstream->channels, vgmstream->sample_rate, block_size, 0);
|
||||
if (!vgmstream->codec_data) goto fail;
|
||||
vgmstream->coding_type = coding_FFmpeg;
|
||||
vgmstream->layout_type = layout_none;
|
||||
|
||||
xma_fix_raw_samples(vgmstream, sf, start_offset,data_size, 0, 0,0); /* samples are ok */
|
||||
}
|
||||
|
||||
xma_fix_raw_samples(vgmstream, sf, start_offset,data_size, 0, 0,0); /* samples are ok */
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,46 +1,65 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
#include "sfh_streamfile.h"
|
||||
|
||||
|
||||
/* .SFH - Capcom wrapper [Devil May Cry 4 Demo (PS3), Jojo's Bizarre Adventure HD (PS3)] */
|
||||
VGMSTREAM * init_vgmstream_sfh(STREAMFILE *streamFile) {
|
||||
VGMSTREAM *vgmstream = NULL;
|
||||
STREAMFILE *temp_streamFile = NULL;
|
||||
uint32_t version;
|
||||
size_t clean_size, block_size;
|
||||
|
||||
/* check extensions */
|
||||
if ( !check_extensions(streamFile,"at3"))
|
||||
goto fail;
|
||||
|
||||
if (read_32bitBE(0x00, streamFile) != 0x00534648) /* "\0SFH" */
|
||||
goto fail;
|
||||
if (read_32bitBE(0x10, streamFile) != 0x52494646) /* "RIFF" */
|
||||
goto fail;
|
||||
|
||||
/* mini header */
|
||||
version = read_32bitBE(0x04,streamFile);
|
||||
clean_size = read_32bitBE(0x08,streamFile); /* there is padding data at the end */
|
||||
/* 0x0c: always 0 */
|
||||
|
||||
switch(version) {
|
||||
case 0x00010000: block_size = 0x10010; break; /* DMC4 Demo (not retail) */
|
||||
case 0x00010001: block_size = 0x20000; break; /* Jojo */
|
||||
default: goto fail;
|
||||
}
|
||||
|
||||
temp_streamFile = setup_sfh_streamfile(streamFile, 0x00, block_size, clean_size, "at3");
|
||||
if (!temp_streamFile) goto fail;
|
||||
|
||||
vgmstream = init_vgmstream_riff(temp_streamFile);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
close_streamfile(temp_streamFile);
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_streamfile(temp_streamFile);
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
#include "sfh_streamfile.h"
|
||||
|
||||
typedef VGMSTREAM* (*init_vgmstream_t)(STREAMFILE*);
|
||||
|
||||
|
||||
/* .SFH - Capcom wrapper used with common audio extensions [Devil May Cry 4 Demo (PS3), Jojo's Bizarre Adventure HD (PS3), Sengoku Basara 4 Sumeragi (PS3)] */
|
||||
VGMSTREAM* init_vgmstream_sfh(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
STREAMFILE* temp_sf = NULL;
|
||||
init_vgmstream_t init_vgmstream = NULL;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!is_id32be(0x00, sf, "\0SFH"))
|
||||
return NULL;
|
||||
if (!check_extensions(sf,"at3,sspr"))
|
||||
return NULL;
|
||||
|
||||
/* mini header */
|
||||
uint32_t version = read_u32be(0x04,sf);
|
||||
uint32_t clean_size = read_u32be(0x08,sf); /* there is padding data at the end */
|
||||
/* 0x0c: always 0 */
|
||||
|
||||
char* extension;
|
||||
uint32_t header_id = read_u32be(0x10,sf);
|
||||
switch(header_id) {
|
||||
case 0x52494646: // RIFF
|
||||
init_vgmstream = init_vgmstream_riff;
|
||||
extension = "at3";
|
||||
break;
|
||||
|
||||
case 0x53535052: // SSPR
|
||||
init_vgmstream = init_vgmstream_sspr;
|
||||
extension = "sspr";
|
||||
break;
|
||||
|
||||
case 0x00434C44: // \0CLD (.dlcp)
|
||||
case 0x00435241: // \0CRA (.arc)
|
||||
default:
|
||||
goto fail;
|
||||
}
|
||||
|
||||
uint32_t block_size;
|
||||
switch(version) {
|
||||
case 0x00010000: block_size = 0x10010; break; /* DMC4 Demo (not retail) */
|
||||
case 0x00010001: block_size = 0x20000; break; /* Jojo, SB4 */
|
||||
default: goto fail;
|
||||
}
|
||||
|
||||
temp_sf = setup_sfh_streamfile(sf, 0x00, block_size, clean_size, extension);
|
||||
if (!temp_sf) goto fail;
|
||||
|
||||
vgmstream = init_vgmstream(temp_sf);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
close_streamfile(temp_sf);
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_streamfile(temp_sf);
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -12,8 +12,12 @@ VGMSTREAM* init_vgmstream_sli_loops(STREAMFILE* sf) {
|
|||
VGMSTREAM* (*init_vgmstream)(STREAMFILE* sf) = NULL;
|
||||
|
||||
/* checks */
|
||||
/* V1: fixed to 0x900?
|
||||
* V2: varies with text size but around 0xC0 */
|
||||
if (get_streamfile_size(sf) > 0x2000)
|
||||
return NULL;
|
||||
if (!check_extensions(sf, "sli"))
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
{
|
||||
/* try with file.ogg/opus/wav.sli=header and file.ogg/opus/wav=data */
|
||||
|
|
48
Frameworks/vgmstream/vgmstream/src/meta/smpl.c
Normal file
48
Frameworks/vgmstream/vgmstream/src/meta/smpl.c
Normal file
|
@ -0,0 +1,48 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* SMPL - from Homura (PS2) */
|
||||
VGMSTREAM* init_vgmstream_smpl(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
uint32_t start_offset, channel_size;
|
||||
int loop_flag, channels;
|
||||
|
||||
/* checks*/
|
||||
if (!is_id32be(0x00,sf, "SMPL"))
|
||||
return NULL;
|
||||
|
||||
/* .v0: left channel, .v1: right channel
|
||||
* .smpl: header id */
|
||||
if (!check_extensions(sf,"v0,v1") )
|
||||
return NULL;
|
||||
|
||||
/* 0x04: version (VAG-clone) */
|
||||
channels = 1;
|
||||
loop_flag = (read_s32le(0x30,sf) != 0); /* .v1 doesn't have loop points */
|
||||
start_offset = 0x40;
|
||||
channel_size = read_u32be(0x0c,sf) - 0x10;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = read_s32be(0x10,sf);
|
||||
vgmstream->num_samples = ps_bytes_to_samples(channel_size*channels, channels);
|
||||
vgmstream->loop_start_sample = read_s32le(0x30,sf);
|
||||
vgmstream->loop_end_sample = vgmstream->num_samples;
|
||||
|
||||
vgmstream->meta_type = meta_SMPL;
|
||||
vgmstream->allow_dual_stereo = 1;
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = layout_none;
|
||||
|
||||
read_string(vgmstream->stream_name,0x10+1, 0x20,sf);
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -1,50 +1,49 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* .SMV - from Cho Aniki Zero (PSP) */
|
||||
VGMSTREAM * init_vgmstream_smv(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag, channel_count;
|
||||
size_t channel_size, loop_start;
|
||||
|
||||
|
||||
/* check extension */
|
||||
if (!check_extensions(streamFile, "smv"))
|
||||
goto fail;
|
||||
|
||||
channel_size = read_32bitLE(0x00,streamFile);
|
||||
/* 0x08: number of full interleave blocks */
|
||||
channel_count = read_16bitLE(0x0a,streamFile);
|
||||
loop_start = read_32bitLE(0x18,streamFile);
|
||||
loop_flag = (loop_start != -1);
|
||||
start_offset = 0x800;
|
||||
|
||||
if (channel_size * channel_count + start_offset != get_streamfile_size(streamFile))
|
||||
goto fail;
|
||||
|
||||
channel_size -= 0x10; /* last value has SPU end frame without flag 0x7 as it should */
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = read_32bitLE(0x10, streamFile);
|
||||
vgmstream->num_samples = ps_bytes_to_samples(channel_size*channel_count, channel_count);
|
||||
vgmstream->loop_start_sample = ps_bytes_to_samples(loop_start*channel_count, channel_count);
|
||||
vgmstream->loop_end_sample = vgmstream->num_samples;
|
||||
|
||||
vgmstream->meta_type = meta_SMV;
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = read_32bitLE(0x04, streamFile);
|
||||
vgmstream->interleave_last_block_size = read_32bitLE(0x0c, streamFile);
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream,streamFile,start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* .SMV - from Cho Aniki Zero (PSP) */
|
||||
VGMSTREAM* init_vgmstream_smv(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
uint32_t start_offset, channel_size, loop_start;
|
||||
int loop_flag, channels;
|
||||
|
||||
|
||||
/* check extension */
|
||||
if (!check_extensions(sf, "smv"))
|
||||
goto fail;
|
||||
|
||||
channel_size = read_u32le(0x00,sf);
|
||||
/* 0x08: number of full interleave blocks */
|
||||
channels = read_u16le(0x0a,sf);
|
||||
loop_start = read_u32le(0x18,sf);
|
||||
loop_flag = (loop_start != -1);
|
||||
start_offset = 0x800;
|
||||
|
||||
if (channel_size * channels + start_offset != get_streamfile_size(sf))
|
||||
goto fail;
|
||||
|
||||
channel_size -= 0x10; /* last value has SPU end frame without flag 0x7 as it should */
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = read_s32le(0x10, sf);
|
||||
vgmstream->num_samples = ps_bytes_to_samples(channel_size, 1);
|
||||
vgmstream->loop_start_sample = ps_bytes_to_samples(loop_start, 1);
|
||||
vgmstream->loop_end_sample = vgmstream->num_samples;
|
||||
|
||||
vgmstream->meta_type = meta_SMV;
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = read_u32le(0x04, sf);
|
||||
vgmstream->interleave_last_block_size = read_u32le(0x0c, sf);
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream,sf,start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -6,23 +6,22 @@
|
|||
VGMSTREAM* init_vgmstream_sspr(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
STREAMFILE* temp_sf = NULL;
|
||||
uint32_t name_offset, subfile_offset, subfile_size, name_size;
|
||||
int big_endian;
|
||||
int total_subsongs, target_subsong = sf->stream_index;
|
||||
char* extension;
|
||||
uint32_t (*read_u32)(off_t,STREAMFILE*) = NULL;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(sf,"sspr"))
|
||||
goto fail;
|
||||
if (!is_id32be(0x00,sf,"SSPR"))
|
||||
goto fail;
|
||||
return NULL;
|
||||
if (!check_extensions(sf,"sspr"))
|
||||
return NULL;
|
||||
|
||||
uint32_t name_offset, subfile_offset, subfile_size, name_size;
|
||||
int total_subsongs, target_subsong = sf->stream_index;
|
||||
char* extension;
|
||||
read_u32_t read_u32 = NULL;
|
||||
|
||||
/* Simple (audio only) container used some Capcom games (common engine?).
|
||||
* Some files come with a .stqr with unknown data (cues?). */
|
||||
|
||||
big_endian = guess_endian32(0x04, sf); /* 0x01 (version?) */
|
||||
int big_endian = guess_endian32(0x04, sf); /* 0x01 (version?) */
|
||||
read_u32 = big_endian ? read_u32be : read_u32le;
|
||||
|
||||
total_subsongs = read_u32(0x08,sf);
|
||||
|
|
|
@ -1,118 +1,119 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* STM - from Angel Studios/Rockstar San Diego games (Red Dead Revolver, Midnight Club 2, TransWorld Surf) */
|
||||
VGMSTREAM * init_vgmstream_stm(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag = 0, channel_count;
|
||||
int big_endian, bps, interleave, data_size, loop_start = 0, loop_end = 0;
|
||||
int32_t (*read_32bit)(off_t,STREAMFILE*) = NULL;
|
||||
int16_t (*read_16bit)(off_t,STREAMFILE*) = NULL;
|
||||
|
||||
/* check extension, case insensitive
|
||||
* .stm is the real ext but common, rename to .lstm or .stma/amts/ps2stm (older) */
|
||||
if ( !check_extensions(streamFile,"stm,lstm,stma,amts,ps2stm"))
|
||||
goto fail;
|
||||
|
||||
/* check header */
|
||||
if ((read_32bitBE(0x00,streamFile) != 0x53544d41) && /* "SMTA" (LE) */
|
||||
(read_32bitBE(0x00,streamFile) != 0x414D5453)) /* "AMTS" (BE) */
|
||||
goto fail;
|
||||
/* 0x04: revision (696F/696B/696A/6969) */
|
||||
|
||||
big_endian = (read_32bitBE(0x00,streamFile) == 0x414D5453);
|
||||
if (big_endian) {
|
||||
read_32bit = read_32bitBE;
|
||||
read_16bit = read_16bitBE;
|
||||
} else {
|
||||
read_32bit = read_32bitLE;
|
||||
read_16bit = read_16bitLE;
|
||||
}
|
||||
|
||||
start_offset = 0x800;
|
||||
|
||||
interleave = read_32bit(0x08,streamFile);
|
||||
bps = read_32bit(0x10,streamFile);
|
||||
channel_count = read_32bit(0x14,streamFile);
|
||||
data_size = read_32bit(0x18,streamFile);
|
||||
loop_end = read_32bit(0x1c,streamFile); /* absolute offset */
|
||||
if (data_size + start_offset != get_streamfile_size(streamFile)) goto fail;
|
||||
|
||||
if (big_endian) {
|
||||
/* GC AMTS have a regular DSP header beyond 0x20, just use what we need, no point on validating all fields */
|
||||
loop_flag = read_16bit(0x2c,streamFile);
|
||||
}
|
||||
else {
|
||||
/* PS2/Xbox STMA have either loop info or padding beyond 0x20 */
|
||||
if (read_32bit(0x20,streamFile) == 1) { /* may contain 0xCCCCCCCC garbage */
|
||||
loop_flag = 1;
|
||||
loop_start = read_32bit(0x24,streamFile);
|
||||
/* 0x28 (32b * ch): loop start hist+step per channel */ //todo setup
|
||||
}
|
||||
#if 0
|
||||
/* this works for some files that do full repeats, but also repeats many SFX */
|
||||
else if (data_size != loop_end && data_size != loop_end - 0x100) { /* data_size vs adjusted loop_end */
|
||||
loop_flag = 1;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = read_32bit(0xc,streamFile);
|
||||
vgmstream->meta_type = meta_STM;
|
||||
vgmstream->layout_type = (channel_count > 1) ? layout_interleave : layout_none;
|
||||
|
||||
switch(bps) {
|
||||
case 4:
|
||||
if (big_endian) { /* GC DSP ADPCM (TransWorld Surf GC) */
|
||||
vgmstream->coding_type = coding_NGC_DSP;
|
||||
vgmstream->interleave_block_size = interleave;
|
||||
|
||||
vgmstream->num_samples = read_32bit(0x20,streamFile);
|
||||
vgmstream->loop_start_sample = dsp_nibbles_to_samples(read_32bit(0x30,streamFile));
|
||||
vgmstream->loop_end_sample = dsp_nibbles_to_samples(read_32bit(0x34,streamFile))+1;
|
||||
|
||||
dsp_read_coefs_be(vgmstream, streamFile, 0x3c, 0x60);
|
||||
dsp_read_hist_be(vgmstream, streamFile, 0x60, 0x60);
|
||||
}
|
||||
else { /* DVI IMA ADPCM (Red Dead Revolver, Midnight Club 2) */
|
||||
vgmstream->coding_type = coding_DVI_IMA_int;
|
||||
/* 'interleave not' reliable, strange values and rarely needs 0x80 */
|
||||
vgmstream->interleave_block_size = (interleave == 0xc000) ? 0x80 : 0x40;
|
||||
|
||||
vgmstream->num_samples = ima_bytes_to_samples(data_size, vgmstream->channels);
|
||||
vgmstream->loop_start_sample = loop_start;
|
||||
vgmstream->loop_end_sample = ima_bytes_to_samples(loop_end - start_offset, vgmstream->channels);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 16: /* PCM (Spy Hunter 2 PS2, rare) */
|
||||
vgmstream->coding_type = big_endian ? coding_PCM16BE : coding_PCM16LE;
|
||||
vgmstream->interleave_block_size = 0x02; /* interleave not always reliable */
|
||||
|
||||
vgmstream->num_samples = pcm_bytes_to_samples(data_size, vgmstream->channels, bps);
|
||||
vgmstream->loop_start_sample = loop_start;
|
||||
vgmstream->loop_end_sample = pcm_bytes_to_samples(loop_end - start_offset, vgmstream->channels, bps);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
VGM_LOG("STM: unknown bps %i\n", bps);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
||||
if ( !vgmstream_open_stream(vgmstream,streamFile,start_offset) )
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* STM - from Angel Studios/Rockstar San Diego games [Red Dead Revolver (PS2), Spy Hunter 2 (PS2/Xbox)] */
|
||||
VGMSTREAM* init_vgmstream_stma(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
int loop_flag = 0, channel_count;
|
||||
int big_endian, bps, interleave, data_size, loop_start = 0, loop_end = 0;
|
||||
int32_t (*read_32bit)(off_t,STREAMFILE*) = NULL;
|
||||
int16_t (*read_16bit)(off_t,STREAMFILE*) = NULL;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (!is_id32be(0x00,sf, "STMA") && /* LE */
|
||||
!is_id32be(0x00,sf, "AMTS")) /* BE */
|
||||
goto fail;
|
||||
/* .stm: real extension
|
||||
* .lstm: for plugins */
|
||||
if (!check_extensions(sf,"stm,lstm"))
|
||||
goto fail;
|
||||
|
||||
/* 0x04: revision (696F/696B/696A/6969) */
|
||||
|
||||
big_endian = is_id32be(0x00,sf, "AMTS");
|
||||
if (big_endian) {
|
||||
read_32bit = read_32bitBE;
|
||||
read_16bit = read_16bitBE;
|
||||
} else {
|
||||
read_32bit = read_32bitLE;
|
||||
read_16bit = read_16bitLE;
|
||||
}
|
||||
|
||||
start_offset = 0x800;
|
||||
|
||||
interleave = read_32bit(0x08,sf);
|
||||
bps = read_32bit(0x10,sf);
|
||||
channel_count = read_32bit(0x14,sf);
|
||||
data_size = read_32bit(0x18,sf);
|
||||
loop_end = read_32bit(0x1c,sf); /* absolute offset */
|
||||
if (data_size + start_offset != get_streamfile_size(sf)) goto fail;
|
||||
|
||||
if (big_endian) {
|
||||
/* GC AMTS have a regular DSP header beyond 0x20, just use what we need, no point on validating all fields */
|
||||
loop_flag = read_16bit(0x2c,sf);
|
||||
}
|
||||
else {
|
||||
/* PS2/Xbox STMA have either loop info or padding beyond 0x20 */
|
||||
if (read_32bit(0x20,sf) == 1) { /* may contain 0xCCCCCCCC garbage */
|
||||
loop_flag = 1;
|
||||
loop_start = read_32bit(0x24,sf);
|
||||
/* 0x28 (32b * ch): loop start hist+step per channel */ //todo setup
|
||||
}
|
||||
#if 0
|
||||
/* this works for some files that do full repeats, but also repeats many SFX */
|
||||
else if (data_size != loop_end && data_size != loop_end - 0x100) { /* data_size vs adjusted loop_end */
|
||||
loop_flag = 1;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->sample_rate = read_32bit(0xc,sf);
|
||||
vgmstream->meta_type = meta_STMA;
|
||||
vgmstream->layout_type = (channel_count > 1) ? layout_interleave : layout_none;
|
||||
|
||||
switch(bps) {
|
||||
case 4:
|
||||
if (big_endian) { /* GC DSP ADPCM (TransWorld Surf GC) */
|
||||
vgmstream->coding_type = coding_NGC_DSP;
|
||||
vgmstream->interleave_block_size = interleave;
|
||||
|
||||
vgmstream->num_samples = read_32bit(0x20,sf);
|
||||
vgmstream->loop_start_sample = dsp_nibbles_to_samples(read_32bit(0x30,sf));
|
||||
vgmstream->loop_end_sample = dsp_nibbles_to_samples(read_32bit(0x34,sf))+1;
|
||||
|
||||
dsp_read_coefs_be(vgmstream, sf, 0x3c, 0x60);
|
||||
dsp_read_hist_be(vgmstream, sf, 0x60, 0x60);
|
||||
}
|
||||
else { /* DVI IMA ADPCM (Red Dead Revolver, Midnight Club 2) */
|
||||
vgmstream->coding_type = coding_DVI_IMA_int;
|
||||
/* 'interleave not' reliable, strange values and rarely needs 0x80 */
|
||||
vgmstream->interleave_block_size = (interleave == 0xc000) ? 0x80 : 0x40;
|
||||
|
||||
vgmstream->num_samples = ima_bytes_to_samples(data_size, vgmstream->channels);
|
||||
vgmstream->loop_start_sample = loop_start;
|
||||
vgmstream->loop_end_sample = ima_bytes_to_samples(loop_end - start_offset, vgmstream->channels);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 16: /* PCM (Spy Hunter 2 PS2, rare) */
|
||||
vgmstream->coding_type = big_endian ? coding_PCM16BE : coding_PCM16LE;
|
||||
vgmstream->interleave_block_size = 0x02; /* interleave not always reliable */
|
||||
|
||||
vgmstream->num_samples = pcm_bytes_to_samples(data_size, vgmstream->channels, bps);
|
||||
vgmstream->loop_start_sample = loop_start;
|
||||
vgmstream->loop_end_sample = pcm_bytes_to_samples(loop_end - start_offset, vgmstream->channels, bps);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
VGM_LOG("STM: unknown bps %i\n", bps);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -639,6 +639,7 @@ static int parse_header(STREAMFILE* sf_h, STREAMFILE* sf_b, strwav_header* strwa
|
|||
}
|
||||
|
||||
/* SpongeBob SquarePants: Creature from the Krusty Krab (PS2)[2006] */
|
||||
/* Big Bumpin' (Xbox)[2006] */
|
||||
/* Sneak King (Xbox)[2006] */
|
||||
if ( read_u32be(0x04,sf_h) == 0x00000800 &&
|
||||
read_u32le(0x08,sf_h) == 0x00000000 &&
|
||||
|
@ -673,9 +674,9 @@ static int parse_header(STREAMFILE* sf_h, STREAMFILE* sf_b, strwav_header* strwa
|
|||
}
|
||||
else {
|
||||
strwav->codec = XBOX;
|
||||
strwav->interleave = strwav->tracks > 1 ? 0xD800/2 : 0xD800; /* assumed for multitrack */
|
||||
strwav->interleave = strwav->tracks > 1 ? 0x9000 : 0xD800;
|
||||
}
|
||||
;VGM_LOG("STR+WAV: header SBCKK/SK (PS2)\n");
|
||||
;VGM_LOG("STR+WAV: header SBCKK/BB/SK (PS2/Xbox)\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -9,18 +9,18 @@ VGMSTREAM* init_vgmstream_sts(STREAMFILE* sf) {
|
|||
|
||||
|
||||
/* checks */
|
||||
if (!check_extensions(sf, "sts"))
|
||||
goto fail;
|
||||
|
||||
data_size = read_u32be(0x00,sf);
|
||||
if (data_size + 0x04 != get_streamfile_size(sf))
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
if (!check_extensions(sf, "sts"))
|
||||
return NULL;
|
||||
|
||||
channels = read_u8(0x08,sf) + 1;
|
||||
sample_rate = read_u16be(0x0c,sf);
|
||||
/* 0x10: dsp related? */
|
||||
/* 0x16: usable size */
|
||||
channel_size = read_u32be(0x1a,sf);
|
||||
sample_rate = read_u16be(0x0c,sf);
|
||||
/* 0x10: dsp related? */
|
||||
/* 0x16: usable size */
|
||||
channel_size = read_u32be(0x1a,sf);
|
||||
|
||||
loop_flag = 0; //(read_s32be(0x4C,sf) != -1); /* not seen */
|
||||
|
||||
|
@ -34,16 +34,16 @@ VGMSTREAM* init_vgmstream_sts(STREAMFILE* sf) {
|
|||
vgmstream->meta_type = meta_STS;
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
|
||||
vgmstream->num_samples = dsp_bytes_to_samples(channel_size, 1);
|
||||
vgmstream->num_samples = dsp_bytes_to_samples(channel_size, 1);
|
||||
vgmstream->loop_start_sample = 0;
|
||||
vgmstream->loop_end_sample = vgmstream->num_samples;
|
||||
|
||||
vgmstream->coding_type = coding_NGC_DSP;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = channel_size + 0x2e;
|
||||
vgmstream->interleave_block_size = channel_size + 0x2e;
|
||||
|
||||
dsp_read_coefs_be(vgmstream, sf, 0x1e, start_offset - 0x1e + channel_size);
|
||||
dsp_read_hist_be(vgmstream, sf, 0x1e + 0x24, start_offset - 0x1e + channel_size);
|
||||
dsp_read_coefs_be(vgmstream, sf, 0x1e, start_offset - 0x1e + channel_size);
|
||||
dsp_read_hist_be(vgmstream, sf, 0x1e + 0x24, start_offset - 0x1e + channel_size);
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
|
@ -14,8 +14,9 @@ VGMSTREAM* init_vgmstream_thp(STREAMFILE* sf) {
|
|||
/* checks */
|
||||
/* .thp: actual extension
|
||||
* .dsp: fake extension?
|
||||
* .mov: Dora the Explorer: JttPP (GC)
|
||||
* (extensionless): Fragile (Wii) */
|
||||
if (!check_extensions(sf, "thp,dsp,"))
|
||||
if (!check_extensions(sf, "thp,dsp,mov,"))
|
||||
goto fail;
|
||||
if (!is_id32be(0x00,sf, "THP\0"))
|
||||
goto fail;
|
||||
|
|
|
@ -55,8 +55,10 @@ typedef enum {
|
|||
PCM8_SB,
|
||||
HEVAG,
|
||||
YMZ,
|
||||
ULAW,
|
||||
ALAW,
|
||||
|
||||
UNKNOWN = 99,
|
||||
UNKNOWN = 255,
|
||||
} txth_codec_t;
|
||||
|
||||
typedef enum { DEFAULT, NEGATIVE, POSITIVE, INVERTED } txth_loop_t;
|
||||
|
@ -238,6 +240,8 @@ VGMSTREAM* init_vgmstream_txth(STREAMFILE* sf) {
|
|||
case PCM8_U:
|
||||
case PCM8_SB: interleave = 0x01; break;
|
||||
case PCM_FLOAT_LE: interleave = 0x04; break;
|
||||
case ULAW:
|
||||
case ALAW: interleave = 0x01; break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -260,6 +264,8 @@ VGMSTREAM* init_vgmstream_txth(STREAMFILE* sf) {
|
|||
case PCM8_U: coding = coding_PCM8_U; break;
|
||||
case PCM8_U_int: coding = coding_PCM8_U_int; break;
|
||||
case PCM8_SB: coding = coding_PCM8_SB; break;
|
||||
case ULAW: coding = coding_ULAW; break;
|
||||
case ALAW: coding = coding_ALAW; break;
|
||||
case PCM_FLOAT_LE: coding = coding_PCMFLOAT; break;
|
||||
case SDX2: coding = coding_SDX2; break;
|
||||
case DVI_IMA: coding = coding_DVI_IMA; break;
|
||||
|
@ -333,6 +339,8 @@ VGMSTREAM* init_vgmstream_txth(STREAMFILE* sf) {
|
|||
case coding_PCM8:
|
||||
case coding_PCM8_U:
|
||||
case coding_PCM8_SB:
|
||||
case coding_ULAW:
|
||||
case coding_ALAW:
|
||||
case coding_PCMFLOAT:
|
||||
case coding_PCM4:
|
||||
case coding_PCM4_U:
|
||||
|
@ -993,6 +1001,8 @@ static txth_codec_t parse_codec(txth_header* txth, const char* val) {
|
|||
else if (is_string(val,"PCM_FLOAT_LE")) return PCM_FLOAT_LE;
|
||||
else if (is_string(val,"IMA_HV")) return IMA_HV;
|
||||
else if (is_string(val,"HEVAG")) return HEVAG;
|
||||
else if (is_string(val,"ULAW")) return ULAW;
|
||||
else if (is_string(val,"ALAW")) return ALAW;
|
||||
/* special handling */
|
||||
else if (is_string(val,"name_value")) return txth->name_values[0];
|
||||
else if (is_string(val,"name_value1")) return txth->name_values[0];
|
||||
|
@ -2132,6 +2142,8 @@ static int get_bytes_to_samples(txth_header* txth, uint32_t bytes) {
|
|||
case PCM8_U_int:
|
||||
case PCM8_U:
|
||||
case PCM8_SB:
|
||||
case ULAW:
|
||||
case ALAW:
|
||||
return pcm8_bytes_to_samples(bytes, txth->channels);
|
||||
case PCM_FLOAT_LE:
|
||||
return pcm_bytes_to_samples(bytes, txth->channels, 32);
|
||||
|
|
|
@ -5,8 +5,7 @@
|
|||
/* VAGp - Sony SDK format, created by various official tools */
|
||||
VGMSTREAM* init_vgmstream_vag(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
off_t start_offset;
|
||||
size_t file_size, channel_size, interleave, interleave_first = 0, interleave_first_skip = 0;
|
||||
uint32_t start_offset, file_size, channel_size, interleave, interleave_first = 0, interleave_first_skip = 0;
|
||||
meta_t meta_type;
|
||||
int channels = 0, loop_flag, sample_rate;
|
||||
uint32_t vag_id, version, reserved;
|
||||
|
@ -17,7 +16,7 @@ VGMSTREAM* init_vgmstream_vag(STREAMFILE* sf) {
|
|||
/* checks */
|
||||
if (((read_u32be(0x00,sf) & 0xFFFFFF00) != get_id32be("VAG\0")) &&
|
||||
((read_u32le(0x00,sf) & 0xFFFFFF00) != get_id32be("VAG\0")))
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
/* .vag: standard
|
||||
* .swag: Frantix (PSP)
|
||||
|
@ -28,7 +27,7 @@ VGMSTREAM* init_vgmstream_vag(STREAMFILE* sf) {
|
|||
* .xa2: Shikigami no Shiro (PS2)
|
||||
* .snd: Alien Breed (Vita) */
|
||||
if (!check_extensions(sf,"vag,swag,str,vig,l,r,vas,xa2,snd"))
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
file_size = get_streamfile_size(sf);
|
||||
|
||||
|
@ -55,7 +54,7 @@ VGMSTREAM* init_vgmstream_vag(STREAMFILE* sf) {
|
|||
switch(vag_id) {
|
||||
|
||||
case 0x56414731: /* "VAG1" [Metal Gear Solid 3 (PS2), Cabela's African Safari (PSP), Shamu's Deep Sea Adventures (PS2)] */
|
||||
meta_type = meta_PS2_VAG1; //TODO not always Konami (Sand Grain Studios)
|
||||
meta_type = meta_VAG_custom; //TODO not always Konami (Sand Grain Studios)
|
||||
start_offset = 0x40; /* 0x30 is extra data in VAG1 */
|
||||
interleave = 0x10;
|
||||
loop_flag = 0;
|
||||
|
@ -67,7 +66,7 @@ VGMSTREAM* init_vgmstream_vag(STREAMFILE* sf) {
|
|||
break;
|
||||
|
||||
case 0x56414732: /* "VAG2" (2 channels) [Metal Gear Solid 3 (PS2)] */
|
||||
meta_type = meta_PS2_VAG2;
|
||||
meta_type = meta_VAG_custom;
|
||||
start_offset = 0x40; /* 0x30 is extra data in VAG2 */
|
||||
channels = 2;
|
||||
interleave = 0x800;
|
||||
|
@ -75,7 +74,7 @@ VGMSTREAM* init_vgmstream_vag(STREAMFILE* sf) {
|
|||
break;
|
||||
|
||||
case 0x56414769: /* "VAGi" (interleaved) */
|
||||
meta_type = meta_PS2_VAGi;
|
||||
meta_type = meta_VAG_custom;
|
||||
start_offset = 0x800;
|
||||
channels = 2;
|
||||
interleave = read_u32le(0x08,sf);
|
||||
|
@ -83,7 +82,7 @@ VGMSTREAM* init_vgmstream_vag(STREAMFILE* sf) {
|
|||
break;
|
||||
|
||||
case 0x70474156: /* pGAV (little endian / stereo) [Jak 3 (PS2), Jak X (PS2)] */
|
||||
meta_type = meta_PS2_pGAV;
|
||||
meta_type = meta_VAG_custom;
|
||||
start_offset = 0x30;
|
||||
|
||||
if (is_id32be(0x20,sf, "Ster")) {
|
||||
|
@ -94,7 +93,7 @@ VGMSTREAM* init_vgmstream_vag(STREAMFILE* sf) {
|
|||
else if (is_id32be(0x1000,sf, "pGAV"))
|
||||
interleave = 0x1000; /* Jak X interleave, includes header */
|
||||
else
|
||||
interleave = 0x2000; /* Jak 3 interleave in rare files, no header */
|
||||
goto fail;
|
||||
interleave_first = interleave - start_offset; /* interleave includes header */
|
||||
interleave_first_skip = start_offset;
|
||||
}
|
||||
|
@ -110,7 +109,7 @@ VGMSTREAM* init_vgmstream_vag(STREAMFILE* sf) {
|
|||
break;
|
||||
|
||||
case 0x56414770: /* "VAGp" (standard and variations) */
|
||||
meta_type = meta_PS2_VAGp;
|
||||
meta_type = meta_VAG;
|
||||
|
||||
if (check_extensions(sf,"vig")) {
|
||||
/* MX vs. ATV Untamed (PS2) */
|
||||
|
@ -289,6 +288,14 @@ VGMSTREAM* init_vgmstream_vag(STREAMFILE* sf) {
|
|||
goto fail;
|
||||
}
|
||||
|
||||
/* ignore bigfiles and bad extractions (approximate) */
|
||||
if (channel_size * channels + interleave * channels + start_offset * channels + 0x8000 < get_streamfile_size(sf) ||
|
||||
channel_size * channels > get_streamfile_size(sf)) {
|
||||
vgm_logi("VAG: wrong expected (incorrect extraction? %x * %i + %x + %x + ~ vs %x)\n",
|
||||
channel_size, channels, interleave * channels, start_offset * channels, (uint32_t)get_streamfile_size(sf));
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
|
@ -332,12 +339,12 @@ VGMSTREAM* init_vgmstream_vag_aaap(STREAMFILE* sf) {
|
|||
int loop_flag;
|
||||
|
||||
/* checks */
|
||||
if (!is_id32be(0x00, sf, "AAAp"))
|
||||
return NULL;
|
||||
|
||||
/* .vag - assumed, we don't know the original filenames */
|
||||
if (!check_extensions(sf, "vag"))
|
||||
goto fail;
|
||||
|
||||
if (read_u32be(0x00, sf) != 0x41414170) /* "AAAp" */
|
||||
goto fail;
|
||||
return NULL;
|
||||
|
||||
interleave = read_u16le(0x04, sf);
|
||||
channels = read_u16le(0x06, sf);
|
||||
|
@ -362,7 +369,7 @@ VGMSTREAM* init_vgmstream_vag_aaap(STREAMFILE* sf) {
|
|||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_PS2_VAGp_AAAP;
|
||||
vgmstream->meta_type = meta_AAAP;
|
||||
vgmstream->sample_rate = sample_rate;
|
||||
vgmstream->num_samples = ps_bytes_to_samples(channel_size, 1);
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
|
|
|
@ -1,36 +1,38 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
#include "../layout/layout.h"
|
||||
#include "../util/endianness.h"
|
||||
|
||||
|
||||
/* VID1 - Factor 5/DivX format GC/Xbox games [Gun (GC), Tony Hawk's American Wasteland (GC), Enter The Matrix (Xbox)]*/
|
||||
VGMSTREAM * init_vgmstream_ngc_vid1(STREAMFILE* sf) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
off_t start_offset, header_offset;
|
||||
VGMSTREAM* init_vgmstream_vid1(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
uint32_t start_offset, header_offset;
|
||||
int loop_flag = 0, channels, sample_rate;
|
||||
uint32_t codec;
|
||||
int big_endian;
|
||||
uint32_t (*read_u32)(off_t,STREAMFILE*);
|
||||
read_u32_t read_u32;
|
||||
|
||||
|
||||
/* checks */
|
||||
/* .vid: video + (often) audio
|
||||
* .ogg: audio only [Gun (GC)], .logg: for plugins */
|
||||
if (!check_extensions(sf,"vid,ogg,logg"))
|
||||
goto fail;
|
||||
|
||||
/* chunked/blocked format containing video or audio frames */
|
||||
if (read_u32be(0x00, sf) == 0x56494431) { /* "VID1" BE (GC) */
|
||||
if (is_id32be(0x00, sf, "VID1")) { /* BE (GC) */
|
||||
big_endian = 1;
|
||||
}
|
||||
else if (read_u32le(0x00,sf) == 0x56494431) { /* "VID1" LE (Xbox) */
|
||||
else if (is_id32le(0x00,sf, "VID1")) { /* LE (Xbox) */
|
||||
big_endian = 0;
|
||||
}
|
||||
else {
|
||||
goto fail;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* .vid: video + (often) audio
|
||||
* .ogg: audio only [Gun (GC)], .logg: for plugins */
|
||||
if (!check_extensions(sf,"vid,ogg,logg"))
|
||||
return NULL;
|
||||
|
||||
read_u32 = big_endian ? read_u32be : read_u32le;
|
||||
|
||||
/* chunked/blocked format containing video or audio frames */
|
||||
|
||||
/* find actual header start/size in the chunks (id + size + null) */
|
||||
{
|
||||
|
|
56
Frameworks/vgmstream/vgmstream/src/meta/voi.c
Normal file
56
Frameworks/vgmstream/vgmstream/src/meta/voi.c
Normal file
|
@ -0,0 +1,56 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
|
||||
/* .VOI - from Raw Danger (PS2) */
|
||||
VGMSTREAM* init_vgmstream_voi(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
int channels, loop_flag = 0;
|
||||
off_t start_offset;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (read_u32le(0x00,sf) != 1 && read_u32le(0x00,sf) != 2)
|
||||
return NULL;
|
||||
|
||||
if (!check_extensions(sf, "voi"))
|
||||
return NULL;
|
||||
|
||||
/* probably number of samples of all channels */
|
||||
if ((read_u32le(0x04,sf) * 2 + 0x800) != get_streamfile_size(sf))
|
||||
return NULL;
|
||||
|
||||
channels = read_s32le(0x00,sf);
|
||||
loop_flag = 0;
|
||||
start_offset = 0x800;
|
||||
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_VOI;
|
||||
vgmstream->num_samples = pcm16_bytes_to_samples(get_streamfile_size(sf) - start_offset, channels);
|
||||
vgmstream->coding_type = coding_PCM16LE;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
|
||||
if (read_32bitLE(0x08,sf) == 0) {
|
||||
vgmstream->sample_rate = 48000;
|
||||
vgmstream->interleave_block_size = 0x200;
|
||||
}
|
||||
else if (read_32bitLE(0x08,sf) == 1) {
|
||||
vgmstream->sample_rate = 24000;
|
||||
vgmstream->interleave_block_size = 0x100;
|
||||
}
|
||||
else {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -4,128 +4,108 @@
|
|||
|
||||
/* Westwood Studios .aud (WS-AUD) */
|
||||
|
||||
VGMSTREAM * init_vgmstream_ws_aud(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
char filename[PATH_LIMIT];
|
||||
|
||||
VGMSTREAM* init_vgmstream_ws_aud(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
coding_t coding_type = -1;
|
||||
off_t format_offset;
|
||||
|
||||
int channel_count;
|
||||
int new_type = 0; /* if 0 is old type */
|
||||
|
||||
int channels;
|
||||
bool new_type = false;
|
||||
int bytes_per_sample = 0;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("aud",filename_extension(filename))) goto fail;
|
||||
|
||||
/* checks **/
|
||||
if (!check_extensions(sf, "aud") )
|
||||
return NULL;
|
||||
|
||||
/* check for 0x0000DEAF chunk marker for first chunk */
|
||||
if (read_32bitLE(0x10,streamFile)==0x0000DEAF) { /* new */
|
||||
new_type = 1;
|
||||
} else if (read_32bitLE(0x0C,streamFile)==0x0000DEAF) { /* old */
|
||||
new_type = 0;
|
||||
} else goto fail;
|
||||
if (read_u32le(0x10,sf) == 0x0000DEAF) { /* new */
|
||||
new_type = true;
|
||||
format_offset = 0x0A;
|
||||
}
|
||||
else if (read_u32le(0x0C,sf) == 0x0000DEAF) { /* old */
|
||||
new_type = false;
|
||||
format_offset = 0x06;
|
||||
}
|
||||
else {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (new_type)
|
||||
format_offset = 0xa;
|
||||
/* blocked format with a mini-header */
|
||||
|
||||
if (read_u8(format_offset + 0x00, sf) & 1)
|
||||
channels = 2;
|
||||
else
|
||||
format_offset = 0x6;
|
||||
channels = 1;
|
||||
|
||||
/* get channel count */
|
||||
if (read_8bit(format_offset,streamFile) & 1)
|
||||
channel_count = 2;
|
||||
else
|
||||
channel_count = 1;
|
||||
if (channels == 2)
|
||||
goto fail; /* not seen */
|
||||
|
||||
if (channel_count == 2) goto fail; /* TODO: not yet supported (largely
|
||||
because not yet seen) */
|
||||
|
||||
/* get output format */
|
||||
if (read_8bit(format_offset+1,streamFile) & 2)
|
||||
if (read_u8(format_offset + 0x01,sf) & 2)
|
||||
bytes_per_sample = 2;
|
||||
else
|
||||
bytes_per_sample = 1;
|
||||
|
||||
/* check codec type */
|
||||
switch (read_8bit(format_offset+1,streamFile)) {
|
||||
switch (read_u8(format_offset + 0x01,sf)) {
|
||||
case 1: /* Westwood custom */
|
||||
coding_type = coding_WS;
|
||||
/* shouldn't happen? */
|
||||
if (bytes_per_sample != 1) goto fail;
|
||||
if (bytes_per_sample != 1) goto fail; /* shouldn't happen? */
|
||||
break;
|
||||
case 99: /* IMA ADPCM */
|
||||
coding_type = coding_IMA_int;
|
||||
break;
|
||||
default:
|
||||
goto fail;
|
||||
break;
|
||||
}
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
|
||||
vgmstream = allocate_vgmstream(channel_count,0);
|
||||
vgmstream = allocate_vgmstream(channels, 0);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
/* fill in the vital statistics */
|
||||
if (new_type) {
|
||||
vgmstream->num_samples = read_32bitLE(0x06,streamFile)/bytes_per_sample/channel_count;
|
||||
} else {
|
||||
vgmstream->num_samples = read_32bitLE(0x06,sf)/bytes_per_sample/channels;
|
||||
}
|
||||
else {
|
||||
/* Doh, no output size in old type files. We have to read through the
|
||||
* file looking at chunk headers! Crap! */
|
||||
int32_t out_size = 0;
|
||||
off_t current_offset = 0x8;
|
||||
off_t file_size = get_streamfile_size(streamFile);
|
||||
off_t file_size = get_streamfile_size(sf);
|
||||
|
||||
while (current_offset < file_size) {
|
||||
int16_t chunk_size;
|
||||
chunk_size = read_16bitLE(current_offset,streamFile);
|
||||
out_size += read_16bitLE(current_offset+2,streamFile);
|
||||
chunk_size = read_16bitLE(current_offset,sf);
|
||||
out_size += read_16bitLE(current_offset+2,sf);
|
||||
/* while we're here might as well check for valid chunks */
|
||||
if (read_32bitLE(current_offset+4,streamFile) != 0x0000DEAF) goto fail;
|
||||
if (read_32bitLE(current_offset+4,sf) != 0x0000DEAF) goto fail;
|
||||
current_offset+=8+chunk_size;
|
||||
}
|
||||
|
||||
vgmstream->num_samples = out_size/bytes_per_sample/channel_count;
|
||||
vgmstream->num_samples = out_size/bytes_per_sample/channels;
|
||||
}
|
||||
|
||||
/* they tend to not actually have data for the last odd sample */
|
||||
if (vgmstream->num_samples & 1) vgmstream->num_samples--;
|
||||
vgmstream->sample_rate = (uint16_t)read_16bitLE(0x00,streamFile);
|
||||
vgmstream->sample_rate = (uint16_t)read_16bitLE(0x00,sf);
|
||||
|
||||
vgmstream->coding_type = coding_type;
|
||||
if (new_type) {
|
||||
vgmstream->meta_type = meta_WS_AUD;
|
||||
} else {
|
||||
vgmstream->meta_type = meta_WS_AUD_old;
|
||||
}
|
||||
|
||||
vgmstream->layout_type = layout_blocked_ws_aud;
|
||||
|
||||
/* open the file for reading by each channel */
|
||||
{
|
||||
int i;
|
||||
STREAMFILE * file;
|
||||
if (!vgmstream_open_stream(vgmstream, sf, 0x00) )
|
||||
goto fail;
|
||||
|
||||
file = streamFile->open(streamFile,filename,
|
||||
STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
if (!file) goto fail;
|
||||
|
||||
for (i=0;i<channel_count;i++) {
|
||||
vgmstream->ch[i].streamfile = file;
|
||||
}
|
||||
}
|
||||
|
||||
/* start me up */
|
||||
if (new_type) {
|
||||
block_update_ws_aud(0xc,vgmstream);
|
||||
block_update(0x0c, vgmstream);
|
||||
} else {
|
||||
block_update_ws_aud(0x8,vgmstream);
|
||||
block_update(0x08, vgmstream);
|
||||
}
|
||||
|
||||
return vgmstream;
|
||||
|
||||
/* clean up anything we may have opened */
|
||||
fail:
|
||||
if (vgmstream) close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
|
|
60
Frameworks/vgmstream/vgmstream/src/meta/xa2_acclaim.c
Normal file
60
Frameworks/vgmstream/vgmstream/src/meta/xa2_acclaim.c
Normal file
|
@ -0,0 +1,60 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
|
||||
/* XA2 - from Acclaim games [RC Revenge Pro (PS2), XGIII: Extreme G Racing (PS2)] */
|
||||
VGMSTREAM* init_vgmstream_xa2_acclaim(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
uint32_t start_offset, sizes_offset;
|
||||
int channels, loop_flag = 0, interleave;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (read_u32le(0x00,sf) > 0x10)
|
||||
return NULL;
|
||||
|
||||
if (!check_extensions(sf, "xa2"))
|
||||
return NULL;
|
||||
|
||||
channels = read_s32le(0x00, sf); /* seen +16 */
|
||||
loop_flag = 0;
|
||||
|
||||
if (read_u32le(0x04,sf) > 0x1000) { /* RCRP (no interleave field) */
|
||||
interleave = (channels > 2) ? 0x400 : 0x1000;
|
||||
sizes_offset = 0x04;
|
||||
}
|
||||
else {
|
||||
interleave = read_s32le(0x04,sf);
|
||||
sizes_offset = 0x08;
|
||||
}
|
||||
|
||||
/* N sizes that rougly sum data size (not all the same value), then empty */
|
||||
for (int i = 0; i < channels; i++) {
|
||||
if (read_32bitBE(sizes_offset + 0x04 * i, sf) == 0)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (read_32bitBE(sizes_offset + 0x04 * channels, sf) != 0)
|
||||
goto fail;
|
||||
|
||||
start_offset = 0x800;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_XA2_ACCLAIM;
|
||||
vgmstream->sample_rate = 44100;
|
||||
vgmstream->num_samples = ps_bytes_to_samples(get_streamfile_size(sf) - start_offset, channels);
|
||||
|
||||
vgmstream->coding_type = coding_PSX;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = interleave;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -79,6 +79,8 @@ static int lz4mg_decompress(lz4mg_stream_t* strm) {
|
|||
int src_pos = 0;
|
||||
uint8_t next_len, next_val;
|
||||
|
||||
/* MSVC 64 19.30+ has a /O2 bug where some states aren't handled properly unless a fallthrough is used.
|
||||
* Seems related to src_pos and doesn't seem fixed by using sub-functions or avoiding gotos. */
|
||||
|
||||
while (1) {
|
||||
/* mostly linear state machine, but it may break anytime when reaching dst or src
|
||||
|
@ -154,7 +156,7 @@ static int lz4mg_decompress(lz4mg_stream_t* strm) {
|
|||
} while (next_len == LZ4MG_VARLEN_CONTINUE);
|
||||
|
||||
ctx->state = SET_MATCH;
|
||||
break;
|
||||
//break; // Falthrough for MSVC
|
||||
|
||||
case SET_MATCH:
|
||||
ctx->match_len += LZ4MG_MIN_MATCH_LEN;
|
||||
|
@ -164,7 +166,7 @@ static int lz4mg_decompress(lz4mg_stream_t* strm) {
|
|||
ctx->match_pos = LZ4MG_WINDOW_SIZE + ctx->match_pos;
|
||||
|
||||
ctx->state = COPY_MATCH;
|
||||
break;
|
||||
//break; // Fallthrough for MSVC
|
||||
|
||||
case COPY_MATCH:
|
||||
while (ctx->match_len > 0) {
|
||||
|
|
|
@ -95,9 +95,10 @@ VGMSTREAM* init_vgmstream_xwb(STREAMFILE* sf) {
|
|||
|
||||
/* .xwb: standard
|
||||
* .xna: Touhou Makukasai ~ Fantasy Danmaku Festival (PC)
|
||||
* (extensionless): Ikaruga (X360/PC), Grabbed by the Ghoulies (Xbox)
|
||||
* (extensionless): Ikaruga (X360/PC), Grabbed by the Ghoulies (Xbox)
|
||||
* .hwb: Burnout Revenge (X360)
|
||||
* .bd: Fatal Frame 2 (Xbox) */
|
||||
if (!check_extensions(sf,"xwb,xna,bd,"))
|
||||
if (!check_extensions(sf,"xwb,xna,hwb,bd,"))
|
||||
goto fail;
|
||||
|
||||
xwb.little_endian = is_id32be(0x00,sf, "WBND"); /* Xbox/PC */
|
||||
|
|
|
@ -1,92 +1,48 @@
|
|||
#include "meta.h"
|
||||
#include "../util.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* YDSP (from WWE Day of Reckoning) */
|
||||
VGMSTREAM * init_vgmstream_ydsp(STREAMFILE *streamFile) {
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
char filename[PATH_LIMIT];
|
||||
int loop_flag;
|
||||
int channel_count;
|
||||
off_t start_offset;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("ydsp",filename_extension(filename))) goto fail;
|
||||
/* YDSP - from Yuke's games [WWE Day of Reckoning (GC), WWE WrestleMania XIX (GC)] */
|
||||
VGMSTREAM* init_vgmstream_ydsp(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
int channels, loop_flag;
|
||||
uint32_t start_offset;
|
||||
|
||||
/* check header */
|
||||
if (read_32bitBE(0x00,streamFile) != 0x59445350) /* "YDSP" */
|
||||
goto fail;
|
||||
/* checks */
|
||||
if (!is_id32be(0x00,sf, "YDSP"))
|
||||
return NULL;
|
||||
|
||||
/* .ydsp: header id (in bigfile, .yds is the likely extension comparing similar files) */
|
||||
if (!check_extensions(sf, "ydsp"))
|
||||
return NULL;
|
||||
|
||||
loop_flag = (read_s32be(0xB0,sf) != 0x0);
|
||||
channels = read_u16be(0x10,sf);
|
||||
start_offset = 0x120;
|
||||
|
||||
loop_flag = (read_32bitBE(0xB0,streamFile)!=0x0);
|
||||
channel_count = (uint16_t)read_16bitBE(0x10,streamFile);
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
/* fill in the vital statistics */
|
||||
start_offset = 0x120;
|
||||
vgmstream->channels = channel_count;
|
||||
vgmstream->sample_rate = read_32bitBE(0x0C,streamFile);
|
||||
vgmstream->coding_type = coding_NGC_DSP;
|
||||
vgmstream->meta_type = meta_YDSP;
|
||||
vgmstream->sample_rate = read_s32be(0x0C,sf);
|
||||
|
||||
vgmstream->num_samples = (read_32bitBE(0x08,streamFile))*14/8/channel_count;
|
||||
vgmstream->num_samples = dsp_bytes_to_samples(read_u32be(0x08,sf), channels);
|
||||
vgmstream->loop_start_sample = read_s32be(0xB0,sf);
|
||||
vgmstream->loop_end_sample = read_s32be(0xB4,sf);
|
||||
|
||||
if (loop_flag)
|
||||
{
|
||||
vgmstream->loop_start_sample = read_32bitBE(0xB0,streamFile);
|
||||
vgmstream->loop_end_sample = read_32bitBE(0xB4,streamFile);
|
||||
}
|
||||
vgmstream->coding_type = coding_NGC_DSP;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = read_32bitBE(0x14,sf);
|
||||
|
||||
if (channel_count == 1)
|
||||
{
|
||||
vgmstream->layout_type = layout_none;
|
||||
}
|
||||
else if (channel_count == 2)
|
||||
{
|
||||
vgmstream->interleave_block_size = read_32bitBE(0x14,streamFile);
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* open the file for reading */
|
||||
|
||||
if (vgmstream->coding_type == coding_NGC_DSP)
|
||||
{
|
||||
int i;
|
||||
for (i=0;i<16;i++)
|
||||
{
|
||||
vgmstream->ch[0].adpcm_coef[i] = read_16bitBE(0x20+i*2,streamFile);
|
||||
}
|
||||
if (vgmstream->channels == 2)
|
||||
{
|
||||
for (i=0;i<16;i++)
|
||||
{
|
||||
vgmstream->ch[1].adpcm_coef[i] = read_16bitBE(0x44+i*2,streamFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
int i;
|
||||
STREAMFILE * file;
|
||||
file = streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
if (!file) goto fail;
|
||||
for (i=0;i<channel_count;i++) {
|
||||
vgmstream->ch[i].streamfile = file;
|
||||
|
||||
vgmstream->ch[i].channel_start_offset=
|
||||
vgmstream->ch[i].offset=start_offset+
|
||||
vgmstream->interleave_block_size*i;
|
||||
}
|
||||
}
|
||||
dsp_read_coefs_be(vgmstream, sf, 0x20, 0x24);
|
||||
//dsp_read_hist_be(vgmstream, sf, 0x20 + 0x20, 0x24);
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
/* clean up anything we may have opened */
|
||||
fail:
|
||||
if (vgmstream) close_vgmstream(vgmstream);
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
|
51
Frameworks/vgmstream/vgmstream/src/meta/ymf.c
Normal file
51
Frameworks/vgmstream/vgmstream/src/meta/ymf.c
Normal file
|
@ -0,0 +1,51 @@
|
|||
#include "meta.h"
|
||||
#include "../coding/coding.h"
|
||||
|
||||
/* YMF - from Yuke's games [WWE WrestleMania X8 (GC)] */
|
||||
VGMSTREAM* init_vgmstream_ymf(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
uint32_t start_offset;
|
||||
int channels, loop_flag;
|
||||
|
||||
|
||||
/* checks */
|
||||
if (read_u32be(0x00,sf) != 0x00000180 ||
|
||||
read_u32be(0x08,sf) != 0x00000003 ||
|
||||
read_u32be(0x0c,sf) != 0xCCCCCCCC)
|
||||
return NULL;
|
||||
/* 0x04: used data size? */
|
||||
|
||||
/* .ymf: actual extension */
|
||||
if (!check_extensions(sf, "ymf"))
|
||||
return NULL;
|
||||
|
||||
/* .ymf can contain audio or video, but not both (videos start with 0x100 and change minor values),
|
||||
* though it's are found in ./movie/... and probably are considered so */
|
||||
|
||||
loop_flag = 0;
|
||||
channels = 2;
|
||||
start_offset = read_u32be(0x00,sf);
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_YMF;
|
||||
vgmstream->sample_rate = read_32bitBE(0xA8,sf);
|
||||
vgmstream->num_samples = read_32bitBE(0xDC,sf);
|
||||
|
||||
vgmstream->coding_type = coding_NGC_DSP;
|
||||
vgmstream->layout_type = layout_interleave;
|
||||
vgmstream->interleave_block_size = 0x20000;
|
||||
|
||||
dsp_read_coefs_be(vgmstream, sf, 0xAE, 0x60);
|
||||
//dsp_read_hist_be(vgmstream, sf, 0xAE + 0x20, 0x60);
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
|
@ -1,60 +1,44 @@
|
|||
#include "meta.h"
|
||||
#include "../util.h"
|
||||
|
||||
/* ZSD (Dragon Booster) */
|
||||
VGMSTREAM * init_vgmstream_zsd(STREAMFILE *streamFile) {
|
||||
|
||||
VGMSTREAM * vgmstream = NULL;
|
||||
char filename[PATH_LIMIT];
|
||||
off_t start_offset;
|
||||
|
||||
int loop_flag;
|
||||
int channel_count;
|
||||
|
||||
/* check extension, case insensitive */
|
||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
||||
if (strcasecmp("zsd",filename_extension(filename))) goto fail;
|
||||
|
||||
/* check header */
|
||||
if (read_32bitBE(0x00,streamFile) != 0x5A534400) goto fail;
|
||||
|
||||
loop_flag = 0;
|
||||
channel_count = 1;
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
/* fill in the vital statistics */
|
||||
start_offset = read_32bitLE(0x20,streamFile);
|
||||
vgmstream->channels = channel_count;
|
||||
vgmstream->sample_rate = read_32bitLE(0x10,streamFile);
|
||||
vgmstream->coding_type = coding_PCM8;
|
||||
vgmstream->num_samples = read_32bitLE(0x18,streamFile)/channel_count;
|
||||
vgmstream->interleave_block_size=0x0;
|
||||
|
||||
vgmstream->layout_type = layout_none;
|
||||
vgmstream->meta_type = meta_ZSD;
|
||||
|
||||
|
||||
/* open the file for reading */
|
||||
{
|
||||
int i;
|
||||
STREAMFILE * file;
|
||||
file = streamFile->open(streamFile,filename,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
if (!file) goto fail;
|
||||
for (i=0;i<channel_count;i++) {
|
||||
vgmstream->ch[i].streamfile = file;
|
||||
vgmstream->ch[i].channel_start_offset=
|
||||
vgmstream->ch[i].offset=start_offset+
|
||||
vgmstream->interleave_block_size*i;
|
||||
}
|
||||
}
|
||||
|
||||
return vgmstream;
|
||||
|
||||
/* clean up anything we may have opened */
|
||||
fail:
|
||||
if (vgmstream) close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
#include "meta.h"
|
||||
#include "../util.h"
|
||||
|
||||
/* ZSD - from Dragon Booster (DS) */
|
||||
VGMSTREAM* init_vgmstream_zsd(STREAMFILE* sf) {
|
||||
VGMSTREAM* vgmstream = NULL;
|
||||
uint32_t start_offset;
|
||||
int channels, loop_flag;
|
||||
|
||||
/* checks */
|
||||
if (!is_id32be(0x00,sf, "ZSD\0"))
|
||||
return NULL;
|
||||
|
||||
/* .zsd: actual extension */
|
||||
if (!check_extensions(sf, "zsd"))
|
||||
return NULL;
|
||||
|
||||
/* 0x04: 0x1000? */
|
||||
/* 0x08: 0x0c? */
|
||||
/* 0x14: 0x08? */
|
||||
/* 0x1c: 0x1000? */
|
||||
channels = read_s32le(0x0c,sf);
|
||||
|
||||
loop_flag = 0;
|
||||
start_offset = read_s32le(0x20,sf);
|
||||
|
||||
/* build the VGMSTREAM */
|
||||
vgmstream = allocate_vgmstream(channels, loop_flag);
|
||||
if (!vgmstream) goto fail;
|
||||
|
||||
vgmstream->meta_type = meta_ZSD;
|
||||
vgmstream->sample_rate = read_s32le(0x10,sf);
|
||||
vgmstream->num_samples = read_s32le(0x18,sf) / channels;
|
||||
vgmstream->coding_type = coding_PCM8;
|
||||
vgmstream->layout_type = layout_none;
|
||||
|
||||
if (!vgmstream_open_stream(vgmstream, sf, start_offset))
|
||||
goto fail;
|
||||
return vgmstream;
|
||||
|
||||
fail:
|
||||
close_vgmstream(vgmstream);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#include "streamfile.h"
|
||||
#include "util.h"
|
||||
#include "vgmstream.h"
|
||||
#include "util/reader_sf.h"
|
||||
#include "util/paths.h"
|
||||
#include "util/sf_utils.h"
|
||||
#include <string.h>
|
||||
|
||||
/* for dup/fdopen in some systems */
|
||||
|
@ -10,6 +10,17 @@
|
|||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
/* Enables a minor optimization when reopening file descriptors.
|
||||
* Some systems/compilers have issues though, and dupe'd FILEs may fread garbage data in rare cases,
|
||||
* possibly due to underlying buffers that get shared/thrashed by dup(). Seen for example in some .HPS and Ubi
|
||||
* bigfiles (some later MSVC versions) or PS2 .RSD (Mac), where 2nd channel = 2nd SF reads garbage at some points.
|
||||
*
|
||||
* Keep it for other systems since this is (probably) kinda useful, though a more sensible approach would be
|
||||
* redoing SF/FILE/buffer handling to avoid re-opening as much. */
|
||||
#if !defined (_MSC_VER) && !defined (__ANDROID__) && !defined (__APPLE__)
|
||||
#define USE_STDIO_FDUP 1
|
||||
#endif
|
||||
|
||||
/* For (rarely needed) +2GB file support we use fseek64/ftell64. Those are usually available
|
||||
* but may depend on compiler.
|
||||
* - MSVC: +VS2008 should work
|
||||
|
@ -137,13 +148,9 @@ static size_t stdio_read(STDIO_STREAMFILE* sf, uint8_t* dst, offv_t offset, size
|
|||
break; /* this shouldn't happen in our code */
|
||||
}
|
||||
|
||||
#ifdef _MSC_VER
|
||||
/* Workaround a bug that appears when compiling with MSVC (later versions).
|
||||
* This bug is deterministic and seemingly appears randomly after seeking.
|
||||
* It results in fread returning data from the wrong area of the file.
|
||||
* HPS is one format that is almost always affected by this.
|
||||
* May be related/same as stdio_open's fixed bug when using dup(), try disabling */
|
||||
fseek_v(sf->infile, ftell_v(sf->infile), SEEK_SET);
|
||||
#if 0
|
||||
/* old workaround for USE_STDIO_FDUP bug, keep it here for a while as a reminder just in case */
|
||||
//fseek_v(sf->infile, ftell_v(sf->infile), SEEK_SET);
|
||||
#endif
|
||||
|
||||
/* fill the buffer (offset now is beyond buf_offset) */
|
||||
|
@ -198,11 +205,8 @@ static STREAMFILE* stdio_open(STDIO_STREAMFILE* sf, const char* const filename,
|
|||
if (!filename)
|
||||
return NULL;
|
||||
|
||||
#if !defined (__ANDROID__) && !defined (_MSC_VER)
|
||||
/* when enabling this for MSVC it'll seemingly work, but there are issues possibly related to underlying
|
||||
* IO buffers when using dup(), noticeable by re-opening the same streamfile with small buffer sizes
|
||||
* (reads garbage). fseek bug in line 81 may be related/same thing and may be removed.
|
||||
* this reportedly this causes issues in Android too */
|
||||
#ifdef USE_STDIO_FDUP
|
||||
/* minor optimization when reopening files, see comment in #define above */
|
||||
|
||||
/* if same name, duplicate the file descriptor we already have open */
|
||||
if (sf->infile && !strcmp(sf->name,filename)) {
|
||||
|
@ -980,92 +984,10 @@ STREAMFILE* open_multifile_streamfile_f(STREAMFILE** sfs, size_t sfs_size) {
|
|||
|
||||
/* **************************************************** */
|
||||
|
||||
/* change pathname's extension to another (or add it if extensionless) */
|
||||
static void swap_extension(char* pathname, /*size_t*/ int pathname_len, const char* swap) {
|
||||
char* extension = (char*)filename_extension(pathname);
|
||||
//todo safeops
|
||||
if (extension[0] == '\0') {
|
||||
strcat(pathname, ".");
|
||||
strcat(pathname, swap);
|
||||
}
|
||||
else {
|
||||
strcpy(extension, swap);
|
||||
}
|
||||
}
|
||||
|
||||
STREAMFILE* open_streamfile(STREAMFILE* sf, const char* pathname) {
|
||||
return sf->open(sf, pathname, STREAMFILE_DEFAULT_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
STREAMFILE* open_streamfile_by_ext(STREAMFILE* sf, const char* ext) {
|
||||
char filename[PATH_LIMIT];
|
||||
|
||||
get_streamfile_name(sf, filename, sizeof(filename));
|
||||
|
||||
swap_extension(filename, sizeof(filename), ext);
|
||||
|
||||
return open_streamfile(sf, filename);
|
||||
}
|
||||
|
||||
STREAMFILE* open_streamfile_by_filename(STREAMFILE* sf, const char* filename) {
|
||||
char fullname[PATH_LIMIT];
|
||||
char partname[PATH_LIMIT];
|
||||
char *path, *name, *otherpath;
|
||||
|
||||
if (!sf || !filename || !filename[0]) return NULL;
|
||||
|
||||
get_streamfile_name(sf, fullname, sizeof(fullname));
|
||||
|
||||
//todo normalize separators in a better way, safeops, improve copying
|
||||
|
||||
/* check for non-normalized paths first (ex. txth) */
|
||||
path = strrchr(fullname, '/');
|
||||
otherpath = strrchr(fullname, '\\');
|
||||
if (otherpath > path) { //todo cast to ptr?
|
||||
/* foobar makes paths like "(fake protocol)://(windows path with \)".
|
||||
* Hack to work around both separators, though probably foo_streamfile
|
||||
* should just return and handle normalized paths without protocol. */
|
||||
path = otherpath;
|
||||
}
|
||||
|
||||
if (path) {
|
||||
path[1] = '\0'; /* remove name after separator */
|
||||
|
||||
strcpy(partname, filename);
|
||||
fix_dir_separators(partname); /* normalize to DIR_SEPARATOR */
|
||||
|
||||
/* normalize relative paths as don't work ok in some plugins */
|
||||
if (partname[0] == '.' && partname[1] == DIR_SEPARATOR) { /* './name' */
|
||||
name = partname + 2; /* ignore './' */
|
||||
}
|
||||
else if (partname[0] == '.' && partname[1] == '.' && partname[2] == DIR_SEPARATOR) { /* '../name' */
|
||||
char* pathprev;
|
||||
|
||||
path[0] = '\0'; /* remove last separator so next call works */
|
||||
pathprev = strrchr(fullname,DIR_SEPARATOR);
|
||||
if (pathprev) {
|
||||
pathprev[1] = '\0'; /* remove prev dir after separator */
|
||||
name = partname + 3; /* ignore '../' */
|
||||
}
|
||||
else { /* let plugin handle? */
|
||||
path[0] = DIR_SEPARATOR;
|
||||
name = partname;
|
||||
}
|
||||
/* could work with more relative paths but whatevs */
|
||||
}
|
||||
else {
|
||||
name = partname;
|
||||
}
|
||||
|
||||
strcat(fullname, name);
|
||||
}
|
||||
else {
|
||||
strcpy(fullname, filename);
|
||||
}
|
||||
|
||||
return open_streamfile(sf, fullname);
|
||||
}
|
||||
|
||||
STREAMFILE* reopen_streamfile(STREAMFILE* sf, size_t buffer_size) {
|
||||
char pathname[PATH_LIMIT];
|
||||
|
||||
|
@ -1079,111 +1001,6 @@ STREAMFILE* reopen_streamfile(STREAMFILE* sf, size_t buffer_size) {
|
|||
|
||||
/* ************************************************************************* */
|
||||
|
||||
int check_extensions(STREAMFILE* sf, const char* cmp_exts) {
|
||||
char filename[PATH_LIMIT];
|
||||
const char* ext = NULL;
|
||||
const char* cmp_ext = NULL;
|
||||
const char* ststr_res = NULL;
|
||||
size_t ext_len, cmp_len;
|
||||
|
||||
sf->get_name(sf, filename, sizeof(filename));
|
||||
ext = filename_extension(filename);
|
||||
ext_len = strlen(ext);
|
||||
|
||||
cmp_ext = cmp_exts;
|
||||
do {
|
||||
ststr_res = strstr(cmp_ext, ",");
|
||||
cmp_len = ststr_res == NULL
|
||||
? strlen(cmp_ext) /* total length if more not found */
|
||||
: (intptr_t)ststr_res - (intptr_t)cmp_ext; /* find next ext; ststr_res should always be greater than cmp_ext, resulting in a positive cmp_len */
|
||||
|
||||
if (ext_len == cmp_len && strncasecmp(ext,cmp_ext, ext_len) == 0)
|
||||
return 1;
|
||||
|
||||
cmp_ext = ststr_res;
|
||||
if (cmp_ext != NULL)
|
||||
cmp_ext = cmp_ext + 1; /* skip comma */
|
||||
|
||||
} while (cmp_ext != NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
|
||||
/* copies name as-is (may include full path included) */
|
||||
void get_streamfile_name(STREAMFILE* sf, char* buffer, size_t size) {
|
||||
sf->get_name(sf, buffer, size);
|
||||
}
|
||||
|
||||
/* copies the filename without path */
|
||||
void get_streamfile_filename(STREAMFILE* sf, char* buffer, size_t size) {
|
||||
char foldername[PATH_LIMIT];
|
||||
const char* path;
|
||||
|
||||
|
||||
get_streamfile_name(sf, foldername, sizeof(foldername));
|
||||
|
||||
//todo Windows CMD accepts both \\ and /, better way to handle this?
|
||||
path = strrchr(foldername,'\\');
|
||||
if (!path)
|
||||
path = strrchr(foldername,'/');
|
||||
if (path != NULL)
|
||||
path = path+1;
|
||||
|
||||
//todo validate sizes and copy sensible max
|
||||
if (path) {
|
||||
strcpy(buffer, path);
|
||||
} else {
|
||||
strcpy(buffer, foldername);
|
||||
}
|
||||
}
|
||||
|
||||
/* copies the filename without path or extension */
|
||||
void get_streamfile_basename(STREAMFILE* sf, char* buffer, size_t size) {
|
||||
char* ext;
|
||||
|
||||
get_streamfile_filename(sf, buffer, size);
|
||||
|
||||
ext = strrchr(buffer,'.');
|
||||
if (ext) {
|
||||
ext[0] = '\0'; /* remove .ext from buffer */
|
||||
}
|
||||
}
|
||||
|
||||
/* copies path removing name (NULL when if filename has no path) */
|
||||
void get_streamfile_path(STREAMFILE* sf, char* buffer, size_t size) {
|
||||
const char* path;
|
||||
|
||||
get_streamfile_name(sf, buffer, size);
|
||||
|
||||
path = strrchr(buffer,DIR_SEPARATOR);
|
||||
if (path!=NULL) path = path+1; /* includes "/" */
|
||||
|
||||
if (path) {
|
||||
buffer[path - buffer] = '\0';
|
||||
} else {
|
||||
buffer[0] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
/* copies extension only */
|
||||
void get_streamfile_ext(STREAMFILE* sf, char* buffer, size_t size) {
|
||||
char filename[PATH_LIMIT];
|
||||
const char* extension = NULL;
|
||||
|
||||
get_streamfile_name(sf, filename, sizeof(filename));
|
||||
extension = filename_extension(filename);
|
||||
if (!extension) {
|
||||
buffer[0] = '\n';
|
||||
}
|
||||
else {
|
||||
strncpy(buffer, extension, size); //todo use something better
|
||||
}
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
|
||||
/* debug util, mainly for custom IO testing */
|
||||
void dump_streamfile(STREAMFILE* sf, int num) {
|
||||
#ifdef VGM_DEBUG_OUTPUT
|
||||
|
|
|
@ -130,15 +130,6 @@ STREAMFILE* open_multifile_streamfile_f(STREAMFILE** sfs, size_t sfs_size);
|
|||
* Just a wrapper, to avoid having to access the STREAMFILE's callbacks directly. */
|
||||
STREAMFILE* open_streamfile(STREAMFILE* sf, const char* pathname);
|
||||
|
||||
/* Opens a STREAMFILE from a base pathname + new extension
|
||||
* Can be used to get companion headers. */
|
||||
STREAMFILE* open_streamfile_by_ext(STREAMFILE* sf, const char* ext);
|
||||
|
||||
/* Opens a STREAMFILE from a base path + new filename.
|
||||
* Can be used to get companion files. Relative paths like
|
||||
* './filename', '../filename', 'dir/filename' also work. */
|
||||
STREAMFILE* open_streamfile_by_filename(STREAMFILE* sf, const char* filename);
|
||||
|
||||
/* Reopen a STREAMFILE with a different buffer size, for fine-tuned bigfile parsing.
|
||||
* Uses default buffer size when buffer_size is 0 */
|
||||
STREAMFILE* reopen_streamfile(STREAMFILE* sf, size_t buffer_size);
|
||||
|
@ -161,18 +152,6 @@ static inline size_t get_streamfile_size(STREAMFILE* sf) {
|
|||
}
|
||||
|
||||
|
||||
/* various STREAMFILE helpers functions */
|
||||
|
||||
/* Checks if the stream filename is one of the extensions (comma-separated, ex. "adx" or "adx,aix").
|
||||
* Empty is ok to accept files without extension ("", "adx,,aix"). Returns 0 on failure */
|
||||
int check_extensions(STREAMFILE* sf, const char* cmp_exts);
|
||||
|
||||
/* filename helpers */
|
||||
void get_streamfile_name(STREAMFILE* sf, char* buf, size_t size);
|
||||
void get_streamfile_filename(STREAMFILE* sf, char* buf, size_t size);
|
||||
void get_streamfile_basename(STREAMFILE* sf, char* buf, size_t size);
|
||||
void get_streamfile_path(STREAMFILE* sf, char* buf, size_t size);
|
||||
void get_streamfile_ext(STREAMFILE* sf, char* buf, size_t size);
|
||||
|
||||
void dump_streamfile(STREAMFILE* sf, int num);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
#include "companion_files.h"
|
||||
#include "paths.h"
|
||||
#include "../vgmstream.h"
|
||||
#include "../util/reader_text.h"
|
||||
#include "reader_text.h"
|
||||
#include "sf_utils.h"
|
||||
|
||||
|
||||
size_t read_key_file(uint8_t* buf, size_t buf_size, STREAMFILE* sf) {
|
||||
|
|
|
@ -245,14 +245,14 @@ void utf_close(utf_context* utf) {
|
|||
}
|
||||
|
||||
|
||||
int utf_get_column(utf_context* utf, const char* column) {
|
||||
int utf_get_column(utf_context* utf, const char* column_name) {
|
||||
int i;
|
||||
|
||||
/* find target column */
|
||||
for (i = 0; i < utf->columns; i++) {
|
||||
struct utf_column_t* col = &utf->schema[i];
|
||||
|
||||
if (col->name == NULL || strcmp(col->name, column) != 0)
|
||||
if (col->name == NULL || strcmp(col->name, column_name) != 0)
|
||||
continue;
|
||||
return i;
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ typedef struct utf_context utf_context;
|
|||
utf_context* utf_open(STREAMFILE* sf, uint32_t table_offset, int* p_rows, const char** p_row_name);
|
||||
void utf_close(utf_context* utf);
|
||||
|
||||
int utf_get_column(utf_context* utf, const char* column);
|
||||
int utf_get_column(utf_context* utf, const char* column_name);
|
||||
|
||||
/* query calls (passing column index is faster, when you have to read lots of rows) */
|
||||
int utf_query_col_s8(utf_context* utf, int row, int column, int8_t* value);
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include "../streamfile.h"
|
||||
#include "reader_get.h"
|
||||
#include "reader_sf.h"
|
||||
|
||||
typedef uint32_t (*read_u32_t)(off_t, STREAMFILE*);
|
||||
typedef int32_t (*read_s32_t)(off_t, STREAMFILE*);
|
||||
|
@ -25,4 +26,8 @@ static inline int guess_endian32(off_t offset, STREAMFILE* sf) {
|
|||
return get_u32le(buf) > get_u32be(buf) ? 1 : 0;
|
||||
}
|
||||
|
||||
static inline read_u32_t guess_read_u32(off_t offset, STREAMFILE* sf) {
|
||||
return guess_endian32(0x08,sf) ? read_u32be : read_u32le;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -103,20 +103,20 @@ typedef struct {
|
|||
} list_t;
|
||||
|
||||
struct psb_context_t {
|
||||
uint32_t header_id;
|
||||
uint16_t version;
|
||||
uint16_t encrypt_value;
|
||||
uint32_t encrypt_offset;
|
||||
uint32_t keys_offset;
|
||||
uint32_t header_id;
|
||||
uint16_t version;
|
||||
uint16_t encrypt_value;
|
||||
uint32_t encrypt_offset;
|
||||
uint32_t keys_offset;
|
||||
|
||||
uint32_t strings_list_offset;
|
||||
uint32_t strings_data_offset;
|
||||
uint32_t data_offsets_offset;
|
||||
uint32_t data_sizes_offset;
|
||||
uint32_t strings_list_offset;
|
||||
uint32_t strings_data_offset;
|
||||
uint32_t data_offsets_offset;
|
||||
uint32_t data_sizes_offset;
|
||||
|
||||
uint32_t data_offset; /* also "resources" */
|
||||
uint32_t root_offset; /* initial node */
|
||||
uint32_t unknown; /* hash/crc? (v3) */
|
||||
uint32_t data_offset; /* also "resources" */
|
||||
uint32_t root_offset; /* initial node */
|
||||
uint32_t unknown; /* hash/crc? (v3) */
|
||||
|
||||
/* main buf and derived stuff */
|
||||
uint8_t* buf;
|
||||
|
@ -328,19 +328,19 @@ psb_context_t* psb_init(STREAMFILE* sf) {
|
|||
bytes = read_streamfile(header, 0x00, sizeof(header), sf);
|
||||
if (bytes != sizeof(header)) goto fail;
|
||||
|
||||
ctx->header_id = get_u32be(header + 0x00);
|
||||
ctx->version = get_u16le(header + 0x04);
|
||||
ctx->encrypt_value = get_u32le(header + 0x06);
|
||||
ctx->encrypt_offset = get_u32le(header + 0x08);
|
||||
ctx->keys_offset = get_u32le(header + 0x0c);
|
||||
ctx->header_id = get_u32be(header + 0x00);
|
||||
ctx->version = get_u16le(header + 0x04);
|
||||
ctx->encrypt_value = get_u32le(header + 0x06);
|
||||
ctx->encrypt_offset = get_u32le(header + 0x08);
|
||||
ctx->keys_offset = get_u32le(header + 0x0c);
|
||||
|
||||
ctx->strings_list_offset = get_u32le(header + 0x10);
|
||||
ctx->strings_data_offset = get_u32le(header + 0x14);
|
||||
ctx->data_offsets_offset = get_u32le(header + 0x18);
|
||||
ctx->data_sizes_offset = get_u32le(header + 0x1c);
|
||||
ctx->strings_list_offset = get_u32le(header + 0x10);
|
||||
ctx->strings_data_offset = get_u32le(header + 0x14);
|
||||
ctx->data_offsets_offset = get_u32le(header + 0x18);
|
||||
ctx->data_sizes_offset = get_u32le(header + 0x1c);
|
||||
|
||||
ctx->data_offset = get_u32le(header + 0x20);
|
||||
ctx->root_offset = get_u32le(header + 0x24);
|
||||
ctx->data_offset = get_u32le(header + 0x20);
|
||||
ctx->root_offset = get_u32le(header + 0x24);
|
||||
if (ctx->version >= PSB_VERSION3)
|
||||
ctx->unknown = get_u32le(header + 0x28);
|
||||
|
||||
|
|
192
Frameworks/vgmstream/vgmstream/src/util/sf_utils.c
Normal file
192
Frameworks/vgmstream/vgmstream/src/util/sf_utils.c
Normal file
|
@ -0,0 +1,192 @@
|
|||
#include "sf_utils.h"
|
||||
#include "../vgmstream.h"
|
||||
#include "reader_sf.h"
|
||||
#include "paths.h"
|
||||
|
||||
|
||||
/* change pathname's extension to another (or add it if extensionless) */
|
||||
static void swap_extension(char* pathname, /*size_t*/ int pathname_len, const char* swap) {
|
||||
char* extension = (char*)filename_extension(pathname);
|
||||
//todo safeops
|
||||
if (extension[0] == '\0') {
|
||||
strcat(pathname, ".");
|
||||
strcat(pathname, swap);
|
||||
}
|
||||
else {
|
||||
strcpy(extension, swap);
|
||||
}
|
||||
}
|
||||
|
||||
STREAMFILE* open_streamfile_by_ext(STREAMFILE* sf, const char* ext) {
|
||||
char filename[PATH_LIMIT];
|
||||
|
||||
get_streamfile_name(sf, filename, sizeof(filename));
|
||||
|
||||
swap_extension(filename, sizeof(filename), ext);
|
||||
|
||||
return open_streamfile(sf, filename);
|
||||
}
|
||||
|
||||
STREAMFILE* open_streamfile_by_filename(STREAMFILE* sf, const char* filename) {
|
||||
char fullname[PATH_LIMIT];
|
||||
char partname[PATH_LIMIT];
|
||||
char *path, *name, *otherpath;
|
||||
|
||||
if (!sf || !filename || !filename[0]) return NULL;
|
||||
|
||||
get_streamfile_name(sf, fullname, sizeof(fullname));
|
||||
|
||||
//todo normalize separators in a better way, safeops, improve copying
|
||||
|
||||
/* check for non-normalized paths first (ex. txth) */
|
||||
path = strrchr(fullname, '/');
|
||||
otherpath = strrchr(fullname, '\\');
|
||||
if (otherpath > path) { //todo cast to ptr?
|
||||
/* foobar makes paths like "(fake protocol)://(windows path with \)".
|
||||
* Hack to work around both separators, though probably foo_streamfile
|
||||
* should just return and handle normalized paths without protocol. */
|
||||
path = otherpath;
|
||||
}
|
||||
|
||||
if (path) {
|
||||
path[1] = '\0'; /* remove name after separator */
|
||||
|
||||
strcpy(partname, filename);
|
||||
fix_dir_separators(partname); /* normalize to DIR_SEPARATOR */
|
||||
|
||||
/* normalize relative paths as don't work ok in some plugins */
|
||||
if (partname[0] == '.' && partname[1] == DIR_SEPARATOR) { /* './name' */
|
||||
name = partname + 2; /* ignore './' */
|
||||
}
|
||||
else if (partname[0] == '.' && partname[1] == '.' && partname[2] == DIR_SEPARATOR) { /* '../name' */
|
||||
char* pathprev;
|
||||
|
||||
path[0] = '\0'; /* remove last separator so next call works */
|
||||
pathprev = strrchr(fullname,DIR_SEPARATOR);
|
||||
if (pathprev) {
|
||||
pathprev[1] = '\0'; /* remove prev dir after separator */
|
||||
name = partname + 3; /* ignore '../' */
|
||||
}
|
||||
else { /* let plugin handle? */
|
||||
path[0] = DIR_SEPARATOR;
|
||||
name = partname;
|
||||
}
|
||||
/* could work with more relative paths but whatevs */
|
||||
}
|
||||
else {
|
||||
name = partname;
|
||||
}
|
||||
|
||||
strcat(fullname, name);
|
||||
}
|
||||
else {
|
||||
strcpy(fullname, filename);
|
||||
}
|
||||
|
||||
return open_streamfile(sf, fullname);
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
|
||||
int check_extensions(STREAMFILE* sf, const char* cmp_exts) {
|
||||
char filename[PATH_LIMIT];
|
||||
const char* ext = NULL;
|
||||
const char* cmp_ext = NULL;
|
||||
const char* ststr_res = NULL;
|
||||
size_t ext_len, cmp_len;
|
||||
|
||||
sf->get_name(sf, filename, sizeof(filename));
|
||||
ext = filename_extension(filename);
|
||||
ext_len = strlen(ext);
|
||||
|
||||
cmp_ext = cmp_exts;
|
||||
do {
|
||||
ststr_res = strstr(cmp_ext, ",");
|
||||
cmp_len = ststr_res == NULL
|
||||
? strlen(cmp_ext) /* total length if more not found */
|
||||
: (intptr_t)ststr_res - (intptr_t)cmp_ext; /* find next ext; ststr_res should always be greater than cmp_ext, resulting in a positive cmp_len */
|
||||
|
||||
if (ext_len == cmp_len && strncasecmp(ext,cmp_ext, ext_len) == 0)
|
||||
return 1;
|
||||
|
||||
cmp_ext = ststr_res;
|
||||
if (cmp_ext != NULL)
|
||||
cmp_ext = cmp_ext + 1; /* skip comma */
|
||||
|
||||
} while (cmp_ext != NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
|
||||
/* copies name as-is (may include full path included) */
|
||||
void get_streamfile_name(STREAMFILE* sf, char* buffer, size_t size) {
|
||||
sf->get_name(sf, buffer, size);
|
||||
}
|
||||
|
||||
/* copies the filename without path */
|
||||
void get_streamfile_filename(STREAMFILE* sf, char* buffer, size_t size) {
|
||||
char foldername[PATH_LIMIT];
|
||||
const char* path;
|
||||
|
||||
|
||||
get_streamfile_name(sf, foldername, sizeof(foldername));
|
||||
|
||||
//todo Windows CMD accepts both \\ and /, better way to handle this?
|
||||
path = strrchr(foldername,'\\');
|
||||
if (!path)
|
||||
path = strrchr(foldername,'/');
|
||||
if (path != NULL)
|
||||
path = path+1;
|
||||
|
||||
//todo validate sizes and copy sensible max
|
||||
if (path) {
|
||||
strcpy(buffer, path);
|
||||
} else {
|
||||
strcpy(buffer, foldername);
|
||||
}
|
||||
}
|
||||
|
||||
/* copies the filename without path or extension */
|
||||
void get_streamfile_basename(STREAMFILE* sf, char* buffer, size_t size) {
|
||||
char* ext;
|
||||
|
||||
get_streamfile_filename(sf, buffer, size);
|
||||
|
||||
ext = strrchr(buffer,'.');
|
||||
if (ext) {
|
||||
ext[0] = '\0'; /* remove .ext from buffer */
|
||||
}
|
||||
}
|
||||
|
||||
/* copies path removing name (NULL when if filename has no path) */
|
||||
void get_streamfile_path(STREAMFILE* sf, char* buffer, size_t size) {
|
||||
const char* path;
|
||||
|
||||
get_streamfile_name(sf, buffer, size);
|
||||
|
||||
path = strrchr(buffer,DIR_SEPARATOR);
|
||||
if (path!=NULL) path = path+1; /* includes "/" */
|
||||
|
||||
if (path) {
|
||||
buffer[path - buffer] = '\0';
|
||||
} else {
|
||||
buffer[0] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
/* copies extension only */
|
||||
void get_streamfile_ext(STREAMFILE* sf, char* buffer, size_t size) {
|
||||
char filename[PATH_LIMIT];
|
||||
const char* extension = NULL;
|
||||
|
||||
get_streamfile_name(sf, filename, sizeof(filename));
|
||||
extension = filename_extension(filename);
|
||||
if (!extension) {
|
||||
buffer[0] = '\n';
|
||||
}
|
||||
else {
|
||||
strncpy(buffer, extension, size); //todo use something better
|
||||
}
|
||||
}
|
29
Frameworks/vgmstream/vgmstream/src/util/sf_utils.h
Normal file
29
Frameworks/vgmstream/vgmstream/src/util/sf_utils.h
Normal file
|
@ -0,0 +1,29 @@
|
|||
#ifndef _SF_UTILS_H
|
||||
#define _SF_UTILS_H
|
||||
#include "../streamfile.h"
|
||||
|
||||
|
||||
|
||||
/* Opens a STREAMFILE from a base pathname + new extension
|
||||
* Can be used to get companion headers. */
|
||||
STREAMFILE* open_streamfile_by_ext(STREAMFILE* sf, const char* ext);
|
||||
|
||||
/* Opens a STREAMFILE from a base path + new filename.
|
||||
* Can be used to get companion files. Relative paths like
|
||||
* './filename', '../filename', 'dir/filename' also work. */
|
||||
STREAMFILE* open_streamfile_by_filename(STREAMFILE* sf, const char* filename);
|
||||
|
||||
/* various STREAMFILE helpers functions */
|
||||
|
||||
/* Checks if the stream filename is one of the extensions (comma-separated, ex. "adx" or "adx,aix").
|
||||
* Empty is ok to accept files without extension ("", "adx,,aix"). Returns 0 on failure */
|
||||
int check_extensions(STREAMFILE* sf, const char* cmp_exts);
|
||||
|
||||
/* filename helpers */
|
||||
void get_streamfile_name(STREAMFILE* sf, char* buf, size_t size);
|
||||
void get_streamfile_filename(STREAMFILE* sf, char* buf, size_t size);
|
||||
void get_streamfile_basename(STREAMFILE* sf, char* buf, size_t size);
|
||||
void get_streamfile_path(STREAMFILE* sf, char* buf, size_t size);
|
||||
void get_streamfile_ext(STREAMFILE* sf, char* buf, size_t size);
|
||||
|
||||
#endif
|
|
@ -12,6 +12,7 @@
|
|||
#include "base/decode.h"
|
||||
#include "base/render.h"
|
||||
#include "base/mixing.h"
|
||||
#include "util/sf_utils.h"
|
||||
|
||||
typedef VGMSTREAM* (*init_vgmstream_t)(STREAMFILE*);
|
||||
|
||||
|
@ -67,7 +68,6 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_svs,
|
||||
init_vgmstream_riff,
|
||||
init_vgmstream_rifx,
|
||||
init_vgmstream_pos,
|
||||
init_vgmstream_nwa,
|
||||
init_vgmstream_ea_1snh,
|
||||
init_vgmstream_ea_eacs,
|
||||
|
@ -79,19 +79,18 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_fsb,
|
||||
init_vgmstream_fsb4_wav,
|
||||
init_vgmstream_fsb5,
|
||||
init_vgmstream_rwx,
|
||||
init_vgmstream_rwax,
|
||||
init_vgmstream_xwb,
|
||||
init_vgmstream_ps2_xa30,
|
||||
init_vgmstream_musc,
|
||||
init_vgmstream_musx,
|
||||
init_vgmstream_leg,
|
||||
init_vgmstream_filp,
|
||||
init_vgmstream_ikm,
|
||||
init_vgmstream_ster,
|
||||
init_vgmstream_bg00,
|
||||
init_vgmstream_sat_dvi,
|
||||
init_vgmstream_dc_kcey,
|
||||
init_vgmstream_ps2_rstm,
|
||||
init_vgmstream_rstm_rockstar,
|
||||
init_vgmstream_acm,
|
||||
init_vgmstream_mus_acm,
|
||||
init_vgmstream_ps2_kces,
|
||||
|
@ -101,7 +100,7 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_ps2_rkv,
|
||||
init_vgmstream_ps2_vas,
|
||||
init_vgmstream_ps2_vas_container,
|
||||
init_vgmstream_ps2_enth,
|
||||
init_vgmstream_lp_ap_lep,
|
||||
init_vgmstream_sdt,
|
||||
init_vgmstream_aix,
|
||||
init_vgmstream_ngc_tydsp,
|
||||
|
@ -116,17 +115,16 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_dc_str_v2,
|
||||
init_vgmstream_xmu,
|
||||
init_vgmstream_xvas,
|
||||
init_vgmstream_ngc_bh2pcm,
|
||||
init_vgmstream_sat_sap,
|
||||
init_vgmstream_dc_idvi,
|
||||
init_vgmstream_ps2_rnd,
|
||||
init_vgmstream_idsp_tt,
|
||||
init_vgmstream_kraw,
|
||||
init_vgmstream_ps2_omu,
|
||||
init_vgmstream_ps2_xa2,
|
||||
init_vgmstream_omu,
|
||||
init_vgmstream_xa2_acclaim,
|
||||
init_vgmstream_idsp_nl,
|
||||
init_vgmstream_idsp_ie,
|
||||
init_vgmstream_ngc_ymf,
|
||||
init_vgmstream_ymf,
|
||||
init_vgmstream_sadl,
|
||||
init_vgmstream_fag,
|
||||
init_vgmstream_ps2_mihb,
|
||||
|
@ -167,7 +165,6 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_swav,
|
||||
init_vgmstream_vsf,
|
||||
init_vgmstream_nds_rrds,
|
||||
init_vgmstream_ps2_tk5,
|
||||
init_vgmstream_ps2_vsf_tta,
|
||||
init_vgmstream_ads_midway,
|
||||
init_vgmstream_ps2_mcg,
|
||||
|
@ -178,7 +175,6 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_wii_wsd,
|
||||
init_vgmstream_dsp_ndp,
|
||||
init_vgmstream_ps2_sps,
|
||||
init_vgmstream_ps2_xa2_rrp,
|
||||
init_vgmstream_nds_hwas,
|
||||
init_vgmstream_ngc_lps,
|
||||
init_vgmstream_ps2_snd,
|
||||
|
@ -208,13 +204,12 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_ps2_wb,
|
||||
init_vgmstream_bnsf,
|
||||
init_vgmstream_ps2_gcm,
|
||||
init_vgmstream_ps2_smpl,
|
||||
init_vgmstream_ps2_msa,
|
||||
init_vgmstream_ps2_voi,
|
||||
init_vgmstream_smpl,
|
||||
init_vgmstream_msa,
|
||||
init_vgmstream_voi,
|
||||
init_vgmstream_ngc_rkv,
|
||||
init_vgmstream_dsp_ddsp,
|
||||
init_vgmstream_p3d,
|
||||
init_vgmstream_ps2_tk1,
|
||||
init_vgmstream_ngc_dsp_mpds,
|
||||
init_vgmstream_dsp_str_ig,
|
||||
init_vgmstream_ea_swvr,
|
||||
|
@ -223,7 +218,6 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_dsp_xiii,
|
||||
init_vgmstream_dsp_cabelas,
|
||||
init_vgmstream_lpcm_shade,
|
||||
init_vgmstream_dsp_bdsp,
|
||||
init_vgmstream_ps2_vms,
|
||||
init_vgmstream_xau,
|
||||
init_vgmstream_bar,
|
||||
|
@ -247,7 +241,7 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_xwav_old,
|
||||
init_vgmstream_hyperscan_kvag,
|
||||
init_vgmstream_ios_psnd,
|
||||
init_vgmstream_adp_bos,
|
||||
init_vgmstream_adp_wildfire,
|
||||
init_vgmstream_adp_qd,
|
||||
init_vgmstream_eb_sfx,
|
||||
init_vgmstream_eb_sf0,
|
||||
|
@ -280,7 +274,7 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_svag_snk,
|
||||
init_vgmstream_ps2_vds_vdm,
|
||||
init_vgmstream_cxs,
|
||||
init_vgmstream_dsp_adx,
|
||||
init_vgmstream_adx_monster,
|
||||
init_vgmstream_akb,
|
||||
init_vgmstream_akb2,
|
||||
#ifdef VGM_USE_FFMPEG
|
||||
|
@ -310,7 +304,7 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_ea_mpf_mus,
|
||||
init_vgmstream_ea_schl_fixed,
|
||||
init_vgmstream_sk_aud,
|
||||
init_vgmstream_stm,
|
||||
init_vgmstream_stma,
|
||||
init_vgmstream_ea_snu,
|
||||
init_vgmstream_awc,
|
||||
init_vgmstream_opus_std,
|
||||
|
@ -339,11 +333,10 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_ea_tmx,
|
||||
init_vgmstream_ea_sbr,
|
||||
init_vgmstream_ea_sbr_harmony,
|
||||
init_vgmstream_ngc_vid1,
|
||||
init_vgmstream_vid1,
|
||||
init_vgmstream_flx,
|
||||
init_vgmstream_mogg,
|
||||
init_vgmstream_kma9,
|
||||
init_vgmstream_fsb_encrypted,
|
||||
init_vgmstream_xwc,
|
||||
init_vgmstream_atsl,
|
||||
init_vgmstream_sps_n1,
|
||||
|
@ -382,7 +375,6 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_hd3_bd3,
|
||||
init_vgmstream_bnk_sony,
|
||||
init_vgmstream_nus3bank,
|
||||
init_vgmstream_nus3bank_encrypted,
|
||||
init_vgmstream_sscf,
|
||||
init_vgmstream_dsp_sps_n1,
|
||||
init_vgmstream_dsp_itl_ch,
|
||||
|
@ -527,34 +519,39 @@ init_vgmstream_t init_vgmstream_functions[] = {
|
|||
init_vgmstream_sscf_encrypted,
|
||||
init_vgmstream_s_p_sth,
|
||||
init_vgmstream_utf_ahx,
|
||||
init_vgmstream_ego_dic,
|
||||
init_vgmstream_awd,
|
||||
init_vgmstream_rws_809,
|
||||
init_vgmstream_pwb,
|
||||
|
||||
/* lower priority metas (no clean header identity, somewhat ambiguous, or need extension/companion file to identify) */
|
||||
init_vgmstream_scd_pcm,
|
||||
init_vgmstream_agsc,
|
||||
init_vgmstream_rsf,
|
||||
init_vgmstream_ps2_wmus,
|
||||
init_vgmstream_mib_mih,
|
||||
init_vgmstream_mjb_mjh,
|
||||
init_vgmstream_mic_koei,
|
||||
init_vgmstream_seb,
|
||||
init_vgmstream_ps2_pnb,
|
||||
init_vgmstream_sli_loops,
|
||||
init_vgmstream_tgc,
|
||||
/* need companion files */
|
||||
init_vgmstream_pos,
|
||||
init_vgmstream_sli_loops,
|
||||
|
||||
/* lowest priority metas (should go after all metas, and TXTH should go before raw formats) */
|
||||
init_vgmstream_txth, /* proper parsers should supersede TXTH, once added */
|
||||
init_vgmstream_dtk, /* semi-raw GC streamed files */
|
||||
init_vgmstream_mpeg, /* semi-raw MP3 */
|
||||
init_vgmstream_btsnd, /* semi-headerless */
|
||||
init_vgmstream_fsb_encrypted,
|
||||
init_vgmstream_nus3bank_encrypted,
|
||||
init_vgmstream_encrypted, /* encrypted stuff */
|
||||
init_vgmstream_raw_rsf, /* raw GC streamed files */
|
||||
init_vgmstream_raw_int, /* .int raw PCM */
|
||||
init_vgmstream_ps_headerless, /* tries to detect a bunch of PS-ADPCM formats */
|
||||
init_vgmstream_raw_snds, /* .snds raw SNDS IMA */
|
||||
init_vgmstream_raw_wavm, /* .wavm raw xbox */
|
||||
init_vgmstream_raw_pcm, /* .raw raw PCM */
|
||||
init_vgmstream_s14_sss, /* .s14/sss raw siren14 */
|
||||
init_vgmstream_raw_al, /* .al/al2 raw A-LAW */
|
||||
init_vgmstream_ngc_ulw, /* .ulw raw u-Law */
|
||||
init_vgmstream_raw_s14_sss, /* .s14/sss raw siren14 */
|
||||
init_vgmstream_exakt_sc, /* .sc raw PCM */
|
||||
init_vgmstream_zwdsp, /* fake format */
|
||||
init_vgmstream_ps2_adm, /* weird non-constant PSX blocks */
|
||||
|
@ -1026,7 +1023,7 @@ static void try_dual_file_stereo(VGMSTREAM* opened_vgmstream, STREAMFILE* sf, in
|
|||
|
||||
/* check these even if there is no loop, because they should then be zero in both
|
||||
* (Homura PS2 right channel doesn't have loop points so this check is ignored) */
|
||||
if (new_vgmstream->meta_type != meta_PS2_SMPL &&
|
||||
if (new_vgmstream->meta_type != meta_SMPL &&
|
||||
!(new_vgmstream->loop_flag == opened_vgmstream->loop_flag &&
|
||||
new_vgmstream->loop_start_sample== opened_vgmstream->loop_start_sample &&
|
||||
new_vgmstream->loop_end_sample == opened_vgmstream->loop_end_sample)) {
|
||||
|
@ -1124,6 +1121,9 @@ int vgmstream_open_stream_bf(VGMSTREAM* vgmstream, STREAMFILE* sf, off_t start_o
|
|||
goto fail;
|
||||
}
|
||||
|
||||
/* no need to open anything */
|
||||
if (vgmstream->coding_type == coding_SILENCE)
|
||||
return 1;
|
||||
|
||||
/* stream/offsets not needed, managed by layout */
|
||||
if (vgmstream->layout_type == layout_segmented ||
|
||||
|
@ -1148,13 +1148,6 @@ int vgmstream_open_stream_bf(VGMSTREAM* vgmstream, STREAMFILE* sf, off_t start_o
|
|||
return 1;
|
||||
#endif
|
||||
|
||||
if ((vgmstream->coding_type == coding_PSX_cfg ||
|
||||
vgmstream->coding_type == coding_PSX_pivotal) &&
|
||||
(vgmstream->interleave_block_size == 0 || vgmstream->interleave_block_size > 0x50)) {
|
||||
VGM_LOG("VGMSTREAM: PSX-cfg decoder with wrong frame size %x\n", vgmstream->interleave_block_size);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if ((vgmstream->coding_type == coding_CRI_ADX ||
|
||||
vgmstream->coding_type == coding_CRI_ADX_enc_8 ||
|
||||
vgmstream->coding_type == coding_CRI_ADX_enc_9 ||
|
||||
|
@ -1167,16 +1160,24 @@ int vgmstream_open_stream_bf(VGMSTREAM* vgmstream, STREAMFILE* sf, off_t start_o
|
|||
|
||||
if ((vgmstream->coding_type == coding_MSADPCM || vgmstream->coding_type == coding_MSADPCM_ck ||
|
||||
vgmstream->coding_type == coding_MSADPCM_int ||
|
||||
vgmstream->coding_type == coding_MS_IMA || vgmstream->coding_type == coding_MS_IMA_mono
|
||||
vgmstream->coding_type == coding_MS_IMA || vgmstream->coding_type == coding_MS_IMA_mono ||
|
||||
vgmstream->coding_type == coding_PSX_cfg || vgmstream->coding_type == coding_PSX_pivotal
|
||||
) &&
|
||||
vgmstream->frame_size == 0) {
|
||||
vgmstream->frame_size = vgmstream->interleave_block_size;
|
||||
}
|
||||
|
||||
if ((vgmstream->coding_type == coding_PSX_cfg ||
|
||||
vgmstream->coding_type == coding_PSX_pivotal) &&
|
||||
(vgmstream->frame_size == 0 || vgmstream->frame_size > 0x50)) {
|
||||
VGM_LOG("VGMSTREAM: PSX-cfg decoder with wrong frame size %x\n", vgmstream->frame_size);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if ((vgmstream->coding_type == coding_MSADPCM ||
|
||||
vgmstream->coding_type == coding_MSADPCM_ck ||
|
||||
vgmstream->coding_type == coding_MSADPCM_int) &&
|
||||
(vgmstream->frame_size > MSADPCM_MAX_BLOCK_SIZE)) {
|
||||
(vgmstream->frame_size == 0 || vgmstream->frame_size > MSADPCM_MAX_BLOCK_SIZE)) {
|
||||
VGM_LOG("VGMSTREAM: MSADPCM decoder with wrong frame size %x\n", vgmstream->frame_size);
|
||||
goto fail;
|
||||
}
|
||||
|
|
|
@ -212,7 +212,6 @@ typedef enum {
|
|||
layout_blocked_filp,
|
||||
layout_blocked_ea_swvr,
|
||||
layout_blocked_adm,
|
||||
layout_blocked_bdsp,
|
||||
layout_blocked_mxch,
|
||||
layout_blocked_ivaud, /* GTA IV .ivaud blocks */
|
||||
layout_blocked_ps2_iab,
|
||||
|
@ -305,14 +304,13 @@ typedef enum {
|
|||
meta_PS_HEADERLESS, /* headerless PS-ADPCM */
|
||||
meta_MIB_MIH,
|
||||
meta_PS2_MIC, /* KOEI MIC File */
|
||||
meta_PS2_VAGi, /* VAGi Interleaved File */
|
||||
meta_PS2_VAGp, /* VAGp Mono File */
|
||||
meta_PS2_pGAV, /* VAGp with Little Endian Header */
|
||||
meta_PS2_VAGp_AAAP, /* Acclaim Austin Audio VAG header */
|
||||
meta_VAG,
|
||||
meta_VAG_custom,
|
||||
meta_AAAP,
|
||||
meta_SEB,
|
||||
meta_STR_WAV, /* Blitz Games STR+WAV files */
|
||||
meta_ILD,
|
||||
meta_PS2_PNB, /* PsychoNauts Bgm File */
|
||||
meta_PWB,
|
||||
meta_VPK, /* VPK Audio File */
|
||||
meta_PS2_BMDX, /* Beatmania thing */
|
||||
meta_PS2_IVB, /* Langrisser 3 IVB */
|
||||
|
@ -328,17 +326,16 @@ typedef enum {
|
|||
meta_FSB3, /* FMOD Sample Bank, version 3.0/3.1 */
|
||||
meta_FSB4, /* FMOD Sample Bank, version 4 */
|
||||
meta_FSB5, /* FMOD Sample Bank, version 5 */
|
||||
meta_RWX, /* Air Force Delta Storm (XBOX) */
|
||||
meta_RWAX,
|
||||
meta_XWB, /* Microsoft XACT framework (Xbox, X360, Windows) */
|
||||
meta_PS2_XA30, /* Driver - Parallel Lines (PS2) */
|
||||
meta_MUSC, /* Krome PS2 games */
|
||||
meta_MUSX,
|
||||
meta_LEG, /* Legaia 2 [no header_id] */
|
||||
meta_FILP, /* Resident Evil - Dead Aim */
|
||||
meta_IKM,
|
||||
meta_STER,
|
||||
meta_BG00, /* Ibara, Mushihimesama */
|
||||
meta_PS2_RSTM, /* Midnight Club 3 */
|
||||
meta_RSTM_ROCKSTAR,
|
||||
meta_PS2_KCES, /* Dance Dance Revolution */
|
||||
meta_HXD,
|
||||
meta_VSV,
|
||||
|
@ -346,17 +343,16 @@ typedef enum {
|
|||
meta_PS2_PCM, /* Konami KCEJ East: Ephemeral Fantasia, Yu-Gi-Oh! The Duelists of the Roses, 7 Blades */
|
||||
meta_PS2_RKV, /* Legacy of Kain - Blood Omen 2 (PS2) */
|
||||
meta_PS2_VAS, /* Pro Baseball Spirits 5 */
|
||||
meta_PS2_ENTH, /* Enthusia */
|
||||
meta_LP_AP_LEP,
|
||||
meta_SDT, /* Baldur's Gate - Dark Alliance */
|
||||
meta_NGC_TYDSP, /* Ty - The Tasmanian Tiger */
|
||||
meta_DC_STR, /* SEGA Stream Asset Builder */
|
||||
meta_DC_STR_V2, /* variant of SEGA Stream Asset Builder */
|
||||
meta_NGC_BH2PCM, /* Bio Hazard 2 */
|
||||
meta_SAP,
|
||||
meta_DC_IDVI, /* Eldorado Gate */
|
||||
meta_KRAW, /* Geometry Wars - Galaxies */
|
||||
meta_PS2_OMU, /* PS2 Int file with Header */
|
||||
meta_PS2_XA2, /* XG3 Extreme-G Racing */
|
||||
meta_OMU,
|
||||
meta_XA2_ACCLAIM,
|
||||
meta_NUB,
|
||||
meta_IDSP_NL, /* Mario Strikers Charged (Wii) */
|
||||
meta_IDSP_IE, /* Defencer (GC) */
|
||||
|
@ -369,7 +365,7 @@ typedef enum {
|
|||
meta_GCA, /* Metal Slug Anthology */
|
||||
meta_NGC_SSM, /* Golden Gashbell Full Power */
|
||||
meta_PS2_JOE, /* Wall-E / Pixar games */
|
||||
meta_NGC_YMF, /* WWE WrestleMania X8 */
|
||||
meta_YMF,
|
||||
meta_SADL,
|
||||
meta_FAG, /* Jackie Chan - Stuntmaster */
|
||||
meta_PS2_MIHB, /* Merged MIH+MIB */
|
||||
|
@ -392,7 +388,6 @@ typedef enum {
|
|||
meta_PS2_VSF_TTA, /* Tiny Toon Adventures: Defenders of the Universe */
|
||||
meta_ADS_MIDWAY,
|
||||
meta_PS2_SPS, /* Ape Escape 2 */
|
||||
meta_PS2_XA2_RRP, /* RC Revenge Pro */
|
||||
meta_NGC_DSP_KONAMI, /* Konami DSP header, found in various games */
|
||||
meta_UBI_CKD, /* Ubisoft CKD RIFF header (Rayman Origins Wii) */
|
||||
meta_RAW_WAVM,
|
||||
|
@ -410,8 +405,7 @@ typedef enum {
|
|||
meta_AIFC, /* Audio Interchange File Format AIFF-C */
|
||||
meta_AIFF, /* Audio Interchange File Format */
|
||||
meta_STR_SNDS, /* .str with SNDS blocks and SHDR header */
|
||||
meta_WS_AUD, /* Westwood Studios .aud */
|
||||
meta_WS_AUD_old, /* Westwood Studios .aud, old style */
|
||||
meta_WS_AUD,
|
||||
meta_RIFF_WAVE, /* RIFF, for WAVs */
|
||||
meta_RIFF_WAVE_POS, /* .wav + .pos for looping (Ys Complete PC) */
|
||||
meta_RIFF_WAVE_labl, /* RIFF w/ loop Markers in LIST-adtl-labl */
|
||||
|
@ -438,7 +432,6 @@ typedef enum {
|
|||
meta_PS2_P2BT, /* Pop'n'Music 7 Audio File */
|
||||
meta_PS2_GBTS, /* Pop'n'Music 9 Audio File */
|
||||
meta_NGC_DSP_IADP, /* Gamecube Interleave DSP */
|
||||
meta_PS2_TK5, /* Tekken 5 Stream Files */
|
||||
meta_PS2_MCG, /* Gunvari MCG Files (was name .GCM on disk) */
|
||||
meta_ZSD, /* Dragon Booster ZSD */
|
||||
meta_REDSPARK, /* "RedSpark" RSD (MadWorld) */
|
||||
|
@ -466,11 +459,10 @@ typedef enum {
|
|||
meta_S14, /* raw Siren 14, 24kbit mono */
|
||||
meta_SSS, /* raw Siren 14, 48kbit stereo */
|
||||
meta_PS2_GCM, /* NamCollection */
|
||||
meta_PS2_SMPL, /* Homura */
|
||||
meta_PS2_MSA, /* Psyvariar -Complete Edition- */
|
||||
meta_PS2_VOI, /* RAW Danger (Zettaizetsumei Toshi 2 - Itetsuita Kiokutachi) [PS2] */
|
||||
meta_SMPL,
|
||||
meta_MSA,
|
||||
meta_VOI,
|
||||
meta_P3D, /* Prototype P3D */
|
||||
meta_PS2_TK1, /* Tekken (NamCollection) */
|
||||
meta_NGC_RKV, /* Legacy of Kain - Blood Omen 2 (GC) */
|
||||
meta_DSP_DDSP, /* Various (2 dsp files stuck together */
|
||||
meta_NGC_DSP_MPDS, /* Big Air Freestyle, Terminator 3 */
|
||||
|
@ -482,7 +474,6 @@ typedef enum {
|
|||
meta_DSP_CABELAS, /* Cabelas games */
|
||||
meta_PS2_ADM, /* Dragon Quest V (PS2) */
|
||||
meta_LPCM_SHADE,
|
||||
meta_DSP_BDSP, /* Ah! My Goddess */
|
||||
meta_PS2_VMS, /* Autobahn Raser - Police Madness */
|
||||
meta_XAU, /* XPEC Entertainment (Beat Down (PS2 Xbox), Spectral Force Chronicle (PS2)) */
|
||||
meta_GH3_BAR, /* Guitar Hero III Mobile .bar */
|
||||
|
@ -508,13 +499,11 @@ typedef enum {
|
|||
meta_PS2_WMUS, /* The Warriors (PS2) */
|
||||
meta_HYPERSCAN_KVAG, /* Hyperscan KVAG/BVG */
|
||||
meta_IOS_PSND, /* Crash Bandicoot Nitro Kart 2 (iOS) */
|
||||
meta_BOS_ADP,
|
||||
meta_ADP_WILDFIRE,
|
||||
meta_QD_ADP,
|
||||
meta_EB_SFX, /* Excitebots .sfx */
|
||||
meta_EB_SF0, /* Excitebots .sf0 */
|
||||
meta_MTAF,
|
||||
meta_PS2_VAG1, /* Metal Gear Solid 3 VAG1 */
|
||||
meta_PS2_VAG2, /* Metal Gear Solid 3 VAG2 */
|
||||
meta_ALP,
|
||||
meta_WPD, /* Shuffle! (PC) */
|
||||
meta_MN_STR, /* Mini Ninjas (PC/PS3/WII) */
|
||||
|
@ -530,7 +519,7 @@ typedef enum {
|
|||
meta_KT_WIIBGM, /* Koei Tecmo WiiBGM */
|
||||
meta_KTSS, /* Koei Tecmo Nintendo Stream (KNS) */
|
||||
meta_MCA, /* Capcom MCA "MADP" */
|
||||
meta_XB3D_ADX, /* Xenoblade Chronicles 3D ADX */
|
||||
meta_ADX_MONSTER,
|
||||
meta_HCA, /* CRI HCA */
|
||||
meta_SVAG_SNK,
|
||||
meta_PS2_VDS_VDM, /* Graffiti Kingdom */
|
||||
|
@ -549,18 +538,16 @@ typedef enum {
|
|||
meta_GHS,
|
||||
meta_AAC_TRIACE,
|
||||
meta_MTA2,
|
||||
meta_NGC_ULW, /* Burnout 1 (GC only) */
|
||||
meta_XA_XA30,
|
||||
meta_XA_04SW,
|
||||
meta_TXTH, /* generic text header */
|
||||
meta_SK_AUD, /* Silicon Knights .AUD (Eternal Darkness GC) */
|
||||
meta_AHX,
|
||||
meta_STM, /* Angel Studios/Rockstar San Diego Games */
|
||||
meta_STMA,
|
||||
meta_BINK, /* RAD Game Tools BINK audio/video */
|
||||
meta_EA_SNU, /* Electronic Arts SNU (Dead Space) */
|
||||
meta_AWC, /* Rockstar AWC (GTA5, RDR) */
|
||||
meta_OPUS, /* Nintendo Opus [Lego City Undercover (Switch)] */
|
||||
meta_RAW_AL,
|
||||
meta_PC_AST, /* Dead Rising (PC) */
|
||||
meta_NAAC, /* Namco AAC (3DS) */
|
||||
meta_UBI_SB, /* Ubisoft banks */
|
||||
|
@ -584,7 +571,7 @@ typedef enum {
|
|||
meta_WAF, /* KID WAF [Ever 17 (PC)] */
|
||||
meta_WAVE, /* EngineBlack games [Mighty Switch Force! (3DS)] */
|
||||
meta_WAVE_segmented, /* EngineBlack games, segmented [Shantae and the Pirate's Curse (PC)] */
|
||||
meta_SMV, /* Cho Aniki Zero (PSP) */
|
||||
meta_SMV,
|
||||
meta_NXAP, /* Nex Entertainment games [Time Crisis 4 (PS3), Time Crisis Razing Storm (PS3)] */
|
||||
meta_EA_WVE_AU00, /* Electronic Arts PS movies [Future Cop - L.A.P.D. (PS), Supercross 2000 (PS)] */
|
||||
meta_EA_WVE_AD10, /* Electronic Arts PS movies [Wing Commander 3/4 (PS)] */
|
||||
|
@ -712,6 +699,8 @@ typedef enum {
|
|||
meta_SNDZ,
|
||||
meta_VAB,
|
||||
meta_BIGRP,
|
||||
meta_DIC1,
|
||||
meta_AWD,
|
||||
|
||||
} meta_t;
|
||||
|
||||
|
|
|
@ -391,7 +391,6 @@
|
|||
<string>al</string>
|
||||
<string>al2</string>
|
||||
<string>ams</string>
|
||||
<string>amts</string>
|
||||
<string>an2</string>
|
||||
<string>ao</string>
|
||||
<string>ap</string>
|
||||
|
@ -417,6 +416,7 @@
|
|||
<string>awa</string>
|
||||
<string>awb</string>
|
||||
<string>awc</string>
|
||||
<string>awd</string>
|
||||
<string>b1s</string>
|
||||
<string>baf</string>
|
||||
<string>baka</string>
|
||||
|
@ -425,14 +425,11 @@
|
|||
<string>bcstm</string>
|
||||
<string>bcwav</string>
|
||||
<string>bcv</string>
|
||||
<string>bd3</string>
|
||||
<string>bdsp</string>
|
||||
<string>bfstm</string>
|
||||
<string>bfwav</string>
|
||||
<string>bg00</string>
|
||||
<string>bgm</string>
|
||||
<string>bgw</string>
|
||||
<string>bh2pcm</string>
|
||||
<string>bigrp</string>
|
||||
<string>bik</string>
|
||||
<string>bika</string>
|
||||
|
@ -485,6 +482,7 @@
|
|||
<string>ddsp</string>
|
||||
<string>de2</string>
|
||||
<string>dec</string>
|
||||
<string>dic</string>
|
||||
<string>diva</string>
|
||||
<string>dmsg</string>
|
||||
<string>ds2</string>
|
||||
|
@ -533,7 +531,9 @@
|
|||
<string>h4m</string>
|
||||
<string>hab</string>
|
||||
<string>hca</string>
|
||||
<string>hd3</string>
|
||||
<string>hdr</string>
|
||||
<string>hdt</string>
|
||||
<string>hgc1</string>
|
||||
<string>his</string>
|
||||
<string>hps</string>
|
||||
|
@ -547,6 +547,8 @@
|
|||
<string>hxg</string>
|
||||
<string>hxx</string>
|
||||
<string>hwas</string>
|
||||
<string>hwb</string>
|
||||
<string>hwd</string>
|
||||
<string>iab</string>
|
||||
<string>iadp</string>
|
||||
<string>idmsf</string>
|
||||
|
@ -562,6 +564,7 @@
|
|||
<string>ilv</string>
|
||||
<string>ima</string>
|
||||
<string>imc</string>
|
||||
<string>imf</string>
|
||||
<string>imx</string>
|
||||
<string>int</string>
|
||||
<string>is14</string>
|
||||
|
@ -602,6 +605,7 @@
|
|||
<string>lasf</string>
|
||||
<string>lbin</string>
|
||||
<string>ldat</string>
|
||||
<string>ldt</string>
|
||||
<string>leg</string>
|
||||
<string>lep</string>
|
||||
<string>lflac</string>
|
||||
|
@ -624,11 +628,12 @@
|
|||
<string>lpcm</string>
|
||||
<string>lpk</string>
|
||||
<string>lps</string>
|
||||
<string>lrmb</string>
|
||||
<string>lrmh</string>
|
||||
<string>lse</string>
|
||||
<string>lsf</string>
|
||||
<string>lstm</string>
|
||||
<string>lwav</string>
|
||||
<string>lwd</string>
|
||||
<string>lwma</string>
|
||||
<string>mab</string>
|
||||
<string>mad</string>
|
||||
|
@ -695,6 +700,7 @@
|
|||
<string>ogv</string>
|
||||
<string>oma</string>
|
||||
<string>omu</string>
|
||||
<string>opu</string>
|
||||
<string>opusx</string>
|
||||
<string>otm</string>
|
||||
<string>oto</string>
|
||||
|
@ -709,15 +715,14 @@
|
|||
<string>pcm</string>
|
||||
<string>pdt</string>
|
||||
<string>pk</string>
|
||||
<string>pnb</string>
|
||||
<string>pona</string>
|
||||
<string>pos</string>
|
||||
<string>ps3</string>
|
||||
<string>ps2stm</string>
|
||||
<string>psb</string>
|
||||
<string>psf</string>
|
||||
<string>psh</string>
|
||||
<string>psnd</string>
|
||||
<string>pwb</string>
|
||||
<string>r</string>
|
||||
<string>rac</string>
|
||||
<string>rad</string>
|
||||
|
@ -799,7 +804,6 @@
|
|||
<string>smc</string>
|
||||
<string>smk</string>
|
||||
<string>smp</string>
|
||||
<string>smpl</string>
|
||||
<string>smv</string>
|
||||
<string>snb</string>
|
||||
<string>snd</string>
|
||||
|
@ -826,7 +830,6 @@
|
|||
<string>ster</string>
|
||||
<string>sth</string>
|
||||
<string>stm</string>
|
||||
<string>stma</string>
|
||||
<string>str</string>
|
||||
<string>stream</string>
|
||||
<string>strm</string>
|
||||
|
@ -852,9 +855,9 @@
|
|||
<string>tgq</string>
|
||||
<string>tgv</string>
|
||||
<string>thp</string>
|
||||
<string>tk5</string>
|
||||
<string>tmx</string>
|
||||
<string>tra</string>
|
||||
<string>trk</string>
|
||||
<string>tun</string>
|
||||
<string>txth</string>
|
||||
<string>txtp</string>
|
||||
|
@ -930,6 +933,7 @@
|
|||
<string>wua</string>
|
||||
<string>wv2</string>
|
||||
<string>wv6</string>
|
||||
<string>wvd</string>
|
||||
<string>wve</string>
|
||||
<string>wvs</string>
|
||||
<string>wvx</string>
|
||||
|
|
Loading…
Reference in a new issue