From: <sag...@us...> - 2011-09-05 01:07:48
|
Revision: 1022 http://modplug.svn.sourceforge.net/modplug/?rev=1022&view=rev Author: saga-games Date: 2011-09-05 01:07:40 +0000 (Mon, 05 Sep 2011) Log Message: ----------- [Ref] MODINSTRUMENT has a constructor now, so no memsetting / etc. is necessary anymore. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/soundlib/Dlsbank.cpp trunk/OpenMPT/soundlib/Fastmix.cpp trunk/OpenMPT/soundlib/LOAD_DBM.CPP trunk/OpenMPT/soundlib/Load_ams.cpp trunk/OpenMPT/soundlib/Load_imf.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_mdl.cpp trunk/OpenMPT/soundlib/Load_mid.cpp trunk/OpenMPT/soundlib/Load_mt2.cpp trunk/OpenMPT/soundlib/Load_xm.cpp trunk/OpenMPT/soundlib/Sampleio.cpp trunk/OpenMPT/soundlib/Snd_defs.h trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp trunk/OpenMPT/soundlib/load_j2b.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -111,7 +111,7 @@ CSoundFile *pSndFile = m_pModDoc->GetSoundFile(); if(m_nInstrument > 0 && pSndFile && m_nInstrument <= pSndFile->GetNumInstruments() && pSndFile->Instruments[m_nInstrument] == nullptr) { - pSndFile->Instruments[m_nInstrument] = new MODINSTRUMENT; + pSndFile->Instruments[m_nInstrument] = new MODINSTRUMENT(); m_pModDoc->InitializeInstrument(pSndFile->Instruments[m_nInstrument]); } @@ -1444,16 +1444,14 @@ if (!pIns->name[0]) { - szName[31] = 0; - memset(pIns->name, 0, 32); + szName[m_pSndFile->GetModSpecifications().instrNameLengthMax - 1] = 0; strcpy(pIns->name, szName); } if (!pIns->filename[0]) { strcat(szName, szExt); - szName[11] = 0; + szName[m_pSndFile->GetModSpecifications().instrFilenameLengthMax - 1] = 0; strcpy(pIns->filename, szName); - pIns->filename[11] = 0; } SetCurrentInstrument(m_nInstrument); if (m_pModDoc) Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -237,7 +237,7 @@ ClearLog(); } - if ((m_SndFile.m_nType == MOD_TYPE_NONE) || (!m_SndFile.m_nChannels)) return FALSE; + if ((m_SndFile.m_nType == MOD_TYPE_NONE) || (!m_SndFile.GetNumChannels())) return FALSE; // Midi Import if (m_SndFile.m_nType == MOD_TYPE_MID) { @@ -516,9 +516,9 @@ { if(m_SndFile.m_szInstrumentPath[i][0] != '\0') { - int size = strlen(m_SndFile.m_szInstrumentPath[i]); - bool iti = _stricmp(&m_SndFile.m_szInstrumentPath[i][size-3],"iti") == 0; - bool xi = _stricmp(&m_SndFile.m_szInstrumentPath[i][size-2],"xi") == 0; + const size_t len = strlen(m_SndFile.m_szInstrumentPath[i]); + const bool iti = _stricmp(&m_SndFile.m_szInstrumentPath[i][len - 3],"iti") == 0; + const bool xi = _stricmp(&m_SndFile.m_szInstrumentPath[i][len - 2],"xi") == 0; if(iti || (!iti && !xi && m_SndFile.m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) m_SndFile.SaveITIInstrument(i+1, m_SndFile.m_szInstrumentPath[i]); @@ -736,8 +736,8 @@ if ((!m_SndFile.m_nInstruments) && (m_SndFile.m_nType & MOD_TYPE_XM)) { m_SndFile.m_nInstruments = 1; - m_SndFile.Instruments[1] = new MODINSTRUMENT; - InitializeInstrument(m_SndFile.Instruments[1], 1); + m_SndFile.Instruments[1] = new MODINSTRUMENT(1); + InitializeInstrument(m_SndFile.Instruments[1]); } if (m_SndFile.m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT|MOD_TYPE_XM)) { @@ -1124,7 +1124,7 @@ { m_SndFile.Chn[nChn].dwFlags |= muteType; //Kill VSTi notes on muted channel. - PLUGINDEX nPlug = m_SndFile.GetBestPlugin(nChn, PRIORITISE_INSTRUMENT, EVEN_IF_MUTED); + PLUGINDEX nPlug = m_SndFile.GetBestPlugin(nChn, PrioritiseInstrument, EvenIfMuted); if ((nPlug) && (nPlug<=MAX_MIXPLUGINS)) { CVstPlugin *pPlug = (CVstPlugin*)m_SndFile.m_MixPlugins[nPlug - 1].pMixPlugin; @@ -2371,7 +2371,7 @@ int nParam = MacroToPlugParam(macroText); char paramName[128]; MemsetZero(paramName); - PLUGINDEX nPlug = m_SndFile.GetBestPlugin(nChn, PRIORITISE_CHANNEL, EVEN_IF_MUTED); + PLUGINDEX nPlug = m_SndFile.GetBestPlugin(nChn, PrioritiseChannel, EvenIfMuted); if ((nPlug) && (nPlug<=MAX_MIXPLUGINS)) { CVstPlugin *pPlug = (CVstPlugin*)m_SndFile.m_MixPlugins[nPlug-1].pMixPlugin; if (pPlug) Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/mptrack/Moddoc.h 2011-09-05 01:07:40 UTC (rev 1022) @@ -290,7 +290,7 @@ PATTERNINDEX InsertPattern(ORDERINDEX nOrd = ORDERINDEX_INVALID, ROWINDEX nRows = 64); SAMPLEINDEX InsertSample(bool bLimit = false); INSTRUMENTINDEX InsertInstrument(SAMPLEINDEX lSample = SAMPLEINDEX_INVALID, INSTRUMENTINDEX lDuplicate = INSTRUMENTINDEX_INVALID); - void InitializeInstrument(MODINSTRUMENT *pIns, UINT nsample=0); + void InitializeInstrument(MODINSTRUMENT *pIns); void InitializeSample(MODSAMPLE &sample); bool RemoveOrder(SEQUENCEINDEX nSeq, ORDERINDEX nOrd); bool RemovePattern(PATTERNINDEX nPat); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -500,10 +500,10 @@ { try { - MODINSTRUMENT *p = new MODINSTRUMENT; - InitializeInstrument(p, smp); + MODINSTRUMENT *p = new MODINSTRUMENT(smp); + InitializeInstrument(p); m_SndFile.Instruments[smp] = p; - lstrcpyn(p->name, m_SndFile.m_szNames[smp], sizeof(p->name)); + lstrcpyn(p->name, m_SndFile.m_szNames[smp], CountOf(p->name)); } catch(...) { ErrorBox(IDS_ERR_OUTOFMEMORY, CMainFrame::GetMainFrame()); @@ -532,52 +532,59 @@ } newins = ++m_SndFile.m_nInstruments; } - MODINSTRUMENT *pIns = new MODINSTRUMENT; - if (pIns) + + // Determine which sample slot to use + SAMPLEINDEX newsmp = 0; + if (nSample < m_SndFile.GetModSpecifications().samplesMax) { - SAMPLEINDEX newsmp = 0; - if (nSample < m_SndFile.GetModSpecifications().samplesMax) + // Use specified slot + newsmp = nSample; + } else if (!pDup) + { + for(SAMPLEINDEX k = 1; k <= m_SndFile.m_nSamples; k++) { - newsmp = nSample; - } else - if (!pDup) - { - for(SAMPLEINDEX k = 1; k <= m_SndFile.m_nSamples; k++) + if (!m_SndFile.IsSampleUsed(k)) { - if (!m_SndFile.IsSampleUsed(k)) - { - newsmp = k; - break; - } + // Sample isn't referenced by any instrument yet, so let's use it... + newsmp = k; + break; } - if (!newsmp) - { - int inssmp = InsertSample(); - if (inssmp != SAMPLEINDEX_INVALID) newsmp = inssmp; - } } - - CriticalSection cs; - if (pDup) + if (!newsmp) { - *pIns = *pDup; -// -> CODE#0023 -// -> DESC="IT project files (.itp)" - strcpy(m_SndFile.m_szInstrumentPath[newins - 1], m_SndFile.m_szInstrumentPath[nDuplicate - 1]); - m_bsInstrumentModified.reset(newins - 1); -// -! NEW_FEATURE#0023 - } else - { - InitializeInstrument(pIns, newsmp); + // Add a new sample + int inssmp = InsertSample(); + if (inssmp != SAMPLEINDEX_INVALID) newsmp = inssmp; } - m_SndFile.Instruments[newins] = pIns; + } - SetModified(); - } else + MODINSTRUMENT *pIns; + try { + pIns = new MODINSTRUMENT(newsmp); + InitializeInstrument(pIns); + } catch(...) + { ErrorBox(IDS_ERR_OUTOFMEMORY, CMainFrame::GetMainFrame()); return INSTRUMENTINDEX_INVALID; } + + CriticalSection cs; + + if (pDup) + { + *pIns = *pDup; + // -> CODE#0023 + // -> DESC="IT project files (.itp)" + strcpy(m_SndFile.m_szInstrumentPath[newins - 1], m_SndFile.m_szInstrumentPath[nDuplicate - 1]); + m_bsInstrumentModified.reset(newins - 1); + // -! NEW_FEATURE#0023 + } + + m_SndFile.Instruments[newins] = pIns; + + SetModified(); + return newins; } @@ -603,23 +610,11 @@ } -void CModDoc::InitializeInstrument(MODINSTRUMENT *pIns, UINT nsample) -//------------------------------------------------------------------- +// Load default instrument values for inserting new instrument during editing +void CModDoc::InitializeInstrument(MODINSTRUMENT *pIns) +//----------------------------------------------------- { - if(pIns == nullptr) - return; - MemsetZero(*pIns); - pIns->nFadeOut = 256; - pIns->nGlobalVol = 64; - pIns->nPan = 128; - pIns->nPPC = NOTE_MIDDLEC - 1; - m_SndFile.SetDefaultInstrumentValues(pIns); - for (UINT n=0; n<128; n++) - { - pIns->Keyboard[n] = nsample; - pIns->NoteMap[n] = n+1; - } - pIns->pTuning = pIns->s_DefaultTuning; + pIns->nPluginVolumeHandling = CSoundFile::s_DefaultPlugVolumeHandling; } Modified: trunk/OpenMPT/soundlib/Dlsbank.cpp =================================================================== --- trunk/OpenMPT/soundlib/Dlsbank.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/Dlsbank.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -1641,10 +1641,15 @@ Log(" usVolume = %3d, Unity Note = %d\n", prgn->usVolume, prgn->uUnityNote); } #endif - pIns = new MODINSTRUMENT; - if (!pIns) return FALSE; - MemsetZero(*pIns); - pIns->pTuning = pIns->s_DefaultTuning; + + try + { + pIns = new MODINSTRUMENT(); + } catch(...) + { + return FALSE; + } + if (pSndFile->Instruments[nInstr]) { pSndFile->DestroyInstrument(nInstr, deleteAssociatedSamples); @@ -1691,22 +1696,14 @@ } } pIns->nFadeOut = 1024; - pIns->nGlobalVol = 64; // Maximum - pIns->nPan = 128; // Center Pan pIns->nMidiProgram = (BYTE)(pDlsIns->ulInstrument & 0x7F); pIns->nMidiChannel = (BYTE)((pDlsIns->ulBank & F_INSTRUMENT_DRUMS) ? 10 : 0); pIns->wMidiBank = (WORD)(((pDlsIns->ulBank & 0x7F00) >> 1) | (pDlsIns->ulBank & 0x7F)); - pIns->nPPC = 60; // C-5 pIns->nNNA = NNA_NOTEOFF; pIns->nDCT = DCT_NOTE; pIns->nDNA = DNA_NOTEFADE; - pIns->nResampling = SRCMODE_DEFAULT; - pIns->nFilterMode = FLTMODE_UNCHANGED; - pIns->PanEnv.nReleaseNode=ENV_RELEASE_NODE_UNSET; - pIns->PitchEnv.nReleaseNode=ENV_RELEASE_NODE_UNSET; - pIns->VolEnv.nReleaseNode=ENV_RELEASE_NODE_UNSET; pSndFile->Instruments[nInstr] = pIns; - nSample = 1; + nSample = 0; UINT nLoadedSmp = 0; // Extract Samples for (UINT nRgn=nRgnMin; nRgn<nRgnMax; nRgn++) @@ -1741,9 +1738,13 @@ nSmp = RgnToSmp[nRgn-1]; } else { - while ((nSample < MAX_SAMPLES) && ((pSndFile->GetSample(nSample).pSample) || (pSndFile->m_szNames[nSample][0]))) nSample++; + // Find a nice sample slot + do + { + nSample++; + } while (nSample < pSndFile->GetNumSamples() && (pSndFile->GetSample(nSample).pSample != nullptr || pSndFile->m_szNames[nSample][0])); if (nSample >= MAX_SAMPLES) break; - if (nSample > pSndFile->m_nSamples) pSndFile->m_nSamples = nSample; + if (nSample > pSndFile->GetNumSamples()) pSndFile->m_nSamples = nSample; nSmp = nSample; nLoadedSmp++; } @@ -1900,6 +1901,3 @@ } return TRUE; } - - - Modified: trunk/OpenMPT/soundlib/Fastmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Fastmix.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/Fastmix.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -1608,7 +1608,7 @@ #endif //Look for plugins associated with this implicit tracker channel. - PLUGINDEX nMixPlugin = GetBestPlugin(ChnMix[nChn], PRIORITISE_INSTRUMENT, RESPECT_MUTES); + PLUGINDEX nMixPlugin = GetBestPlugin(ChnMix[nChn], PrioritiseInstrument, RespectMutes); //rewbs.instroVSTi /* UINT nMixPlugin=0; @@ -2492,6 +2492,3 @@ #endif // NO_AGC - - - Modified: trunk/OpenMPT/soundlib/LOAD_DBM.CPP =================================================================== --- trunk/OpenMPT/soundlib/LOAD_DBM.CPP 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/LOAD_DBM.CPP 2011-09-05 01:07:40 UTC (rev 1022) @@ -231,14 +231,14 @@ WORD nsmp; if (chunk_pos + sizeof(DBMINSTRUMENT) > dwMemPos) break; - if ((pIns = new MODINSTRUMENT) == nullptr) break; - memset(pIns, 0, sizeof(MODINSTRUMENT)); - SetDefaultInstrumentValues(pIns); - Instruments[iIns + 1] = pIns; pih = (DBMINSTRUMENT *)(lpStream + chunk_pos); nsmp = BigEndianW(pih->sampleno); psmp = ((nsmp) && (nsmp < MAX_SAMPLES)) ? &Samples[nsmp] : nullptr; + + if ((pIns = new MODINSTRUMENT(nsmp)) == nullptr) break; + Instruments[iIns + 1] = pIns; + memcpy(pIns->name, pih->name, 30); StringFixer::SpaceToNullStringFixed<30>(pIns->name); if (psmp) @@ -248,19 +248,12 @@ } pIns->nFadeOut = 1024; // ??? - pIns->nGlobalVol = 64; pIns->nPan = BigEndianW(pih->panning); if ((pIns->nPan) && (pIns->nPan < 256)) pIns->dwFlags = INS_SETPANNING; else pIns->nPan = 128; - pIns->nPPC = 5 * 12; - for (BYTE i = 0; i < NOTE_MAX; i++) - { - pIns->Keyboard[i] = nsmp; - pIns->NoteMap[i] = i + 1; - } // Sample Info if (psmp) { Modified: trunk/OpenMPT/soundlib/Load_ams.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_ams.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/Load_ams.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -395,20 +395,17 @@ dwMemPos += 5 + panenv->points*3; pitchenv = (AMS2ENVELOPE *)(lpStream+dwMemPos); dwMemPos += 5 + pitchenv->points*3; - MODINSTRUMENT *pIns = new MODINSTRUMENT; + MODINSTRUMENT *pIns = new MODINSTRUMENT(); if (!pIns) return TRUE; memset(smpmap, 0, sizeof(smpmap)); - memset(pIns, 0, sizeof(MODINSTRUMENT)); + for (UINT ismpmap=0; ismpmap<pSmp->samples; ismpmap++) { if ((ismpmap >= 16) || (m_nSamples+1 >= MAX_SAMPLES)) break; m_nSamples++; smpmap[ismpmap] = m_nSamples; } - pIns->nGlobalVol = 64; - pIns->nPan = 128; - pIns->nPPC = 60; - SetDefaultInstrumentValues(pIns); + Instruments[nIns] = pIns; if (insnamelen) { Modified: trunk/OpenMPT/soundlib/Load_imf.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_imf.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/Load_imf.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -253,7 +253,6 @@ env->nLoopStart = imfins->env[e].loop_start; env->nLoopEnd = imfins->env[e].loop_end; env->nSustainStart = env->nSustainEnd = imfins->env[e].sustain; - env->nReleaseNode = ENV_RELEASE_NODE_UNSET; for(UINT n = 0; n < env->nNodes; n++) { @@ -497,13 +496,16 @@ //if(memcmp(imfins.ii10, "II10", 4) != 0) // return false; - pIns = new MODINSTRUMENT; - if(!pIns) + try + { + pIns = new MODINSTRUMENT(); + } + catch(...) + { continue; + } + Instruments[nIns + 1] = pIns; - memset(pIns, 0, sizeof(MODINSTRUMENT)); - pIns->nPPC = 5 * 12; - SetDefaultInstrumentValues(pIns); memcpy(pIns->name, imfins.name, 31); StringFixer::SpaceToNullStringFixed<31>(pIns->name); @@ -518,7 +520,6 @@ } pIns->nFadeOut = imfins.fadeout; - pIns->nGlobalVol = 64; load_imf_envelope(&pIns->VolEnv, &imfins, IMF_ENV_VOL); load_imf_envelope(&pIns->PanEnv, &imfins, IMF_ENV_PAN); Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -305,9 +305,6 @@ const int iEnvMax = (m_nType & MOD_TYPE_MPT) ? MAX_ENVPOINTS : 25; long returnVal=0; - pIns->pTuning = m_defaultInstrument.pTuning; - pIns->nPluginVelocityHandling = PLUGIN_VELOCITYHANDLING_CHANNEL; - pIns->nPluginVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE; if (trkvers < 0x0200) { const ITOLDINSTRUMENT *pis = (const ITOLDINSTRUMENT *)p; @@ -346,10 +343,6 @@ pIns->nNNA = pis->nna; pIns->nDCT = pis->dnc; pIns->nPan = 0x80; - - pIns->VolEnv.nReleaseNode = ENV_RELEASE_NODE_UNSET; - pIns->PanEnv.nReleaseNode = ENV_RELEASE_NODE_UNSET; - pIns->PitchEnv.nReleaseNode = ENV_RELEASE_NODE_UNSET; } else { const ITINSTRUMENT *pis = (const ITINSTRUMENT *)p; @@ -453,9 +446,6 @@ pIns->nVolSwing = pis->rv; pIns->nPanSwing = pis->rp; pIns->nPan = (pis->dfp & 0x7F) << 2; - SetDefaultInstrumentValues(pIns); - pIns->nPluginVelocityHandling = PLUGIN_VELOCITYHANDLING_CHANNEL; - pIns->nPluginVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE; if (pIns->nPan > 256) pIns->nPan = 128; if (pis->dfp < 0x80) pIns->dwFlags |= INS_SETPANNING; } @@ -944,10 +934,9 @@ { if ((inspos[nins] > 0) && (inspos[nins] < dwMemLength - (pifh->cmwt < 0x200 ? sizeof(ITOLDINSTRUMENT) : sizeof(ITINSTRUMENT)))) { - MODINSTRUMENT *pIns = new MODINSTRUMENT; + MODINSTRUMENT *pIns = new MODINSTRUMENT(); if (!pIns) continue; - Instruments[nins+1] = pIns; - memset(pIns, 0, sizeof(MODINSTRUMENT)); + Instruments[nins + 1] = pIns; ITInstrToMPT(lpStream + inspos[nins], pIns, pifh->cmwt); } } @@ -2458,25 +2447,27 @@ if (nInstruments == 0) return; + + MODINSTRUMENT *sizeIns = new MODINSTRUMENT(); - WriteInstrumentPropertyForAllInstruments('VR..', sizeof(m_defaultInstrument.nVolRamp), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('MiP.', sizeof(m_defaultInstrument.nMixPlug), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('MC..', sizeof(m_defaultInstrument.nMidiChannel),f, nInstruments); - WriteInstrumentPropertyForAllInstruments('MP..', sizeof(m_defaultInstrument.nMidiProgram),f, nInstruments); - WriteInstrumentPropertyForAllInstruments('MB..', sizeof(m_defaultInstrument.wMidiBank), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('P...', sizeof(m_defaultInstrument.nPan), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('GV..', sizeof(m_defaultInstrument.nGlobalVol), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('FO..', sizeof(m_defaultInstrument.nFadeOut), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('R...', sizeof(m_defaultInstrument.nResampling), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('CS..', sizeof(m_defaultInstrument.nCutSwing), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('RS..', sizeof(m_defaultInstrument.nResSwing), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('FM..', sizeof(m_defaultInstrument.nFilterMode), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('PERN', sizeof(m_defaultInstrument.PitchEnv.nReleaseNode ), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('AERN', sizeof(m_defaultInstrument.PanEnv.nReleaseNode), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('VERN', sizeof(m_defaultInstrument.VolEnv.nReleaseNode), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('PTTL', sizeof(m_defaultInstrument.wPitchToTempoLock), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('PVEH', sizeof(m_defaultInstrument.nPluginVelocityHandling), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('PVOH', sizeof(m_defaultInstrument.nPluginVolumeHandling), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('VR..', sizeof(sizeIns->nVolRamp), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('MiP.', sizeof(sizeIns->nMixPlug), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('MC..', sizeof(sizeIns->nMidiChannel),f, nInstruments); + WriteInstrumentPropertyForAllInstruments('MP..', sizeof(sizeIns->nMidiProgram),f, nInstruments); + WriteInstrumentPropertyForAllInstruments('MB..', sizeof(sizeIns->wMidiBank), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('P...', sizeof(sizeIns->nPan), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('GV..', sizeof(sizeIns->nGlobalVol), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('FO..', sizeof(sizeIns->nFadeOut), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('R...', sizeof(sizeIns->nResampling), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('CS..', sizeof(sizeIns->nCutSwing), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('RS..', sizeof(sizeIns->nResSwing), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('FM..', sizeof(sizeIns->nFilterMode), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('PERN', sizeof(sizeIns->PitchEnv.nReleaseNode ), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('AERN', sizeof(sizeIns->PanEnv.nReleaseNode), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('VERN', sizeof(sizeIns->VolEnv.nReleaseNode), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('PTTL', sizeof(sizeIns->wPitchToTempoLock), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('PVEH', sizeof(sizeIns->nPluginVelocityHandling), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('PVOH', sizeof(sizeIns->nPluginVolumeHandling), f, nInstruments); if(m_nType & MOD_TYPE_MPT) { @@ -2490,20 +2481,22 @@ // write full envelope information for MPTM files (more env points) if(maxNodes > 25) { - WriteInstrumentPropertyForAllInstruments('VE..', sizeof(m_defaultInstrument.VolEnv.nNodes), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('VP[.', sizeof(m_defaultInstrument.VolEnv.Ticks ), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('VE[.', sizeof(m_defaultInstrument.VolEnv.Values), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('VE..', sizeof(sizeIns->VolEnv.nNodes), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('VP[.', sizeof(sizeIns->VolEnv.Ticks ), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('VE[.', sizeof(sizeIns->VolEnv.Values), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('PE..', sizeof(m_defaultInstrument.PanEnv.nNodes), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('PP[.', sizeof(m_defaultInstrument.PanEnv.Ticks), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('PE[.', sizeof(m_defaultInstrument.PanEnv.Values), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('PE..', sizeof(sizeIns->PanEnv.nNodes), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('PP[.', sizeof(sizeIns->PanEnv.Ticks), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('PE[.', sizeof(sizeIns->PanEnv.Values), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('PiE.', sizeof(m_defaultInstrument.PitchEnv.nNodes), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('PiP[', sizeof(m_defaultInstrument.PitchEnv.Ticks), f, nInstruments); - WriteInstrumentPropertyForAllInstruments('PiE[', sizeof(m_defaultInstrument.PitchEnv.Values), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('PiE.', sizeof(sizeIns->PitchEnv.nNodes), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('PiP[', sizeof(sizeIns->PitchEnv.Ticks), f, nInstruments); + WriteInstrumentPropertyForAllInstruments('PiE[', sizeof(sizeIns->PitchEnv.Values), f, nInstruments); } } + delete sizeIns; + return; } @@ -2520,7 +2513,9 @@ pField = GetInstrumentHeaderFieldPointer(Instruments[nins], code, size); //get ptr to field } else { - pField = GetInstrumentHeaderFieldPointer(&m_defaultInstrument, code, size); //get ptr to field + MODINSTRUMENT *emptyInstrument = new MODINSTRUMENT(); + pField = GetInstrumentHeaderFieldPointer(emptyInstrument, code, size); //get ptr to field + delete emptyInstrument; } fwrite(pField, 1, size, f); //write field data } Modified: trunk/OpenMPT/soundlib/Load_mdl.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mdl.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/Load_mdl.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -370,21 +370,16 @@ if (!Instruments[nins]) { UINT note = 12; - if ((Instruments[nins] = new MODINSTRUMENT) == NULL) break; + if ((Instruments[nins] = new MODINSTRUMENT()) == nullptr) break; MODINSTRUMENT *pIns = Instruments[nins]; - memset(pIns, 0, sizeof(MODINSTRUMENT)); memcpy(pIns->name, lpStream+dwPos+2, 32); StringFixer::SpaceToNullStringFixed<31>(pIns->name); - pIns->nGlobalVol = 64; - pIns->nPPC = 5*12; - SetDefaultInstrumentValues(pIns); for (j=0; j<lpStream[dwPos+1]; j++) { const BYTE *ps = lpStream+dwPos+34+14*j; while ((note < (UINT)(ps[1]+12)) && (note < NOTE_MAX)) { - pIns->NoteMap[note] = note+1; if (ps[0] < MAX_SAMPLES) { int ismp = ps[0]; @@ -422,8 +417,7 @@ } for (j=1; j<=m_nInstruments; j++) if (!Instruments[j]) { - Instruments[j] = new MODINSTRUMENT; - if (Instruments[j]) memset(Instruments[j], 0, sizeof(MODINSTRUMENT)); + Instruments[j] = new MODINSTRUMENT(); } break; // VE: Volume Envelope Modified: trunk/OpenMPT/soundlib/Load_mid.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mid.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/Load_mid.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -412,10 +412,15 @@ } } if ((m_nInstruments + 1 >= MAX_INSTRUMENTS) || (m_nSamples + 1 >= MAX_SAMPLES)) return 0; - pIns = new MODINSTRUMENT; - if (!pIns) return 0; - memset(pIns, 0, sizeof(MODINSTRUMENT)); - pIns->pTuning = pIns->s_DefaultTuning; + + try + { + pIns = new MODINSTRUMENT(); + } catch(...) + { + return 0; + } + m_nSamples++; m_nInstruments++; Instruments[m_nInstruments] = pIns; @@ -423,14 +428,10 @@ pIns->nMidiProgram = nProgram; pIns->nMidiChannel = nChannel; if (nChannel == MIDI_DRUMCHANNEL) pIns->nMidiDrumKey = nNote; - pIns->nGlobalVol = 64; pIns->nFadeOut = 1024; - pIns->nPan = 128; - pIns->nPPC = 5*12; pIns->nNNA = NNA_NOTEOFF; pIns->nDCT = (nChannel == MIDI_DRUMCHANNEL) ? DCT_SAMPLE : DCT_NOTE; pIns->nDNA = DNA_NOTEFADE; - SetDefaultInstrumentValues(pIns); for (UINT j=0; j<NOTE_MAX; j++) { int mapnote = j+1; Modified: trunk/OpenMPT/soundlib/Load_mt2.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mt2.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/Load_mt2.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -401,19 +401,12 @@ MODINSTRUMENT *pIns = NULL; if (iIns <= m_nInstruments) { - pIns = new MODINSTRUMENT; + pIns = new MODINSTRUMENT(); Instruments[iIns] = pIns; if (pIns) { - memcpy(Instruments[iIns], &m_defaultInstrument, sizeof(MODINSTRUMENT)); memcpy(pIns->name, pmi->szName, 32); StringFixer::SpaceToNullStringFixed<31>(pIns->name); - pIns->nGlobalVol = 64; - pIns->nPan = 128; - for (BYTE i = 0; i < NOTE_MAX; i++) - { - pIns->NoteMap[i] = i+1; - } } } #ifdef MT2DEBUG Modified: trunk/OpenMPT/soundlib/Load_xm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_xm.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/Load_xm.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -317,10 +317,7 @@ MemsetZero(pih); memcpy(&pih, lpStream + dwMemPos, min(sizeof(pih), ihsize)); - if ((Instruments[iIns] = new MODINSTRUMENT) == nullptr) continue; - memcpy(Instruments[iIns], &m_defaultInstrument, sizeof(MODINSTRUMENT)); - Instruments[iIns]->nPluginVelocityHandling = PLUGIN_VELOCITYHANDLING_CHANNEL; - Instruments[iIns]->nPluginVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE; + if ((Instruments[iIns] = new MODINSTRUMENT()) == nullptr) continue; memcpy(Instruments[iIns]->name, pih.name, 22); StringFixer::SpaceToNullStringFixed<22>(Instruments[iIns]->name); @@ -436,11 +433,6 @@ MODINSTRUMENT *pIns = Instruments[iIns]; pIns->nMidiProgram = pih.type; pIns->nFadeOut = xmsh.volfade; - pIns->nPan = 128; - pIns->nPPC = 5*12; - SetDefaultInstrumentValues(pIns); - pIns->nPluginVelocityHandling = PLUGIN_VELOCITYHANDLING_CHANNEL; - pIns->nPluginVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE; if (xmsh.vtype & 1) pIns->VolEnv.dwFlags |= ENV_ENABLED; if (xmsh.vtype & 2) pIns->VolEnv.dwFlags |= ENV_SUSTAIN; if (xmsh.vtype & 4) pIns->VolEnv.dwFlags |= ENV_LOOP; @@ -465,7 +457,6 @@ pIns->PanEnv.nLoopEnd = xmsh.ploope; if (pIns->PanEnv.nLoopEnd >= 12) pIns->PanEnv.nLoopEnd = 0; if (pIns->PanEnv.nLoopStart >= pIns->PanEnv.nLoopEnd) pIns->PanEnv.dwFlags &= ~ENV_LOOP; - pIns->nGlobalVol = 64; for (UINT ienv=0; ienv<12; ienv++) { pIns->VolEnv.Ticks[ienv] = (WORD)xmsh.venv[ienv*2]; Modified: trunk/OpenMPT/soundlib/Sampleio.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sampleio.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/Sampleio.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -65,17 +65,10 @@ ) { // Loading Instrument - MODINSTRUMENT *pIns = new MODINSTRUMENT; - if (!pIns) return false; - MemsetZero(*pIns); - pIns->pTuning = pIns->s_DefaultTuning; - DestroyInstrument(nInstr, deleteAssociatedSamples); - - Instruments[nInstr] = pIns; // Scanning free sample - UINT nSample = 0; - for (UINT iscan=1; iscan<MAX_SAMPLES; iscan++) + SAMPLEINDEX nSample = 0; + for (SAMPLEINDEX iscan = 1; iscan < MAX_SAMPLES; iscan++) { if ((!Samples[iscan].pSample) && (!m_szNames[iscan][0])) { @@ -84,17 +77,16 @@ break; } } + + MODINSTRUMENT *pIns = new MODINSTRUMENT(nSample); + if (!pIns) return false; + + DestroyInstrument(nInstr, deleteAssociatedSamples); + + Instruments[nInstr] = pIns; + // Default values pIns->nFadeOut = 1024; - pIns->nGlobalVol = 64; - pIns->nPan = 128; - pIns->nPPC = 5*12; - SetDefaultInstrumentValues(pIns); - for (UINT iinit=0; iinit<128; iinit++) - { - pIns->Keyboard[iinit] = nSample; - pIns->NoteMap[iinit] = iinit+1; - } if (nSample) ReadSampleFromFile(nSample, lpMemFile, dwFileLength); return true; } @@ -198,7 +190,7 @@ DestroyInstrument(nInstr, deleteAssociatedSamples); - if (!Instruments[nInstr]) Instruments[nInstr] = new MODINSTRUMENT; + if (!Instruments[nInstr]) Instruments[nInstr] = new MODINSTRUMENT(); MODINSTRUMENT *pIns = Instruments[nInstr]; if (pIns) { @@ -876,21 +868,15 @@ DestroyInstrument(nInstr, deleteAssociatedSamples); - pIns = new MODINSTRUMENT; + pIns = new MODINSTRUMENT(); if (!pIns) return false; - MemsetZero(*pIns); - pIns->pTuning = pIns->s_DefaultTuning; + Instruments[nInstr] = pIns; nSamples = plh->samples; if (nSamples > 16) nSamples = 16; memcpy(pIns->name, pih->name, 16); pIns->name[16] = 0; pIns->nFadeOut = 2048; - pIns->nGlobalVol = 64; - pIns->nPan = 128; - pIns->nPPC = 60; - pIns->nResampling = SRCMODE_DEFAULT; - pIns->nFilterMode = FLTMODE_UNCHANGED; if (m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT)) { pIns->nNNA = NNA_NOTEOFF; @@ -1097,11 +1083,10 @@ DestroyInstrument(nInstr, deleteAssociatedSamples); - Instruments[nInstr] = new MODINSTRUMENT; + Instruments[nInstr] = new MODINSTRUMENT(); MODINSTRUMENT *pIns = Instruments[nInstr]; if (!pIns) return false; - memset(pIns, 0, sizeof(MODINSTRUMENT)); - pIns->pTuning = pIns->s_DefaultTuning; + memcpy(pIns->name, pxh->name, 22); nsamples = 0; for (UINT i=0; i<96; i++) @@ -1112,7 +1097,7 @@ nsamples++; if (nsamples > 32) nsamples = 32; // Allocate samples - memset(samplemap, 0, sizeof(samplemap)); + MemsetZero(samplemap); UINT nsmp = 1; for (UINT j=0; j<nsamples; j++) { @@ -1155,9 +1140,7 @@ pIns->PanEnv.nLoopEnd = pih->ploope; if (pIns->PanEnv.nLoopEnd >= 12) pIns->PanEnv.nLoopEnd = 0; if (pIns->PanEnv.nLoopStart >= pIns->PanEnv.nLoopEnd) pIns->PanEnv.dwFlags &= ~ENV_LOOP; - pIns->nGlobalVol = 64; - pIns->nPPC = 5*12; - SetDefaultInstrumentValues(pIns); + for (UINT ienv=0; ienv<12; ienv++) { pIns->VolEnv.Ticks[ienv] = (WORD)pih->venv[ienv*2]; @@ -1709,11 +1692,10 @@ DestroyInstrument(nInstr, deleteAssociatedSamples); - Instruments[nInstr] = new MODINSTRUMENT; + Instruments[nInstr] = new MODINSTRUMENT(); MODINSTRUMENT *pIns = Instruments[nInstr]; if (!pIns) return false; - MemsetZero(*pIns); - pIns->pTuning = pIns->s_DefaultTuning; + MemsetZero(samplemap); dwMemPos = 554; dwMemPos += ITInstrToMPT(pinstr, pIns, pinstr->trkvers); Modified: trunk/OpenMPT/soundlib/Snd_defs.h =================================================================== --- trunk/OpenMPT/soundlib/Snd_defs.h 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/Snd_defs.h 2011-09-05 01:07:40 UTC (rev 1022) @@ -371,15 +371,20 @@ STATIC_ASSERT(ENV_RELEASE_NODE_UNSET > MAX_ENVPOINTS); -enum { - CHANNEL_ONLY = 0, - INSTRUMENT_ONLY = 1, - PRIORITISE_INSTRUMENT = 2, - PRIORITISE_CHANNEL = 3, - EVEN_IF_MUTED = false, - RESPECT_MUTES = true, +enum PluginPriority +{ + ChannelOnly, + InstrumentOnly, + PrioritiseInstrument, + PrioritiseChannel, }; +enum PluginMutePriority +{ + EvenIfMuted, + RespectMutes, +}; + //Plugin velocity handling options enum PLUGVELOCITYHANDLING { Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -1218,7 +1218,7 @@ IMixPlugin *pPlugin = NULL; if (pChn->pModInstrument && pChn->pModInstrument->nMidiChannel > 0 && pChn->pModInstrument->nMidiChannel < 17 && pChn->nNote>0 && pChn->nNote<128) // instro sends to a midi chan { - PLUGINDEX nPlugin = GetBestPlugin(nChn, PRIORITISE_INSTRUMENT, RESPECT_MUTES); + PLUGINDEX nPlugin = GetBestPlugin(nChn, PrioritiseInstrument, RespectMutes); /* UINT nPlugin = 0; nPlugin = pChn->pModInstrument->nMixPlug; // first try intrument VST @@ -2202,8 +2202,8 @@ } -void CSoundFile::ResetChannelEnvelopes(MODCHANNEL* pChn) -//------------------------------------------------------ +void CSoundFile::ResetChannelEnvelopes(MODCHANNEL *pChn) const +//------------------------------------------------------------ { ResetChannelEnvelope(pChn->VolEnv); ResetChannelEnvelope(pChn->PanEnv); @@ -2211,8 +2211,8 @@ } -void CSoundFile::ResetChannelEnvelope(MODCHANNEL_ENVINFO &env) -//------------------------------------------------------------ +void CSoundFile::ResetChannelEnvelope(MODCHANNEL_ENVINFO &env) const +//------------------------------------------------------------------ { env.nEnvPosition = 0; env.nEnvValueAtReleaseJump = NOT_YET_RELEASED; @@ -3347,7 +3347,7 @@ } else if(macroCode == 0x03 && !isExtended) { // F0.F0.03.xx: Set plug dry/wet - const PLUGINDEX nPlug = (plugin != 0) ? plugin : GetBestPlugin(nChn, PRIORITISE_CHANNEL, EVEN_IF_MUTED); + const PLUGINDEX nPlug = (plugin != 0) ? plugin : GetBestPlugin(nChn, PrioritiseChannel, EvenIfMuted); if ((nPlug) && (nPlug <= MAX_MIXPLUGINS) && param < 0x80) { const float newRatio = 1.0 - (static_cast<float>(param & 0x7F) / 127.0f); @@ -3365,7 +3365,7 @@ } else if((macroCode & 0x80) || isExtended) { // F0.F0.{80|n}.xx / F0.F1.n.xx: Set VST effect parameter n to xx - const PLUGINDEX nPlug = (plugin != 0) ? plugin : GetBestPlugin(nChn, PRIORITISE_CHANNEL, EVEN_IF_MUTED); + const PLUGINDEX nPlug = (plugin != 0) ? plugin : GetBestPlugin(nChn, PrioritiseChannel, EvenIfMuted); const UINT plugParam = isExtended ? (0x80 + macroCode) : (macroCode & 0x7F); if((nPlug) && (nPlug <= MAX_MIXPLUGINS)) { @@ -3394,7 +3394,7 @@ const CHANNELINDEX nMasterCh = (nChn < GetNumChannels()) ? nChn + 1 : pChn->nMasterChn; if((nMasterCh) && (nMasterCh <= GetNumChannels())) { - const PLUGINDEX nPlug = (pChn->dwFlags & CHN_NOFX) ? 0 : ((plugin != 0) ? plugin : GetBestPlugin(nChn, PRIORITISE_CHANNEL, EVEN_IF_MUTED)); + const PLUGINDEX nPlug = (pChn->dwFlags & CHN_NOFX) ? 0 : ((plugin != 0) ? plugin : GetBestPlugin(nChn, PrioritiseChannel, EvenIfMuted)); if((nPlug) && (nPlug <= MAX_MIXPLUGINS)) { IMixPlugin *pPlugin = m_MixPlugins[nPlug - 1].pMixPlugin; @@ -4068,8 +4068,8 @@ } -PLUGINDEX CSoundFile::GetBestPlugin(CHANNELINDEX nChn, UINT priority, bool respectMutes) -//-------------------------------------------------------------------------------------- +PLUGINDEX CSoundFile::GetBestPlugin(CHANNELINDEX nChn, PluginPriority priority, PluginMutePriority respectMutes) const +//-------------------------------------------------------------------------------------------------------------------- { if (nChn >= MAX_CHANNELS) //Check valid channel number { @@ -4080,22 +4080,22 @@ PLUGINDEX nPlugin = 0; switch (priority) { - case CHANNEL_ONLY: + case ChannelOnly: nPlugin = GetChannelPlugin(nChn, respectMutes); break; - case INSTRUMENT_ONLY: + case InstrumentOnly: nPlugin = GetActiveInstrumentPlugin(nChn, respectMutes); break; - case PRIORITISE_INSTRUMENT: + case PrioritiseInstrument: nPlugin = GetActiveInstrumentPlugin(nChn, respectMutes); - if ((!nPlugin) || (nPlugin>MAX_MIXPLUGINS)) + if ((!nPlugin) || (nPlugin > MAX_MIXPLUGINS)) { nPlugin = GetChannelPlugin(nChn, respectMutes); } break; - case PRIORITISE_CHANNEL: + case PrioritiseChannel: nPlugin = GetChannelPlugin(nChn, respectMutes); - if ((!nPlugin) || (nPlugin>MAX_MIXPLUGINS)) + if ((!nPlugin) || (nPlugin > MAX_MIXPLUGINS)) { nPlugin = GetActiveInstrumentPlugin(nChn, respectMutes); } @@ -4106,8 +4106,8 @@ } -PLUGINDEX __cdecl CSoundFile::GetChannelPlugin(CHANNELINDEX nChn, bool respectMutes) const -//---------------------------------------------------------------------------------------- +PLUGINDEX __cdecl CSoundFile::GetChannelPlugin(CHANNELINDEX nChn, PluginMutePriority respectMutes) const +//------------------------------------------------------------------------------------------------------ { const MODCHANNEL *pChn = &Chn[nChn]; @@ -4120,7 +4120,7 @@ } UINT nPlugin; - if ( (respectMutes && (pChn->dwFlags & CHN_MUTE)) || (pChn->dwFlags&CHN_NOFX) ) + if ( (respectMutes == RespectMutes && (pChn->dwFlags & CHN_MUTE)) || (pChn->dwFlags&CHN_NOFX) ) { nPlugin = 0; } else @@ -4131,8 +4131,8 @@ } -PLUGINDEX CSoundFile::GetActiveInstrumentPlugin(CHANNELINDEX nChn, bool respectMutes) const -//----------------------------------------------------------------------------------------- +PLUGINDEX CSoundFile::GetActiveInstrumentPlugin(CHANNELINDEX nChn, PluginMutePriority respectMutes) const +//------------------------------------------------------------------------------------------------------- { const MODCHANNEL *pChn = &Chn[nChn]; // Unlike channel settings, pModInstrument is copied from the original chan to the NNA chan, @@ -4141,7 +4141,7 @@ UINT nPlugin=0; if (pChn && pChn->pModInstrument) { - if (respectMutes && pChn->pModSample && (pChn->pModSample->uFlags & CHN_MUTE)) + if (respectMutes == RespectMutes && pChn->pModSample && (pChn->pModSample->uFlags & CHN_MUTE)) { nPlugin = 0; } else Modified: trunk/OpenMPT/soundlib/Sndfile.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/Sndfile.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -359,7 +359,7 @@ break; // Return a pointer on the wanted field in 'input' MODINSTRUMENT given field code & size -BYTE * GetInstrumentHeaderFieldPointer(const MODINSTRUMENT * input, __int32 fcode, __int16 fsize) +BYTE * GetInstrumentHeaderFieldPointer(const MODINSTRUMENT *input, __int32 fcode, __int16 fsize) { if(input == NULL) return NULL; BYTE * pointer = NULL; @@ -500,8 +500,6 @@ m_pConfig = new CSoundFilePlayConfig(); m_pTuningsTuneSpecific = new CTuningCollection("Tune specific tunings"); - - BuildDefaultInstrument(); } @@ -2661,28 +2659,6 @@ //end rewbs.plugDocAware -void CSoundFile::BuildDefaultInstrument() -//--------------------------------------- -{ -// m_defaultInstrument is currently only used to get default values for extented properties. -// In the future we can make better use of this. - MemsetZero(m_defaultInstrument); - m_defaultInstrument.nResampling = SRCMODE_DEFAULT; - m_defaultInstrument.nFilterMode = FLTMODE_UNCHANGED; - m_defaultInstrument.nPPC = 5 * 12; - m_defaultInstrument.nGlobalVol = 64; - m_defaultInstrument.nPan = 32 * 4; - //m_defaultInstrument.nIFC = 0xFF; - m_defaultInstrument.PanEnv.nReleaseNode=ENV_RELEASE_NODE_UNSET; - m_defaultInstrument.PitchEnv.nReleaseNode=ENV_RELEASE_NODE_UNSET; - m_defaultInstrument.VolEnv.nReleaseNode=ENV_RELEASE_NODE_UNSET; - m_defaultInstrument.wPitchToTempoLock = 0; - m_defaultInstrument.pTuning = m_defaultInstrument.s_DefaultTuning; - m_defaultInstrument.nPluginVelocityHandling = PLUGIN_VELOCITYHANDLING_CHANNEL; - m_defaultInstrument.nPluginVolumeHandling = CSoundFile::s_DefaultPlugVolumeHandling; -} - - void CSoundFile::DeleteStaticdata() //--------------------------------- { @@ -2762,22 +2738,6 @@ } - -void CSoundFile::SetDefaultInstrumentValues(MODINSTRUMENT *pIns) -//-------------------------------------------------------------- -{ - pIns->nResampling = m_defaultInstrument.nResampling; - pIns->nFilterMode = m_defaultInstrument.nFilterMode; - pIns->PitchEnv.nReleaseNode = m_defaultInstrument.PitchEnv.nReleaseNode; - pIns->PanEnv.nReleaseNode = m_defaultInstrument.PanEnv.nReleaseNode; - pIns->VolEnv.nReleaseNode = m_defaultInstrument.VolEnv.nReleaseNode; - pIns->pTuning = m_defaultInstrument.pTuning; - pIns->nPluginVelocityHandling = m_defaultInstrument.nPluginVelocityHandling; - pIns->nPluginVolumeHandling = m_defaultInstrument.nPluginVolumeHandling; - -} - - long CSoundFile::GetSampleOffset() //-------------------------------- { Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/Sndfile.h 2011-09-05 01:07:40 UTC (rev 1022) @@ -94,6 +94,17 @@ BYTE nSustainStart; // sustain start node BYTE nSustainEnd; // sustain end node BYTE nReleaseNode; // release node + + INSTRUMENTENVELOPE() + { + dwFlags = 0; + MemsetZero(Ticks); + MemsetZero(Values); + nNodes = 0; + nLoopStart = nLoopEnd = 0; + nSustainStart = nSustainEnd = 0; + nReleaseNode = ENV_RELEASE_NODE_UNSET; + } }; // Instrument Struct @@ -123,6 +134,7 @@ BYTE nMidiProgram; // MIDI program BYTE nMidiChannel; // MIDI channel BYTE nMidiDrumKey; // Drum set note mapping (currently only used by the .MID loader) + signed char nPPS; //Pitch/Pan separation (i.e. how wide the panning spreads) unsigned char nPPC; //Pitch/Pan centre @@ -153,8 +165,52 @@ pTuning = pT; } - + MODINSTRUMENT(SAMPLEINDEX sample = 0) + { + nFadeOut = 256; + dwFlags = 0; + nGlobalVol = 64; + nPan = 32 * 4; + for(size_t n = 0; n < CountOf(Keyboard); n++) + { + Keyboard[n] = (WORD)sample; + NoteMap[n] = (BYTE)(n + 1); + } + + nNNA = NNA_NOTECUT; + nDCT = DCT_NONE; + nDNA = DNA_NOTECUT; + + nPanSwing = 0; + nVolSwing = 0; + nIFC = 0; + nIFR = 0; + + wMidiBank = 0; + nMidiProgram = 0; + nMidiChannel = 0; + nMidiDrumKey = 0; + + nPPC = NOTE_MIDDLEC - 1; + nPPS = 0; + + MemsetZero(name); + MemsetZero(filename); + + nMixPlug = 0; + nVolRamp = 0; + nResampling = SRCMODE_DEFAULT; + nCutSwing = 0; + nResSwing = 0; + nFilterMode = FLTMODE_UNCHANGED; + wPitchToTempoLock = 0; + nPluginVelocityHandling = PLUGIN_VELOCITYHANDLING_CHANNEL; + nPluginVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE; + + pTuning = s_DefaultTuning; + } + }; //MODINSTRUMENT; @@ -673,7 +729,6 @@ MODSAMPLE Samples[MAX_SAMPLES]; // Sample Headers public: MODINSTRUMENT *Instruments[MAX_INSTRUMENTS]; // Instrument Headers - MODINSTRUMENT m_defaultInstrument; // Currently only used to get default values for extented properties. CHAR m_szNames[MAX_SAMPLES][MAX_SAMPLENAME]; // Song and sample names MODMIDICFG m_MidiCfg; // Midi macro config table SNDMIXPLUGIN m_MixPlugins[MAX_MIXPLUGINS]; // Mix plugins @@ -1083,20 +1138,18 @@ public: int GetVolEnvValueFromPosition(int position, const MODINSTRUMENT* pIns) const; - void ResetChannelEnvelopes(MODCHANNEL *pChn); - void ResetChannelEnvelope(MODCHANNEL_ENVINFO &env); - void SetDefaultInstrumentValues(MODINSTRUMENT *pIns); + void ResetChannelEnvelopes(MODCHANNEL *pChn) const; + void ResetChannelEnvelope(MODCHANNEL_ENVINFO &env) const; private: - PLUGINDEX __cdecl GetChannelPlugin(CHANNELINDEX nChn, bool respectMutes) const; - PLUGINDEX __cdecl GetActiveInstrumentPlugin(CHANNELINDEX, bool respectMutes) const; + PLUGINDEX __cdecl GetChannelPlugin(CHANNELINDEX nChn, PluginMutePriority respectMutes) const; + PLUGINDEX __cdecl GetActiveInstrumentPlugin(CHANNELINDEX, PluginMutePriority respectMutes) const; UINT GetBestMidiChan(const MODCHANNEL *pChn) const; void HandlePatternTransitionEvents(); - void BuildDefaultInstrument(); long GetSampleOffset(); public: - PLUGINDEX GetBestPlugin(CHANNELINDEX nChn, UINT priority, bool respectMutes); + PLUGINDEX GetBestPlugin(CHANNELINDEX nChn, PluginPriority priority, PluginMutePriority respectMutes) const; // A couple of functions for handling backwards jumps and stuff to prevent infinite loops when counting the mod length or rendering to wav. public: Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -2391,7 +2391,7 @@ // Check instrument plugins if ((pIns->nMidiChannel >= 1) && (pIns->nMidiChannel <= 16)) { - nPlugin = GetBestPlugin(nChn, PRIORITISE_INSTRUMENT, RESPECT_MUTES); + nPlugin = GetBestPlugin(nChn, PrioritiseInstrument, RespectMutes); if ((nPlugin) && (nPlugin <= MAX_MIXPLUGINS)) { pPlugin = m_MixPlugins[nPlugin-1].pMixPlugin; Modified: trunk/OpenMPT/soundlib/load_j2b.cpp =================================================================== --- trunk/OpenMPT/soundlib/load_j2b.cpp 2011-09-04 19:12:08 UTC (rev 1021) +++ trunk/OpenMPT/soundlib/load_j2b.cpp 2011-09-05 01:07:40 UTC (rev 1022) @@ -361,7 +361,6 @@ if(flags & AMENV_SUSTAIN) pMPTEnv->dwFlags |= ENV_SUSTAIN; if(flags & AMENV_LOOP) pMPTEnv->dwFlags |= ENV_LOOP; - pMPTEnv->nReleaseNode = ENV_RELEASE_NODE_UNSET; pMPTEnv->nNodes = min(numpoints, 10); // the buggy mod2j2b converter will actually NOT limit this to 10 points if the envelope is longer. pMPTEnv->nSustainStart = pMPTEnv->nSustainEnd = sustainpoint; @@ -402,7 +401,6 @@ if(flags & AMENV_SUSTAIN) pMPTEnv->dwFlags |= ENV_SUSTAIN; if(flags & AMENV_LOOP) pMPTEnv->dwFlags |= ENV_LOOP; - pMPTEnv->nReleaseNode = ENV_RELEASE_NODE_UNSET; pMPTEnv->nNodes = min(pAMEnv->numpoints + 1, 10); pMPTEnv->nSustainStart = pMPTEnv->nSustainEnd = pAMEnv->suslooppoint; @@ -551,12 +549,10 @@ if(Instruments[nIns] != nullptr) delete Instruments[nIns]; - MODINSTRUMENT *pIns = new MODINSTRUMENT; + MODINSTRUMENT *pIns = new MODINSTRUMENT(); if(pIns == nullptr) break; Instruments[nIns] = pIns; - MemsetZero(*pIns); - SetDefaultInstrumentValues(pIns); m_nInstruments = max(m_nInstruments, nIns); @@ -565,7 +561,6 @@ for(BYTE i = 0; i < 128; i++) { - pIns->NoteMap[i] = i + 1; pIns->Keyboard[i] = instheader->samplemap[i] + m_nSamples + 1; } @@ -662,12 +657,10 @@ if(Instruments[nIns] != nullptr) delete Instruments[nIns]; - MODINSTRUMENT *pIns = new MODINSTRUMENT; + MODINSTRUMENT *pIns = new MODINSTRUMENT(); if(pIns == nullptr) break; Instruments[nIns] = pIns; - MemsetZero(*pIns); - SetDefaultInstrumentValues(pIns); m_nInstruments = max(m_nInstruments, nIns); @@ -676,14 +669,10 @@ for(BYTE i = 0; i < 128; i++) { - pIns->NoteMap[i] = i + 1; pIns->Keyboard[i] = instheader->samplemap[i] + m_nSamples + 1; } - pIns->nGlobalVol = 64; - pIns->nPan = 128; pIns->nFadeOut = LittleEndianW(instheader->volenv.fadeout) << 5; - pIns->nPPC = NOTE_MIDDLEC - 1; Convert_RIFF_AM_Envelope(&instheader->volenv, &pIns->VolEnv, ENV_VOLUME); Convert_RIFF_AM_Envelope(&instheader->pitchenv, &pIns->PitchEnv, ENV_PITCH); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |