mirror of
https://github.com/vgmstream/vgmstream.git
synced 2025-01-17 23:36:41 +01:00
Redo Blitz Games STR+WAV [Zapper (GC), Tak (PS2)]
Also removes 3 metas that parsed Blitz stuff
This commit is contained in:
parent
10dc43f2fb
commit
790525f990
@ -704,7 +704,7 @@ static const meta_info meta_info_list[] = {
|
|||||||
{meta_PS2_VAGm, "Sony VAG Mono header (VAGm)"},
|
{meta_PS2_VAGm, "Sony VAG Mono header (VAGm)"},
|
||||||
{meta_PS2_pGAV, "Sony VAG Stereo Little Endian header (pGAV)"},
|
{meta_PS2_pGAV, "Sony VAG Stereo Little Endian header (pGAV)"},
|
||||||
{meta_PSX_GMS, "assumed Grandia GMS file by .gms extension"},
|
{meta_PSX_GMS, "assumed Grandia GMS file by .gms extension"},
|
||||||
{meta_PS2_STR, "assumed STR + STH File by .str & .sth extension"},
|
{meta_STR_WAV, "Blitz Games STR+WAV header"},
|
||||||
{meta_PS2_ILD, "ILD header"},
|
{meta_PS2_ILD, "ILD header"},
|
||||||
{meta_PS2_PNB, "assumed PNB (PsychoNauts Bgm File) by .pnb extension"},
|
{meta_PS2_PNB, "assumed PNB (PsychoNauts Bgm File) by .pnb extension"},
|
||||||
{meta_XBOX_WAVM, "Xbox WAVM raw header"},
|
{meta_XBOX_WAVM, "Xbox WAVM raw header"},
|
||||||
@ -851,7 +851,6 @@ static const meta_info meta_info_list[] = {
|
|||||||
{meta_PS2_SND, "Might and Magic SSND Header"},
|
{meta_PS2_SND, "Might and Magic SSND Header"},
|
||||||
{meta_PS2_VSF_TTA, "VSF with SMSS Header"},
|
{meta_PS2_VSF_TTA, "VSF with SMSS Header"},
|
||||||
{meta_ADS, "dhSS Header"},
|
{meta_ADS, "dhSS Header"},
|
||||||
{meta_WII_STR, "HOTD Overkill - STR+STH WII Header"},
|
|
||||||
{meta_PS2_MCG, "Gunvari MCG Header"},
|
{meta_PS2_MCG, "Gunvari MCG Header"},
|
||||||
{meta_ZSD, "ZSD Header"},
|
{meta_ZSD, "ZSD Header"},
|
||||||
{meta_RedSpark, "RedSpark Header"},
|
{meta_RedSpark, "RedSpark Header"},
|
||||||
@ -908,7 +907,6 @@ static const meta_info meta_info_list[] = {
|
|||||||
{meta_PS2_B1S, "B1S header"},
|
{meta_PS2_B1S, "B1S header"},
|
||||||
{meta_PS2_WAD, "WAD header"},
|
{meta_PS2_WAD, "WAD header"},
|
||||||
{meta_DSP_XIII, "XIII dsp header"},
|
{meta_DSP_XIII, "XIII dsp header"},
|
||||||
{meta_NGC_DSP_STH_STR, "STH dsp header"},
|
|
||||||
{meta_DSP_CABELAS, "Cabelas games dsp header"},
|
{meta_DSP_CABELAS, "Cabelas games dsp header"},
|
||||||
{meta_PS2_ADM, "Dragon Quest V .ADM raw header"},
|
{meta_PS2_ADM, "Dragon Quest V .ADM raw header"},
|
||||||
{meta_PS2_LPCM, "LPCM header"},
|
{meta_PS2_LPCM, "LPCM header"},
|
||||||
|
@ -400,10 +400,6 @@
|
|||||||
RelativePath=".\meta\dsp_bdsp.c"
|
RelativePath=".\meta\dsp_bdsp.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\meta\dsp_sth_str.c"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\meta\ea_schl.c"
|
RelativePath=".\meta\ea_schl.c"
|
||||||
>
|
>
|
||||||
@ -1038,10 +1034,6 @@
|
|||||||
RelativePath=".\meta\ps2_ster.c"
|
RelativePath=".\meta\ps2_ster.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\meta\ps2_str.c"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\meta\ps2_strlr.c"
|
RelativePath=".\meta\ps2_strlr.c"
|
||||||
>
|
>
|
||||||
@ -1286,6 +1278,10 @@
|
|||||||
RelativePath=".\meta\str_snds.c"
|
RelativePath=".\meta\str_snds.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\meta\str_wav.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\meta\stx.c"
|
RelativePath=".\meta\stx.c"
|
||||||
>
|
>
|
||||||
@ -1398,10 +1394,6 @@
|
|||||||
RelativePath=".\meta\wii_sng.c"
|
RelativePath=".\meta\wii_sng.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\meta\wii_str.c"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\meta\wii_sts.c"
|
RelativePath=".\meta\wii_sts.c"
|
||||||
>
|
>
|
||||||
|
@ -218,7 +218,6 @@
|
|||||||
<ClCompile Include="meta\dmsg_segh.c" />
|
<ClCompile Include="meta\dmsg_segh.c" />
|
||||||
<ClCompile Include="meta\dsp_adx.c" />
|
<ClCompile Include="meta\dsp_adx.c" />
|
||||||
<ClCompile Include="meta\dsp_bdsp.c" />
|
<ClCompile Include="meta\dsp_bdsp.c" />
|
||||||
<ClCompile Include="meta\dsp_sth_str.c" />
|
|
||||||
<ClCompile Include="meta\ea_schl.c" />
|
<ClCompile Include="meta\ea_schl.c" />
|
||||||
<ClCompile Include="meta\ea_schl_fixed.c" />
|
<ClCompile Include="meta\ea_schl_fixed.c" />
|
||||||
<ClCompile Include="meta\ea_1snh.c" />
|
<ClCompile Include="meta\ea_1snh.c" />
|
||||||
@ -353,7 +352,6 @@
|
|||||||
<ClCompile Include="meta\ps2_snd.c" />
|
<ClCompile Include="meta\ps2_snd.c" />
|
||||||
<ClCompile Include="meta\ps2_sps.c" />
|
<ClCompile Include="meta\ps2_sps.c" />
|
||||||
<ClCompile Include="meta\ps2_ster.c" />
|
<ClCompile Include="meta\ps2_ster.c" />
|
||||||
<ClCompile Include="meta\ps2_str.c" />
|
|
||||||
<ClCompile Include="meta\ps2_svag.c" />
|
<ClCompile Include="meta\ps2_svag.c" />
|
||||||
<ClCompile Include="meta\ps2_svag_snk.c" />
|
<ClCompile Include="meta\ps2_svag_snk.c" />
|
||||||
<ClCompile Include="meta\ps2_tec.c" />
|
<ClCompile Include="meta\ps2_tec.c" />
|
||||||
@ -403,6 +401,7 @@
|
|||||||
<ClCompile Include="meta\stm.c" />
|
<ClCompile Include="meta\stm.c" />
|
||||||
<ClCompile Include="meta\str_asr.c" />
|
<ClCompile Include="meta\str_asr.c" />
|
||||||
<ClCompile Include="meta\str_snds.c" />
|
<ClCompile Include="meta\str_snds.c" />
|
||||||
|
<ClCompile Include="meta\str_wav.c" />
|
||||||
<ClCompile Include="meta\stx.c" />
|
<ClCompile Include="meta\stx.c" />
|
||||||
<ClCompile Include="meta\svs.c" />
|
<ClCompile Include="meta\svs.c" />
|
||||||
<ClCompile Include="meta\sxd.c" />
|
<ClCompile Include="meta\sxd.c" />
|
||||||
@ -427,7 +426,6 @@
|
|||||||
<ClCompile Include="meta\wii_mus.c" />
|
<ClCompile Include="meta\wii_mus.c" />
|
||||||
<ClCompile Include="meta\wii_smp.c" />
|
<ClCompile Include="meta\wii_smp.c" />
|
||||||
<ClCompile Include="meta\wii_sng.c" />
|
<ClCompile Include="meta\wii_sng.c" />
|
||||||
<ClCompile Include="meta\wii_str.c" />
|
|
||||||
<ClCompile Include="meta\wii_sts.c" />
|
<ClCompile Include="meta\wii_sts.c" />
|
||||||
<ClCompile Include="meta\ws_aud.c" />
|
<ClCompile Include="meta\ws_aud.c" />
|
||||||
<ClCompile Include="meta\wv6.c" />
|
<ClCompile Include="meta\wv6.c" />
|
||||||
|
@ -244,9 +244,6 @@
|
|||||||
<ClCompile Include="meta\dsp_bdsp.c">
|
<ClCompile Include="meta\dsp_bdsp.c">
|
||||||
<Filter>meta\Source Files</Filter>
|
<Filter>meta\Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="meta\dsp_sth_str.c">
|
|
||||||
<Filter>meta\Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="meta\ea_schl.c">
|
<ClCompile Include="meta\ea_schl.c">
|
||||||
<Filter>meta\Source Files</Filter>
|
<Filter>meta\Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@ -634,9 +631,6 @@
|
|||||||
<ClCompile Include="meta\ps2_ster.c">
|
<ClCompile Include="meta\ps2_ster.c">
|
||||||
<Filter>meta\Source Files</Filter>
|
<Filter>meta\Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="meta\ps2_str.c">
|
|
||||||
<Filter>meta\Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="meta\ps2_svag.c">
|
<ClCompile Include="meta\ps2_svag.c">
|
||||||
<Filter>meta\Source Files</Filter>
|
<Filter>meta\Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@ -784,6 +778,9 @@
|
|||||||
<ClCompile Include="meta\str_snds.c">
|
<ClCompile Include="meta\str_snds.c">
|
||||||
<Filter>meta\Source Files</Filter>
|
<Filter>meta\Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="meta\str_wav.c">
|
||||||
|
<Filter>meta\Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="meta\stx.c">
|
<ClCompile Include="meta\stx.c">
|
||||||
<Filter>meta\Source Files</Filter>
|
<Filter>meta\Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@ -856,9 +853,6 @@
|
|||||||
<ClCompile Include="meta\wii_sng.c">
|
<ClCompile Include="meta\wii_sng.c">
|
||||||
<Filter>meta\Source Files</Filter>
|
<Filter>meta\Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="meta\wii_str.c">
|
|
||||||
<Filter>meta\Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="meta\wii_sts.c">
|
<ClCompile Include="meta\wii_sts.c">
|
||||||
<Filter>meta\Source Files</Filter>
|
<Filter>meta\Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -1,320 +0,0 @@
|
|||||||
#include "meta.h"
|
|
||||||
#include "../util.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
STH+STR
|
|
||||||
found in SpongebobSquarepants: Creature From The Krusty Krab (NGC)
|
|
||||||
*/
|
|
||||||
|
|
||||||
VGMSTREAM * init_vgmstream_ngc_dsp_sth_str1(STREAMFILE *streamFile) {
|
|
||||||
VGMSTREAM * vgmstream = NULL;
|
|
||||||
STREAMFILE * streamFileSTR = NULL;
|
|
||||||
char filename[PATH_LIMIT];
|
|
||||||
char filenameSTR[PATH_LIMIT];
|
|
||||||
int i, j;
|
|
||||||
int channel_count;
|
|
||||||
int loop_flag;
|
|
||||||
off_t coef_table[8] = {0x12C,0x18C,0x1EC,0x24C,0x2AC,0x30C,0x36C,0x3CC};
|
|
||||||
|
|
||||||
/* check extension, case insensitive */
|
|
||||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
|
||||||
if (strcasecmp("sth",filename_extension(filename))) goto fail;
|
|
||||||
|
|
||||||
strcpy(filenameSTR,filename);
|
|
||||||
strcpy(filenameSTR+strlen(filenameSTR)-3,"str");
|
|
||||||
streamFileSTR = streamFile->open(streamFile,filenameSTR,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
|
||||||
if (!streamFileSTR) goto fail;
|
|
||||||
|
|
||||||
if (read_32bitBE(0x0,streamFile) != 0x0)
|
|
||||||
{
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (read_32bitBE(0x4,streamFile) != 0x800)
|
|
||||||
{
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Not really channel_count, just 'included tracks * channels per track */
|
|
||||||
loop_flag = (read_32bitBE(0xD8,streamFile) != 0xFFFFFFFF);
|
|
||||||
channel_count = (read_32bitBE(0x70,streamFile)) * (read_32bitBE(0x88,streamFile));
|
|
||||||
|
|
||||||
if (channel_count > 8)
|
|
||||||
{
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 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(0x24,streamFile);
|
|
||||||
vgmstream->num_samples=get_streamfile_size(streamFileSTR)/8/channel_count*14;
|
|
||||||
vgmstream->coding_type = coding_NGC_DSP;
|
|
||||||
|
|
||||||
if(loop_flag)
|
|
||||||
{
|
|
||||||
vgmstream->loop_start_sample = read_32bitBE(0xD8,streamFile);
|
|
||||||
vgmstream->loop_end_sample = read_32bitBE(0xDC,streamFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (channel_count == 1)
|
|
||||||
{
|
|
||||||
vgmstream->layout_type = layout_none;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vgmstream->layout_type = layout_interleave;
|
|
||||||
if (channel_count == 2)
|
|
||||||
{
|
|
||||||
vgmstream->interleave_block_size=0x10000;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vgmstream->interleave_block_size=0x8000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vgmstream->meta_type = meta_NGC_DSP_STH_STR;
|
|
||||||
|
|
||||||
/* open the file for reading */
|
|
||||||
for (i=0;i<channel_count;i++)
|
|
||||||
{
|
|
||||||
vgmstream->ch[i].streamfile = streamFileSTR->open(streamFileSTR,filenameSTR,0x8000);
|
|
||||||
if (!vgmstream->ch[i].streamfile) goto fail;
|
|
||||||
vgmstream->ch[i].channel_start_offset=vgmstream->ch[i].offset=i*vgmstream->interleave_block_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
// COEFFS
|
|
||||||
for (j=0;j<vgmstream->channels;j++)
|
|
||||||
{
|
|
||||||
for (i=0;i<16;i++)
|
|
||||||
{
|
|
||||||
vgmstream->ch[j].adpcm_coef[i] = read_16bitBE(coef_table[j]+i*2,streamFile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close_streamfile(streamFileSTR); streamFileSTR=NULL;
|
|
||||||
return vgmstream;
|
|
||||||
|
|
||||||
/* clean up anything we may have opened */
|
|
||||||
fail:
|
|
||||||
if (streamFileSTR) close_streamfile(streamFileSTR);
|
|
||||||
if (vgmstream) close_vgmstream(vgmstream);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
STH+STR
|
|
||||||
found in Taz Wanted (NGC), Cubix Robots for Everyone: Showdown (NGC)
|
|
||||||
*/
|
|
||||||
|
|
||||||
VGMSTREAM * init_vgmstream_ngc_dsp_sth_str2(STREAMFILE *streamFile) {
|
|
||||||
VGMSTREAM * vgmstream = NULL;
|
|
||||||
STREAMFILE * streamFileSTR = NULL;
|
|
||||||
char filename[PATH_LIMIT];
|
|
||||||
char filenameSTR[PATH_LIMIT];
|
|
||||||
int i, j;
|
|
||||||
int channel_count;
|
|
||||||
int loop_flag;
|
|
||||||
off_t coef_table[8] = {0xDC,0x13C,0x19C,0x1FC,0x25C,0x2BC,0x31C,0x37C};
|
|
||||||
|
|
||||||
/* check extension, case insensitive */
|
|
||||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
|
||||||
if (strcasecmp("sth",filename_extension(filename))) goto fail;
|
|
||||||
|
|
||||||
strcpy(filenameSTR,filename);
|
|
||||||
strcpy(filenameSTR+strlen(filenameSTR)-3,"str");
|
|
||||||
streamFileSTR = streamFile->open(streamFile,filenameSTR,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
|
||||||
if (!streamFileSTR) goto fail;
|
|
||||||
|
|
||||||
if (read_32bitBE(0x0,streamFile) != 0x0)
|
|
||||||
{
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (read_32bitBE(0x4,streamFile) != 0x900)
|
|
||||||
{
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Not really channel_count, just 'included tracks * channels per track */
|
|
||||||
loop_flag = (read_32bitBE(0xB8,streamFile) != 0xFFFFFFFF);
|
|
||||||
channel_count = read_32bitBE(0x50,streamFile)*2;
|
|
||||||
|
|
||||||
if (channel_count > 8)
|
|
||||||
{
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 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(0x24,streamFile);
|
|
||||||
vgmstream->num_samples=get_streamfile_size(streamFileSTR)/8/channel_count*14;
|
|
||||||
vgmstream->coding_type = coding_NGC_DSP;
|
|
||||||
|
|
||||||
if(loop_flag)
|
|
||||||
{
|
|
||||||
vgmstream->loop_start_sample = read_32bitBE(0xB8,streamFile);
|
|
||||||
vgmstream->loop_end_sample = read_32bitBE(0xBC,streamFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (channel_count == 1)
|
|
||||||
{
|
|
||||||
vgmstream->layout_type = layout_none;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vgmstream->layout_type = layout_interleave;
|
|
||||||
if (channel_count == 2)
|
|
||||||
{
|
|
||||||
vgmstream->interleave_block_size=0x10000;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vgmstream->interleave_block_size=0x8000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vgmstream->meta_type = meta_NGC_DSP_STH_STR;
|
|
||||||
|
|
||||||
/* open the file for reading */
|
|
||||||
for (i=0;i<channel_count;i++)
|
|
||||||
{
|
|
||||||
vgmstream->ch[i].streamfile = streamFileSTR->open(streamFileSTR,filenameSTR,0x8000);
|
|
||||||
if (!vgmstream->ch[i].streamfile) goto fail;
|
|
||||||
vgmstream->ch[i].channel_start_offset=vgmstream->ch[i].offset=i*vgmstream->interleave_block_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
// COEFFS
|
|
||||||
for (j=0;j<vgmstream->channels;j++)
|
|
||||||
{
|
|
||||||
for (i=0;i<16;i++)
|
|
||||||
{
|
|
||||||
vgmstream->ch[j].adpcm_coef[i] = read_16bitBE(coef_table[j]+i*2,streamFile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close_streamfile(streamFileSTR); streamFileSTR=NULL;
|
|
||||||
return vgmstream;
|
|
||||||
|
|
||||||
/* clean up anything we may have opened */
|
|
||||||
fail:
|
|
||||||
if (streamFileSTR) close_streamfile(streamFileSTR);
|
|
||||||
if (vgmstream) close_vgmstream(vgmstream);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
STH+STR
|
|
||||||
found in Tak and the Guardians of Gross (WII)
|
|
||||||
*/
|
|
||||||
|
|
||||||
VGMSTREAM * init_vgmstream_ngc_dsp_sth_str3(STREAMFILE *streamFile) {
|
|
||||||
VGMSTREAM * vgmstream = NULL;
|
|
||||||
STREAMFILE * streamFileSTR = NULL;
|
|
||||||
char filename[PATH_LIMIT];
|
|
||||||
char filenameSTR[PATH_LIMIT];
|
|
||||||
int i, j;
|
|
||||||
int channel_count;
|
|
||||||
int loop_flag;
|
|
||||||
off_t coef_table[8] = {read_32bitBE(0x7C,streamFile),read_32bitBE(0x80,streamFile),read_32bitBE(0x84,streamFile),read_32bitBE(0x88,streamFile),read_32bitBE(0x8C,streamFile),read_32bitBE(0x90,streamFile),read_32bitBE(0x94,streamFile),read_32bitBE(0x98,streamFile)};
|
|
||||||
|
|
||||||
/* check extension, case insensitive */
|
|
||||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
|
||||||
if (strcasecmp("sth",filename_extension(filename))) goto fail;
|
|
||||||
|
|
||||||
strcpy(filenameSTR,filename);
|
|
||||||
strcpy(filenameSTR+strlen(filenameSTR)-3,"str");
|
|
||||||
streamFileSTR = streamFile->open(streamFile,filenameSTR,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
|
||||||
if (!streamFileSTR) goto fail;
|
|
||||||
|
|
||||||
if (read_32bitBE(0x0,streamFile) != 0x0)
|
|
||||||
{
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((read_32bitBE(0x4,streamFile) != 0x700) &&
|
|
||||||
(read_32bitBE(0x4,streamFile) != 0x800))
|
|
||||||
{
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Not really channel_count, just 'included tracks * channels per track */
|
|
||||||
loop_flag = 0;
|
|
||||||
channel_count = read_32bitBE(0x70,streamFile);
|
|
||||||
|
|
||||||
if (channel_count > 8)
|
|
||||||
{
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 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(0x38,streamFile);
|
|
||||||
vgmstream->num_samples=get_streamfile_size(streamFileSTR)/8/channel_count*14;
|
|
||||||
vgmstream->coding_type = coding_NGC_DSP;
|
|
||||||
|
|
||||||
if(loop_flag)
|
|
||||||
{
|
|
||||||
vgmstream->loop_start_sample = 0;
|
|
||||||
vgmstream->loop_end_sample = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (channel_count == 1)
|
|
||||||
{
|
|
||||||
vgmstream->layout_type = layout_none;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vgmstream->layout_type = layout_interleave;
|
|
||||||
if (channel_count == 2 || channel_count == 4)
|
|
||||||
{
|
|
||||||
vgmstream->interleave_block_size=0x8000;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vgmstream->interleave_block_size=0x4000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vgmstream->meta_type = meta_NGC_DSP_STH_STR;
|
|
||||||
|
|
||||||
/* open the file for reading */
|
|
||||||
for (i=0;i<channel_count;i++)
|
|
||||||
{
|
|
||||||
vgmstream->ch[i].streamfile = streamFileSTR->open(streamFileSTR,filenameSTR,0x8000);
|
|
||||||
if (!vgmstream->ch[i].streamfile) goto fail;
|
|
||||||
vgmstream->ch[i].channel_start_offset=vgmstream->ch[i].offset=i*vgmstream->interleave_block_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
// COEFFS
|
|
||||||
for (j=0;j<vgmstream->channels;j++)
|
|
||||||
{
|
|
||||||
for (i=0;i<16;i++)
|
|
||||||
{
|
|
||||||
vgmstream->ch[j].adpcm_coef[i] = read_16bitBE(coef_table[j]+i*2,streamFile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close_streamfile(streamFileSTR); streamFileSTR=NULL;
|
|
||||||
return vgmstream;
|
|
||||||
|
|
||||||
/* clean up anything we may have opened */
|
|
||||||
fail:
|
|
||||||
if (streamFileSTR) close_streamfile(streamFileSTR);
|
|
||||||
if (vgmstream) close_vgmstream(vgmstream);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
@ -69,8 +69,6 @@ VGMSTREAM * init_vgmstream_ps2_vag(STREAMFILE *streamFile);
|
|||||||
|
|
||||||
VGMSTREAM * init_vgmstream_psx_gms(STREAMFILE *streamFile);
|
VGMSTREAM * init_vgmstream_psx_gms(STREAMFILE *streamFile);
|
||||||
|
|
||||||
VGMSTREAM * init_vgmstream_ps2_str(STREAMFILE *streamFile);
|
|
||||||
|
|
||||||
VGMSTREAM * init_vgmstream_ps2_ild(STREAMFILE *streamFile);
|
VGMSTREAM * init_vgmstream_ps2_ild(STREAMFILE *streamFile);
|
||||||
|
|
||||||
VGMSTREAM * init_vgmstream_ps2_pnb(STREAMFILE *streamFile);
|
VGMSTREAM * init_vgmstream_ps2_pnb(STREAMFILE *streamFile);
|
||||||
@ -385,8 +383,6 @@ VGMSTREAM * init_vgmstream_ps2_vsf_tta(STREAMFILE *streamFile);
|
|||||||
|
|
||||||
VGMSTREAM * init_vgmstream_ads(STREAMFILE *streamFile);
|
VGMSTREAM * init_vgmstream_ads(STREAMFILE *streamFile);
|
||||||
|
|
||||||
VGMSTREAM * init_vgmstream_wii_str(STREAMFILE *streamFile);
|
|
||||||
|
|
||||||
VGMSTREAM * init_vgmstream_ps2_mcg(STREAMFILE *streamFile);
|
VGMSTREAM * init_vgmstream_ps2_mcg(STREAMFILE *streamFile);
|
||||||
|
|
||||||
VGMSTREAM * init_vgmstream_zsd(STREAMFILE *streamFile);
|
VGMSTREAM * init_vgmstream_zsd(STREAMFILE *streamFile);
|
||||||
@ -490,10 +486,6 @@ VGMSTREAM * init_vgmstream_dsp_str_ig(STREAMFILE* streamFile);
|
|||||||
|
|
||||||
VGMSTREAM * init_vgmstream_ea_swvr(STREAMFILE* streamFile);
|
VGMSTREAM * init_vgmstream_ea_swvr(STREAMFILE* streamFile);
|
||||||
|
|
||||||
VGMSTREAM * init_vgmstream_ngc_dsp_sth_str1(STREAMFILE* streamFile);
|
|
||||||
VGMSTREAM * init_vgmstream_ngc_dsp_sth_str2(STREAMFILE* streamFile);
|
|
||||||
VGMSTREAM * init_vgmstream_ngc_dsp_sth_str3(STREAMFILE* streamFile);
|
|
||||||
|
|
||||||
VGMSTREAM * init_vgmstream_ps2_b1s(STREAMFILE* streamFile);
|
VGMSTREAM * init_vgmstream_ps2_b1s(STREAMFILE* streamFile);
|
||||||
|
|
||||||
VGMSTREAM * init_vgmstream_ps2_wad(STREAMFILE* streamFile);
|
VGMSTREAM * init_vgmstream_ps2_wad(STREAMFILE* streamFile);
|
||||||
@ -773,4 +765,6 @@ VGMSTREAM * init_vgmstream_ckb(STREAMFILE *streamFile);
|
|||||||
|
|
||||||
VGMSTREAM * init_vgmstream_wv6(STREAMFILE *streamFile);
|
VGMSTREAM * init_vgmstream_wv6(STREAMFILE *streamFile);
|
||||||
|
|
||||||
|
VGMSTREAM * init_vgmstream_str_wav(STREAMFILE *streamFile);
|
||||||
|
|
||||||
#endif /*_META_H*/
|
#endif /*_META_H*/
|
||||||
|
@ -1,96 +0,0 @@
|
|||||||
#include "meta.h"
|
|
||||||
#include "../util.h"
|
|
||||||
|
|
||||||
/* STR
|
|
||||||
|
|
||||||
2008-05-19 - Fastelbja : Test version ...
|
|
||||||
*/
|
|
||||||
|
|
||||||
VGMSTREAM * init_vgmstream_ps2_str(STREAMFILE *streamFile) {
|
|
||||||
|
|
||||||
VGMSTREAM * vgmstream = NULL;
|
|
||||||
STREAMFILE * infileSTH = NULL;
|
|
||||||
char filename[PATH_LIMIT];
|
|
||||||
|
|
||||||
char * filenameSTH = NULL;
|
|
||||||
|
|
||||||
int i, channel_count, loop_flag;
|
|
||||||
|
|
||||||
/* check extension, case insensitive */
|
|
||||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
|
||||||
if (strcasecmp("str",filename_extension(filename))) goto fail;
|
|
||||||
|
|
||||||
/* check for .MIH file */
|
|
||||||
filenameSTH=(char *)malloc(strlen(filename)+1);
|
|
||||||
|
|
||||||
if (!filenameSTH) goto fail;
|
|
||||||
|
|
||||||
strcpy(filenameSTH,filename);
|
|
||||||
strcpy(filenameSTH+strlen(filenameSTH)-3,"STH");
|
|
||||||
|
|
||||||
infileSTH = streamFile->open(streamFile,filenameSTH,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
|
||||||
|
|
||||||
/* STH File is necessary, so we can't confuse those file */
|
|
||||||
/* with others .STR file as it is a very common extension */
|
|
||||||
if (!infileSTH) goto fail;
|
|
||||||
|
|
||||||
if(read_32bitLE(0x2C,infileSTH)==0)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
if((read_32bitLE(0x2C,infileSTH)==0x07) ||
|
|
||||||
(read_32bitLE(0x2C,infileSTH)==0x06))
|
|
||||||
channel_count=2;
|
|
||||||
if(read_32bitLE(0x2C,infileSTH)==0x05)
|
|
||||||
channel_count=1;
|
|
||||||
|
|
||||||
loop_flag = read_32bitLE(0x2C,infileSTH) & 0x01;
|
|
||||||
|
|
||||||
/* 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_32bitLE(0x24,infileSTH);
|
|
||||||
|
|
||||||
vgmstream->interleave_block_size=0x4000;
|
|
||||||
|
|
||||||
if(read_32bitLE(0x40,infileSTH)==0x01)
|
|
||||||
vgmstream->interleave_block_size = 0x8000;
|
|
||||||
|
|
||||||
vgmstream->num_samples=read_32bitLE(0x20,infileSTH);
|
|
||||||
|
|
||||||
vgmstream->coding_type = coding_PSX;
|
|
||||||
vgmstream->layout_type = layout_interleave;
|
|
||||||
|
|
||||||
vgmstream->meta_type = meta_PS2_STR;
|
|
||||||
|
|
||||||
if(loop_flag) {
|
|
||||||
vgmstream->loop_start_sample = 0;
|
|
||||||
vgmstream->loop_end_sample = read_32bitLE(0x20,infileSTH);
|
|
||||||
}
|
|
||||||
|
|
||||||
close_streamfile(infileSTH); infileSTH=NULL;
|
|
||||||
|
|
||||||
/* open the file for reading by each channel */
|
|
||||||
{
|
|
||||||
for (i=0;i<channel_count;i++) {
|
|
||||||
vgmstream->ch[i].streamfile = streamFile->open(streamFile,filename,vgmstream->interleave_block_size);
|
|
||||||
|
|
||||||
if (!vgmstream->ch[i].streamfile) goto fail;
|
|
||||||
|
|
||||||
vgmstream->ch[i].channel_start_offset=
|
|
||||||
vgmstream->ch[i].offset+=(off_t)(vgmstream->interleave_block_size*i);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return vgmstream;
|
|
||||||
|
|
||||||
/* clean up anything we may have opened */
|
|
||||||
fail:
|
|
||||||
if (infileSTH) close_streamfile(infileSTH);
|
|
||||||
if (filenameSTH) {free(filenameSTH); filenameSTH=NULL;}
|
|
||||||
if (vgmstream) close_vgmstream(vgmstream);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
452
src/meta/str_wav.c
Normal file
452
src/meta/str_wav.c
Normal file
@ -0,0 +1,452 @@
|
|||||||
|
#include "meta.h"
|
||||||
|
#include "../coding/coding.h"
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum { PSX, DSP, XBOX, WMA } strwav_codec;
|
||||||
|
typedef struct {
|
||||||
|
int32_t channels;
|
||||||
|
int32_t sample_rate;
|
||||||
|
int32_t num_samples;
|
||||||
|
int32_t loop_start;
|
||||||
|
int32_t loop_end;
|
||||||
|
int32_t loop_flag;
|
||||||
|
size_t interleave;
|
||||||
|
|
||||||
|
off_t coefs_offset;
|
||||||
|
off_t dsps_table;
|
||||||
|
off_t coefs_table;
|
||||||
|
|
||||||
|
uint32_t flags;
|
||||||
|
strwav_codec codec;
|
||||||
|
} strwav_header;
|
||||||
|
|
||||||
|
static int parse_header(STREAMFILE* streamHeader, strwav_header* strwav);
|
||||||
|
|
||||||
|
|
||||||
|
/* STR+WAV - Blitz Games streams+header */
|
||||||
|
VGMSTREAM * init_vgmstream_str_wav(STREAMFILE *streamFile) {
|
||||||
|
VGMSTREAM * vgmstream = NULL;
|
||||||
|
STREAMFILE * streamHeader = NULL;
|
||||||
|
strwav_header strwav = {0};
|
||||||
|
off_t start_offset;
|
||||||
|
|
||||||
|
|
||||||
|
/* checks */
|
||||||
|
if (!check_extensions(streamFile, "str"))
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
/* get external header (extracted with filenames from bigfiles) */
|
||||||
|
{
|
||||||
|
/* try with standard file.wav.str=body + file.wav=header (or file.wma.str + file.wma for Fuzion Frenzy (Xbox)) */
|
||||||
|
char basename[PATH_LIMIT];
|
||||||
|
get_streamfile_basename(streamFile,basename,PATH_LIMIT);
|
||||||
|
streamHeader = open_streamfile_by_filename(streamFile, basename);
|
||||||
|
if (!streamHeader) {
|
||||||
|
/* try again with file.str=body + file.wav=header [Bad Boys II (PS2), Zapper (PS2)] */
|
||||||
|
streamHeader = open_streamfile_by_ext(streamFile, "wav");
|
||||||
|
if (!streamHeader) {
|
||||||
|
/* try again with file.str=body + file.sth=header (renamed/fake extension) */
|
||||||
|
streamHeader = open_streamfile_by_ext(streamFile, "sth");
|
||||||
|
if (!streamHeader) goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (!check_extensions(streamHeader, "wav,wma"))
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* detect version */
|
||||||
|
if (!parse_header(streamHeader, &strwav))
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
if (strwav.flags == 0)
|
||||||
|
goto fail;
|
||||||
|
if (strwav.channels > 8)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
/* &0x01: loop?, &0x02: non-mono?, &0x04: stream???, &0x08: unused? */
|
||||||
|
if (strwav.flags != 0x07 && strwav.flags != 0x06 && strwav.flags != 0x05 && strwav.flags != 0x04 && strwav.flags != 0x02) {
|
||||||
|
VGM_LOG("STR+WAV: unknown flags\n");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
start_offset = 0x00;
|
||||||
|
|
||||||
|
|
||||||
|
/* build the VGMSTREAM */
|
||||||
|
vgmstream = allocate_vgmstream(strwav.channels,strwav.loop_flag);
|
||||||
|
if (!vgmstream) goto fail;
|
||||||
|
|
||||||
|
vgmstream->sample_rate = strwav.sample_rate;
|
||||||
|
vgmstream->num_samples = strwav.num_samples;
|
||||||
|
if (strwav.loop_flag) {
|
||||||
|
vgmstream->loop_start_sample = strwav.loop_start;
|
||||||
|
vgmstream->loop_end_sample = strwav.loop_end;
|
||||||
|
}
|
||||||
|
|
||||||
|
vgmstream->meta_type = meta_STR_WAV;
|
||||||
|
|
||||||
|
switch(strwav.codec) {
|
||||||
|
case PSX:
|
||||||
|
vgmstream->coding_type = coding_PSX;
|
||||||
|
vgmstream->layout_type = layout_interleave;
|
||||||
|
vgmstream->interleave_block_size = strwav.interleave;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DSP:
|
||||||
|
vgmstream->coding_type = coding_NGC_DSP;
|
||||||
|
vgmstream->layout_type = layout_interleave;
|
||||||
|
vgmstream->interleave_block_size = strwav.interleave;
|
||||||
|
|
||||||
|
/* get coefs */
|
||||||
|
{
|
||||||
|
int i, ch;
|
||||||
|
for (ch = 0; ch < vgmstream->channels; ch++) {
|
||||||
|
for (i = 0; i < 16; i++) {
|
||||||
|
off_t coef_offset;
|
||||||
|
if (strwav.dsps_table) /* mini table with offsets to DSP headers */
|
||||||
|
coef_offset = read_32bitBE(strwav.dsps_table+0x04*ch,streamHeader) + 0x1c;
|
||||||
|
else if (strwav.coefs_table) /* mini table with offsets to coefs then header */
|
||||||
|
coef_offset = read_32bitBE(strwav.coefs_table+0x04*ch,streamHeader);
|
||||||
|
else
|
||||||
|
coef_offset = strwav.coefs_offset + 0x60*ch;
|
||||||
|
vgmstream->ch[ch].adpcm_coef[i] = read_16bitBE(coef_offset+i*0x02,streamHeader);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case XBOX:
|
||||||
|
vgmstream->coding_type = coding_XBOX_IMA;
|
||||||
|
vgmstream->layout_type = layout_none;
|
||||||
|
if (strwav.channels > 2) goto fail; //todo multistreams are 2ch*N interleaved using ~0xD000
|
||||||
|
break;
|
||||||
|
|
||||||
|
#ifdef VGM_USE_FFMPEG
|
||||||
|
case WMA: {
|
||||||
|
ffmpeg_codec_data *ffmpeg_data = NULL;
|
||||||
|
|
||||||
|
ffmpeg_data = init_ffmpeg_offset(streamFile, start_offset,get_streamfile_size(streamFile));
|
||||||
|
if (!ffmpeg_data) goto fail;
|
||||||
|
vgmstream->codec_data = ffmpeg_data;
|
||||||
|
vgmstream->coding_type = coding_FFmpeg;
|
||||||
|
vgmstream->layout_type = layout_none;
|
||||||
|
|
||||||
|
vgmstream->num_samples = ffmpeg_data->totalSamples;
|
||||||
|
if (vgmstream->channels != ffmpeg_data->channels)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!vgmstream_open_stream(vgmstream,streamFile,start_offset))
|
||||||
|
goto fail;
|
||||||
|
close_streamfile(streamHeader);
|
||||||
|
return vgmstream;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
close_streamfile(streamHeader);
|
||||||
|
close_vgmstream(vgmstream);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Parse header versions. Almost every game uses its own variation (struct serialization?),
|
||||||
|
* so detection could be improved once enough versions are known. */
|
||||||
|
static int parse_header(STREAMFILE* streamHeader, strwav_header* strwav) {
|
||||||
|
size_t header_size;
|
||||||
|
|
||||||
|
if (read_32bitBE(0x00,streamHeader) != 0x00000000)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
header_size = get_streamfile_size(streamHeader);
|
||||||
|
|
||||||
|
//todo loop start/end values may be off for some headers
|
||||||
|
|
||||||
|
/* Fuzion Frenzy (Xbox)[2001] wma */
|
||||||
|
if ( read_32bitBE(0x04,streamHeader) == 0x00000900 &&
|
||||||
|
read_32bitLE(0x20,streamHeader) == 0 && /* no num_samples */
|
||||||
|
read_32bitLE(0x24,streamHeader) == read_32bitLE(0x80,streamHeader) && /* sample rate repeat */
|
||||||
|
read_32bitLE(0x28,streamHeader) == 0x10 &&
|
||||||
|
header_size == 0x110 /* no value in header */
|
||||||
|
) {
|
||||||
|
strwav->num_samples = read_32bitLE(0x20,streamHeader); /* 0 but will be rectified later */
|
||||||
|
strwav->sample_rate = read_32bitLE(0x24,streamHeader);
|
||||||
|
strwav->flags = read_32bitLE(0x2c,streamHeader);
|
||||||
|
strwav->loop_start = 0;
|
||||||
|
strwav->loop_end = 0;
|
||||||
|
|
||||||
|
strwav->channels = read_32bitLE(0x60,streamHeader) * (strwav->flags & 0x02 ? 2 : 1); /* tracks of 2/1ch */
|
||||||
|
strwav->loop_flag = strwav->flags & 0x01;
|
||||||
|
strwav->interleave = 0;
|
||||||
|
|
||||||
|
strwav->codec = WMA;
|
||||||
|
;VGM_LOG("STR+WAV: header Fuzion Frenzy (Xbox)\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Taz: Wanted (GC)[2002] */
|
||||||
|
/* Cubix Robots for Everyone: Showdown (GC)[2003] */
|
||||||
|
if ( read_32bitBE(0x04,streamHeader) == 0x00000900 &&
|
||||||
|
read_32bitBE(0x24,streamHeader) == read_32bitBE(0x90,streamHeader) && /* sample rate repeat */
|
||||||
|
read_32bitBE(0x28,streamHeader) == 0x10 &&
|
||||||
|
read_32bitBE(0xa0,streamHeader) == header_size /* ~0x3C0 */
|
||||||
|
) {
|
||||||
|
strwav->num_samples = read_32bitBE(0x20,streamHeader);
|
||||||
|
strwav->sample_rate = read_32bitBE(0x24,streamHeader);
|
||||||
|
strwav->flags = read_32bitBE(0x2c,streamHeader);
|
||||||
|
strwav->loop_start = read_32bitBE(0xb8,streamHeader);
|
||||||
|
strwav->loop_end = read_32bitBE(0xbc,streamHeader);
|
||||||
|
|
||||||
|
strwav->channels = read_32bitBE(0x50,streamHeader) * (strwav->flags & 0x02 ? 2 : 1); /* tracks of 2/1ch */
|
||||||
|
strwav->loop_flag = strwav->flags & 0x01;
|
||||||
|
strwav->interleave = strwav->channels > 2 ? 0x8000 : 0x10000;
|
||||||
|
|
||||||
|
strwav->coefs_offset = 0xdc;
|
||||||
|
strwav->codec = DSP;
|
||||||
|
;VGM_LOG("STR+WAV: header Taz: Wanted (GC)\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The Fairly OddParents - Breakin' da Rules (Xbox)[2003] */
|
||||||
|
if ( read_32bitBE(0x04,streamHeader) == 0x00000900 &&
|
||||||
|
read_32bitLE(0x24,streamHeader) == read_32bitLE(0xb0,streamHeader) && /* sample rate repeat */
|
||||||
|
read_32bitLE(0x28,streamHeader) == 0x10 &&
|
||||||
|
read_32bitLE(0xc0,streamHeader)*0x04 + read_32bitLE(0xc4,streamHeader) == header_size /* ~0xe0 + variable */
|
||||||
|
) {
|
||||||
|
strwav->num_samples = read_32bitLE(0x20,streamHeader);
|
||||||
|
strwav->sample_rate = read_32bitLE(0x24,streamHeader);
|
||||||
|
strwav->flags = read_32bitLE(0x2c,streamHeader);
|
||||||
|
strwav->loop_start = read_32bitLE(0x38,streamHeader);
|
||||||
|
strwav->loop_end = strwav->num_samples;
|
||||||
|
|
||||||
|
strwav->channels = read_32bitLE(0x70,streamHeader) * (strwav->flags & 0x02 ? 2 : 1); /* tracks of 2/1ch */
|
||||||
|
strwav->loop_flag = strwav->flags & 0x01;
|
||||||
|
strwav->interleave = strwav->channels > 2 ? 0xD000 : 0x0;
|
||||||
|
|
||||||
|
strwav->codec = XBOX;
|
||||||
|
;VGM_LOG("STR+WAV: header The Fairly OddParents (Xbox)\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Bad Boys II (GC)[2004] */
|
||||||
|
if ( read_32bitBE(0x04,streamHeader) == 0x00000800 &&
|
||||||
|
read_32bitBE(0x24,streamHeader) == read_32bitBE(0xb0,streamHeader) && /* sample rate repeat */
|
||||||
|
read_32bitBE(0x24,streamHeader) == read_32bitBE(read_32bitBE(0xe0,streamHeader)+0x08,streamHeader) && /* sample rate vs 1st DSP header */
|
||||||
|
read_32bitBE(0x28,streamHeader) == 0x10 &&
|
||||||
|
read_32bitBE(0xc0,streamHeader)*0x04 + read_32bitBE(0xc4,streamHeader) == header_size /* variable + variable */
|
||||||
|
) {
|
||||||
|
strwav->num_samples = read_32bitBE(0x20,streamHeader);
|
||||||
|
strwav->sample_rate = read_32bitBE(0x24,streamHeader);
|
||||||
|
strwav->flags = read_32bitBE(0x2c,streamHeader);
|
||||||
|
strwav->loop_start = read_32bitBE(0xd8,streamHeader);
|
||||||
|
strwav->loop_end = read_32bitBE(0xdc,streamHeader);
|
||||||
|
|
||||||
|
strwav->channels = read_32bitBE(0x70,streamHeader) * read_32bitBE(0x88,streamHeader); /* tracks of Nch */
|
||||||
|
strwav->loop_flag = strwav->flags & 0x01;
|
||||||
|
strwav->interleave = strwav->channels > 2 ? 0x8000 : 0x10000;
|
||||||
|
|
||||||
|
strwav->dsps_table = 0xe0;
|
||||||
|
strwav->codec = DSP;
|
||||||
|
;VGM_LOG("STR+WAV: header Bad Boys II (GC)\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#if 0
|
||||||
|
if ( read_32bitBE(0x04,streamHeader) == 0x00000800 &&
|
||||||
|
read_32bitBE(0x24,streamHeader) == read_32bitBE(0xb0,streamHeader) && /* sample rate repeat */
|
||||||
|
read_32bitBE(0x24,streamHeader) == read_32bitBE(read_32bitBE(0xf0,streamHeader)+0x08,streamHeader) && /* sample rate vs 1st DSP header */
|
||||||
|
read_32bitBE(0x28,streamHeader) == 0x10 &&
|
||||||
|
read_32bitBE(0xc0,streamHeader)*0x04 + read_32bitBE(0xc4,streamHeader) == header_size /* variable + variable */
|
||||||
|
) {
|
||||||
|
strwav->num_samples = read_32bitBE(0x20,streamHeader);
|
||||||
|
strwav->sample_rate = read_32bitBE(0x24,streamHeader);
|
||||||
|
strwav->flags = read_32bitBE(0x2c,streamHeader);
|
||||||
|
strwav->loop_start = read_32bitBE(0xd8,streamHeader);
|
||||||
|
strwav->loop_end = read_32bitBE(0xdc,streamHeader);
|
||||||
|
|
||||||
|
strwav->channels = read_32bitBE(0x70,streamHeader) * read_32bitBE(0x88,streamHeader); /* tracks of Nch */
|
||||||
|
strwav->loop_flag = strwav->flags & 0x01;
|
||||||
|
strwav->interleave = strwav->channels > 2 ? 0x8000 : 0x10000;
|
||||||
|
|
||||||
|
strwav->dsps_table = 0xf0;
|
||||||
|
strwav->codec = DSP;
|
||||||
|
;VGM_LOG("STR+WAV: header Pac-Man World 3 (GC)\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
/* Bad Boys II (PS2)[2004] */
|
||||||
|
/* Pac-Man World 3 (PS2)[2005] */
|
||||||
|
if ((read_32bitBE(0x04,streamHeader) == 0x00000800 ||
|
||||||
|
read_32bitBE(0x04,streamHeader) == 0x01000800) && /* rare (PW3 mu_spectral1_explore_2) */
|
||||||
|
read_32bitLE(0x24,streamHeader) == read_32bitLE(0x70,streamHeader) && /* sample rate repeat */
|
||||||
|
read_32bitLE(0x28,streamHeader) == 0x10 &&
|
||||||
|
read_32bitLE(0x78,streamHeader)*0x04 + read_32bitLE(0x7c,streamHeader) == header_size /* ~0xe0 + variable */
|
||||||
|
) {
|
||||||
|
strwav->num_samples = read_32bitLE(0x20,streamHeader);
|
||||||
|
strwav->sample_rate = read_32bitLE(0x24,streamHeader);
|
||||||
|
strwav->flags = read_32bitLE(0x2c,streamHeader);
|
||||||
|
strwav->loop_start = read_32bitLE(0x38,streamHeader);
|
||||||
|
strwav->interleave = read_32bitLE(0x40,streamHeader) == 1 ? 0x8000 : 0x4000;
|
||||||
|
strwav->loop_end = read_32bitLE(0x54,streamHeader);
|
||||||
|
|
||||||
|
strwav->channels = read_32bitLE(0x40,streamHeader) * (strwav->flags & 0x02 ? 2 : 1); /* tracks of 2/1ch */
|
||||||
|
strwav->loop_flag = strwav->flags & 0x01;
|
||||||
|
strwav->interleave = strwav->channels > 2 ? 0x4000 : 0x8000;
|
||||||
|
|
||||||
|
strwav->codec = PSX;
|
||||||
|
;VGM_LOG("STR+WAV: header Bad Boys II (PS2)\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Zapper: One Wicked Cricket! (PS2)[2005] */
|
||||||
|
if ( read_32bitBE(0x04,streamHeader) == 0x00000900 &&
|
||||||
|
read_32bitLE(0x24,streamHeader) == read_32bitLE(0x70,streamHeader) && /* sample rate repeat */
|
||||||
|
read_32bitLE(0x28,streamHeader) == 0x10 &&
|
||||||
|
read_32bitLE(0x7c,streamHeader) == header_size /* ~0xD0 */
|
||||||
|
) {
|
||||||
|
strwav->num_samples = read_32bitLE(0x20,streamHeader);
|
||||||
|
strwav->sample_rate = read_32bitLE(0x24,streamHeader);
|
||||||
|
strwav->flags = read_32bitLE(0x2c,streamHeader);
|
||||||
|
strwav->loop_start = read_32bitLE(0x38,streamHeader);
|
||||||
|
strwav->loop_end = read_32bitLE(0x54,streamHeader);
|
||||||
|
|
||||||
|
strwav->channels = read_32bitLE(0x40,streamHeader) * (strwav->flags & 0x02 ? 2 : 1); /* tracks of 2/1ch */
|
||||||
|
strwav->loop_flag = strwav->flags & 0x01;
|
||||||
|
strwav->interleave = strwav->channels > 2 ? 0x4000 : 0x8000;
|
||||||
|
|
||||||
|
strwav->codec = PSX;
|
||||||
|
;VGM_LOG("STR+WAV: header Zapper (PS2)\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Zapper: One Wicked Cricket! (GC)[2005] */
|
||||||
|
if ( read_32bitBE(0x04,streamHeader) == 0x00000900 &&
|
||||||
|
read_32bitBE(0x24,streamHeader) == read_32bitBE(0xB0,streamHeader) && /* sample rate repeat */
|
||||||
|
read_32bitBE(0x28,streamHeader) == 0x10 &&
|
||||||
|
read_32bitLE(0xc0,streamHeader) == header_size /* variable LE size */
|
||||||
|
) {
|
||||||
|
strwav->num_samples = read_32bitBE(0x20,streamHeader);
|
||||||
|
strwav->sample_rate = read_32bitBE(0x24,streamHeader);
|
||||||
|
strwav->flags = read_32bitBE(0x2c,streamHeader);
|
||||||
|
strwav->loop_start = read_32bitBE(0xd8,streamHeader);
|
||||||
|
strwav->loop_end = read_32bitBE(0xdc,streamHeader);
|
||||||
|
|
||||||
|
strwav->channels = read_32bitBE(0x70,streamHeader) * read_32bitBE(0x88,streamHeader); /* tracks of Nch */
|
||||||
|
strwav->loop_flag = strwav->flags & 0x01;
|
||||||
|
strwav->interleave = strwav->channels > 2 ? 0x8000 : 0x10000;
|
||||||
|
|
||||||
|
strwav->dsps_table = 0xe0;
|
||||||
|
strwav->codec = DSP;
|
||||||
|
;VGM_LOG("STR+WAV: header Zapper (GC)\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Pac-Man World 3 (GC)[2005] */
|
||||||
|
/* SpongeBob SquarePants: Creature from the Krusty Krab (GC)[2006] */
|
||||||
|
if ( read_32bitBE(0x04,streamHeader) == 0x00000800 &&
|
||||||
|
read_32bitBE(0x24,streamHeader) == read_32bitBE(0xb0,streamHeader) && /* sample rate repeat */
|
||||||
|
read_32bitBE(0x24,streamHeader) == read_32bitBE(read_32bitBE(0xf0,streamHeader)+0x08,streamHeader) && /* sample rate vs 1st DSP header */
|
||||||
|
read_32bitBE(0x28,streamHeader) == 0x10 &&
|
||||||
|
read_32bitBE(0xc0,streamHeader)*0x04 + read_32bitBE(0xc4,streamHeader) == read_32bitBE(0xe0,streamHeader) && /* main size */
|
||||||
|
(read_32bitBE(0xe0,streamHeader) + read_32bitBE(0xe4,streamHeader)*0x40 == header_size || /* main size + extradata 1 (config? PMW3 cs2.wav) */
|
||||||
|
read_32bitBE(0xe0,streamHeader) + read_32bitBE(0xe4,streamHeader)*0x08 == header_size) /* main size + extradata 2 (ids? SBSP 0_0_mu_hr.wav) */
|
||||||
|
) {
|
||||||
|
strwav->num_samples = read_32bitBE(0x20,streamHeader);
|
||||||
|
strwav->sample_rate = read_32bitBE(0x24,streamHeader);
|
||||||
|
strwav->flags = read_32bitBE(0x2c,streamHeader);
|
||||||
|
strwav->loop_start = read_32bitBE(0xd8,streamHeader);
|
||||||
|
strwav->loop_end = read_32bitBE(0xdc,streamHeader);
|
||||||
|
|
||||||
|
strwav->channels = read_32bitBE(0x70,streamHeader) * read_32bitBE(0x88,streamHeader); /* tracks of Nch */
|
||||||
|
strwav->loop_flag = strwav->flags & 0x01;
|
||||||
|
strwav->interleave = strwav->channels > 2 ? 0x8000 : 0x10000;
|
||||||
|
|
||||||
|
strwav->dsps_table = 0xf0;
|
||||||
|
strwav->codec = DSP;
|
||||||
|
;VGM_LOG("STR+WAV: header SpongeBob SquarePants (GC)\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SpongeBob SquarePants: Creature from the Krusty Krab (PS2)[2006] */
|
||||||
|
if ( read_32bitBE(0x04,streamHeader) == 0x00000800 &&
|
||||||
|
read_32bitLE(0x08,streamHeader) == 0x00000000 &&
|
||||||
|
read_32bitLE(0x0c,streamHeader) != header_size && /* some ID */
|
||||||
|
(header_size == 0x74 + read_32bitLE(0x64,streamHeader)*0x04 ||
|
||||||
|
header_size == 0x78 + read_32bitLE(0x64,streamHeader)*0x04)
|
||||||
|
) {
|
||||||
|
strwav->loop_start = read_32bitLE(0x24,streamHeader); //not ok?
|
||||||
|
strwav->num_samples = read_32bitLE(0x30,streamHeader);
|
||||||
|
strwav->loop_end = read_32bitLE(0x34,streamHeader);
|
||||||
|
strwav->sample_rate = read_32bitLE(0x38,streamHeader);
|
||||||
|
strwav->flags = read_32bitLE(0x3c,streamHeader);
|
||||||
|
|
||||||
|
strwav->channels = read_32bitLE(0x64,streamHeader); /* tracks of 1ch */
|
||||||
|
strwav->loop_flag = strwav->flags & 0x01;
|
||||||
|
strwav->interleave = strwav->channels > 4 ? 0x4000 : 0x8000;
|
||||||
|
|
||||||
|
strwav->codec = PSX;
|
||||||
|
;VGM_LOG("STR+WAV: header SpongeBob SquarePants (PS2)\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tak and the Guardians of Gross (PS2)[2008] */
|
||||||
|
if ( read_32bitBE(0x04,streamHeader) == 0x00000800 &&
|
||||||
|
read_32bitLE(0x08,streamHeader) != 0x00000000 &&
|
||||||
|
read_32bitLE(0x0c,streamHeader) == header_size && /* ~0x80+0x04*ch */
|
||||||
|
read_32bitLE(0x0c,streamHeader) == 0x80 + read_32bitLE(0x70,streamHeader)*0x04
|
||||||
|
) {
|
||||||
|
strwav->loop_start = read_32bitLE(0x24,streamHeader); //not ok?
|
||||||
|
strwav->num_samples = read_32bitLE(0x30,streamHeader);
|
||||||
|
strwav->loop_end = read_32bitLE(0x34,streamHeader);
|
||||||
|
strwav->sample_rate = read_32bitLE(0x38,streamHeader);
|
||||||
|
strwav->flags = read_32bitLE(0x3c,streamHeader);
|
||||||
|
|
||||||
|
strwav->channels = read_32bitLE(0x70,streamHeader); /* tracks of 1ch */
|
||||||
|
strwav->loop_flag = strwav->flags & 0x01;
|
||||||
|
strwav->interleave = strwav->channels > 4 ? 0x4000 : 0x8000;
|
||||||
|
|
||||||
|
strwav->codec = PSX;
|
||||||
|
;VGM_LOG("STR+WAV: header Tak (PS2)\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tak and the Guardians of Gross (Wii)[2008] */
|
||||||
|
/* The House of the Dead: Overkill (Wii)[2009] (not Blitz but still the same format) */
|
||||||
|
if ((read_32bitBE(0x04,streamHeader) == 0x00000800 ||
|
||||||
|
read_32bitBE(0x04,streamHeader) == 0x00000700) && /* rare? */
|
||||||
|
read_32bitLE(0x08,streamHeader) != 0x00000000 &&
|
||||||
|
read_32bitBE(0x0c,streamHeader) == header_size && /* variable per DSP header */
|
||||||
|
read_32bitBE(0x38,streamHeader) == read_32bitBE(read_32bitBE(0x7c,streamHeader)+0x38,streamHeader) /* sample rate vs 1st DSP header */
|
||||||
|
) {
|
||||||
|
strwav->loop_start = 0; //read_32bitLE(0x24,streamHeader); //not ok?
|
||||||
|
strwav->num_samples = read_32bitBE(0x30,streamHeader);
|
||||||
|
strwav->loop_end = read_32bitBE(0x34,streamHeader);
|
||||||
|
strwav->sample_rate = read_32bitBE(0x38,streamHeader);
|
||||||
|
strwav->flags = read_32bitBE(0x3c,streamHeader);
|
||||||
|
|
||||||
|
strwav->channels = read_32bitBE(0x70,streamHeader); /* tracks of 1ch */
|
||||||
|
strwav->loop_flag = strwav->flags & 0x01;
|
||||||
|
strwav->interleave = strwav->channels > 4 ? 0x4000 : 0x8000;
|
||||||
|
|
||||||
|
strwav->coefs_table = 0x7c;
|
||||||
|
strwav->codec = DSP;
|
||||||
|
;VGM_LOG("STR+WAV: header Tak (Wii)\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* unknown */
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
return 0;
|
||||||
|
}
|
@ -1,90 +0,0 @@
|
|||||||
#include "meta.h"
|
|
||||||
#include "../util.h"
|
|
||||||
|
|
||||||
VGMSTREAM * init_vgmstream_wii_str(STREAMFILE *streamFile) {
|
|
||||||
|
|
||||||
VGMSTREAM * vgmstream = NULL;
|
|
||||||
STREAMFILE * infileSTH = NULL;
|
|
||||||
char filename[PATH_LIMIT];
|
|
||||||
|
|
||||||
char * filenameSTH = NULL;
|
|
||||||
|
|
||||||
int i, j, channel_count, loop_flag;
|
|
||||||
|
|
||||||
/* check extension, case insensitive */
|
|
||||||
streamFile->get_name(streamFile,filename,sizeof(filename));
|
|
||||||
if (strcasecmp("str",filename_extension(filename))) goto fail;
|
|
||||||
|
|
||||||
/* check for .MIH file */
|
|
||||||
filenameSTH=(char *)malloc(strlen(filename)+1);
|
|
||||||
|
|
||||||
if (!filenameSTH) goto fail;
|
|
||||||
|
|
||||||
strcpy(filenameSTH,filename);
|
|
||||||
strcpy(filenameSTH+strlen(filenameSTH)-3,"sth");
|
|
||||||
|
|
||||||
infileSTH = streamFile->open(streamFile,filenameSTH,STREAMFILE_DEFAULT_BUFFER_SIZE);
|
|
||||||
|
|
||||||
/* STH File is necessary, so we can't confuse those file */
|
|
||||||
/* with others .STR file as it is a very common extension */
|
|
||||||
if (!infileSTH) goto fail;
|
|
||||||
|
|
||||||
if(read_32bitLE(0x2C,infileSTH)!=0)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
channel_count = read_32bitBE(0x70,infileSTH);
|
|
||||||
|
|
||||||
if(channel_count==1)
|
|
||||||
loop_flag = (read_32bitBE(0xD4,infileSTH)==0x00740000);
|
|
||||||
else
|
|
||||||
loop_flag = (read_32bitBE(0x124,infileSTH)==0x00740000);
|
|
||||||
|
|
||||||
/* 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(0x38,infileSTH);
|
|
||||||
|
|
||||||
vgmstream->interleave_block_size=0x8000;
|
|
||||||
vgmstream->num_samples=read_32bitBE(0x34,infileSTH);
|
|
||||||
|
|
||||||
vgmstream->coding_type = coding_NGC_DSP;
|
|
||||||
vgmstream->layout_type = layout_interleave;
|
|
||||||
|
|
||||||
vgmstream->meta_type = meta_WII_STR;
|
|
||||||
|
|
||||||
if(loop_flag) {
|
|
||||||
vgmstream->loop_start_sample = 0;
|
|
||||||
vgmstream->loop_end_sample = vgmstream->num_samples;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* open the file for reading by each channel */
|
|
||||||
{
|
|
||||||
for (i=0;i<channel_count;i++) {
|
|
||||||
vgmstream->ch[i].streamfile = streamFile->open(streamFile,filename,vgmstream->interleave_block_size);
|
|
||||||
|
|
||||||
if (!vgmstream->ch[i].streamfile) goto fail;
|
|
||||||
|
|
||||||
vgmstream->ch[i].channel_start_offset=
|
|
||||||
vgmstream->ch[i].offset+=(off_t)(vgmstream->interleave_block_size*i);
|
|
||||||
|
|
||||||
for(j=0; j<16; j++) {
|
|
||||||
vgmstream->ch[i].adpcm_coef[j]=read_16bitBE(0xAC+(j*2)+(i*0x50),infileSTH);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close_streamfile(infileSTH); infileSTH=NULL;
|
|
||||||
|
|
||||||
return vgmstream;
|
|
||||||
|
|
||||||
/* clean up anything we may have opened */
|
|
||||||
fail:
|
|
||||||
if (infileSTH) close_streamfile(infileSTH);
|
|
||||||
if (filenameSTH) {free(filenameSTH); filenameSTH=NULL;}
|
|
||||||
if (vgmstream) close_vgmstream(vgmstream);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
@ -52,7 +52,6 @@ VGMSTREAM * (*init_vgmstream_functions[])(STREAMFILE *streamFile) = {
|
|||||||
init_vgmstream_raw,
|
init_vgmstream_raw,
|
||||||
init_vgmstream_ps2_vag,
|
init_vgmstream_ps2_vag,
|
||||||
init_vgmstream_psx_gms,
|
init_vgmstream_psx_gms,
|
||||||
init_vgmstream_ps2_str,
|
|
||||||
init_vgmstream_ps2_ild,
|
init_vgmstream_ps2_ild,
|
||||||
init_vgmstream_ps2_pnb,
|
init_vgmstream_ps2_pnb,
|
||||||
init_vgmstream_xbox_wavm,
|
init_vgmstream_xbox_wavm,
|
||||||
@ -212,7 +211,6 @@ VGMSTREAM * (*init_vgmstream_functions[])(STREAMFILE *streamFile) = {
|
|||||||
init_vgmstream_ps2_tk5,
|
init_vgmstream_ps2_tk5,
|
||||||
init_vgmstream_ps2_vsf_tta,
|
init_vgmstream_ps2_vsf_tta,
|
||||||
init_vgmstream_ads,
|
init_vgmstream_ads,
|
||||||
init_vgmstream_wii_str,
|
|
||||||
init_vgmstream_ps2_mcg,
|
init_vgmstream_ps2_mcg,
|
||||||
init_vgmstream_zsd,
|
init_vgmstream_zsd,
|
||||||
init_vgmstream_ps2_vgs,
|
init_vgmstream_ps2_vgs,
|
||||||
@ -266,9 +264,6 @@ VGMSTREAM * (*init_vgmstream_functions[])(STREAMFILE *streamFile) = {
|
|||||||
init_vgmstream_ngc_dsp_mpds,
|
init_vgmstream_ngc_dsp_mpds,
|
||||||
init_vgmstream_dsp_str_ig,
|
init_vgmstream_dsp_str_ig,
|
||||||
init_vgmstream_ea_swvr,
|
init_vgmstream_ea_swvr,
|
||||||
init_vgmstream_ngc_dsp_sth_str1,
|
|
||||||
init_vgmstream_ngc_dsp_sth_str2,
|
|
||||||
init_vgmstream_ngc_dsp_sth_str3,
|
|
||||||
init_vgmstream_ps2_b1s,
|
init_vgmstream_ps2_b1s,
|
||||||
init_vgmstream_ps2_wad,
|
init_vgmstream_ps2_wad,
|
||||||
init_vgmstream_dsp_xiii,
|
init_vgmstream_dsp_xiii,
|
||||||
@ -424,6 +419,7 @@ VGMSTREAM * (*init_vgmstream_functions[])(STREAMFILE *streamFile) = {
|
|||||||
init_vgmstream_cks,
|
init_vgmstream_cks,
|
||||||
init_vgmstream_ckb,
|
init_vgmstream_ckb,
|
||||||
init_vgmstream_wv6,
|
init_vgmstream_wv6,
|
||||||
|
init_vgmstream_str_wav,
|
||||||
|
|
||||||
init_vgmstream_txth, /* should go at the end (lower priority) */
|
init_vgmstream_txth, /* should go at the end (lower priority) */
|
||||||
#ifdef VGM_USE_FFMPEG
|
#ifdef VGM_USE_FFMPEG
|
||||||
|
@ -341,7 +341,7 @@ typedef enum {
|
|||||||
meta_PS2_VAGm, /* VAGp Mono File */
|
meta_PS2_VAGm, /* VAGp Mono File */
|
||||||
meta_PS2_pGAV, /* VAGp with Little Endian Header */
|
meta_PS2_pGAV, /* VAGp with Little Endian Header */
|
||||||
meta_PSX_GMS, /* GMS File (used in PS1 & PS2) [no header_id] */
|
meta_PSX_GMS, /* GMS File (used in PS1 & PS2) [no header_id] */
|
||||||
meta_PS2_STR, /* Pacman STR+STH files */
|
meta_STR_WAV, /* Blitz Games STR+WAV files */
|
||||||
meta_PS2_ILD, /* ILD File */
|
meta_PS2_ILD, /* ILD File */
|
||||||
meta_PS2_PNB, /* PsychoNauts Bgm File */
|
meta_PS2_PNB, /* PsychoNauts Bgm File */
|
||||||
meta_PS2_VAGs, /* VAG Stereo from Kingdom Hearts */
|
meta_PS2_VAGs, /* VAG Stereo from Kingdom Hearts */
|
||||||
@ -505,7 +505,6 @@ typedef enum {
|
|||||||
meta_PS2_GBTS, /* Pop'n'Music 9 Audio File */
|
meta_PS2_GBTS, /* Pop'n'Music 9 Audio File */
|
||||||
meta_NGC_DSP_IADP, /* Gamecube Interleave DSP */
|
meta_NGC_DSP_IADP, /* Gamecube Interleave DSP */
|
||||||
meta_PS2_TK5, /* Tekken 5 Stream Files */
|
meta_PS2_TK5, /* Tekken 5 Stream Files */
|
||||||
meta_WII_STR, /* House of The Dead Overkill STR+STH */
|
|
||||||
meta_PS2_MCG, /* Gunvari MCG Files (was name .GCM on disk) */
|
meta_PS2_MCG, /* Gunvari MCG Files (was name .GCM on disk) */
|
||||||
meta_ZSD, /* Dragon Booster ZSD */
|
meta_ZSD, /* Dragon Booster ZSD */
|
||||||
meta_RedSpark, /* "RedSpark" RSD (MadWorld) */
|
meta_RedSpark, /* "RedSpark" RSD (MadWorld) */
|
||||||
@ -545,7 +544,6 @@ typedef enum {
|
|||||||
meta_NGC_DSP_MPDS, /* Big Air Freestyle, Terminator 3 */
|
meta_NGC_DSP_MPDS, /* Big Air Freestyle, Terminator 3 */
|
||||||
meta_DSP_STR_IG, /* Micro Machines, Superman Superman: Shadow of Apokolis */
|
meta_DSP_STR_IG, /* Micro Machines, Superman Superman: Shadow of Apokolis */
|
||||||
meta_EA_SWVR, /* Future Cop L.A.P.D., Freekstyle */
|
meta_EA_SWVR, /* Future Cop L.A.P.D., Freekstyle */
|
||||||
meta_NGC_DSP_STH_STR, /* SpongeBob Squarepants (NGC), Taz Wanted (NGC), Cubix (NGC), Tak (WII)*/
|
|
||||||
meta_PS2_B1S, /* 7 Wonders of the ancient world */
|
meta_PS2_B1S, /* 7 Wonders of the ancient world */
|
||||||
meta_PS2_WAD, /* The golden Compass */
|
meta_PS2_WAD, /* The golden Compass */
|
||||||
meta_DSP_XIII, /* XIII, possibly more (Ubisoft header???) */
|
meta_DSP_XIII, /* XIII, possibly more (Ubisoft header???) */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user