680 |
if (!pVelocityTables) pVelocityTables = new VelocityTableMap; |
if (!pVelocityTables) pVelocityTables = new VelocityTableMap; |
681 |
|
|
682 |
RIFF::Chunk* _3ewa = _3ewl->GetSubChunk(CHUNK_ID_3EWA); |
RIFF::Chunk* _3ewa = _3ewl->GetSubChunk(CHUNK_ID_3EWA); |
683 |
_3ewa->ReadInt32(); // unknown, allways 0x0000008C ? |
_3ewa->ReadInt32(); // unknown, always 0x0000008C ? |
684 |
LFO3Frequency = (double) GIG_EXP_DECODE(_3ewa->ReadInt32()); |
LFO3Frequency = (double) GIG_EXP_DECODE(_3ewa->ReadInt32()); |
685 |
EG3Attack = (double) GIG_EXP_DECODE(_3ewa->ReadInt32()); |
EG3Attack = (double) GIG_EXP_DECODE(_3ewa->ReadInt32()); |
686 |
_3ewa->ReadInt16(); // unknown |
_3ewa->ReadInt16(); // unknown |
774 |
else if (pitchTrackDimensionBypass & 0x20) DimensionBypass = dim_bypass_ctrl_95; |
else if (pitchTrackDimensionBypass & 0x20) DimensionBypass = dim_bypass_ctrl_95; |
775 |
else DimensionBypass = dim_bypass_ctrl_none; |
else DimensionBypass = dim_bypass_ctrl_none; |
776 |
uint8_t pan = _3ewa->ReadUint8(); |
uint8_t pan = _3ewa->ReadUint8(); |
777 |
Pan = (pan < 64) ? pan : (-1) * (int8_t)pan - 63; |
Pan = (pan < 64) ? pan : -((int)pan - 63); // signed 7 bit -> signed 8 bit |
778 |
SelfMask = _3ewa->ReadInt8() & 0x01; |
SelfMask = _3ewa->ReadInt8() & 0x01; |
779 |
_3ewa->ReadInt8(); // unknown |
_3ewa->ReadInt8(); // unknown |
780 |
uint8_t lfo3ctrl = _3ewa->ReadUint8(); |
uint8_t lfo3ctrl = _3ewa->ReadUint8(); |
1029 |
for (int i = 0; i < 32; i++) { |
for (int i = 0; i < 32; i++) { |
1030 |
pDimensionRegions[i] = NULL; |
pDimensionRegions[i] = NULL; |
1031 |
} |
} |
1032 |
|
Layers = 1; |
1033 |
|
|
1034 |
// Actual Loading |
// Actual Loading |
1035 |
|
|
1054 |
pDimensionDefinitions[i].bits = bits; |
pDimensionDefinitions[i].bits = bits; |
1055 |
pDimensionDefinitions[i].zones = 0x01 << bits; // = pow(2,bits) |
pDimensionDefinitions[i].zones = 0x01 << bits; // = pow(2,bits) |
1056 |
pDimensionDefinitions[i].split_type = (dimension == dimension_layer || |
pDimensionDefinitions[i].split_type = (dimension == dimension_layer || |
1057 |
dimension == dimension_samplechannel) ? split_type_bit |
dimension == dimension_samplechannel || |
1058 |
: split_type_normal; |
dimension == dimension_releasetrigger) ? split_type_bit |
1059 |
|
: split_type_normal; |
1060 |
pDimensionDefinitions[i].ranges = NULL; // it's not possible to check velocity dimensions for custom defined ranges at this point |
pDimensionDefinitions[i].ranges = NULL; // it's not possible to check velocity dimensions for custom defined ranges at this point |
1061 |
pDimensionDefinitions[i].zone_size = |
pDimensionDefinitions[i].zone_size = |
1062 |
(pDimensionDefinitions[i].split_type == split_type_normal) ? 128 / pDimensionDefinitions[i].zones |
(pDimensionDefinitions[i].split_type == split_type_normal) ? 128 / pDimensionDefinitions[i].zones |
1063 |
: 0; |
: 0; |
1064 |
Dimensions++; |
Dimensions++; |
1065 |
|
|
1066 |
|
// if this is a layer dimension, remember the amount of layers |
1067 |
|
if (dimension == dimension_layer) Layers = pDimensionDefinitions[i].zones; |
1068 |
} |
} |
1069 |
_3lnk->SetPos(6, RIFF::stream_curpos); // jump forward to next dimension definition |
_3lnk->SetPos(6, RIFF::stream_curpos); // jump forward to next dimension definition |
1070 |
} |
} |
1157 |
* @see Dimensions |
* @see Dimensions |
1158 |
*/ |
*/ |
1159 |
DimensionRegion* Region::GetDimensionRegionByValue(uint Dim4Val, uint Dim3Val, uint Dim2Val, uint Dim1Val, uint Dim0Val) { |
DimensionRegion* Region::GetDimensionRegionByValue(uint Dim4Val, uint Dim3Val, uint Dim2Val, uint Dim1Val, uint Dim0Val) { |
1160 |
unsigned int bits[5] = {Dim0Val,Dim1Val,Dim2Val,Dim3Val,Dim4Val}; |
uint8_t bits[5] = {Dim0Val,Dim1Val,Dim2Val,Dim3Val,Dim4Val}; |
1161 |
for (uint i = 0; i < Dimensions; i++) { |
for (uint i = 0; i < Dimensions; i++) { |
1162 |
switch (pDimensionDefinitions[i].split_type) { |
switch (pDimensionDefinitions[i].split_type) { |
1163 |
case split_type_normal: |
case split_type_normal: |
1166 |
case split_type_customvelocity: |
case split_type_customvelocity: |
1167 |
bits[i] = VelocityTable[bits[i]]; |
bits[i] = VelocityTable[bits[i]]; |
1168 |
break; |
break; |
1169 |
// else the value is already the sought dimension bit number |
case split_type_bit: // the value is already the sought dimension bit number |
1170 |
|
const uint8_t limiter_mask = (0xff << pDimensionDefinitions[i].bits) ^ 0xff; |
1171 |
|
bits[i] = bits[i] & limiter_mask; // just make sure the value don't uses more bits than allowed |
1172 |
|
break; |
1173 |
} |
} |
1174 |
} |
} |
1175 |
return GetDimensionRegionByBit(bits[4],bits[3],bits[2],bits[1],bits[0]); |
return GetDimensionRegionByBit(bits[4],bits[3],bits[2],bits[1],bits[0]); |