//chunk RawData into PtrTable, WaveTable and Sfx private void ChunkRawData(int id) { //initialized to 16 to avoid first soundbank set to 0.. int sizeOfPtrTable = 0; //searching waveTable (end of PtrTable) and write ptrTable rawData sizeOfPtrTable = CGeneric.SearchBytesInArray(rawData, CGeneric.patternN64WaveTable, 0, 16, 16); ptrTable = CGeneric.GiveMeArray(rawData, 0, sizeOfPtrTable); //waveTable = CGeneric.GiveMeArray(rawData,ptrTable.Length,rawData.Length - ptrTable.Length); int sizeSfx = 0; int sizeMidi = 0; //searching midi and sfx switch (id) { case 0: sizeMidi = DecomposeSong(); break; //there is a midi song and sfx, so with a unknow wavetable length, we need to determine sfx and midi length.. case 1: var startMidi = CGeneric.SearchBytesInArray(rawData, CGeneric.patternMidiSoundBank1, 0, 0, 16); sizeMidi = RomLangAddress.GetSizeMidiSoundBank1(); sizeSfx = rawData.Length - (startMidi + sizeMidi); break; //there is song but no sfx case 2: sizeMidi = RomLangAddress.GetSizeMidiSoundBank2(); break; //standard computed sfx size and no midi file (dirty check, but seems working pretty well). default: int tmpSfxEqualValue; int tmpSfxEqualValue2; int tmpSfxEqualValue3; int tmpSfxNull; for (int i = ptrTable.Length; i < rawData.Length - 16; i += 16) { //quick test, for avoiding cpu consuption tmpSfxNull = CGeneric.ConvertByteArrayToInt(CGeneric.GiveMeArray(rawData, i + 12, 4)); if (tmpSfxNull == 0) { tmpSfxEqualValue = CGeneric.ConvertByteArrayToInt(CGeneric.GiveMeArray(rawData, i, 4)); tmpSfxEqualValue2 = CGeneric.ConvertByteArrayToInt(CGeneric.GiveMeArray(rawData, i + 4, 4)); tmpSfxEqualValue3 = CGeneric.ConvertByteArrayToInt(CGeneric.GiveMeArray(rawData, i + 8, 4)); var tmpSfxEqualValue4 = tmpSfxEqualValue3++; if (tmpSfxEqualValue != 0 && tmpSfxEqualValue == tmpSfxEqualValue2 && (tmpSfxEqualValue2 == tmpSfxEqualValue4 || tmpSfxEqualValue2 == tmpSfxEqualValue3)) { sizeSfx = rawData.Length - i; break; } } } break; } //store date with size found previously waveTable = CGeneric.GiveMeArray(rawData, ptrTable.Length, rawData.Length - (ptrTable.Length + sizeMidi + sizeSfx)); midi = CGeneric.GiveMeArray(rawData, ptrTable.Length + waveTable.Length, sizeMidi); sfx = CGeneric.GiveMeArray(rawData, ptrTable.Length + waveTable.Length + sizeMidi, sizeSfx); }