fixed coef reading and added a third coef layout in .emff

git-svn-id: https://vgmstream.svn.sourceforge.net/svnroot/vgmstream@537 51a99a44-fe44-0410-b1ba-c3e57ba2b86b
This commit is contained in:
manakoAT 2008-12-24 10:03:22 +00:00
parent 25ac921eba
commit 39f816e362
2 changed files with 40 additions and 44 deletions

View File

@ -183,46 +183,46 @@ static struct {
/* Clover Studio (GOD HAND, Okami) */
/* I'm pretty sure this is right, based on a decrypted version of some GOD HAND tracks. */
/* Also it is the 2nd result from guessadx */
{.start=0x49e1,.mult=0x4a57,.add=0x553d},
{0x49e1,0x4a57,0x553d},
/* Grasshopper Manufacture 0 (Blood+) */
/* this is estimated */
{.start=0x5f5d,.mult=0x58bd,.add=0x55ed},
{0x5f5d,0x58bd,0x55ed},
/* Grasshopper Manufacture 1 (Killer7) */
/* this is estimated */
{.start=0x50fb,.mult=0x5803,.add=0x5701},
{0x50fb,0x5803,0x5701},
/* Grasshopper Manufacture 2 (Samurai Champloo) */
/* confirmed unique with guessadx */
{.start=0x4f3f,.mult=0x472f,.add=0x562f},
{0x4f3f,0x472f,0x562f},
/* Moss Ltd (Raiden III) */
/* this is estimated */
{.start=0x66f5,.mult=0x58bd,.add=0x4459},
{0x66f5,0x58bd,0x4459},
/* Sonic Team 0 (Phantasy Star Universe) */
/* this is estimated */
{.start=0x5deb,.mult=0x5f27,.add=0x673f},
{0x5deb,0x5f27,0x673f},
/* G.dev (Senko no Ronde) */
/* this is estimated */
{.start=0x46d3,.mult=0x5ced,.add=0x474d},
{0x46d3,0x5ced,0x474d},
/* Sonic Team 1 (NiGHTS: Journey of Dreams) */
/* this seems to be dead on, but still estimated */
{.start=0x440b,.mult=0x6539,.add=0x5723},
{0x440b,0x6539,0x5723},
/* from guessadx (unique?), unknown source */
{.start=0x586d,.mult=0x5d65,.add=0x63eb},
{0x586d,0x5d65,0x63eb},
/* Navel (Shuffle! On the Stage) */
/* 2nd key from guessadx */
{.start=0x4969,.mult=0x5deb,.add=0x467f},
{0x4969,0x5deb,0x467f},
/* Success (Aoishiro) */
/* 1st key from guessadx */
{.start=0x4d65,.mult=0x5eb7,.add=0x5dfd},
{0x4d65,0x5eb7,0x5dfd},
};
static const int key_count = sizeof(keys)/sizeof(keys[0]);

View File

@ -3,7 +3,7 @@
#include "../util.h"
/* EMFF - Eidos Music File Format (PS2),
found in Tomb Raider Legend/Anniversary, Legacy of Kain - Defiance, possibly more... */
Legacy of Kain - Defiance, possibly more... */
VGMSTREAM * init_vgmstream_emff_ps2(STREAMFILE *streamFile) {
VGMSTREAM * vgmstream = NULL;
char filename[260];
@ -76,7 +76,7 @@ fail:
/* EMFF - Eidos Music File Format (NGC/WII),
found in Tomb Raider Legend/Anniversary, Legacy of Kain - Defiance, possibly more... */
found in Tomb Raider Legend/Anniversary/Underworld, possibly more... */
VGMSTREAM * init_vgmstream_emff_ngc(STREAMFILE *streamFile) {
VGMSTREAM * vgmstream = NULL;
char filename[260];
@ -86,8 +86,7 @@ VGMSTREAM * init_vgmstream_emff_ngc(STREAMFILE *streamFile) {
int frequency;
int i;
int j;
off_t coef_table1[8] = {0xC8,0xF6,0x124,0x152,0x180,0x1AE,0x1DC,0x20A};
off_t coef_table2[8] = {0x2D0,0x2FE,0x32C,0x35A,0x388,0x3B6,0x3E4,0x412};
off_t coef_table[8];
/* check extension, case insensitive */
streamFile->get_name(streamFile,filename,sizeof(filename));
@ -121,37 +120,34 @@ VGMSTREAM * init_vgmstream_emff_ngc(STREAMFILE *streamFile) {
vgmstream->coding_type = coding_NGC_DSP;
/* Retrieving coefs and loops, depending on the file layout... */
if (read_32bitBE(0xC8,streamFile) == 0x0 &&
read_32bitBE(0xCC,streamFile) == 0x0 &&
read_32bitBE(0xD0,streamFile) == 0x0 &&
read_32bitBE(0xD4,streamFile) == 0x0 &&
read_32bitBE(0xD8,streamFile) == 0x0 &&
read_32bitBE(0xDC,streamFile) == 0x0 &&
read_32bitBE(0xE0,streamFile) == 0x0 &&
read_32bitBE(0xE4,streamFile) == 0x0) {
for (j=0;j<vgmstream->channels;j++) {
for (i=0;i<16;i++) {
vgmstream->ch[j].adpcm_coef[i] = read_16bitBE(coef_table2[j]+i*2,streamFile);
}
/* Found in Tomb Raider - Legend for GameCube */
if (read_32bitBE(0xC8,streamFile) > 0x0) {
off_t coef_table[8] = {0xC8,0xF6,0x124,0x152,0x180,0x1AE,0x1DC,0x20A};
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);
}
}
} else if (read_32bitBE(0x2D0,streamFile) == 0x0 &&
read_32bitBE(0x2D4,streamFile) == 0x0 &&
read_32bitBE(0x2D8,streamFile) == 0x0 &&
read_32bitBE(0x2DC,streamFile) == 0x0 &&
read_32bitBE(0x2E0,streamFile) == 0x0 &&
read_32bitBE(0x2E4,streamFile) == 0x0 &&
read_32bitBE(0x2E8,streamFile) == 0x0 &&
read_32bitBE(0x2EC,streamFile) == 0x0) {
for (j=0;j<vgmstream->channels;j++) {
for (i=0;i<16;i++) {
vgmstream->ch[j].adpcm_coef[i] = read_16bitBE(coef_table1[j]+i*2,streamFile);
}
}
} else {
goto fail;
/* Found in Tomb Raider - Anniversary for WII */
} else if (read_32bitBE(0xCC,streamFile) > 0x0) {
off_t coef_table[8] = {0xCC,0xFA,0x128,0x156,0x184,0x1B2,0x1E0,0x20E};
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);
}
}
/* Found in Tomb Raider - Underworld for WII */
} else if (read_32bitBE(0x2D0,streamFile) > 0x0) {
off_t coef_table[8] = {0x2D0,0x2FE,0x32C,0x35A,0x388,0x3B6,0x3E4,0x412};
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);
}
}
} else {
goto fail;
}
vgmstream->layout_type = layout_emff_ngc_blocked;
vgmstream->interleave_block_size = 0x10;