mirror of
https://github.com/vgmstream/vgmstream.git
synced 2025-02-26 06:48:46 +01:00
Fix some SDF [Mr. Bean's Wacky World (Wii)]
This commit is contained in:
parent
aecd7da55e
commit
097f7b0285
@ -1135,10 +1135,9 @@ static const meta_info meta_info_list[] = {
|
|||||||
{meta_A2M, "Artificial Mind & Movement A2M header"},
|
{meta_A2M, "Artificial Mind & Movement A2M header"},
|
||||||
{meta_AHV, "Amuze AHV header"},
|
{meta_AHV, "Amuze AHV header"},
|
||||||
{meta_MSV, "Sony MultiStream MSV header"},
|
{meta_MSV, "Sony MultiStream MSV header"},
|
||||||
{meta_SDF_PS2, "Beyond Reality PS2 SDF header"},
|
{meta_SDF, "Beyond Reality SDF header"},
|
||||||
{meta_SVG, "High Voltage SVG header"},
|
{meta_SVG, "High Voltage SVG header"},
|
||||||
{meta_VIS, "Konami VIS header"},
|
{meta_VIS, "Konami VIS header"},
|
||||||
{meta_SDF_3DS, "Beyond Reality 3DS SDF header"},
|
|
||||||
{meta_VAI, "Asobo Studio .VAI header"},
|
{meta_VAI, "Asobo Studio .VAI header"},
|
||||||
{meta_AIF_ASOBO, "Asobo Studio .AIF header"},
|
{meta_AIF_ASOBO, "Asobo Studio .AIF header"},
|
||||||
{meta_AO, "AlphaOgg .AO header"},
|
{meta_AO, "AlphaOgg .AO header"},
|
||||||
|
@ -768,8 +768,7 @@ VGMSTREAM * init_vgmstream_ahv(STREAMFILE *streamFile);
|
|||||||
|
|
||||||
VGMSTREAM * init_vgmstream_msv(STREAMFILE *streamFile);
|
VGMSTREAM * init_vgmstream_msv(STREAMFILE *streamFile);
|
||||||
|
|
||||||
VGMSTREAM * init_vgmstream_sdf_ps2(STREAMFILE *streamFile);
|
VGMSTREAM * init_vgmstream_sdf(STREAMFILE *streamFile);
|
||||||
VGMSTREAM * init_vgmstream_sdf_3ds(STREAMFILE *streamFile);
|
|
||||||
|
|
||||||
VGMSTREAM * init_vgmstream_svg(STREAMFILE *streamFile);
|
VGMSTREAM * init_vgmstream_svg(STREAMFILE *streamFile);
|
||||||
|
|
||||||
|
131
src/meta/sdf.c
131
src/meta/sdf.c
@ -1,90 +1,93 @@
|
|||||||
#include "meta.h"
|
#include "meta.h"
|
||||||
#include "../coding/coding.h"
|
#include "../coding/coding.h"
|
||||||
|
|
||||||
/* SDF - from Beyond Reality games [Agent Hugo - Lemoon Twist (PS2)] */
|
/* SDF - from Beyond Reality games */
|
||||||
VGMSTREAM * init_vgmstream_sdf_ps2(STREAMFILE *streamFile) {
|
VGMSTREAM * init_vgmstream_sdf(STREAMFILE *streamFile) {
|
||||||
VGMSTREAM * vgmstream = NULL;
|
VGMSTREAM * vgmstream = NULL;
|
||||||
off_t start_offset;
|
off_t start_offset;
|
||||||
size_t data_size;
|
size_t data_size;
|
||||||
int loop_flag, channel_count;
|
int loop_flag, channel_count, sample_rate, interleave, coefs_offset;
|
||||||
|
|
||||||
|
|
||||||
/* checks */
|
/* checks */
|
||||||
if ( !check_extensions(streamFile,"sdf") )
|
if (!check_extensions(streamFile,"sdf"))
|
||||||
goto fail;
|
goto fail;
|
||||||
if (read_32bitBE(0x00,streamFile) != 0x53444600) /* "SDF\0" */
|
if (read_32bitBE(0x00,streamFile) != 0x53444600) /* "SDF\0" */
|
||||||
goto fail;
|
goto fail;
|
||||||
if (read_32bitBE(0x04,streamFile) != 0x03000000) /* version? */
|
if (read_32bitBE(0x04,streamFile) != 0x03000000) /* version? */
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
start_offset = 0x18;
|
data_size = read_32bitLE(0x08,streamFile);
|
||||||
data_size = get_streamfile_size(streamFile) - start_offset;
|
start_offset = get_streamfile_size(streamFile) - data_size;
|
||||||
if (read_32bitLE(0x08,streamFile) != data_size)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
channel_count = read_32bitLE(0x10,streamFile);
|
switch(start_offset) {
|
||||||
loop_flag = 0; /* all files have loop flags but simply fade out normally and repeat */
|
case 0x18: /* Agent Hugo - Lemoon Twist (PS2)*/
|
||||||
|
sample_rate = read_32bitLE(0x0c,streamFile);
|
||||||
|
channel_count = read_32bitLE(0x10,streamFile);
|
||||||
|
interleave = read_32bitLE(0x14,streamFile);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x78: /* Gummy Bears Mini Golf (3DS) */
|
||||||
|
sample_rate = read_32bitLE(0x10,streamFile);
|
||||||
|
channel_count = read_32bitLE(0x14,streamFile);
|
||||||
|
interleave = read_32bitLE(0x18,streamFile);
|
||||||
|
coefs_offset = 0x1c;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x84: /* Mr. Bean's Wacky World (Wii) */
|
||||||
|
sample_rate = read_32bitLE(0x10,streamFile);
|
||||||
|
channel_count = read_32bitLE(0x14,streamFile);
|
||||||
|
interleave = read_32bitLE(0x18,streamFile);
|
||||||
|
data_size = read_32bitLE(0x20,streamFile); /* usable size */
|
||||||
|
coefs_offset = 0x28;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
loop_flag = 1;
|
||||||
|
|
||||||
|
|
||||||
/* build the VGMSTREAM */
|
/* build the VGMSTREAM */
|
||||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
||||||
if (!vgmstream) goto fail;
|
if (!vgmstream) goto fail;
|
||||||
|
|
||||||
vgmstream->meta_type = meta_SDF_PS2;
|
vgmstream->meta_type = meta_SDF;
|
||||||
vgmstream->sample_rate = read_32bitLE(0x0c,streamFile);
|
vgmstream->sample_rate = sample_rate;
|
||||||
vgmstream->num_samples = ps_bytes_to_samples(data_size,channel_count);
|
|
||||||
|
|
||||||
vgmstream->coding_type = coding_PSX;
|
switch(start_offset) {
|
||||||
vgmstream->layout_type = layout_interleave;
|
case 0x18:
|
||||||
vgmstream->interleave_block_size = read_32bitLE(0x14,streamFile);
|
vgmstream->coding_type = coding_PSX;
|
||||||
|
vgmstream->layout_type = layout_interleave;
|
||||||
if ( !vgmstream_open_stream(vgmstream, streamFile, start_offset) )
|
vgmstream->interleave_block_size = interleave;
|
||||||
goto fail;
|
|
||||||
return vgmstream;
|
vgmstream->num_samples = ps_bytes_to_samples(data_size,channel_count);
|
||||||
|
break;
|
||||||
fail:
|
|
||||||
close_vgmstream(vgmstream);
|
case 0x78:
|
||||||
return NULL;
|
case 0x84:
|
||||||
}
|
vgmstream->coding_type = coding_NGC_DSP;
|
||||||
|
vgmstream->layout_type = layout_interleave;
|
||||||
/* SDF - from Beyond Reality games [Gummy Bears Mini Golf (3DS)] */
|
vgmstream->interleave_block_size = interleave;
|
||||||
VGMSTREAM * init_vgmstream_sdf_3ds(STREAMFILE *streamFile) {
|
if (vgmstream->interleave_block_size == 0) /* Gummy Bears Mini Golf */
|
||||||
VGMSTREAM * vgmstream = NULL;
|
vgmstream->interleave_block_size = data_size / channel_count;
|
||||||
off_t start_offset;
|
|
||||||
size_t data_size;
|
vgmstream->num_samples = dsp_bytes_to_samples(data_size,channel_count);
|
||||||
int loop_flag, channel_count;
|
|
||||||
|
dsp_read_coefs_le(vgmstream, streamFile, coefs_offset+0x00,0x2e);
|
||||||
|
dsp_read_hist_le (vgmstream, streamFile, coefs_offset+0x24,0x2e);
|
||||||
/* checks */
|
break;
|
||||||
if ( !check_extensions(streamFile,"sdf") )
|
|
||||||
goto fail;
|
default:
|
||||||
if (read_32bitBE(0x00,streamFile) != 0x53444600) /* "SDF\0" */
|
goto fail;
|
||||||
goto fail;
|
}
|
||||||
if (read_32bitBE(0x04,streamFile) != 0x03000000) /* version? */
|
|
||||||
goto fail;
|
/* most songs simply repeat; don't loop if too short (in seconds) */
|
||||||
|
if (vgmstream->num_samples > 10*sample_rate) {
|
||||||
start_offset = 0x78; /* assumed */
|
vgmstream->loop_start_sample = 0;
|
||||||
data_size = get_streamfile_size(streamFile) - start_offset;
|
vgmstream->loop_end_sample = vgmstream->num_samples;
|
||||||
if (read_32bitLE(0x08,streamFile) != data_size)
|
}
|
||||||
goto fail;
|
|
||||||
|
|
||||||
channel_count = read_32bitLE(0x14,streamFile);
|
|
||||||
loop_flag = 0;
|
|
||||||
|
|
||||||
|
|
||||||
/* build the VGMSTREAM */
|
|
||||||
vgmstream = allocate_vgmstream(channel_count,loop_flag);
|
|
||||||
if (!vgmstream) goto fail;
|
|
||||||
|
|
||||||
vgmstream->meta_type = meta_SDF_3DS;
|
|
||||||
vgmstream->sample_rate = read_32bitLE(0x10,streamFile);
|
|
||||||
vgmstream->num_samples = dsp_bytes_to_samples(data_size,channel_count);
|
|
||||||
|
|
||||||
vgmstream->coding_type = coding_NGC_DSP;
|
|
||||||
vgmstream->layout_type = layout_interleave;
|
|
||||||
vgmstream->interleave_block_size = data_size / channel_count;
|
|
||||||
dsp_read_coefs_le(vgmstream,streamFile,0x1c,0x2e);
|
|
||||||
//todo: there be hist around 0x3c
|
|
||||||
|
|
||||||
if ( !vgmstream_open_stream(vgmstream, streamFile, start_offset) )
|
if ( !vgmstream_open_stream(vgmstream, streamFile, start_offset) )
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -430,10 +430,9 @@ VGMSTREAM * (*init_vgmstream_functions[])(STREAMFILE *streamFile) = {
|
|||||||
init_vgmstream_a2m,
|
init_vgmstream_a2m,
|
||||||
init_vgmstream_ahv,
|
init_vgmstream_ahv,
|
||||||
init_vgmstream_msv,
|
init_vgmstream_msv,
|
||||||
init_vgmstream_sdf_ps2,
|
init_vgmstream_sdf,
|
||||||
init_vgmstream_svg,
|
init_vgmstream_svg,
|
||||||
init_vgmstream_vis,
|
init_vgmstream_vis,
|
||||||
init_vgmstream_sdf_3ds,
|
|
||||||
init_vgmstream_vai,
|
init_vgmstream_vai,
|
||||||
init_vgmstream_aif_asobo,
|
init_vgmstream_aif_asobo,
|
||||||
init_vgmstream_ao,
|
init_vgmstream_ao,
|
||||||
@ -2786,7 +2785,6 @@ int vgmstream_open_stream(VGMSTREAM * vgmstream, STREAMFILE *streamFile, off_t s
|
|||||||
if (!file) goto fail;
|
if (!file) goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
VGM_LOG("ch%i offset=%lx\n", ch,offset);
|
|
||||||
vgmstream->ch[ch].streamfile = file;
|
vgmstream->ch[ch].streamfile = file;
|
||||||
vgmstream->ch[ch].channel_start_offset =
|
vgmstream->ch[ch].channel_start_offset =
|
||||||
vgmstream->ch[ch].offset = offset;
|
vgmstream->ch[ch].offset = offset;
|
||||||
|
@ -687,11 +687,10 @@ typedef enum {
|
|||||||
meta_A2M, /* Scooby-Doo! Unmasked (PS2) */
|
meta_A2M, /* Scooby-Doo! Unmasked (PS2) */
|
||||||
meta_AHV, /* Headhunter (PS2) */
|
meta_AHV, /* Headhunter (PS2) */
|
||||||
meta_MSV, /* Fight Club (PS2) */
|
meta_MSV, /* Fight Club (PS2) */
|
||||||
meta_SDF_PS2, /* Agent Hugo - Lemoon Twist (PS2) */
|
meta_SDF,
|
||||||
meta_SVG, /* Hunter - The Reckoning - Wayward (PS2) */
|
meta_SVG, /* Hunter - The Reckoning - Wayward (PS2) */
|
||||||
meta_VIS, /* AirForce Delta Strike (PS2) */
|
meta_VIS, /* AirForce Delta Strike (PS2) */
|
||||||
meta_VAI, /* Ratatouille (GC) */
|
meta_VAI, /* Ratatouille (GC) */
|
||||||
meta_SDF_3DS, /* Gummy Bears Mini Golf (3DS) */
|
|
||||||
meta_AIF_ASOBO, /* Ratatouille (PC) */
|
meta_AIF_ASOBO, /* Ratatouille (PC) */
|
||||||
meta_AO, /* Cloudphobia (PC) */
|
meta_AO, /* Cloudphobia (PC) */
|
||||||
meta_APC, /* MegaRace 3 (PC) */
|
meta_APC, /* MegaRace 3 (PC) */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user