public void Set(int size, int channels) { RuintList *list; VoidPtr offset = _entries.Address; int dataOffset = 0x60 + (channels * 8); _tag = Tag; _size = size; //Set entry offsets _entries.Entries[0] = 0x18; _entries.Entries[1] = 0x4C; _entries.Entries[2] = 0x5C; //Audio info //HEADPart1* part1 = Part1; //Set single channel info list = Part2; list->_numEntries._data = 1; //Number is little-endian list->Entries[0] = 0x58; *(AudioFormatInfo *)list->Get(offset, 0) = new AudioFormatInfo(2, 0, 1, 0); //Set adpcm infos list = Part3; list->_numEntries._data = channels; //little-endian for (int i = 0; i < channels; i++) { //Set initial pointer list->Entries[i] = dataOffset; //Set embedded pointer *(ruint *)(offset + dataOffset) = dataOffset + 8; dataOffset += 8; //Set info //*(ADPCMInfo*)(offset + dataOffset) = info[i]; dataOffset += ADPCMInfo.Size; //Set padding //*(short*)(offset + dataOffset) = 0; //dataOffset += 2; } //Fill remaining int *p = (int *)(offset + dataOffset); for (dataOffset += 8; dataOffset < size; dataOffset += 4) { *p++ = 0; } }
public void Set(int length) { _tag = Tag; _length = length; _pad1 = _pad2 = 0; }