void eTfEffectDistortionProcess(eTfEffect *fx, eTfSynth &synth, eTfInstrument &instr, eF32 **signal, eU32 len) { eASSERT_ALIGNED16(fx); eTfEffectDistortion *dist = static_cast<eTfEffectDistortion *>(fx); eF32 amount = 1.0f - instr.params[TF_DISTORT_AMOUNT]; if (amount != dist->generatedAmount) { dist->generatedAmount = amount; for (eU32 base = 0; base<32768; base++) dist->powTable[base] = ePow(base/32768.f, amount); } for(eU32 i=0;i<2;i++) { eF32 *in = signal[i]; eU32 len2 = len; while(len2--) { eF32 val = *in; eF32 sign = eSign(val); eF32 abs = eAbs(val); if (abs > 1.0f) abs = 1.0f; eU32 offs = eFtoL(abs * 32767.0f); *in++ = sign * dist->powTable[offs]; } } }
eRoad::eRoad(pugi::xml_node& node) { //GlobalID this->GlobalID = node.child("GlobalID").text().as_int(); //LateralOffsetBegin this->LateralOffsetBegin = node.child("LateralOffsetBegin").text().as_double(); //LateralOffsetEnd this->LateralOffsetEnd = node.child("LateralOffsetEnd").text().as_double(); //Length this->Length = node.child("Length").text().as_double(); //NextConnectedRoadID this->NextConnectedRoadID = node.child("NextConnectedRoadID").text().as_int(); //NextConnectedSwitchID this->NextConnectedSwitchID = node.child("NextConnectedSwitchID").text().as_int(); //PrevConnectedRoadID this->PrevConnectedRoadID = node.child("PrevConnectedRoadID").text().as_int(); //PrevConnectedSwitchID this->PrevConnectedSwitchID = node.child("PrevConnectedSwitchID").text().as_int(); //BeginCoordinate this->BeginCoordinate = node.child("BeginCoordinate").text().as_double(); //EndCoordinate this->EndCoordinate = node.child("EndCoordinate").text().as_double(); //HasCatenaryLine this->HasCatenaryLine = node.child("HasCatenaryLine").text().as_bool(); //CatenaryVoltage this->CatenaryVoltage = node.child("CatenaryVoltage").text().as_double(); //IsMainLine this->IsMainLine = node.child("IsMainLine").text().as_bool(); //Balast this->Balast = node.child("Balast").text().as_string(); //Travers this->Travers = node.child("Travers").text().as_string(); //VerticalProfile for (pugi::xml_node VerticalProfileNode = node.child("VerticalProfile"); VerticalProfileNode; VerticalProfileNode = VerticalProfileNode.next_sibling( "VerticalProfile")) { eVerticalProfile everticalprofile = eVerticalProfile( VerticalProfileNode); this->VerticalProfile.push_back(everticalprofile); } //Section for (pugi::xml_node SectionNode = node.child("Section"); SectionNode; SectionNode = SectionNode.next_sibling("Section")) { eSection esection = eSection(SectionNode); this->Section.push_back(esection); } //Sign for (pugi::xml_node SignNode = node.child("Sign"); SignNode; SignNode = SignNode.next_sibling("Sign")) { eSign esign = eSign(SignNode); this->Sign.push_back(esign); } //Signal for (pugi::xml_node SignalNode = node.child("Signal"); SignalNode; SignalNode = SignalNode.next_sibling("Signal")) { eSignal esignal = eSignal(SignalNode); this->Signal.push_back(esignal); } //Magnet for (pugi::xml_node MagnetNode = node.child("Magnet"); MagnetNode; MagnetNode = MagnetNode.next_sibling("Magnet")) { eMagnet emagnet = eMagnet(MagnetNode); this->Magnet.push_back(emagnet); } //Balise for (pugi::xml_node BaliseNode = node.child("Balise"); BaliseNode; BaliseNode = BaliseNode.next_sibling("Balise")) { eBalise ebalise = eBalise(BaliseNode); this->Balise.push_back(ebalise); } //Block for (pugi::xml_node BlockNode = node.child("Block"); BlockNode; BlockNode = BlockNode.next_sibling("Block")) { eBlock eblock = eBlock(BlockNode); this->Block.push_back(eblock); } //LevelCrossing for (pugi::xml_node LevelCrossingNode = node.child("LevelCrossing"); LevelCrossingNode; LevelCrossingNode = LevelCrossingNode.next_sibling( "LevelCrossing")) { eLevelCrossing elevelcrossing = eLevelCrossing(LevelCrossingNode); this->LevelCrossing.push_back(elevelcrossing); } //PhysicalBuilding for (pugi::xml_node PhysicalBuildingNode = node.child("PhysicalBuilding"); PhysicalBuildingNode; PhysicalBuildingNode = PhysicalBuildingNode.next_sibling( "PhysicalBuilding")) { ePhysicalBuilding ephysicalbuilding = ePhysicalBuilding( PhysicalBuildingNode); this->PhysicalBuilding.push_back(ephysicalbuilding); } }