// Translate instrument properties between two given formats. void ModInstrument::Convert(MODTYPE fromType, MODTYPE toType) //----------------------------------------------------------- { MPT_UNREFERENCED_PARAMETER(fromType); if(toType & MOD_TYPE_XM) { ResetNoteMap(); PitchEnv.dwFlags.reset(ENV_ENABLED | ENV_FILTER); dwFlags.reset(INS_SETPANNING); SetCutoff(GetCutoff(), false); SetResonance(GetResonance(), false); nFilterMode = FLTMODE_UNCHANGED; nCutSwing = nPanSwing = nResSwing = nVolSwing = 0; nPPC = NOTE_MIDDLEC - 1; nPPS = 0; nNNA = NNA_NOTECUT; nDCT = DCT_NONE; nDNA = DNA_NOTECUT; if(nMidiChannel == MidiMappedChannel) { nMidiChannel = 1; } // FT2 only has signed Pitch Wheel Depth, and it's limited to 0...36 (in the GUI, at least. As you would expect it from FT2, this value is actually not sanitized on load). midiPWD = static_cast<int8>(abs(midiPWD)); Limit(midiPWD, int8(0), int8(36)); nGlobalVol = 64; nPan = 128; LimitMax(nFadeOut, 32767u); } VolEnv.Convert(fromType, toType); PanEnv.Convert(fromType, toType); PitchEnv.Convert(fromType, toType); // Limit fadeout length for IT / MPT if(toType & (MOD_TYPE_IT | MOD_TYPE_MPT)) { LimitMax(nFadeOut, 8192u); } // MPT-specific features - remove instrument tunings, Pitch/Tempo Lock, cutoff / resonance swing and filter mode for other formats if(!(toType & MOD_TYPE_MPT)) { SetTuning(nullptr); wPitchToTempoLock = 0; nCutSwing = nResSwing = 0; nFilterMode = FLTMODE_UNCHANGED; } }
ModInstrument::ModInstrument(SAMPLEINDEX sample) //---------------------------------------------- { nFadeOut = 256; dwFlags.reset(); nGlobalVol = 64; nPan = 32 * 4; nNNA = NNA_NOTECUT; nDCT = DCT_NONE; nDNA = DNA_NOTECUT; nPanSwing = 0; nVolSwing = 0; SetCutoff(0, false); SetResonance(0, false); wMidiBank = 0; nMidiProgram = 0; nMidiChannel = 0; nMidiDrumKey = 0; midiPWD = 2; nPPC = NOTE_MIDDLEC - 1; nPPS = 0; nMixPlug = 0; nVolRampUp = 0; nResampling = SRCMODE_DEFAULT; nCutSwing = 0; nResSwing = 0; nFilterMode = FLTMODE_UNCHANGED; wPitchToTempoLock = 0; nPluginVelocityHandling = PLUGIN_VELOCITYHANDLING_CHANNEL; nPluginVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE; pTuning = CSoundFile::GetDefaultTuning(); AssignSample(sample); ResetNoteMap(); MemsetZero(name); MemsetZero(filename); }
// Translate instrument properties between two given formats. void ModInstrument::Convert(MODTYPE fromType, MODTYPE toType) { MPT_UNREFERENCED_PARAMETER(fromType); if(toType & MOD_TYPE_XM) { ResetNoteMap(); PitchEnv.dwFlags.reset(ENV_ENABLED | ENV_FILTER); dwFlags.reset(INS_SETPANNING); SetCutoff(GetCutoff(), false); SetResonance(GetResonance(), false); nFilterMode = FLTMODE_UNCHANGED; nCutSwing = nPanSwing = nResSwing = nVolSwing = 0; nPPC = NOTE_MIDDLEC - 1; nPPS = 0; nNNA = NNA_NOTECUT; nDCT = DCT_NONE; nDNA = DNA_NOTECUT; if(nMidiChannel == MidiMappedChannel) { nMidiChannel = 1; } // FT2 only has unsigned Pitch Wheel Depth, and it's limited to 0...36 (in the GUI, at least. As you would expect it from FT2, this value is actually not sanitized on load). midiPWD = static_cast<int8>(mpt::abs(midiPWD)); Limit(midiPWD, int8(0), int8(36)); nGlobalVol = 64; nPan = 128; LimitMax(nFadeOut, 32767u); } VolEnv.Convert(fromType, toType); PanEnv.Convert(fromType, toType); PitchEnv.Convert(fromType, toType); if(fromType == MOD_TYPE_XM && (toType & (MOD_TYPE_IT | MOD_TYPE_MPT))) { if(!VolEnv.dwFlags[ENV_ENABLED]) { // Note-Off with no envelope cuts the note immediately in XM VolEnv.resize(2); VolEnv[0].tick = 0; VolEnv[0].value = ENVELOPE_MAX; VolEnv[1].tick = 1; VolEnv[1].value = ENVELOPE_MIN; VolEnv.dwFlags.set(ENV_ENABLED | ENV_SUSTAIN); VolEnv.dwFlags.reset(ENV_LOOP); VolEnv.nSustainStart = VolEnv.nSustainEnd = 0; } } // Limit fadeout length for IT if(toType & MOD_TYPE_IT) { LimitMax(nFadeOut, 8192u); } // MPT-specific features - remove instrument tunings, Pitch/Tempo Lock, cutoff / resonance swing and filter mode for other formats if(!(toType & MOD_TYPE_MPT)) { SetTuning(nullptr); pitchToTempoLock.Set(0); nCutSwing = nResSwing = 0; nFilterMode = FLTMODE_UNCHANGED; nVolRampUp = 0; } }
void PeaksOverThresholdAttributes::SetFromNode(DataNode *parentNode) { if(parentNode == 0) return; DataNode *searchNode = parentNode->GetNode("PeaksOverThresholdAttributes"); if(searchNode == 0) return; DataNode *node; if((node = searchNode->GetNode("dataYearBegin")) != 0) SetDataYearBegin(node->AsInt()); if((node = searchNode->GetNode("dataAnalysisYearRangeEnabled")) != 0) SetDataAnalysisYearRangeEnabled(node->AsBool()); if((node = searchNode->GetNode("dataAnalysisYearRange")) != 0) SetDataAnalysisYearRange(node->AsIntArray()); if((node = searchNode->GetNode("aggregation")) != 0) { // Allow enums to be int or string in the config file if(node->GetNodeType() == INT_NODE) { int ival = node->AsInt(); if(ival >= 0 && ival < 3) SetAggregation(AggregationType(ival)); } else if(node->GetNodeType() == STRING_NODE) { AggregationType value; if(AggregationType_FromString(node->AsString(), value)) SetAggregation(value); } } if((node = searchNode->GetNode("annualPercentile")) != 0) SetAnnualPercentile(node->AsDouble()); if((node = searchNode->GetNode("seasonalPercentile")) != 0) SetSeasonalPercentile(node->AsDoubleArray()); if((node = searchNode->GetNode("monthlyPercentile")) != 0) SetMonthlyPercentile(node->AsDoubleArray()); if((node = searchNode->GetNode("displaySeason")) != 0) { // Allow enums to be int or string in the config file if(node->GetNodeType() == INT_NODE) { int ival = node->AsInt(); if(ival >= 0 && ival < 4) SetDisplaySeason(SeasonType(ival)); } else if(node->GetNodeType() == STRING_NODE) { SeasonType value; if(SeasonType_FromString(node->AsString(), value)) SetDisplaySeason(value); } } if((node = searchNode->GetNode("displayMonth")) != 0) { // Allow enums to be int or string in the config file if(node->GetNodeType() == INT_NODE) { int ival = node->AsInt(); if(ival >= 0 && ival < 12) SetDisplayMonth(MonthType(ival)); } else if(node->GetNodeType() == STRING_NODE) { MonthType value; if(MonthType_FromString(node->AsString(), value)) SetDisplayMonth(value); } } if((node = searchNode->GetNode("cutoff")) != 0) SetCutoff(node->AsFloat()); if((node = searchNode->GetNode("computeParamValues")) != 0) SetComputeParamValues(node->AsBool()); if((node = searchNode->GetNode("computeCovariates")) != 0) SetComputeCovariates(node->AsBool()); if((node = searchNode->GetNode("covariateReturnYears")) != 0) SetCovariateReturnYears(node->AsIntVector()); if((node = searchNode->GetNode("covariateModelLocation")) != 0) SetCovariateModelLocation(node->AsBool()); if((node = searchNode->GetNode("covariateModelShape")) != 0) SetCovariateModelShape(node->AsBool()); if((node = searchNode->GetNode("covariateModelScale")) != 0) SetCovariateModelScale(node->AsBool()); if((node = searchNode->GetNode("computeRVDifferences")) != 0) SetComputeRVDifferences(node->AsBool()); if((node = searchNode->GetNode("rvDifferences")) != 0) SetRvDifferences(node->AsIntArray()); if((node = searchNode->GetNode("dataScaling")) != 0) SetDataScaling(node->AsDouble()); if((node = searchNode->GetNode("dumpData")) != 0) SetDumpData(node->AsBool()); }