From: <sag...@us...> - 2009-08-16 11:55:18
|
Revision: 328 http://modplug.svn.sourceforge.net/modplug/?rev=328&view=rev Author: saga-games Date: 2009-08-16 11:55:06 +0000 (Sun, 16 Aug 2009) Log Message: ----------- [Fix] VST Editor: Patches are now saved in the folder specified by the user in the "save as" dialog (not the working directory) [Ref] Refactoring, part 3: The three envelopes are now sub-structs of MODINSTRUMENT to reduce redundancy. Based on the new structs, more parts of the code could be optimized. Modified Paths: -------------- trunk/OpenMPT/mptrack/AbstractVstEditor.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/ScaleEnvPointsDlg.cpp trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/soundlib/Dlsbank.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_fx.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/mptrack/AbstractVstEditor.cpp =================================================================== --- trunk/OpenMPT/mptrack/AbstractVstEditor.cpp 2009-08-16 11:46:32 UTC (rev 327) +++ trunk/OpenMPT/mptrack/AbstractVstEditor.cpp 2009-08-16 11:55:06 UTC (rev 328) @@ -113,8 +113,8 @@ if (m_pVstPlugin) { CFileDialog dlg(TRUE, "fxp", NULL, - OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_ENABLESIZING | OFN_NOREADONLYRETURN, - "VST Program (*.fxp)|*.fxp||", theApp.m_pMainWnd); + OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_ENABLESIZING | OFN_NOREADONLYRETURN, + "VST Program (*.fxp)|*.fxp||", theApp.m_pMainWnd); const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_PLUGINPRESETS); if(pszWdir[0]) dlg.m_ofn.lpstrInitialDir = pszWdir; @@ -122,10 +122,11 @@ if (!(dlg.DoModal() == IDOK)) return; - CMainFrame::SetWorkingDirectory(dlg.GetFileName(), DIR_PLUGINPRESETS, true); + CString sFile = dlg.GetPathName(); + CMainFrame::SetWorkingDirectory(sFile, DIR_PLUGINPRESETS, true); //TODO: exception handling to distinguish errors at this level. - if (!(m_pVstPlugin->LoadProgram(dlg.GetFileName()))) + if (!(m_pVstPlugin->LoadProgram(sFile))) ::AfxMessageBox("Error loading preset. Are you sure it is for this plugin?"); } } @@ -136,17 +137,18 @@ if (m_pVstPlugin) { CFileDialog dlg(FALSE, "fxp", NULL, - OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_ENABLESIZING | OFN_NOREADONLYRETURN, - "VST Program (*.fxp)|*.fxp||", theApp.m_pMainWnd); + OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_ENABLESIZING | OFN_NOREADONLYRETURN, + "VST Program (*.fxp)|*.fxp||", theApp.m_pMainWnd); const LPCTSTR pszWdir = CMainFrame::GetWorkingDirectory(DIR_PLUGINPRESETS); if(pszWdir[0]) dlg.m_ofn.lpstrInitialDir = pszWdir; if (!(dlg.DoModal() == IDOK)) return; - CMainFrame::SetWorkingDirectory(dlg.GetFileName(), DIR_PLUGINPRESETS, true); + CString sFile = dlg.GetPathName(); + CMainFrame::SetWorkingDirectory(sFile, DIR_PLUGINPRESETS, true); //TODO: exception handling - if (!(m_pVstPlugin->SaveProgram(dlg.GetFileName()))) + if (!(m_pVstPlugin->SaveProgram(sFile))) ::AfxMessageBox("Error saving preset."); } return; Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-08-16 11:46:32 UTC (rev 327) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-08-16 11:55:06 UTC (rev 328) @@ -2323,45 +2323,45 @@ switch(nEnv) { case ENV_PANNING: - pPoints = pIns->PanPoints; - pValues = pIns->PanEnv; - nPoints = pIns->nPanEnv; + pPoints = pIns->PanEnv.Ticks; + pValues = pIns->PanEnv.Values; + nPoints = pIns->PanEnv.nNodes; bLoop = (pIns->dwFlags & ENV_PANLOOP) ? TRUE : FALSE; bSus = (pIns->dwFlags & ENV_PANSUSTAIN) ? TRUE : FALSE; bCarry = (pIns->dwFlags & ENV_PANCARRY) ? TRUE : FALSE; - susBegin = pIns->nPanSustainBegin; - susEnd = pIns->nPanSustainEnd; - loopBegin = pIns->nPanLoopStart; - loopEnd = pIns->nPanLoopEnd; - releaseNode = pIns->nPanEnvReleaseNode; + susBegin = pIns->PanEnv.nSustainStart; + susEnd = pIns->PanEnv.nSustainEnd; + loopBegin = pIns->PanEnv.nLoopStart; + loopEnd = pIns->PanEnv.nLoopEnd; + releaseNode = pIns->PanEnv.nReleaseNode; break; case ENV_PITCH: - pPoints = pIns->PitchPoints; - pValues = pIns->PitchEnv; - nPoints = pIns->nPitchEnv; + pPoints = pIns->PitchEnv.Ticks; + pValues = pIns->PitchEnv.Values; + nPoints = pIns->PitchEnv.nNodes; bLoop = (pIns->dwFlags & ENV_PITCHLOOP) ? TRUE : FALSE; bSus = (pIns->dwFlags & ENV_PITCHSUSTAIN) ? TRUE : FALSE; bCarry = (pIns->dwFlags & ENV_PITCHCARRY) ? TRUE : FALSE; - susBegin = pIns->nPitchSustainBegin; - susEnd = pIns->nPitchSustainEnd; - loopBegin = pIns->nPitchLoopStart; - loopEnd = pIns->nPitchLoopEnd; - releaseNode = pIns->nPitchEnvReleaseNode; + susBegin = pIns->PitchEnv.nSustainStart; + susEnd = pIns->PitchEnv.nSustainEnd; + loopBegin = pIns->PitchEnv.nLoopStart; + loopEnd = pIns->PitchEnv.nLoopEnd; + releaseNode = pIns->PitchEnv.nReleaseNode; break; default: - pPoints = pIns->VolPoints; - pValues = pIns->VolEnv; - nPoints = pIns->nVolEnv; + pPoints = pIns->VolEnv.Ticks; + pValues = pIns->VolEnv.Values; + nPoints = pIns->VolEnv.nNodes; bLoop = (pIns->dwFlags & ENV_VOLLOOP) ? TRUE : FALSE; bSus = (pIns->dwFlags & ENV_VOLSUSTAIN) ? TRUE : FALSE; bCarry = (pIns->dwFlags & ENV_VOLCARRY) ? TRUE : FALSE; - susBegin = pIns->nVolSustainBegin; - susEnd = pIns->nVolSustainEnd; - loopBegin = pIns->nVolLoopStart; - loopEnd = pIns->nVolLoopEnd; - releaseNode = pIns->nVolEnvReleaseNode; + susBegin = pIns->VolEnv.nSustainStart; + susEnd = pIns->VolEnv.nSustainEnd; + loopBegin = pIns->VolEnv.nLoopStart; + loopEnd = pIns->VolEnv.nLoopEnd; + releaseNode = pIns->VolEnv.nReleaseNode; break; } strcpy(s, pszEnvHdr); @@ -2440,48 +2440,48 @@ switch(nEnv) { case ENV_PANNING: - pPoints = pIns->PanPoints; - pValues = pIns->PanEnv; - pIns->nPanEnv = nPoints; + pPoints = pIns->PanEnv.Ticks; + pValues = pIns->PanEnv.Values; + pIns->PanEnv.nNodes = nPoints; pIns->dwFlags &= ~(ENV_PANLOOP|ENV_PANSUSTAIN|ENV_PANCARRY); if (bLoop) pIns->dwFlags |= ENV_PANLOOP; if (bSus) pIns->dwFlags |= ENV_PANSUSTAIN; if (bCarry) pIns->dwFlags |= ENV_PANCARRY; - pIns->nPanSustainBegin = susBegin; - pIns->nPanSustainEnd = susEnd; - pIns->nPanLoopStart = loopBegin; - pIns->nPanLoopEnd = loopEnd; - pIns->nPanEnvReleaseNode = releaseNode; + pIns->PanEnv.nSustainStart = susBegin; + pIns->PanEnv.nSustainEnd = susEnd; + pIns->PanEnv.nLoopStart = loopBegin; + pIns->PanEnv.nLoopEnd = loopEnd; + pIns->PanEnv.nReleaseNode = releaseNode; break; case ENV_PITCH: - pPoints = pIns->PitchPoints; - pValues = pIns->PitchEnv; - pIns->nPitchEnv = nPoints; + pPoints = pIns->PitchEnv.Ticks; + pValues = pIns->PitchEnv.Values; + pIns->PitchEnv.nNodes = nPoints; pIns->dwFlags &= ~(ENV_PITCHLOOP|ENV_PITCHSUSTAIN|ENV_PITCHCARRY); if (bLoop) pIns->dwFlags |= ENV_PITCHLOOP; if (bSus) pIns->dwFlags |= ENV_PITCHSUSTAIN; if (bCarry) pIns->dwFlags |= ENV_PITCHCARRY; - pIns->nPitchSustainBegin = susBegin; - pIns->nPitchSustainEnd = susEnd; - pIns->nPitchLoopStart = loopBegin; - pIns->nPitchLoopEnd = loopEnd; - pIns->nPitchEnvReleaseNode = releaseNode; + pIns->PitchEnv.nSustainStart = susBegin; + pIns->PitchEnv.nSustainEnd = susEnd; + pIns->PitchEnv.nLoopStart = loopBegin; + pIns->PitchEnv.nLoopEnd = loopEnd; + pIns->PitchEnv.nReleaseNode = releaseNode; break; default: - pPoints = pIns->VolPoints; - pValues = pIns->VolEnv; - pIns->nVolEnv = nPoints; + pPoints = pIns->VolEnv.Ticks; + pValues = pIns->VolEnv.Values; + pIns->VolEnv.nNodes = nPoints; pIns->dwFlags &= ~(ENV_VOLLOOP|ENV_VOLSUSTAIN|ENV_VOLCARRY); if (bLoop) pIns->dwFlags |= ENV_VOLLOOP; if (bSus) pIns->dwFlags |= ENV_VOLSUSTAIN; if (bCarry) pIns->dwFlags |= ENV_VOLCARRY; - pIns->nVolSustainBegin = susBegin; - pIns->nVolSustainEnd = susEnd; - pIns->nVolLoopStart = loopBegin; - pIns->nVolLoopEnd = loopEnd; - pIns->nVolEnvReleaseNode = releaseNode; + pIns->VolEnv.nSustainStart = susBegin; + pIns->VolEnv.nSustainEnd = susEnd; + pIns->VolEnv.nLoopStart = loopBegin; + pIns->VolEnv.nLoopEnd = loopEnd; + pIns->VolEnv.nReleaseNode = releaseNode; break; } int oldn = 0; @@ -2510,15 +2510,15 @@ switch(nEnv) { case ENV_PANNING: - pIns->nPanEnvReleaseNode = r; + pIns->PanEnv.nReleaseNode = r; break; case ENV_PITCH: - pIns->nPitchEnvReleaseNode = r; + pIns->PitchEnv.nReleaseNode = r; break; default: - pIns->nVolEnvReleaseNode = r; + pIns->VolEnv.nReleaseNode = r; break; } } Modified: trunk/OpenMPT/mptrack/ScaleEnvPointsDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/ScaleEnvPointsDlg.cpp 2009-08-16 11:46:32 UTC (rev 327) +++ trunk/OpenMPT/mptrack/ScaleEnvPointsDlg.cpp 2009-08-16 11:55:06 UTC (rev 328) @@ -50,18 +50,18 @@ switch(m_Env) { case ENV_VOLUME: - array = &m_pInstrument->VolPoints; - arraySize = &m_pInstrument->nVolEnv; + array = &m_pInstrument->VolEnv.Ticks; + arraySize = &m_pInstrument->VolEnv.nNodes; break; case ENV_PANNING: - array = &m_pInstrument->PanPoints; - arraySize = &m_pInstrument->nPanEnv; + array = &m_pInstrument->PanEnv.Ticks; + arraySize = &m_pInstrument->PanEnv.nNodes; break; case ENV_PITCH: - array = &m_pInstrument->PitchPoints; - arraySize = &m_pInstrument->nPitchEnv; + array = &m_pInstrument->PitchEnv.Ticks; + arraySize = &m_pInstrument->PitchEnv.nNodes; break; } Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2009-08-16 11:46:32 UTC (rev 327) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2009-08-16 11:55:06 UTC (rev 328) @@ -225,13 +225,13 @@ switch(m_nEnv) { case ENV_VOLUME: - if (nPoint < (int)pIns->nVolEnv) return pIns->VolPoints[nPoint]; + if (nPoint < (int)pIns->VolEnv.nNodes) return pIns->VolEnv.Ticks[nPoint]; break; case ENV_PANNING: - if (nPoint < (int)pIns->nPanEnv) return pIns->PanPoints[nPoint]; + if (nPoint < (int)pIns->PanEnv.nNodes) return pIns->PanEnv.Ticks[nPoint]; break; case ENV_PITCH: - if (nPoint < (int)pIns->nPitchEnv) return pIns->PitchPoints[nPoint]; + if (nPoint < (int)pIns->PitchEnv.nNodes) return pIns->PitchEnv.Ticks[nPoint]; break; } } @@ -253,13 +253,13 @@ switch(m_nEnv) { case ENV_VOLUME: - if (nPoint < (int)pIns->nVolEnv) return pIns->VolEnv[nPoint]; + if (nPoint < (int)pIns->VolEnv.nNodes) return pIns->VolEnv.Values[nPoint]; break; case ENV_PANNING: - if (nPoint < (int)pIns->nPanEnv) return pIns->PanEnv[nPoint]; + if (nPoint < (int)pIns->PanEnv.nNodes) return pIns->PanEnv.Values[nPoint]; break; case ENV_PITCH: - if (nPoint < (int)pIns->nPitchEnv) return pIns->PitchEnv[nPoint]; + if (nPoint < (int)pIns->PitchEnv.nNodes) return pIns->PitchEnv.Values[nPoint]; break; } } @@ -285,19 +285,19 @@ switch(m_nEnv) { case ENV_VOLUME: - maxpoints = pIns->nVolEnv; - pPoints = pIns->VolPoints; - pData = pIns->VolEnv; + maxpoints = pIns->VolEnv.nNodes; + pPoints = pIns->VolEnv.Ticks; + pData = pIns->VolEnv.Values; break; case ENV_PANNING: - maxpoints = pIns->nPanEnv; - pPoints = pIns->PanPoints; - pData = pIns->PanEnv; + maxpoints = pIns->PanEnv.nNodes; + pPoints = pIns->PanEnv.Ticks; + pData = pIns->PanEnv.Values; break; case ENV_PITCH: - maxpoints = pIns->nPitchEnv; - pPoints = pIns->PitchPoints; - pData = pIns->PitchEnv; + maxpoints = pIns->PitchEnv.nNodes; + pPoints = pIns->PitchEnv.Ticks; + pData = pIns->PitchEnv.Values; break; } if (!nPoint) nTick = 0; @@ -345,13 +345,13 @@ switch(m_nEnv) { case ENV_VOLUME: - if (pIns->nVolEnv) return pIns->nVolEnv; + if (pIns->VolEnv.nNodes) return pIns->VolEnv.nNodes; break; case ENV_PANNING: - if (pIns->nPanEnv) return pIns->nPanEnv; + if (pIns->PanEnv.nNodes) return pIns->PanEnv.nNodes; break; case ENV_PITCH: - if (pIns->nPitchEnv) return pIns->nPitchEnv; + if (pIns->PitchEnv.nNodes) return pIns->PitchEnv.nNodes; break; } } @@ -465,9 +465,9 @@ { switch(m_nEnv) { - case ENV_VOLUME: return pIns->nVolLoopStart; - case ENV_PANNING: return pIns->nPanLoopStart; - case ENV_PITCH: return pIns->nPitchLoopStart; + case ENV_VOLUME: return pIns->VolEnv.nLoopStart; + case ENV_PANNING: return pIns->PanEnv.nLoopStart; + case ENV_PITCH: return pIns->PitchEnv.nLoopStart; } } } @@ -487,9 +487,9 @@ { switch(m_nEnv) { - case ENV_VOLUME: return pIns->nVolLoopEnd; - case ENV_PANNING: return pIns->nPanLoopEnd; - case ENV_PITCH: return pIns->nPitchLoopEnd; + case ENV_VOLUME: return pIns->VolEnv.nLoopEnd; + case ENV_PANNING: return pIns->PanEnv.nLoopEnd; + case ENV_PITCH: return pIns->PitchEnv.nLoopEnd; } } } @@ -509,9 +509,9 @@ { switch(m_nEnv) { - case ENV_VOLUME: return pIns->nVolSustainBegin; - case ENV_PANNING: return pIns->nPanSustainBegin; - case ENV_PITCH: return pIns->nPitchSustainBegin; + case ENV_VOLUME: return pIns->VolEnv.nSustainStart; + case ENV_PANNING: return pIns->PanEnv.nSustainStart; + case ENV_PITCH: return pIns->PitchEnv.nSustainStart; } } } @@ -531,9 +531,9 @@ { switch(m_nEnv) { - case ENV_VOLUME: return pIns->nVolSustainEnd; - case ENV_PANNING: return pIns->nPanSustainEnd; - case ENV_PITCH: return pIns->nPitchSustainEnd; + case ENV_VOLUME: return pIns->VolEnv.nSustainEnd; + case ENV_PANNING: return pIns->PanEnv.nSustainEnd; + case ENV_PITCH: return pIns->PitchEnv.nSustainEnd; } } } @@ -610,26 +610,26 @@ switch(m_nEnv) { case ENV_VOLUME: - if (nPoint != pIns->nVolLoopStart) + if (nPoint != pIns->VolEnv.nLoopStart) { - pIns->nVolLoopStart = (BYTE)nPoint; - if (pIns->nVolLoopEnd < nPoint) pIns->nVolLoopEnd = (BYTE)nPoint; + pIns->VolEnv.nLoopStart = (BYTE)nPoint; + if (pIns->VolEnv.nLoopEnd < nPoint) pIns->VolEnv.nLoopEnd = (BYTE)nPoint; return TRUE; } break; case ENV_PANNING: - if (nPoint != pIns->nPanLoopStart) + if (nPoint != pIns->PanEnv.nLoopStart) { - pIns->nPanLoopStart = (BYTE)nPoint; - if (pIns->nPanLoopEnd < nPoint) pIns->nPanLoopEnd = (BYTE)nPoint; + pIns->PanEnv.nLoopStart = (BYTE)nPoint; + if (pIns->PanEnv.nLoopEnd < nPoint) pIns->PanEnv.nLoopEnd = (BYTE)nPoint; return TRUE; } break; case ENV_PITCH: - if (nPoint != pIns->nPitchLoopStart) + if (nPoint != pIns->PitchEnv.nLoopStart) { - pIns->nPitchLoopStart = (BYTE)nPoint; - if (pIns->nPitchLoopEnd < nPoint) pIns->nPitchLoopEnd = (BYTE)nPoint; + pIns->PitchEnv.nLoopStart = (BYTE)nPoint; + if (pIns->PitchEnv.nLoopEnd < nPoint) pIns->PitchEnv.nLoopEnd = (BYTE)nPoint; return TRUE; } break; @@ -653,26 +653,26 @@ switch(m_nEnv) { case ENV_VOLUME: - if (nPoint != pIns->nVolLoopEnd) + if (nPoint != pIns->VolEnv.nLoopEnd) { - pIns->nVolLoopEnd = (BYTE)nPoint; - if (pIns->nVolLoopStart > nPoint) pIns->nVolLoopStart = (BYTE)nPoint; + pIns->VolEnv.nLoopEnd = (BYTE)nPoint; + if (pIns->VolEnv.nLoopStart > nPoint) pIns->VolEnv.nLoopStart = (BYTE)nPoint; return TRUE; } break; case ENV_PANNING: - if (nPoint != pIns->nPanLoopEnd) + if (nPoint != pIns->PanEnv.nLoopEnd) { - pIns->nPanLoopEnd = (BYTE)nPoint; - if (pIns->nPanLoopStart > nPoint) pIns->nPanLoopStart = (BYTE)nPoint; + pIns->PanEnv.nLoopEnd = (BYTE)nPoint; + if (pIns->PanEnv.nLoopStart > nPoint) pIns->PanEnv.nLoopStart = (BYTE)nPoint; return TRUE; } break; case ENV_PITCH: - if (nPoint != pIns->nPitchLoopEnd) + if (nPoint != pIns->PitchEnv.nLoopEnd) { - pIns->nPitchLoopEnd = (BYTE)nPoint; - if (pIns->nPitchLoopStart > nPoint) pIns->nPitchLoopStart = (BYTE)nPoint; + pIns->PitchEnv.nLoopEnd = (BYTE)nPoint; + if (pIns->PitchEnv.nLoopStart > nPoint) pIns->PitchEnv.nLoopStart = (BYTE)nPoint; return TRUE; } break; @@ -696,26 +696,26 @@ switch(m_nEnv) { case ENV_VOLUME: - if (nPoint != pIns->nVolSustainBegin) + if (nPoint != pIns->VolEnv.nSustainStart) { - pIns->nVolSustainBegin = (BYTE)nPoint; - if ((pIns->nVolSustainEnd < nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->nVolSustainEnd = (BYTE)nPoint; + pIns->VolEnv.nSustainStart = (BYTE)nPoint; + if ((pIns->VolEnv.nSustainEnd < nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->VolEnv.nSustainEnd = (BYTE)nPoint; return TRUE; } break; case ENV_PANNING: - if (nPoint != pIns->nPanSustainBegin) + if (nPoint != pIns->PanEnv.nSustainStart) { - pIns->nPanSustainBegin = (BYTE)nPoint; - if ((pIns->nPanSustainEnd < nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->nPanSustainEnd = (BYTE)nPoint; + pIns->PanEnv.nSustainStart = (BYTE)nPoint; + if ((pIns->PanEnv.nSustainEnd < nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->PanEnv.nSustainEnd = (BYTE)nPoint; return TRUE; } break; case ENV_PITCH: - if (nPoint != pIns->nPitchSustainBegin) + if (nPoint != pIns->PitchEnv.nSustainStart) { - pIns->nPitchSustainBegin = (BYTE)nPoint; - if ((pIns->nPitchSustainEnd < nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->nPitchSustainEnd = (BYTE)nPoint; + pIns->PitchEnv.nSustainStart = (BYTE)nPoint; + if ((pIns->PitchEnv.nSustainEnd < nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->PitchEnv.nSustainEnd = (BYTE)nPoint; return TRUE; } break; @@ -739,26 +739,26 @@ switch(m_nEnv) { case ENV_VOLUME: - if (nPoint != pIns->nVolSustainEnd) + if (nPoint != pIns->VolEnv.nSustainEnd) { - pIns->nVolSustainEnd = (BYTE)nPoint; - if ((pIns->nVolSustainBegin > nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->nVolSustainBegin = (BYTE)nPoint; + pIns->VolEnv.nSustainEnd = (BYTE)nPoint; + if ((pIns->VolEnv.nSustainStart > nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->VolEnv.nSustainStart = (BYTE)nPoint; return TRUE; } break; case ENV_PANNING: - if (nPoint != pIns->nPanSustainEnd) + if (nPoint != pIns->PanEnv.nSustainEnd) { - pIns->nPanSustainEnd = (BYTE)nPoint; - if ((pIns->nPanSustainBegin > nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->nPanSustainBegin = (BYTE)nPoint; + pIns->PanEnv.nSustainEnd = (BYTE)nPoint; + if ((pIns->PanEnv.nSustainStart > nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->PanEnv.nSustainStart = (BYTE)nPoint; return TRUE; } break; case ENV_PITCH: - if (nPoint != pIns->nPitchSustainEnd) + if (nPoint != pIns->PitchEnv.nSustainEnd) { - pIns->nPitchSustainEnd = (BYTE)nPoint; - if ((pIns->nPitchSustainBegin > nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->nPitchSustainBegin = (BYTE)nPoint; + pIns->PitchEnv.nSustainEnd = (BYTE)nPoint; + if ((pIns->PitchEnv.nSustainStart > nPoint) || (pSndFile->m_nType & MOD_TYPE_XM)) pIns->PitchEnv.nSustainStart = (BYTE)nPoint; return TRUE; } break; @@ -899,13 +899,13 @@ if (bEnable) { pIns->dwFlags |= ENV_VOLUME; - if (!pIns->nVolEnv) + if (!pIns->VolEnv.nNodes) { - pIns->VolEnv[0] = 64; - pIns->VolEnv[1] = 64; - pIns->VolPoints[0] = 0; - pIns->VolPoints[1] = 10; - pIns->nVolEnv = 2; + pIns->VolEnv.Values[0] = 64; + pIns->VolEnv.Values[1] = 64; + pIns->VolEnv.Ticks[0] = 0; + pIns->VolEnv.Ticks[1] = 10; + pIns->VolEnv.nNodes = 2; InvalidateRect(NULL, FALSE); } } else @@ -932,13 +932,13 @@ if (bEnable) { pIns->dwFlags |= ENV_PANNING; - if (!pIns->nPanEnv) + if (!pIns->PanEnv.nNodes) { - pIns->PanEnv[0] = 32; - pIns->PanEnv[1] = 32; - pIns->PanPoints[0] = 0; - pIns->PanPoints[1] = 10; - pIns->nPanEnv = 2; + pIns->PanEnv.Values[0] = 32; + pIns->PanEnv.Values[1] = 32; + pIns->PanEnv.Ticks[0] = 0; + pIns->PanEnv.Ticks[1] = 10; + pIns->PanEnv.nNodes = 2; InvalidateRect(NULL, FALSE); } } else @@ -966,13 +966,13 @@ { pIns->dwFlags |= ENV_PITCH; pIns->dwFlags &= ~ENV_FILTER; - if (!pIns->nPitchEnv) + if (!pIns->PitchEnv.nNodes) { - pIns->PitchEnv[0] = 32; - pIns->PitchEnv[1] = 32; - pIns->PitchPoints[0] = 0; - pIns->PitchPoints[1] = 10; - pIns->nPitchEnv = 2; + pIns->PitchEnv.Values[0] = 32; + pIns->PitchEnv.Values[1] = 32; + pIns->PitchEnv.Ticks[0] = 0; + pIns->PitchEnv.Ticks[1] = 10; + pIns->PitchEnv.nNodes = 2; InvalidateRect(NULL, FALSE); } } else @@ -999,13 +999,13 @@ if ((bEnable) && (pSndFile->m_nType & (MOD_TYPE_IT|MOD_TYPE_MPT))) { pIns->dwFlags |= (ENV_PITCH|ENV_FILTER); - if (!pIns->nPitchEnv) + if (!pIns->PitchEnv.nNodes) { - pIns->PitchEnv[0] = 64; - pIns->PitchEnv[1] = 64; - pIns->PitchPoints[0] = 0; - pIns->PitchPoints[1] = 10; - pIns->nPitchEnv = 2; + pIns->PitchEnv.Values[0] = 64; + pIns->PitchEnv.Values[1] = 64; + pIns->PitchEnv.Ticks[0] = 0; + pIns->PitchEnv.Ticks[1] = 10; + pIns->PitchEnv.nNodes = 2; InvalidateRect(NULL, FALSE); } } else @@ -1360,11 +1360,11 @@ if (pIns) { switch(m_nEnv) { case ENV_VOLUME: - return pIns->nVolEnvReleaseNode; + return pIns->VolEnv.nReleaseNode; case ENV_PANNING: - return pIns->nPanEnvReleaseNode; + return pIns->PanEnv.nReleaseNode; case ENV_PITCH: - return pIns->nPitchEnvReleaseNode; + return pIns->PitchEnv.nReleaseNode; default: return ENV_RELEASE_NODE_UNSET; } @@ -1383,11 +1383,11 @@ if (pIns) { switch(m_nEnv) { case ENV_VOLUME: - return pIns->VolEnv[EnvGetReleaseNode()]; + return pIns->VolEnv.Values[EnvGetReleaseNode()]; case ENV_PANNING: - return pIns->PanEnv[EnvGetReleaseNode()]; + return pIns->PanEnv.Values[EnvGetReleaseNode()]; case ENV_PITCH: - return pIns->PitchEnv[EnvGetReleaseNode()]; + return pIns->PitchEnv.Values[EnvGetReleaseNode()]; default: return 0; } @@ -1406,11 +1406,11 @@ if (pIns) { switch(m_nEnv) { case ENV_VOLUME: - return pIns->VolPoints[EnvGetReleaseNode()]; + return pIns->VolEnv.Ticks[EnvGetReleaseNode()]; case ENV_PANNING: - return pIns->PanPoints[EnvGetReleaseNode()]; + return pIns->PanEnv.Ticks[EnvGetReleaseNode()]; case ENV_PITCH: - return pIns->PitchPoints[EnvGetReleaseNode()]; + return pIns->PitchEnv.Ticks[EnvGetReleaseNode()]; default: return 0; } @@ -2056,24 +2056,24 @@ MODINSTRUMENT *pIns = pSndFile->Instruments[m_nInstrument]; switch(m_nEnv) { case ENV_VOLUME: - if (pIns->nVolEnvReleaseNode == node) { - pIns->nVolEnvReleaseNode = ENV_RELEASE_NODE_UNSET; + if (pIns->VolEnv.nReleaseNode == node) { + pIns->VolEnv.nReleaseNode = ENV_RELEASE_NODE_UNSET; } else { - pIns->nVolEnvReleaseNode = node; + pIns->VolEnv.nReleaseNode = node; } break; case ENV_PANNING: - if (pIns->nPanEnvReleaseNode == node) { - pIns->nPanEnvReleaseNode = ENV_RELEASE_NODE_UNSET; + if (pIns->PanEnv.nReleaseNode == node) { + pIns->PanEnv.nReleaseNode = ENV_RELEASE_NODE_UNSET; } else { - pIns->nPanEnvReleaseNode = node; + pIns->PanEnv.nReleaseNode = node; } break; case ENV_PITCH: - if (pIns->nPitchEnvReleaseNode == node) { - pIns->nPitchEnvReleaseNode = ENV_RELEASE_NODE_UNSET; + if (pIns->PitchEnv.nReleaseNode == node) { + pIns->PitchEnv.nReleaseNode = ENV_RELEASE_NODE_UNSET; } else { - pIns->nPitchEnvReleaseNode = node; + pIns->PitchEnv.nReleaseNode = node; } break; } @@ -2159,59 +2159,59 @@ switch(m_nEnv) { case ENV_VOLUME: - if (pIns->nVolEnv > 1) + if (pIns->VolEnv.nNodes > 1) { - pIns->nVolEnv--; - for (UINT i=nPoint; i<pIns->nVolEnv; i++) + pIns->VolEnv.nNodes--; + for (UINT i=nPoint; i<pIns->VolEnv.nNodes; i++) { - pIns->VolPoints[i] = pIns->VolPoints[i+1]; - pIns->VolEnv[i] = pIns->VolEnv[i+1]; + pIns->VolEnv.Ticks[i] = pIns->VolEnv.Ticks[i+1]; + pIns->VolEnv.Values[i] = pIns->VolEnv.Values[i+1]; } - if (nPoint >= pIns->nVolEnv) nPoint = pIns->nVolEnv-1; - if (pIns->nVolLoopStart > nPoint) pIns->nVolLoopStart--; - if (pIns->nVolLoopEnd > nPoint) pIns->nVolLoopEnd--; - if (pIns->nVolSustainBegin > nPoint) pIns->nVolSustainBegin--; - if (pIns->nVolSustainEnd > nPoint) pIns->nVolSustainEnd--; - if (pIns->nVolEnvReleaseNode>nPoint && pIns->nVolEnvReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->nVolEnvReleaseNode--; - pIns->VolPoints[0] = 0; + if (nPoint >= pIns->VolEnv.nNodes) nPoint = pIns->VolEnv.nNodes-1; + if (pIns->VolEnv.nLoopStart > nPoint) pIns->VolEnv.nLoopStart--; + if (pIns->VolEnv.nLoopEnd > nPoint) pIns->VolEnv.nLoopEnd--; + if (pIns->VolEnv.nSustainStart > nPoint) pIns->VolEnv.nSustainStart--; + if (pIns->VolEnv.nSustainEnd > nPoint) pIns->VolEnv.nSustainEnd--; + if (pIns->VolEnv.nReleaseNode>nPoint && pIns->VolEnv.nReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->VolEnv.nReleaseNode--; + pIns->VolEnv.Ticks[0] = 0; bOk = TRUE; } break; case ENV_PANNING: - if (pIns->nPanEnv > 1) + if (pIns->PanEnv.nNodes > 1) { - pIns->nPanEnv--; - for (UINT i=nPoint; i<pIns->nPanEnv; i++) + pIns->PanEnv.nNodes--; + for (UINT i=nPoint; i<pIns->PanEnv.nNodes; i++) { - pIns->PanPoints[i] = pIns->PanPoints[i+1]; - pIns->PanEnv[i] = pIns->PanEnv[i+1]; + pIns->PanEnv.Ticks[i] = pIns->PanEnv.Ticks[i+1]; + pIns->PanEnv.Values[i] = pIns->PanEnv.Values[i+1]; } - if (nPoint >= pIns->nPanEnv) nPoint = pIns->nPanEnv-1; - if (pIns->nPanLoopStart > nPoint) pIns->nPanLoopStart--; - if (pIns->nPanLoopEnd > nPoint) pIns->nPanLoopEnd--; - if (pIns->nPanSustainBegin > nPoint) pIns->nPanSustainBegin--; - if (pIns->nPanSustainEnd > nPoint) pIns->nPanSustainEnd--; - if (pIns->nPanEnvReleaseNode>nPoint && pIns->nPanEnvReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->nPanEnvReleaseNode--; - pIns->PanPoints[0] = 0; + if (nPoint >= pIns->PanEnv.nNodes) nPoint = pIns->PanEnv.nNodes-1; + if (pIns->PanEnv.nLoopStart > nPoint) pIns->PanEnv.nLoopStart--; + if (pIns->PanEnv.nLoopEnd > nPoint) pIns->PanEnv.nLoopEnd--; + if (pIns->PanEnv.nSustainStart > nPoint) pIns->PanEnv.nSustainStart--; + if (pIns->PanEnv.nSustainEnd > nPoint) pIns->PanEnv.nSustainEnd--; + if (pIns->PanEnv.nReleaseNode>nPoint && pIns->PanEnv.nReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->PanEnv.nReleaseNode--; + pIns->PanEnv.Ticks[0] = 0; bOk = TRUE; } break; case ENV_PITCH: - if (pIns->nPitchEnv > 1) + if (pIns->PitchEnv.nNodes > 1) { - pIns->nPitchEnv--; - for (UINT i=nPoint; i<pIns->nPitchEnv; i++) + pIns->PitchEnv.nNodes--; + for (UINT i=nPoint; i<pIns->PitchEnv.nNodes; i++) { - pIns->PitchPoints[i] = pIns->PitchPoints[i+1]; - pIns->PitchEnv[i] = pIns->PitchEnv[i+1]; + pIns->PitchEnv.Ticks[i] = pIns->PitchEnv.Ticks[i+1]; + pIns->PitchEnv.Values[i] = pIns->PitchEnv.Values[i+1]; } - if (nPoint >= pIns->nPitchEnv) nPoint = pIns->nPitchEnv-1; - if (pIns->nPitchLoopStart > nPoint) pIns->nPitchLoopStart--; - if (pIns->nPitchLoopEnd > nPoint) pIns->nPitchLoopEnd--; - if (pIns->nPitchSustainBegin > nPoint) pIns->nPitchSustainBegin--; - if (pIns->nPitchSustainEnd > nPoint) pIns->nPitchSustainEnd--; - if (pIns->nPitchEnvReleaseNode>nPoint && pIns->nPitchEnvReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->nPitchEnvReleaseNode--; - pIns->PitchPoints[0] = 0; + if (nPoint >= pIns->PitchEnv.nNodes) nPoint = pIns->PitchEnv.nNodes-1; + if (pIns->PitchEnv.nLoopStart > nPoint) pIns->PitchEnv.nLoopStart--; + if (pIns->PitchEnv.nLoopEnd > nPoint) pIns->PitchEnv.nLoopEnd--; + if (pIns->PitchEnv.nSustainStart > nPoint) pIns->PitchEnv.nSustainStart--; + if (pIns->PitchEnv.nSustainEnd > nPoint) pIns->PitchEnv.nSustainEnd--; + if (pIns->PitchEnv.nReleaseNode>nPoint && pIns->PitchEnv.nReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->PitchEnv.nReleaseNode--; + pIns->PitchEnv.Ticks[0] = 0; bOk = TRUE; } break; @@ -2247,83 +2247,83 @@ if (nTick >= 0) switch(m_nEnv) { case ENV_VOLUME: - if (pIns->nVolEnv < maxpoints) + if (pIns->VolEnv.nNodes < maxpoints) { - if (!pIns->nVolEnv) + if (!pIns->VolEnv.nNodes) { - pIns->VolPoints[0] = 0; - pIns->VolEnv[0] = 64; - pIns->nVolEnv = 1; + pIns->VolEnv.Ticks[0] = 0; + pIns->VolEnv.Values[0] = 64; + pIns->VolEnv.nNodes = 1; } UINT i = 0; - for (i=0; i<pIns->nVolEnv; i++) if (nTick <= pIns->VolPoints[i]) break; - for (UINT j=pIns->nVolEnv; j>i; j--) + for (i=0; i<pIns->VolEnv.nNodes; i++) if (nTick <= pIns->VolEnv.Ticks[i]) break; + for (UINT j=pIns->VolEnv.nNodes; j>i; j--) { - pIns->VolPoints[j] = pIns->VolPoints[j-1]; - pIns->VolEnv[j] = pIns->VolEnv[j-1]; + pIns->VolEnv.Ticks[j] = pIns->VolEnv.Ticks[j-1]; + pIns->VolEnv.Values[j] = pIns->VolEnv.Values[j-1]; } - pIns->VolPoints[i] = (WORD)nTick; - pIns->VolEnv[i] = (BYTE)nValue; - pIns->nVolEnv++; - if (pIns->nVolLoopStart >= i) pIns->nVolLoopStart++; - if (pIns->nVolLoopEnd >= i) pIns->nVolLoopEnd++; - if (pIns->nVolSustainBegin >= i) pIns->nVolSustainBegin++; - if (pIns->nVolSustainEnd >= i) pIns->nVolSustainEnd++; - if (pIns->nVolEnvReleaseNode>=i && pIns->nVolEnvReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->nVolEnvReleaseNode++; + pIns->VolEnv.Ticks[i] = (WORD)nTick; + pIns->VolEnv.Values[i] = (BYTE)nValue; + pIns->VolEnv.nNodes++; + if (pIns->VolEnv.nLoopStart >= i) pIns->VolEnv.nLoopStart++; + if (pIns->VolEnv.nLoopEnd >= i) pIns->VolEnv.nLoopEnd++; + if (pIns->VolEnv.nSustainStart >= i) pIns->VolEnv.nSustainStart++; + if (pIns->VolEnv.nSustainEnd >= i) pIns->VolEnv.nSustainEnd++; + if (pIns->VolEnv.nReleaseNode>=i && pIns->VolEnv.nReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->VolEnv.nReleaseNode++; bOk = TRUE; } break; case ENV_PANNING: - if (pIns->nPanEnv < maxpoints) + if (pIns->PanEnv.nNodes < maxpoints) { - if (!pIns->nPanEnv) + if (!pIns->PanEnv.nNodes) { - pIns->PanPoints[0] = 0; - pIns->PanEnv[0] = 32; - pIns->nPanEnv = 1; + pIns->PanEnv.Ticks[0] = 0; + pIns->PanEnv.Values[0] = 32; + pIns->PanEnv.nNodes = 1; } UINT i = 0; - for (i=0; i<pIns->nPanEnv; i++) if (nTick <= pIns->PanPoints[i]) break; - for (UINT j=pIns->nPanEnv; j>i; j--) + for (i=0; i<pIns->PanEnv.nNodes; i++) if (nTick <= pIns->PanEnv.Ticks[i]) break; + for (UINT j=pIns->PanEnv.nNodes; j>i; j--) { - pIns->PanPoints[j] = pIns->PanPoints[j-1]; - pIns->PanEnv[j] = pIns->PanEnv[j-1]; + pIns->PanEnv.Ticks[j] = pIns->PanEnv.Ticks[j-1]; + pIns->PanEnv.Values[j] = pIns->PanEnv.Values[j-1]; } - pIns->PanPoints[i] = (WORD)nTick; - pIns->PanEnv[i] =(BYTE)nValue; - pIns->nPanEnv++; - if (pIns->nPanLoopStart >= i) pIns->nPanLoopStart++; - if (pIns->nPanLoopEnd >= i) pIns->nPanLoopEnd++; - if (pIns->nPanSustainBegin >= i) pIns->nPanSustainBegin++; - if (pIns->nPanSustainEnd >= i) pIns->nPanSustainEnd++; - if (pIns->nPanEnvReleaseNode>=i && pIns->nPanEnvReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->nPanEnvReleaseNode++; + pIns->PanEnv.Ticks[i] = (WORD)nTick; + pIns->PanEnv.Values[i] =(BYTE)nValue; + pIns->PanEnv.nNodes++; + if (pIns->PanEnv.nLoopStart >= i) pIns->PanEnv.nLoopStart++; + if (pIns->PanEnv.nLoopEnd >= i) pIns->PanEnv.nLoopEnd++; + if (pIns->PanEnv.nSustainStart >= i) pIns->PanEnv.nSustainStart++; + if (pIns->PanEnv.nSustainEnd >= i) pIns->PanEnv.nSustainEnd++; + if (pIns->PanEnv.nReleaseNode>=i && pIns->PanEnv.nReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->PanEnv.nReleaseNode++; bOk = TRUE; } break; case ENV_PITCH: - if (pIns->nPitchEnv < maxpoints) + if (pIns->PitchEnv.nNodes < maxpoints) { - if (!pIns->nPitchEnv) + if (!pIns->PitchEnv.nNodes) { - pIns->PitchPoints[0] = 0; - pIns->PitchEnv[0] = 32; - pIns->nPitchEnv = 1; + pIns->PitchEnv.Ticks[0] = 0; + pIns->PitchEnv.Values[0] = 32; + pIns->PitchEnv.nNodes = 1; } UINT i = 0; - for (i=0; i<pIns->nPitchEnv; i++) if (nTick <= pIns->PitchPoints[i]) break; - for (UINT j=pIns->nPitchEnv; j>i; j--) + for (i=0; i<pIns->PitchEnv.nNodes; i++) if (nTick <= pIns->PitchEnv.Ticks[i]) break; + for (UINT j=pIns->PitchEnv.nNodes; j>i; j--) { - pIns->PitchPoints[j] = pIns->PitchPoints[j-1]; - pIns->PitchEnv[j] = pIns->PitchEnv[j-1]; + pIns->PitchEnv.Ticks[j] = pIns->PitchEnv.Ticks[j-1]; + pIns->PitchEnv.Values[j] = pIns->PitchEnv.Values[j-1]; } - pIns->PitchPoints[i] = (WORD)nTick; - pIns->PitchEnv[i] = (BYTE)nValue; - pIns->nPitchEnv++; - if (pIns->nPitchLoopStart >= i) pIns->nPitchLoopStart++; - if (pIns->nPitchLoopEnd >= i) pIns->nPitchLoopEnd++; - if (pIns->nPitchSustainBegin >= i) pIns->nPitchSustainBegin++; - if (pIns->nPitchSustainEnd >= i) pIns->nPitchSustainEnd++; - if (pIns->nPitchEnvReleaseNode>=i && pIns->nPitchEnvReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->nPitchEnvReleaseNode++; + pIns->PitchEnv.Ticks[i] = (WORD)nTick; + pIns->PitchEnv.Values[i] = (BYTE)nValue; + pIns->PitchEnv.nNodes++; + if (pIns->PitchEnv.nLoopStart >= i) pIns->PitchEnv.nLoopStart++; + if (pIns->PitchEnv.nLoopEnd >= i) pIns->PitchEnv.nLoopEnd++; + if (pIns->PitchEnv.nSustainStart >= i) pIns->PitchEnv.nSustainStart++; + if (pIns->PitchEnv.nSustainEnd >= i) pIns->PitchEnv.nSustainEnd++; + if (pIns->PitchEnv.nReleaseNode>=i && pIns->PitchEnv.nReleaseNode!=ENV_RELEASE_NODE_UNSET) pIns->PitchEnv.nReleaseNode++; bOk = TRUE; } break; Modified: trunk/OpenMPT/soundlib/Dlsbank.cpp =================================================================== --- trunk/OpenMPT/soundlib/Dlsbank.cpp 2009-08-16 11:46:32 UTC (rev 327) +++ trunk/OpenMPT/soundlib/Dlsbank.cpp 2009-08-16 11:55:06 UTC (rev 328) @@ -1703,9 +1703,9 @@ pIns->nDNA = DNA_NOTEFADE; pIns->nResampling = SRCMODE_DEFAULT; pIns->nFilterMode = FLTMODE_UNCHANGED; - pIns->nPanEnvReleaseNode=ENV_RELEASE_NODE_UNSET; - pIns->nPitchEnvReleaseNode=ENV_RELEASE_NODE_UNSET; - pIns->nVolEnvReleaseNode=ENV_RELEASE_NODE_UNSET; + 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; UINT nLoadedSmp = 0; @@ -1776,17 +1776,17 @@ // Delay section // -> DLS level 2 // Attack section - pIns->VolPoints[nPoint] = 0; + pIns->VolEnv.Ticks[nPoint] = 0; if (part->wVolAttack) { - pIns->VolEnv[nPoint] = (BYTE)(64/(part->wVolAttack/2+2)+8);// /----- - pIns->VolPoints[nPoint+1] = part->wVolAttack; // | + pIns->VolEnv.Values[nPoint] = (BYTE)(64/(part->wVolAttack/2+2)+8);// /----- + pIns->VolEnv.Ticks[nPoint+1] = part->wVolAttack; // | } else { - pIns->VolEnv[nPoint] = 64; // |----- - pIns->VolPoints[nPoint+1] = 1; // | + pIns->VolEnv.Values[nPoint] = 64; // |----- + pIns->VolEnv.Ticks[nPoint+1] = 1; // | } - pIns->VolEnv[nPoint+1] = 64; + pIns->VolEnv.Values[nPoint+1] = 64; nPoint += 2; // Hold section // -> DLS Level 2 @@ -1795,7 +1795,7 @@ { if (part->nVolSustainLevel < 128) { - LONG lStartTime = pIns->VolPoints[nPoint-1]; + LONG lStartTime = pIns->VolEnv.Ticks[nPoint-1]; LONG lSusLevel = - DLS32BitRelativeLinearToGain(part->nVolSustainLevel << 9) / 65536; LONG lDecayTime = 1; if (lSusLevel > 0) @@ -1812,10 +1812,10 @@ if ((ltime > 1) && (ltime < lDecayTime)) { ltime += lStartTime; - if (ltime > pIns->VolPoints[nPoint-1]) + if (ltime > pIns->VolEnv.Ticks[nPoint-1]) { - pIns->VolPoints[nPoint] = (WORD)ltime; - pIns->VolEnv[nPoint] = (BYTE)(lFactor / 2); + pIns->VolEnv.Ticks[nPoint] = (WORD)ltime; + pIns->VolEnv.Values[nPoint] = (BYTE)(lFactor / 2); nPoint++; } } @@ -1823,10 +1823,10 @@ } } - if (lStartTime + lDecayTime > (LONG)pIns->VolPoints[nPoint-1]) + if (lStartTime + lDecayTime > (LONG)pIns->VolEnv.Ticks[nPoint-1]) { - pIns->VolEnv[nPoint] = (BYTE)((part->nVolSustainLevel+1) / 2); - pIns->VolPoints[nPoint] = (WORD)(lStartTime+lDecayTime); + pIns->VolEnv.Values[nPoint] = (BYTE)((part->nVolSustainLevel+1) / 2); + pIns->VolEnv.Ticks[nPoint] = (WORD)(lStartTime+lDecayTime); nPoint++; } } @@ -1834,17 +1834,17 @@ } else { pIns->dwFlags |= ENV_VOLSUSTAIN; - pIns->VolPoints[nPoint] = (WORD)(pIns->VolPoints[nPoint-1]+1); - pIns->VolEnv[nPoint] = pIns->VolEnv[nPoint-1]; + pIns->VolEnv.Ticks[nPoint] = (WORD)(pIns->VolEnv.Ticks[nPoint-1]+1); + pIns->VolEnv.Values[nPoint] = pIns->VolEnv.Values[nPoint-1]; nPoint++; } - pIns->nVolSustainBegin = pIns->nVolSustainEnd = (BYTE)(nPoint - 1); + pIns->VolEnv.nSustainStart = pIns->VolEnv.nSustainEnd = (BYTE)(nPoint - 1); // Release section - if ((part->wVolRelease) && (pIns->VolEnv[nPoint-1] > 1)) + if ((part->wVolRelease) && (pIns->VolEnv.Values[nPoint-1] > 1)) { LONG lReleaseTime = part->wVolRelease; - LONG lStartTime = pIns->VolPoints[nPoint-1]; - LONG lStartFactor = pIns->VolEnv[nPoint-1]; + LONG lStartTime = pIns->VolEnv.Ticks[nPoint-1]; + LONG lStartFactor = pIns->VolEnv.Values[nPoint-1]; LONG lSusLevel = - DLS32BitRelativeLinearToGain(lStartFactor << 10) / 65536; LONG lDecayEndTime = (lReleaseTime * lSusLevel) / 960; lReleaseTime -= lDecayEndTime; @@ -1859,26 +1859,26 @@ if ((ltime > 1) && (ltime < lReleaseTime)) { ltime += lStartTime; - if (ltime > pIns->VolPoints[nPoint-1]) + if (ltime > pIns->VolEnv.Ticks[nPoint-1]) { - pIns->VolPoints[nPoint] = (WORD)ltime; - pIns->VolEnv[nPoint] = (BYTE)lFactor; + pIns->VolEnv.Ticks[nPoint] = (WORD)ltime; + pIns->VolEnv.Values[nPoint] = (BYTE)lFactor; nPoint++; } } } } if (lReleaseTime < 1) lReleaseTime = 1; - pIns->VolPoints[nPoint] = (WORD)(lStartTime + lReleaseTime); - pIns->VolEnv[nPoint] = 0; + pIns->VolEnv.Ticks[nPoint] = (WORD)(lStartTime + lReleaseTime); + pIns->VolEnv.Values[nPoint] = 0; nPoint++; } else { - pIns->VolPoints[nPoint] = (BYTE)(pIns->VolPoints[nPoint-1] + 1); - pIns->VolEnv[nPoint] = 0; + pIns->VolEnv.Ticks[nPoint] = (BYTE)(pIns->VolEnv.Ticks[nPoint-1] + 1); + pIns->VolEnv.Values[nPoint] = 0; nPoint++; } - pIns->nVolEnv = (BYTE)nPoint; + pIns->VolEnv.nNodes = (BYTE)nPoint; } } if (pDlsIns->ulBank & F_INSTRUMENT_DRUMS) @@ -1888,15 +1888,15 @@ if (!(pIns->dwFlags & ENV_VOLUME)) { pIns->dwFlags |= ENV_VOLUME; - pIns->VolPoints[0] = 0; - pIns->VolEnv[0] = 64; - pIns->VolPoints[1] = 5; - pIns->VolEnv[1] = 64; - pIns->VolPoints[2] = 10; - pIns->VolEnv[2] = 32; - pIns->VolPoints[3] = 20; // 1 second max. for drums - pIns->VolEnv[3] = 0; - pIns->nVolEnv = 4; + pIns->VolEnv.Ticks[0] = 0; + pIns->VolEnv.Values[0] = 64; + pIns->VolEnv.Ticks[1] = 5; + pIns->VolEnv.Values[1] = 64; + pIns->VolEnv.Ticks[2] = 10; + pIns->VolEnv.Values[2] = 32; + pIns->VolEnv.Ticks[3] = 20; // 1 second max. for drums + pIns->VolEnv.Values[3] = 0; + pIns->VolEnv.nNodes = 4; } } return TRUE; Modified: trunk/OpenMPT/soundlib/LOAD_DBM.CPP =================================================================== --- trunk/OpenMPT/soundlib/LOAD_DBM.CPP 2009-08-16 11:46:32 UTC (rev 327) +++ trunk/OpenMPT/soundlib/LOAD_DBM.CPP 2009-08-16 11:55:06 UTC (rev 328) @@ -219,15 +219,15 @@ if (peh->flags & 1) pIns->dwFlags |= ENV_VOLUME; if (peh->flags & 2) pIns->dwFlags |= ENV_VOLSUSTAIN; if (peh->flags & 4) pIns->dwFlags |= ENV_VOLLOOP; - pIns->nVolEnv = peh->numpoints + 1; - if (pIns->nVolEnv > MAX_ENVPOINTS) pIns->nVolEnv = MAX_ENVPOINTS; - pIns->nVolLoopStart = peh->loopbegin; - pIns->nVolLoopEnd = peh->loopend; - pIns->nVolSustainBegin = pIns->nVolSustainEnd = peh->sustain1; - for (UINT i=0; i<pIns->nVolEnv; i++) + pIns->VolEnv.nNodes = peh->numpoints + 1; + if (pIns->VolEnv.nNodes > MAX_ENVPOINTS) pIns->VolEnv.nNodes = MAX_ENVPOINTS; + pIns->VolEnv.nLoopStart = peh->loopbegin; + pIns->VolEnv.nLoopEnd = peh->loopend; + pIns->VolEnv.nSustainStart = pIns->VolEnv.nSustainEnd = peh->sustain1; + for (UINT i=0; i<pIns->VolEnv.nNodes; i++) { - pIns->VolPoints[i] = BigEndianW(peh->volenv[i*2]); - pIns->VolEnv[i] = (BYTE)BigEndianW(peh->volenv[i*2+1]); + pIns->VolEnv.Ticks[i] = BigEndianW(peh->volenv[i*2]); + pIns->VolEnv.Values[i] = (BYTE)BigEndianW(peh->volenv[i*2+1]); } } chunk_pos += sizeof(DBMENVELOPE); Modified: trunk/OpenMPT/soundlib/Load_ams.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_ams.cpp 2009-08-16 11:46:32 UTC (rev 327) +++ trunk/OpenMPT/soundlib/Load_ams.cpp 2009-08-16 11:55:06 UTC (rev 328) @@ -381,15 +381,15 @@ // Volume Envelope { UINT pos = 0; - pIns->nVolEnv = (volenv->points > 16) ? 16 : volenv->points; - pIns->nVolSustainBegin = pIns->nVolSustainEnd = volenv->sustain; - pIns->nVolLoopStart = volenv->loopbegin; - pIns->nVolLoopEnd = volenv->loopend; - for (UINT i=0; i<pIns->nVolEnv; i++) + pIns->VolEnv.nNodes = (volenv->points > 16) ? 16 : volenv->points; + pIns->VolEnv.nSustainStart = pIns->VolEnv.nSustainEnd = volenv->sustain; + pIns->VolEnv.nLoopStart = volenv->loopbegin; + pIns->VolEnv.nLoopEnd = volenv->loopend; + for (UINT i=0; i<pIns->VolEnv.nNodes; i++) { - pIns->VolEnv[i] = (BYTE)((volenv->info[i*3+2] & 0x7F) >> 1); + pIns->VolEnv.Values[i] = (BYTE)((volenv->info[i*3+2] & 0x7F) >> 1); pos += volenv->info[i*3] + ((volenv->info[i*3+1] & 1) << 8); - pIns->VolPoints[i] = (WORD)pos; + pIns->VolEnv.Ticks[i] = (WORD)pos; } } pIns->nFadeOut = (((lpStream[dwMemPos+2] & 0x0F) << 8) | (lpStream[dwMemPos+1])) << 3; Modified: trunk/OpenMPT/soundlib/Load_imf.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_imf.cpp 2009-08-16 11:46:32 UTC (rev 327) +++ trunk/OpenMPT/soundlib/Load_imf.cpp 2009-08-16 11:55:06 UTC (rev 328) @@ -389,6 +389,8 @@ if (memcmp(hdr.im10, "IM10", 4) != 0) return false; + ChangeModTypeTo(MOD_TYPE_IT); + // song name memset(m_szNames, 0, sizeof(m_szNames)); memcpy(m_szNames[0], hdr.title, 25); @@ -402,7 +404,6 @@ m_nDefaultTempo = hdr.bpm; m_nDefaultGlobalVolume = hdr.master << 1; m_nSamplePreAmp = hdr.amp; - m_nVSTiVolume = 48; // not supported for (n = 0; n < 32; n++) { Chn[n].nPan = hdr.channels[n].panning * 64 / 255; @@ -489,7 +490,9 @@ for (s = 0; s < imfins.smpnum; s++) { IMFSAMPLE imfsmp; UINT32 blen; - slurp_read(fp, &imfsmp, sizeof(imfsmp)); + if(dwMemPos + sizeof(IMFSAMPLE) > dwMemLength) break; + memset(imfsmp, 0, sizeof(IMFSAMPLE)); + memcpy(imfsmp, lpStream + dwMemPos, sizeof(IMFSAMPLE)); if (memcmp(imfsmp.is10, "IS10", 4) != 0) { //printf("is10 says %02x %02x %02x %02x!\n", @@ -528,6 +531,7 @@ } pSample++; + dwMemPos += sizeof(IMFSAMPLE); } firstsample += imfins.smpnum; } Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2009-08-16 11:46:32 UTC (rev 327) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2009-08-16 11:55:06 UTC (rev 328) @@ -243,19 +243,19 @@ if (pis->flags & 0x01) pIns->dwFlags |= ENV_VOLUME; if (pis->flags & 0x02) pIns->dwFlags |= ENV_VOLLOOP; if (pis->flags & 0x04) pIns->dwFlags |= ENV_VOLSUSTAIN; - pIns->nVolLoopStart = pis->vls; - pIns->nVolLoopEnd = pis->vle; - pIns->nVolSustainBegin = pis->sls; - pIns->nVolSustainEnd = pis->sle; - pIns->nVolEnv = 25; + pIns->VolEnv.nLoopStart = pis->vls; + pIns->VolEnv.nLoopEnd = pis->vle; + pIns->VolEnv.nSustainStart = pis->sls; + pIns->VolEnv.nSustainEnd = pis->sle; + pIns->VolEnv.nNodes = 25; for (UINT ev=0; ev<25; ev++) { - if ((pIns->VolPoints[ev] = pis->nodes[ev*2]) == 0xFF) + if ((pIns->VolEnv.Ticks[ev] = pis->nodes[ev*2]) == 0xFF) { - pIns->nVolEnv = ev; + pIns->VolEnv.nNodes = ev; break; } - pIns->VolEnv[ev] = pis->nodes[ev*2+1]; + pIns->VolEnv.Values[ev] = pis->nodes[ev*2+1]; } pIns->nNNA = pis->nna; pIns->nDCT = pis->dnc; @@ -348,44 +348,44 @@ if (pis->volenv.flags & 2) pIns->dwFlags |= ENV_VOLLOOP; if (pis->volenv.flags & 4) pIns->dwFlags |= ENV_VOLSUSTAIN; if (pis->volenv.flags & 8) pIns->dwFlags |= ENV_VOLCARRY; - pIns->nVolEnv = pis->volenv.num; - if (pIns->nVolEnv > 25) pIns->nVolEnv = 25; - pIns->nVolLoopStart = pis->volenv.lpb; - pIns->nVolLoopEnd = pis->volenv.lpe; - pIns->nVolSustainBegin = pis->volenv.slb; - pIns->nVolSustainEnd = pis->volenv.sle; + pIns->VolEnv.nNodes = pis->volenv.num; + if (pIns->VolEnv.nNodes > 25) pIns->VolEnv.nNodes = 25; + pIns->VolEnv.nLoopStart = pis->volenv.lpb; + pIns->VolEnv.nLoopEnd = pis->volenv.lpe; + pIns->VolEnv.nSustainStart = pis->volenv.slb; + pIns->VolEnv.nSustainEnd = pis->volenv.sle; // Panning Envelope if (pis->panenv.flags & 1) pIns->dwFlags |= ENV_PANNING; if (pis->panenv.flags & 2) pIns->dwFlags |= ENV_PANLOOP; if (pis->panenv.flags & 4) pIns->dwFlags |= ENV_PANSUSTAIN; if (pis->panenv.flags & 8) pIns->dwFlags |= ENV_PANCARRY; - pIns->nPanEnv = pis->panenv.num; - if (pIns->nPanEnv > 25) pIns->nPanEnv = 25; - pIns->nPanLoopStart = pis->panenv.lpb; - pIns->nPanLoopEnd = pis->panenv.lpe; - pIns->nPanSustainBegin = pis->panenv.slb; - pIns->nPanSustainEnd = pis->panenv.sle; + pIns->PanEnv.nNodes = pis->panenv.num; + if (pIns->PanEnv.nNodes > 25) pIns->PanEnv.nNodes = 25; + pIns->PanEnv.nLoopStart = pis->panenv.lpb; + pIns->PanEnv.nLoopEnd = pis->panenv.lpe; + pIns->PanEnv.nSustainStart = pis->panenv.slb; + pIns->PanEnv.nSustainEnd = pis->panenv.sle; // Pitch Envelope if (pis->pitchenv.flags & 1) pIns->dwFlags |= ENV_PITCH; if (pis->pitchenv.flags & 2) pIns->dwFlags |= ENV_PITCHLOOP; if (pis->pitchenv.flags & 4) pIns->dwFlags |= ENV_PITCHSUSTAIN; if (pis->pitchenv.flags & 8) pIns->dwFlags |= ENV_PITCHCARRY; if (pis->pitchenv.flags & 0x80) pIns->dwFlags |= ENV_FILTER; - pIns->nPitchEnv = pis->pitchenv.num; - if (pIns->nPitchEnv > 25) pIns->nPitchEnv = 25; - pIns->nPitchLoopStart = pis->pitchenv.lpb; - pIns->nPitchLoopEnd = pis->pitchenv.lpe; - pIns->nPitchSustainBegin = pis->pitchenv.slb; - pIns->nPitchSustainEnd = pis->pitchenv.sle; + pIns->PitchEnv.nNodes = pis->pitchenv.num; + if (pIns->PitchEnv.nNodes > 25) pIns->PitchEnv.nNodes = 25; + pIns->PitchEnv.nLoopStart = pis->pitchenv.lpb; + pIns->PitchEnv.nLoopEnd = pis->pitchenv.lpe; + pIns->PitchEnv.nSustainStart = pis->pitchenv.slb; + pIns->PitchEnv.nSustainEnd = pis->pitchenv.sle; // Envelopes Data for (UINT ev=0; ev<25; ev++) { - pIns->VolEnv[ev] = pis->volenv.data[ev*3]; - pIns->VolPoints[ev] = (pis->volenv.data[ev*3+2] << 8) | (pis->volenv.data[ev*3+1]); - pIns->PanEnv[ev] = pis->panenv.data[ev*3] + 32; - pIns->PanPoints[ev] = (pis->panenv.data[ev*3+2] << 8) | (pis->panenv.data[ev*3+1]); - pIns->PitchEnv[ev] = pis->pitchenv.data[ev*3] + 32; - pIns->PitchPoints[ev] = (pis->pitchenv.data[ev*3+2] << 8) | (pis->pitchenv.data[ev*3+1]); + pIns->VolEnv.Values[ev] = pis->volenv.data[ev*3]; + pIns->VolEnv.Ticks[ev] = (pis->volenv.data[ev*3+2] << 8) | (pis->volenv.data[ev*3+1]); + pIns->PanEnv.Values[ev] = pis->panenv.data[ev*3] + 32; + pIns->PanEnv.Ticks[ev] = (pis->panenv.data[ev*3+2] << 8) | (pis->panenv.data[ev*3+1]); + pIns->PitchEnv.Values[ev] = pis->pitchenv.data[ev*3] + 32; + pIns->PitchEnv.Ticks[ev] = (pis->pitchenv.data[ev*3+2] << 8) | (pis->pitchenv.data[ev*3+1]); } pIns->nNNA = pis->nna; pIns->nDCT = pis->dct; @@ -403,8 +403,8 @@ if (pIns->nPan > 256) pIns->nPan = 128; if (pis->dfp < 0x80) pIns->dwFlags |= ENV_SETPANNING; } - if ((pIns->nVolLoopStart >= 25) || (pIns->nVolLoopEnd >= 25)) pIns->dwFlags &= ~ENV_VOLLOOP; - if ((pIns->nVolSustainBegin >= 25) || (pIns->nVolSustainEnd >= 25)) pIns->dwFlags &= ~ENV_VOLSUSTAIN; + if ((pIns->VolEnv.nLoopStart >= 25) || (pIns->VolEnv.nLoopEnd >= 25)) pIns->dwFlags &= ~ENV_VOLLOOP; + if ((pIns->VolEnv.nSustainStart >= 25) || (pIns->VolEnv.nSustainEnd >= 25)) pIns->dwFlags &= ~ENV_VOLSUSTAIN; return returnVal; //return offset } @@ -2030,44 +2030,44 @@ if (pIns->dwFlags & ENV_VOLLOOP) iti.volenv.flags |= 0x02; if (pIns->dwFlags & ENV_VOLSUSTAIN) iti.volenv.flags |= 0x04; if (pIns->dwFlags & ENV_VOLCARRY) iti.volenv.flags |= 0x08; - iti.volenv.num = (BYTE)pIns->nVolEnv; - iti.volenv.lpb = (BYTE)pIns->nVolLoopStart; - iti.volenv.lpe = (BYTE)pIns->nVolLoopEnd; - iti.volenv.slb = pIns->nVolSustainBegin; - iti.volenv.sle = pIns->nVolSustainEnd; + iti.volenv.num = (BYTE)pIns->VolEnv.nNodes; + iti.volenv.lpb = (BYTE)pIns->VolEnv.nLoopStart; + iti.volenv.lpe = (BYTE)pIns->VolEnv.nLoopEnd; + iti.volenv.slb = pIns->VolEnv.nSustainStart; + iti.volenv.sle = pIns->VolEnv.nSustainEnd; // Writing Panning envelope if (pIns->dwFlags & ENV_PANNING) iti.panenv.flags |= 0x01; if (pIns->dwFlags & ENV_PANLOOP) iti.panenv.flags |= 0x02; if (pIns->dwFlags & ENV_PANSUSTAIN) iti.panenv.flags |= 0x04; if (pIns->dwFlags & ENV_PANCARRY) iti.panenv.flags |= 0x08; - iti.panenv.num = (BYTE)pIns->nPanEnv; - iti.panenv.lpb = (BYTE)pIns->nPanLoopStart; - iti.panenv.lpe = (BYTE)pIns->nPanLoopEnd; - iti.panenv.slb = pIns->nPanSustainBegin; - iti.panenv.sle = pIns->nPanSustainEnd; + iti.panenv.num = (BYTE)pIns->PanEnv.nNodes; + iti.panenv.lpb = (BYTE)pIns->PanEnv.nLoopStart; + iti.panenv.lpe = (BYTE)pIns->PanEnv.nLoopEnd; + iti.panenv.slb = pIns->PanEnv.nSustainStart; + iti.panenv.sle = pIns->PanEnv.nSustainEnd; // Writing Pitch Envelope if (pIns->dwFlags & ENV_PITCH) iti.pitchenv.flags |= 0x01; if (pIns->dwFlags & ENV_PITCHLOOP) iti.pitchenv.flags |= 0x02; if (pIns->dwFlags & ENV_PITCHSUSTAIN) iti.pitchenv.flags |= 0x04; if (pIns->dwFlags & ENV_PITCHCARRY) iti.pitchenv.flags |= 0x08; if (pIns->dwFlags & ENV_FILTER) iti.pitchenv.flags |= 0x80; - iti.pitchenv.num = (BYTE)pIns->nPitchEnv; - iti.pitchenv.lpb = (BYTE)pIns->nPitchLoopStart; - iti.pitchenv.lpe = (BYTE)pIns->nPitchLoopEnd; - iti.pitchenv.slb = (BYTE)pIns->nPitchSustainBegin; - iti.pitchenv.sle = (BYTE)pIns->nPitchSustainEnd; + iti.pitchenv.num = (BYTE)pIns->PitchEnv.nNodes; + iti.pitchenv.lpb = (BYTE)pIns->PitchEnv.nLoopStart; + iti.pitchenv.lpe = (BYTE)pIns->PitchEnv.nLoopEnd; + iti.pitchenv.slb = (BYTE)pIns->PitchEnv.nSustainStart; + iti.pitchenv.sle = (BYTE)pIns->PitchEnv.nSustainEnd; // Writing Envelopes data for (UINT ev=0; ev<25; ev++) { - iti.volenv.data[ev*3] = pIns->VolEnv[ev]; - iti.volenv.data[ev*3+1] = pIns->VolPoints[ev] & 0xFF; - iti.volenv.data[ev*3+2] = pIns->VolPoints[ev] >> 8; - iti.panenv.data[ev*3] = pIns->PanEnv[ev] - 32; - iti.panenv.data[ev*3+1] = pIns->PanPoints[ev] & 0xFF; - iti.panenv.data[ev*3+2] = pIns->PanPoints[ev] >> 8; - iti.pitchenv.data[ev*3] = pIns->PitchEnv[ev] - 32; - iti.pitchenv.data[ev*3+1] = pIns->PitchPoints[ev] & 0xFF; - iti.pitchenv.data[ev*3+2] = pIns->PitchPoints[ev] >> 8; + iti.volenv.data[ev*3] = pIns->VolEnv.Values[ev]; + iti.volenv.data[ev*3+1] = pIns->VolEnv.Ticks[ev] & 0xFF; + iti.volenv.data[ev*3+2] = pIns->VolEnv.Ticks[ev] >> 8; + iti.panenv.data[ev*3] = pIns->PanEnv.Values[ev] - 32; + iti.panenv.data[ev*3+1] = pIns->PanEnv.Ticks[ev] & 0xFF; + iti.panenv.data[ev*3+2] = pIns->PanEnv.Ticks[ev] >> 8; + iti.pitchenv.data[ev*3] = pIns->PitchEnv.Values[ev] - 32; + iti.pitchenv.data[ev*3+1] = pIns->PitchEnv.Ticks[ev] & 0xFF; + iti.pitchenv.data[ev*3+2] = pIns->PitchEnv.Ticks[ev] >> 8; } } else // Save Empty Instrument @@ -2675,44 +2675,44 @@ if (pIns->dwFlags & ENV_VOLLOOP) iti.volenv.flags |= 0x02; if (pIns->dwFlags & ENV_VOLSUSTAIN) iti.volenv.flags |= 0x04; if (pIns->dwFlags & ENV_VOLCARRY) iti.volenv.flags |= 0x08; - iti.volenv.num = (BYTE)pIns->nVolEnv; - iti.volenv.lpb = (BYTE)pIns->nVolLoopStart; - iti.volenv.lpe = (BYTE)pIns->nVolLoopEnd; - iti.volenv.slb = pIns->nVolSustainBegin; - iti.volenv.sle = pIns->nVolSustainEnd; + iti.volenv.num = (BYTE)pIns->VolEnv.nNodes; + iti.volenv.lpb = (BYTE)pIns->VolEnv.nLoopStart; + iti.volenv.lpe = (BYTE)pIns->VolEnv.nLoopEnd; + iti.volenv.slb = pIns->VolEnv.nSustainStart; + iti.volenv.sle = pIns->VolEnv.nSustainEnd; // Writing Panning envelope if (pIns->dwFlags & ENV_PANNING) iti.panenv.flags |= 0x01; if (pIns->dwFlags & ENV_PANLOOP) iti.panenv.flags |= 0x02; if (pIns->dwFlags & ENV_PANSUSTAIN) iti.panenv.flags |= 0x04; if (pIns->dwFlags & ENV_PANCARRY) iti.panenv.flags |= 0x08; - iti.panenv.num = (BYTE)pIns->nPanEnv; - iti.panenv.lpb = (BYTE)pIns->nPanLoopStart; - iti.panenv.lpe = (BYTE)pIns->nPanLoopEnd; - iti.panenv.slb = pIns->nPanSustainBegin; - iti.panenv.sle = pIns->nPanSustainEnd; + iti.panenv.num = (BYTE)pIns->PanEnv.nNodes; + iti.panenv.lpb = (BYTE)pIns->PanEnv.nLoopStart; + iti.panenv.lpe = (BYTE)pIns->PanEnv.nLoopEnd; + iti.panenv.slb = pIns->PanEnv.nSustainStart; + iti.panenv.sle = pIns->PanEnv.nSustainEnd; // Writing Pitch Envelope if (pIns->dwFlags & ENV_PITCH) iti.pitchenv.flags |= 0x01; if (pIns->dwFlags & ENV_PITCHLOOP) iti.pitchenv.flags |= 0x02; if (pIns->dwFlags & ENV_PITCHSUSTAIN) iti.pitchenv.flags |= 0x04; if (pIns->dwFlags & ENV_PITCHCARRY) iti.pitchenv.flags |= 0x08; if (pIns->dwFlags & ENV_FILTER) iti.pitchenv.flags |= 0x80; - iti.pitchenv.num = (BYTE)pIns->nPitchEnv; - iti.pitchenv.lpb = (BYTE)pIns->nPitchLoopStart; - iti.pitchenv.lpe = (BYTE)pIns->nPitchLoopEnd; - iti.pitchenv.slb = (BYTE)pIns->nPitchSustainBegin; - iti.pitchenv.sle = (BYTE)pIns->nPitchSustainEnd; + iti.pitchenv.num = (BYTE)pIns->PitchEnv.nNodes; + iti.pitchenv.lpb = (BYTE)pIns->PitchEnv.nLoopStart; + iti.pitchenv.lpe = (BYTE)pIns->PitchEnv.nLoopEnd; + iti.pitchenv.slb = (BYTE)pIns->PitchEnv.nSustainStart; + iti.pitchenv.sle = (BYTE)pIns->PitchEnv.nSustainEnd; // Writing Envelopes data for (UINT ev=0; ev<25; ev++) { - iti.volenv.data[ev*3] = pIns->VolEnv[ev]; - iti.volenv.data[ev*3+1] = pIns->VolPoints[ev] & 0xFF; - iti.volenv.data[ev*3+2] = pIns->VolPoints[ev] >> 8; - iti.panenv.data[ev*3] = pIns->PanEnv[ev] - 32; - iti.panenv.data[ev*3+1] = pIns->PanPoints[ev] & 0xFF; - iti.panenv.data[ev*3+2] = pIns->PanPoints[ev] >> 8; - iti.pitchenv.data[ev*3] = pIns->PitchEnv[ev] - 32; - iti.pitchenv.data[ev*3+1] = pIns->PitchPoints[ev] & 0xFF; - iti.pitchenv.data[ev*3+2] = pIns->PitchPoints[ev] >> 8; + iti.volenv.data[ev*3] = pIns->VolEnv.Values[ev]; + iti.volenv.data[ev*3+1] = pIns->VolEnv.Ticks[ev] & 0xFF; + iti.volenv.data[ev*3+2] = pIns->VolEnv.Ticks[ev] >> 8; + iti.panenv.data[ev*3] = pIns->PanEnv.Values[ev] - 32; + iti.panenv.data[ev*3+1] = pIns->PanEnv.Ticks[ev] & 0xFF; + iti.panenv.data[ev*3+2] = pIns->PanEnv.Ticks[ev] >> 8; + iti.pitchenv.data[ev*3] = pIns->PitchEnv.Values[ev] - 32; + iti.pitchenv.data[ev*3+1] = pIns->PitchEnv.Ticks[ev] & 0xFF; + iti.pitchenv.data[ev*3+2] = pIns->PitchEnv.Ticks[ev] >> 8; } } else // Save Empty Instrument @@ -3494,9 +3494,9 @@ WriteInstrumentPropertyForAllInstruments('CS..', sizeof(m_defaultInstrument.nCutSwing), f, instruments, nInstruments); WriteInstrumentPropertyForAllInstruments('RS..', sizeof(m_defaultInstrument.nResSwing), f, instruments, nInstruments); WriteInstrumentPropertyForAllInstruments('FM..', sizeof(m_defaultInstrument.nFilterMode), f, instruments, nInstruments); - WriteInstrumentPropertyForAllInstruments('PERN', sizeof(m_defaultInstrument.nPitchEnvReleaseNode ), f, instruments, nInstruments); - WriteInstrumentPropertyForAllInstruments('AERN', sizeof(m_defaultInstrument.nPanEnvReleaseNode), f, instruments, nInstruments); - WriteInstrumentPropertyForAllInstruments('VERN', sizeof(m_defaultInstrument.nVolEnvReleaseNode), f, instruments, nInstruments); + WriteInstrumentPropertyForAllInstruments('PERN', sizeof(m_defaultInstrument.PitchEnv.nReleaseNode ), f, instruments, nInstruments); + WriteInstrumentPropertyForAllInstruments('AERN', sizeof(m_defaultInstrument.PanEnv.nReleaseNode), f, instruments, nInstruments); + WriteInstrumentPropertyForAllInstruments('VERN', sizeof(m_defaultInstrument.VolEnv.nReleaseNode), f, instruments, nInstruments); WriteInstrumentPropertyForAllInstruments('PTTL', sizeof(m_defaultInstrument.wPitchToTempoLock), f, instruments, nInstruments); WriteInstrumentPropertyForAllInstruments('PVEH', sizeof(m_defaultInstrument.nPluginVelocityHandling), f, instruments, nInstruments); WriteInstrumentPropertyForAllInstruments('PVOH', sizeof(m_defaultInstrument.nPluginVolumeHandling), f, instruments, nInstruments); Modified: trunk/OpenMPT/soundlib/Load_mdl.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mdl.cpp 2009-08-16 11:46:32 UTC (rev 327) +++ trunk/OpenMPT/soundlib/Load_mdl.cpp 2009-08-16 11:55:06 UTC (rev 328) @@ -497,23 +497,23 @@ for (UINT nve=0; nve<nvolenv; nve++, pve+=33) if (pve[0]+1 == insvolenv[iIns]) { WORD vtick = 1; - pIns->nVolEnv = 15; + pIns->VolEnv.nNodes = 15; for (UINT iv=0; iv<15; iv++) { if (iv) vtick += pve[iv*2+1]; - pIns->VolPoints[iv] = vtick; - pIns->VolEnv[iv] = pve[iv*2+2]; + pIns->VolEnv.Ticks[iv] = vtick; + pIns->VolEnv.Values[iv] = pve[iv*2+2]; if (!pve[iv*2+1]) { - pIns->nVolEnv = iv+1; + pIns->VolEnv.nNodes = iv+1; break; } } - pIns->nVolSustainBegin = pIns->nVolSustainEnd = pve[31] & 0x0F; + pIns->VolEnv.nSustainStart = pIns->VolEnv.nSustainEnd = pve[31] & 0x0F; if (pve[31] & 0x10) pIns->dwFlags |= ENV_VOLSUSTAIN; if (pve[31] & 0x20) pIns->dwFlags |= ENV_VOLLOOP; - pIns->nVolLoopStart = pve[32] & 0x0F; - pIns->nVolLoopEnd = pve[32] >> 4; + pIns->VolEnv.nLoopStart = pve[32] & 0x0F; + pIns->VolEnv.nLoopEnd = pve[32] >> 4; } } // Setup panning envelope @@ -523,22 +523,22 @@ for (UINT npe=0; npe<npanenv; npe++, ppe+=33) if (ppe[0]+1 == inspanenv[iIns]) { WORD vtick = 1; - pIns->nPanEnv = 15; + pIns->PanEnv.nNodes = 15; for (UINT iv=0; iv<15; iv++) { if (iv) vtick += ppe[iv*2+1]; - pIns->PanPoints[iv] = vtick; - pIns->PanEnv[iv] = ppe[iv*2+2]; + pIns->PanEnv.Ticks[iv] = vtick; + pIns->PanEnv.Values[iv] = ppe[iv*2+2]; if (!ppe[iv*2+1]) { - pIns->nPanEnv = iv+1; + pIns->PanEnv.nNodes = iv+1; break; } } if (ppe[31] & 0x10) pIns->dwFlags |= ENV_PANSUSTAIN; if (ppe[31] & 0x20) pIns->dwFlags |= ENV_PANLOOP; - pIns->nPa... [truncated message content] |