diff --git a/src/formats.c b/src/formats.c index bfe21a7a..67c27d3a 100644 --- a/src/formats.c +++ b/src/formats.c @@ -1218,7 +1218,7 @@ static const meta_info meta_info_list[] = { {meta_NGC_NST_DSP, "Animaniacs NST header"}, {meta_BAF, "Bizarre Creations .baf header"}, {meta_MSF, "Sony MSF header"}, - {meta_PS3_PAST, "SNDP header"}, + {meta_SNDP, "Premium Agency SNDP header"}, {meta_SGXD, "Sony SGXD header"}, {meta_WII_RAS, "RAS header"}, {meta_SPM, "Square SPM header"}, diff --git a/src/meta/meta.h b/src/meta/meta.h index c8425c83..702092ef 100644 --- a/src/meta/meta.h +++ b/src/meta/meta.h @@ -477,7 +477,7 @@ VGMSTREAM * init_vgmstream_baf(STREAMFILE* streamFile); VGMSTREAM * init_vgmstream_msf(STREAMFILE* streamFile); -VGMSTREAM * init_vgmstream_ps3_past(STREAMFILE* streamFile); +VGMSTREAM* init_vgmstream_sndp(STREAMFILE* sf); VGMSTREAM * init_vgmstream_sgxd(STREAMFILE* streamFile); diff --git a/src/meta/ps3_past.c b/src/meta/ps3_past.c index fb341698..775c1ce6 100644 --- a/src/meta/ps3_past.c +++ b/src/meta/ps3_past.c @@ -1,73 +1,40 @@ -#include "meta.h" -#include "../util.h" - -/* .PAST (Bakugan Battle Brawlers */ -VGMSTREAM * init_vgmstream_ps3_past(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("past",filename_extension(filename))) goto fail; - - /* check header */ - if (read_32bitBE(0x0,streamFile) != 0x534E4450) /* SNDP */ - goto fail; - - loop_flag = (read_32bitBE(0x1C,streamFile)!=0); - channel_count = (uint16_t)read_16bitBE(0xC,streamFile); - - /* build the VGMSTREAM */ - vgmstream = allocate_vgmstream(channel_count,loop_flag); - if (!vgmstream) goto fail; - - /* fill in the vital statistics */ - start_offset = 0x30; - vgmstream->channels = channel_count; - vgmstream->sample_rate = read_32bitBE(0x10,streamFile); - vgmstream->coding_type = coding_PCM16LE; - vgmstream->num_samples = (read_32bitBE(0x14,streamFile))/2/channel_count; - if (loop_flag) { - vgmstream->loop_start_sample = read_32bitBE(0x18,streamFile)/2/channel_count; - vgmstream->loop_end_sample = read_32bitBE(0x1C,streamFile)/2/channel_count; - } - - if (channel_count == 1) - { - vgmstream->layout_type = layout_none; - } - else - { - vgmstream->layout_type = layout_interleave; - vgmstream->interleave_block_size = 0x2; - } - - vgmstream->meta_type = meta_PS3_PAST; - - /* 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;ich[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; -} +#include "meta.h" +#include "../util.h" +#include "../coding/coding.h" + +/* SNDP - from from Premium Agency games [Bakugan Battle Brawlers (PS3)] */ +VGMSTREAM* init_vgmstream_sndp(STREAMFILE* sf) { + VGMSTREAM* vgmstream = NULL; + + /* checks */ + if (!is_id32be(0x00,sf, "SNDP")) + return NULL; + if (!check_extensions(sf,"past")) + return NULL; + + bool loop_flag = (read_u32be(0x1c,sf) !=0); + int channels = read_u16be(0x0c,sf); + off_t start_offset = 0x30; + + /* build the VGMSTREAM */ + vgmstream = allocate_vgmstream(channels, loop_flag); + if (!vgmstream) goto fail; + + vgmstream->sample_rate = read_u32be(0x10,sf); + vgmstream->num_samples = pcm16_bytes_to_samples(read_u32be(0x14,sf), channels); + vgmstream->loop_start_sample = pcm16_bytes_to_samples(read_u32be(0x18,sf), channels); + vgmstream->loop_end_sample = pcm16_bytes_to_samples(read_u32be(0x1C,sf), channels); + + vgmstream->coding_type = coding_PCM16LE; + vgmstream->layout_type = layout_interleave; + vgmstream->interleave_block_size = 0x02; + + vgmstream->meta_type = meta_SNDP; + + if (!vgmstream_open_stream(vgmstream, sf, start_offset)) + goto fail; + return vgmstream; +fail: + close_vgmstream(vgmstream); + return NULL; +} diff --git a/src/vgmstream_init.c b/src/vgmstream_init.c index 5db7c3e8..0fe06334 100644 --- a/src/vgmstream_init.c +++ b/src/vgmstream_init.c @@ -204,7 +204,7 @@ init_vgmstream_t init_vgmstream_functions[] = { init_vgmstream_ngc_nst_dsp, init_vgmstream_baf, init_vgmstream_msf, - init_vgmstream_ps3_past, + init_vgmstream_sndp, init_vgmstream_sgxd, init_vgmstream_wii_ras, init_vgmstream_spm, diff --git a/src/vgmstream_types.h b/src/vgmstream_types.h index a896c0fc..6c5b51eb 100644 --- a/src/vgmstream_types.h +++ b/src/vgmstream_types.h @@ -486,7 +486,7 @@ typedef enum { meta_XVAG, /* Ratchet & Clank Future: Quest for Booty (PS3) */ meta_CPS, meta_MSF, - meta_PS3_PAST, /* Bakugan Battle Brawlers (PS3) */ + meta_SNDP, meta_SGXD, /* Sony: Folklore, Genji, Tokyo Jungle (PS3), Brave Story, Kurohyo (PSP) */ meta_WII_RAS, /* Donkey Kong Country Returns (Wii) */ meta_SPM,