From: <sag...@us...> - 2009-09-17 16:11:58
|
Revision: 368 http://modplug.svn.sourceforge.net/modplug/?rev=368&view=rev Author: saga-games Date: 2009-09-17 16:11:47 +0000 (Thu, 17 Sep 2009) Log Message: ----------- [Fix] Sample Editor: Limit sample vibrato fields properly. Vibrato Sweep ranges from 0 to 255 now. [Fix] IT Compatibility: Better sample vibrato compatibility. Vibrato Sweep isn't perfect yet, though. [Mod] Sequence view: Also grey out "Render to wave" menu item if no valid order is selected Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_xm.cpp trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-09-16 22:46:46 UTC (rev 367) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2009-09-17 16:11:47 UTC (rev 368) @@ -897,7 +897,7 @@ } } AppendMenu(hMenu, MF_SEPARATOR, NULL, ""); - AppendMenu(hMenu, MF_STRING, ID_ORDERLIST_RENDER, "Render to &Wave"); + AppendMenu(hMenu, MF_STRING | greyed, ID_ORDERLIST_RENDER, "Render to &Wave"); ClientToScreen(&pt); ::TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, 0, m_hWnd, NULL); Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-09-16 22:46:46 UTC (rev 367) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-09-17 16:11:47 UTC (rev 368) @@ -228,14 +228,24 @@ m_SpinPanning.SetRange(0, 64); } //end rewbs.fix36944 + + // Auto vibrato m_ComboAutoVib.AddString("Sine"); m_ComboAutoVib.AddString("Square"); m_ComboAutoVib.AddString("Ramp Up"); m_ComboAutoVib.AddString("Ramp Down"); m_ComboAutoVib.AddString("Random"); - m_SpinVibSweep.SetRange(0, 64); - m_SpinVibDepth.SetRange(0, 64); - m_SpinVibRate.SetRange(0, 64); + m_SpinVibSweep.SetRange(0, 255); + if(m_pSndFile->m_nType & MOD_TYPE_XM) + { + m_SpinVibDepth.SetRange(0, 15); + m_SpinVibRate.SetRange(0, 63); + } else + { + m_SpinVibDepth.SetRange(0, 32); + m_SpinVibRate.SetRange(0, 64); + } + for (UINT i=BASENOTE_MIN; i<BASENOTE_MAX; i++) { CHAR s[32]; Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2009-09-16 22:46:46 UTC (rev 367) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2009-09-17 16:11:47 UTC (rev 368) @@ -751,7 +751,7 @@ pSmp->nVibType = autovibit2xm[pis.vit & 7]; pSmp->nVibRate = pis.vis; pSmp->nVibDepth = pis.vid & 0x7F; - pSmp->nVibSweep = (pis.vir + 3) / 4; + pSmp->nVibSweep = pis.vir; if(pis.length){ pSmp->nLength = pis.length; if (pSmp->nLength > MAX_SAMPLE_LENGTH) pSmp->nLength = MAX_SAMPLE_LENGTH; @@ -1231,7 +1231,7 @@ pSmp->nVibType = autovibit2xm[pis->vit & 7]; pSmp->nVibRate = pis->vis; pSmp->nVibDepth = pis->vid & 0x7F; - pSmp->nVibSweep = (pis->vir + 3) / 4; + pSmp->nVibSweep = pis->vir; //(pis->vir + 3) / 4; if ((pis->samplepointer) && (pis->samplepointer < dwMemLength) && (pis->length)) { pSmp->nLength = pis->length; @@ -1719,9 +1719,9 @@ itss.vol = psmp->nVolume >> 2; itss.dfp = psmp->nPan >> 2; itss.vit = autovibxm2it[psmp->nVibType & 7]; - itss.vis = psmp->nVibRate; - itss.vid = psmp->nVibDepth; - itss.vir = (psmp->nVibSweep < 64) ? psmp->nVibSweep * 4 : 255; + itss.vis = min(psmp->nVibRate, 64); + itss.vid = min(psmp->nVibDepth, 32); + itss.vir = min(psmp->nVibSweep, 255); //(psmp->nVibSweep < 64) ? psmp->nVibSweep * 4 : 255; if (psmp->uFlags & CHN_PANNING) itss.dfp |= 0x80; if ((psmp->pSample) && (psmp->nLength)) itss.cvt = 0x01; UINT flags = RS_PCM8S; @@ -2351,9 +2351,9 @@ itss.vol = psmp->nVolume >> 2; itss.dfp = psmp->nPan >> 2; itss.vit = autovibxm2it[psmp->nVibType & 7]; - itss.vis = psmp->nVibRate; - itss.vid = psmp->nVibDepth; - itss.vir = (psmp->nVibSweep < 64) ? psmp->nVibSweep * 4 : 255; + itss.vis = min(psmp->nVibRate, 64); + itss.vid = min(psmp->nVibDepth, 32); + itss.vir = min(psmp->nVibSweep, 255); //(psmp->nVibSweep < 64) ? psmp->nVibSweep * 4 : 255; if (psmp->uFlags & CHN_PANNING) itss.dfp |= 0x80; if ((psmp->pSample) && (psmp->nLength)) itss.cvt = 0x01; UINT flags = RS_PCM8S; @@ -2987,9 +2987,9 @@ itss.vol = psmp->nVolume >> 2; itss.dfp = psmp->nPan >> 2; itss.vit = autovibxm2it[psmp->nVibType & 7]; - itss.vis = psmp->nVibRate; - itss.vid = psmp->nVibDepth; - itss.vir = (psmp->nVibSweep < 64) ? psmp->nVibSweep * 4 : 255; + itss.vis = min(psmp->nVibRate, 64); + itss.vid = min(psmp->nVibDepth, 32); + itss.vir = min(psmp->nVibSweep, 255); if (psmp->uFlags & CHN_PANNING) itss.dfp |= 0x80; if ((psmp->pSample) && (psmp->nLength)) itss.cvt = 0x01; UINT flags = RS_PCM8S; Modified: trunk/OpenMPT/soundlib/Load_xm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_xm.cpp 2009-09-16 22:46:46 UTC (rev 367) +++ trunk/OpenMPT/soundlib/Load_xm.cpp 2009-09-17 16:11:47 UTC (rev 368) @@ -954,9 +954,9 @@ { MODSAMPLE *pvib = &Samples[smptable[0]]; xmsh.vibtype = pvib->nVibType; - xmsh.vibsweep = pvib->nVibSweep; - xmsh.vibdepth = pvib->nVibDepth; - xmsh.vibrate = pvib->nVibRate; + xmsh.vibsweep = min(pvib->nVibSweep, 0xFF); + xmsh.vibdepth = min(pvib->nVibDepth, 0x0F); + xmsh.vibrate = min(pvib->nVibRate, 0x3F); } WORD samples = xmih.samples; xmih.samples = LittleEndianW(xmih.samples); Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2009-09-16 22:46:46 UTC (rev 367) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2009-09-17 16:11:47 UTC (rev 368) @@ -1448,19 +1448,28 @@ //if(IsCompatibleMode(TRK_IMPULSETRACKER)) pChn->nPan = pChn->nRealPan; // TODO } int nPeriodFrac = 0; - // Instrument Auto-Vibrato + // Sample Auto-Vibrato if ((pChn->pModSample) && (pChn->pModSample->nVibDepth)) { MODSAMPLE *pSmp = pChn->pModSample; - if (pSmp->nVibSweep == 0) + if (pSmp->nVibSweep == 0 && !IsCompatibleMode(TRK_IMPULSETRACKER)) { pChn->nAutoVibDepth = pSmp->nVibDepth << 8; } else { if (m_nType & (MOD_TYPE_IT | MOD_TYPE_MPT)) { - pChn->nAutoVibDepth += pSmp->nVibSweep << 3; + if(IsCompatibleMode(TRK_IMPULSETRACKER)) + { + // TODO + pChn->nAutoVibDepth += pSmp->nVibSweep << 3; + } else + { + /* Note: changed bitshift from 3 to 1 as the variable is not divided by 4 in the IT loader anymore + - so we divide sweep by 4 here. */ + pChn->nAutoVibDepth += pSmp->nVibSweep << 1; + } } else if (!(pChn->dwFlags & CHN_KEYOFF)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |