From b8102c7a7e7715b89df92afcd22728a6843a3721 Mon Sep 17 00:00:00 2001 From: manakoAT Date: Sun, 23 Nov 2008 11:49:58 +0000 Subject: [PATCH] zwdsp added git-svn-id: https://vgmstream.svn.sourceforge.net/svnroot/vgmstream@484 51a99a44-fe44-0410-b1ba-c3e57ba2b86b --- src/Makefile | 3 +- src/libvgmstream.vcproj | 4 ++ src/meta/Makefile.unix.am | 1 + src/meta/meta.h | 2 + src/meta/zwdsp.c | 86 +++++++++++++++++++++++++++++++++++++++ src/vgmstream.c | 4 ++ src/vgmstream.h | 1 + winamp/in_vgmstream.c | 1 + 8 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 src/meta/zwdsp.c diff --git a/src/Makefile b/src/Makefile index 5751b848..b9c5cf69 100644 --- a/src/Makefile +++ b/src/Makefile @@ -147,7 +147,8 @@ META_OBJS=meta/adx_header.o \ meta/ps2_ass.o \ meta/ngc_waa_wac_wad_wam.o \ meta/ps2_seg.o \ - meta/str_asr.o + meta/str_asr.o \ + meta/zwdsp.o OBJECTS=vgmstream.o streamfile.o util.o $(CODING_OBJS) $(LAYOUT_OBJS) $(META_OBJS) diff --git a/src/libvgmstream.vcproj b/src/libvgmstream.vcproj index 4e1f2fbb..c94f85df 100644 --- a/src/libvgmstream.vcproj +++ b/src/libvgmstream.vcproj @@ -661,6 +661,10 @@ RelativePath=".\meta\xwb.c" > + + get_name(streamFile,filename,sizeof(filename)); + if (strcasecmp("zwdsp",filename_extension(filename))) goto fail; + + /* check header */ + if (read_32bitBE(0x00,streamFile) != 0x00000000) /* 0x0 */ + goto fail; + + /* Retrieve the loop flag, some files have 0x0 and some 0x02 as "no loop" */ + + switch (read_32bitBE(0x10, streamFile)) { + case 0: + case 2: + loop_flag = 0; + break; + } + + channel_count = read_32bitBE(0x1C,streamFile); + + /* build the VGMSTREAM */ + vgmstream = allocate_vgmstream(channel_count,loop_flag); + if (!vgmstream) goto fail; + + /* fill in the vital statistics */ + start_offset = 0x90; + vgmstream->channels = channel_count; + vgmstream->sample_rate = read_32bitBE(0x08,streamFile); + vgmstream->coding_type = coding_NGC_DSP; + vgmstream->num_samples = read_32bitBE(0x18,streamFile)*14/8/channel_count; + if (loop_flag) { + vgmstream->loop_start_sample = read_32bitBE(0x10,streamFile)*14/8/channel_count; + vgmstream->loop_end_sample = read_32bitBE(0x14,streamFile)*14/8/channel_count; + } + + + vgmstream->layout_type = layout_none; + vgmstream->meta_type = meta_ZWDSP; + + + 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(0x60+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;ich[i].streamfile = file; + + vgmstream->ch[i].channel_start_offset= + vgmstream->ch[i].offset=start_offset+ + ((get_streamfile_size(streamFile)-start_offset)/2)*i; + + } + } + + return vgmstream; + + /* clean up anything we may have opened */ +fail: + if (vgmstream) close_vgmstream(vgmstream); + return NULL; +} diff --git a/src/vgmstream.c b/src/vgmstream.c index 301936b3..56fa7b1b 100644 --- a/src/vgmstream.c +++ b/src/vgmstream.c @@ -157,6 +157,7 @@ VGMSTREAM * (*init_vgmstream_fcns[])(STREAMFILE *streamFile) = { init_vgmstream_ps2_seg, init_vgmstream_nds_strm_ffta2, init_vgmstream_str_asr, + init_vgmstream_zwdsp, }; #define INIT_VGMSTREAM_FCNS (sizeof(init_vgmstream_fcns)/sizeof(init_vgmstream_fcns[0])) @@ -1815,6 +1816,9 @@ void describe_vgmstream(VGMSTREAM * vgmstream, char * desc, int length) { break; case meta_STR_ASR: snprintf(temp,TEMPSIZE,"Donkey Kong Jet Race KNON/WII Header"); + break; + case meta_ZWDSP: + snprintf(temp,TEMPSIZE,"Zack and Wiki custom DSP Header"); break; default: snprintf(temp,TEMPSIZE,"THEY SHOULD HAVE SENT A POET"); diff --git a/src/vgmstream.h b/src/vgmstream.h index 8eb2b0b3..c6d46349 100644 --- a/src/vgmstream.h +++ b/src/vgmstream.h @@ -266,6 +266,7 @@ typedef enum { meta_PS2_SEG, /* Eragon */ meta_NDS_STRM_FFTA2, /* Final Fantasy Tactics A2 */ meta_STR_ASR, /* Donkey Kong Jet Race */ + meta_ZWDSP, /* Zack and Wiki */ meta_XBOX_WAVM, /* XBOX WAVM File */ meta_XBOX_RIFF, /* XBOX RIFF/WAVE File */ diff --git a/winamp/in_vgmstream.c b/winamp/in_vgmstream.c index a1131ea7..cf07a42c 100644 --- a/winamp/in_vgmstream.c +++ b/winamp/in_vgmstream.c @@ -201,6 +201,7 @@ char * extension_list[] = { "wam\0WAM Audio File (*.WAM)\0", "seg\0SEG Audio File (*.SEG)\0", "asr\0ASR Audio File (*.ASR)\0", + "zwdsp\0ZWDSP Audio File (*.ZWDSP)\0", }; void about(HWND hwndParent) {