From: <sag...@us...> - 2009-10-30 22:47:59
|
Revision: 407 http://modplug.svn.sourceforge.net/modplug/?rev=407&view=rev Author: saga-games Date: 2009-10-30 22:47:43 +0000 (Fri, 30 Oct 2009) Log Message: ----------- [Fix] VST: When moving around plugins, param control notes are now also updated. [Fix] Mod Conversion: Remove sample vibrato and sustain loops for MOD/S3M [Fix] Mod Conversion: When converting to .MOD, order list won't be too long anymore. [Fix] IT Compatiblity Export: Don't store "extended filter range" flag [Ref] Small code cleanup Modified Paths: -------------- trunk/OpenMPT/mptrack/KeyConfigDlg.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/MoveFXSlotDialog.h trunk/OpenMPT/mptrack/View_gen.cpp trunk/OpenMPT/mptrack/View_gen.h trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_s3m.cpp trunk/OpenMPT/soundlib/Load_stm.cpp trunk/OpenMPT/soundlib/Load_xm.cpp trunk/OpenMPT/soundlib/ModSequence.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/modsmp_ctrl.cpp trunk/OpenMPT/soundlib/modsmp_ctrl.h Modified: trunk/OpenMPT/mptrack/KeyConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/KeyConfigDlg.cpp 2009-10-25 22:17:12 UTC (rev 406) +++ trunk/OpenMPT/mptrack/KeyConfigDlg.cpp 2009-10-30 22:47:43 UTC (rev 407) @@ -376,7 +376,6 @@ //---------------------------------------- { CommandID nCmd = (CommandID)m_lbnCommandKeys.GetItemData( m_lbnCommandKeys.GetCurSel() ); - int nCat = m_cmbCategory.GetItemData( m_cmbCategory.GetCurSel() ); CString str; //Separator @@ -407,7 +406,6 @@ m_bKeyUp.EnableWindow(TRUE); m_nCurHotKey = nCmd; - BOOL bEnable = FALSE; char s[20]; m_cmbKeyChoice.ResetContent(); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-10-25 22:17:12 UTC (rev 406) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-10-30 22:47:43 UTC (rev 407) @@ -166,7 +166,7 @@ ///////////////////////////// // Converting pattern data - for (UINT nPat = 0; nPat < m_SndFile.Patterns.Size(); nPat++) if (m_SndFile.Patterns[nPat]) + for (PATTERNINDEX nPat = 0; nPat < m_SndFile.Patterns.Size(); nPat++) if (m_SndFile.Patterns[nPat]) { MODCOMMAND *m = m_SndFile.Patterns[nPat]; @@ -222,30 +222,46 @@ // Converting instrument / sample / etc. data - // Convert MOD/XM to S3M/IT/MPT - if (oldTypeIsMOD_XM && newTypeIsS3M_IT_MPT) + // Do some sample conversion + for (SAMPLEINDEX nSmp = 1; nSmp <= m_SndFile.m_nSamples; nSmp++) { - for (SAMPLEINDEX i=1; i<=m_SndFile.m_nSamples; i++) + // No Sustain loops for MOD/S3M + if(newTypeIsMOD || newTypeIsS3M) { - m_SndFile.Samples[i].nC5Speed = CSoundFile::TransposeToFrequency(m_SndFile.Samples[i].RelativeTone, m_SndFile.Samples[i].nFineTune); - m_SndFile.Samples[i].RelativeTone = 0; - m_SndFile.Samples[i].nFineTune = 0; + m_SndFile.Samples[nSmp].nSustainStart = m_SndFile.Samples[nSmp].nSustainEnd = 0; } - if (oldTypeIsXM && newTypeIsIT_MPT) m_SndFile.m_dwSongFlags |= SONG_ITCOMPATMODE; - } else - // Convert S3M/IT/MPT to XM - if (oldTypeIsS3M_IT_MPT && newTypeIsXM) - { - for (SAMPLEINDEX i=1; i<=m_SndFile.m_nSamples; i++) + // Transpose to Frequency (MOD/XM to S3M/IT/MPT) + if (oldTypeIsMOD_XM && newTypeIsS3M_IT_MPT) { - CSoundFile::FrequencyToTranspose(&m_SndFile.Samples[i]); - if (!(m_SndFile.Samples[i].uFlags & CHN_PANNING)) m_SndFile.Samples[i].nPan = 128; + m_SndFile.Samples[nSmp].nC5Speed = CSoundFile::TransposeToFrequency(m_SndFile.Samples[nSmp].RelativeTone, m_SndFile.Samples[nSmp].nFineTune); + m_SndFile.Samples[nSmp].RelativeTone = 0; + m_SndFile.Samples[nSmp].nFineTune = 0; } + + // Frequency to Transpose (S3M/IT/MPT to MOD/XM) + if (oldTypeIsS3M_IT_MPT && newTypeIsXM) + { + CSoundFile::FrequencyToTranspose(&m_SndFile.Samples[nSmp]); + if (!(m_SndFile.Samples[nSmp].uFlags & CHN_PANNING)) m_SndFile.Samples[nSmp].nPan = 128; + } + } + + // No Vibrato for MOD/S3M + if(newTypeIsMOD || newTypeIsS3M) + { + ctrlSmp::ResetSamples(m_SndFile, ctrlSmp::SmpResetVibrato); + } + + if (oldTypeIsXM && newTypeIsIT_MPT) m_SndFile.m_dwSongFlags |= SONG_ITCOMPATMODE; + + // Convert IT/MPT to XM (instruments) + if (oldTypeIsIT_MPT && newTypeIsXM) + { bool bBrokenNoteMap = false, bBrokenSustainLoop = false; - for (INSTRUMENTINDEX j = 1; j <= m_SndFile.m_nInstruments; j++) + for(INSTRUMENTINDEX nIns = 1; nIns <= m_SndFile.m_nInstruments; nIns++) { - MODINSTRUMENT *pIns = m_SndFile.Instruments[j]; + MODINSTRUMENT *pIns = m_SndFile.Instruments[nIns]; if (pIns) { for (UINT k = 0; k < NOTE_MAX; k++) @@ -285,12 +301,12 @@ m_SndFile.m_nSamplePreAmp = 48; m_SndFile.m_nVSTiVolume = 48; AddToLog("WARNING: Default speed, tempo and global volume will be lost.\n"); - } - // Too many samples? - if (newTypeIsMOD && (m_SndFile.m_nSamples > 31)) - { - AddToLog("WARNING: Samples above 31 will be lost when saving as MOD!\n"); + // Too many samples? + if(m_SndFile.m_nSamples > 31) + { + AddToLog("WARNING: Samples above 31 will be lost when saving as MOD!\n"); + } } // Order list too long? -> remove unnecessary order items first. Modified: trunk/OpenMPT/mptrack/MoveFXSlotDialog.h =================================================================== --- trunk/OpenMPT/mptrack/MoveFXSlotDialog.h 2009-10-25 22:17:12 UTC (rev 406) +++ trunk/OpenMPT/mptrack/MoveFXSlotDialog.h 2009-10-30 22:47:43 UTC (rev 407) @@ -11,7 +11,7 @@ CMoveFXSlotDialog(CWnd* pParent = NULL); // standard constructor virtual ~CMoveFXSlotDialog(); void SetupMove(UINT currentSlot, CArray<UINT, UINT> &emptySlots); - UINT m_nToSlot; + PLUGINDEX m_nToSlot; Modified: trunk/OpenMPT/mptrack/View_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_gen.cpp 2009-10-25 22:17:12 UTC (rev 406) +++ trunk/OpenMPT/mptrack/View_gen.cpp 2009-10-30 22:47:43 UTC (rev 407) @@ -1314,8 +1314,8 @@ } -bool CViewGlobals::MovePlug(UINT src, UINT dest) -//---------------------------------------------- +bool CViewGlobals::MovePlug(PLUGINDEX src, PLUGINDEX dest) +//-------------------------------------------------------- { //AfxMessageBox("Moving %d to %d", src, dest); CModDoc *pModDoc = GetDocument(); @@ -1363,6 +1363,17 @@ } } + // Update patterns (param control notes) + for (PATTERNINDEX nPat = 0; nPat < pSndFile->Patterns.Size(); nPat++) if (pSndFile->Patterns[nPat]) + { + MODCOMMAND *m = pSndFile->Patterns[nPat]; + for (UINT len = pSndFile->PatternSize[nPat] * pSndFile->m_nChannels; len; m++, len--) + { + if((m->note == NOTE_PC || m->note == NOTE_PCS) && m->instr == src + 1) + m->instr = dest + 1; + } + } + END_CRITICAL(); pModDoc->SetModified(); @@ -1405,7 +1416,7 @@ //possible mem leak here... } - for (int nSlot=MAX_MIXPLUGINS-1; nSlot>(int)m_nCurrentPlugin; nSlot--) { + for (PLUGINDEX nSlot = MAX_MIXPLUGINS-1; nSlot > (PLUGINDEX)m_nCurrentPlugin; nSlot--) { if (pSndFile->m_MixPlugins[nSlot-1].pMixPlugin) { MovePlug(nSlot-1, nSlot); } Modified: trunk/OpenMPT/mptrack/View_gen.h =================================================================== --- trunk/OpenMPT/mptrack/View_gen.h 2009-10-25 22:17:12 UTC (rev 406) +++ trunk/OpenMPT/mptrack/View_gen.h 2009-10-30 22:47:43 UTC (rev 407) @@ -29,7 +29,8 @@ CSpinButtonCtrl m_spinVolume[4], m_spinPan[4]; CButton m_BtnSelect, m_BtnEdit; int m_nActiveTab, m_nLockCount; - UINT m_nCurrentPlugin, m_nCurrentParam; + PLUGINDEX m_nCurrentPlugin; + UINT m_nCurrentParam; // -> CODE#0002 // -> DESC="VST plugins presets" UINT m_nCurrentPreset; @@ -56,7 +57,7 @@ BOOL IsLocked() const { return (m_nLockCount > 0); } int GetDlgItemIntEx(UINT nID); void BuildEmptySlotList(CArray<UINT, UINT> &emptySlots); - bool MovePlug(UINT src, UINT dest); + bool MovePlug(PLUGINDEX src, PLUGINDEX dest); public: //{{AFX_VIRTUAL(CViewGlobals) Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2009-10-25 22:17:12 UTC (rev 406) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2009-10-30 22:47:43 UTC (rev 407) @@ -2499,7 +2499,7 @@ if (m_dwSongFlags & SONG_LINEARSLIDES) header.flags |= 0x08; if (m_dwSongFlags & SONG_ITOLDEFFECTS) header.flags |= 0x10; if (m_dwSongFlags & SONG_ITCOMPATMODE) header.flags |= 0x20; - if (m_dwSongFlags & SONG_EXFILTERRANGE) header.flags |= 0x1000; + //if (m_dwSongFlags & SONG_EXFILTERRANGE) header.flags |= 0x1000; header.globalvol = m_nDefaultGlobalVolume >> 1; header.mv = CLAMP(m_nSamplePreAmp, 0, 128); header.speed = m_nDefaultSpeed; Modified: trunk/OpenMPT/soundlib/Load_s3m.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_s3m.cpp 2009-10-25 22:17:12 UTC (rev 406) +++ trunk/OpenMPT/soundlib/Load_s3m.cpp 2009-10-30 22:47:43 UTC (rev 407) @@ -542,8 +542,8 @@ header[0x22] = nbi & 0xFF; header[0x23] = nbi >> 8; nbp = 0; - for (i=0; Patterns[i]; i++) { nbp = i+1; if (nbp >= MAX_PATTERNS) break; } - for (i=0; i<MAX_ORDERS; i++) if ((Order[i] < MAX_PATTERNS) && (Order[i] >= nbp)) nbp = Order[i] + 1; + for (i = 0; Patterns[i]; i++) { nbp = i+1; if (nbp >= MAX_PATTERNS) break; } + for (ORDERINDEX nOrd = 0; nOrd < Order.GetLengthTailTrimmed(); nOrd++) if ((Order[nOrd] < MAX_PATTERNS) && (Order[nOrd] >= nbp)) nbp = Order[nOrd] + 1; header[0x24] = nbp & 0xFF; header[0x25] = nbp >> 8; if (m_dwSongFlags & SONG_FASTVOLSLIDES) header[0x26] |= 0x40; Modified: trunk/OpenMPT/soundlib/Load_stm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_stm.cpp 2009-10-25 22:17:12 UTC (rev 406) +++ trunk/OpenMPT/soundlib/Load_stm.cpp 2009-10-30 22:47:43 UTC (rev 407) @@ -111,7 +111,7 @@ if ((pIns->nLoopEnd > pIns->nLoopStart) && (pIns->nLoopEnd != 0xFFFF)) pIns->uFlags |= CHN_LOOP; } dwMemPos = sizeof(STMHEADER); - for (UINT nOrd=0; nOrd<MAX_ORDERS; nOrd++) if (Order[nOrd] >= 99) Order[nOrd] = 0xFF; + for (UINT nOrd = 0; nOrd < 128; nOrd++) if (Order[nOrd] >= 99) Order[nOrd] = Order.GetInvalidPatIndex(); UINT nPatterns = phdr->numpat; for (UINT nPat=0; nPat<nPatterns; nPat++) { Modified: trunk/OpenMPT/soundlib/Load_xm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_xm.cpp 2009-10-25 22:17:12 UTC (rev 406) +++ trunk/OpenMPT/soundlib/Load_xm.cpp 2009-10-30 22:47:43 UTC (rev 407) @@ -759,13 +759,6 @@ xmheader.channels = LittleEndianW(xmheader.channels); xmheader.patterns = 0; - /*for (i=0; i<MAX_ORDERS; i++) { - header.norder++; - if ((Order[i] >= header.patterns) && (Order[i] < MAX_PATTERNS)) header.patterns = Order[i]+1; - }*/ - if(Order.GetLength() < MAX_ORDERS) - Order.resize(MAX_ORDERS); - WORD nOrders = Order.GetLengthTailTrimmed(), nPatterns = 0; xmheader.orders = LittleEndianW(nOrders); xmheader.size = LittleEndian(xmheader.size + nOrders); @@ -783,7 +776,7 @@ xmheader.instruments = LittleEndianW(m_nSamples); xmheader.flags = (m_dwSongFlags & SONG_LINEARSLIDES) ? 0x01 : 0x00; - if (m_dwSongFlags & SONG_EXFILTERRANGE) xmheader.flags |= 0x1000; + if ((m_dwSongFlags & SONG_EXFILTERRANGE) && !bCompatibilityExport) xmheader.flags |= 0x1000; xmheader.flags = LittleEndianW(xmheader.flags); if(bCompatibilityExport) Modified: trunk/OpenMPT/soundlib/ModSequence.cpp =================================================================== --- trunk/OpenMPT/soundlib/ModSequence.cpp 2009-10-25 22:17:12 UTC (rev 406) +++ trunk/OpenMPT/soundlib/ModSequence.cpp 2009-10-30 22:47:43 UTC (rev 407) @@ -71,15 +71,13 @@ m_nInvalidIndex = GetInvalidPatIndex(m_pSndFile->GetType()); m_nIgnoreIndex = GetIgnoreIndex(m_pSndFile->GetType()); - //Resize orderlist if needed. Because old orderlist had MAX_ORDERS(256) elements, not making it - //smaller than that even if the modtype doesn't support that many orders. + //Resize orderlist if needed. if (specs.ordersMax < GetLength()) { - resize(max(MAX_ORDERS, specs.ordersMax)); - std::fill(begin() + specs.ordersMax, end(), GetInvalidPatIndex()); + resize(specs.ordersMax); + /*resize(max(MAX_ORDERS, specs.ordersMax)); + std::fill(begin() + specs.ordersMax, end(), GetInvalidPatIndex());*/ } - if (GetLength() < MAX_ORDERS) - resize(MAX_ORDERS, GetInvalidPatIndex(oldtype)); //Replace items used to denote end of song/skip order. Replace(GetInvalidPatIndex(oldtype), GetInvalidPatIndex()); Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2009-10-25 22:17:12 UTC (rev 406) +++ trunk/OpenMPT/soundlib/Sndfile.h 2009-10-30 22:47:43 UTC (rev 407) @@ -265,7 +265,7 @@ UINT nPan; UINT nVolume; DWORD dwFlags; - UINT nMixPlugin; + PLUGINDEX nMixPlugin; CHAR szName[MAX_CHANNELNAME]; }; Modified: trunk/OpenMPT/soundlib/modsmp_ctrl.cpp =================================================================== --- trunk/OpenMPT/soundlib/modsmp_ctrl.cpp 2009-10-25 22:17:12 UTC (rev 406) +++ trunk/OpenMPT/soundlib/modsmp_ctrl.cpp 2009-10-30 22:47:43 UTC (rev 407) @@ -215,6 +215,12 @@ rSndFile.Samples[i].nVibType = 0; rSndFile.Samples[i].uFlags &= ~CHN_PANNING; break; + case SmpResetVibrato: + rSndFile.Samples[i].nVibDepth = 0; + rSndFile.Samples[i].nVibRate = 0; + rSndFile.Samples[i].nVibSweep = 0; + rSndFile.Samples[i].nVibType = 0; + break; default: break; } Modified: trunk/OpenMPT/soundlib/modsmp_ctrl.h =================================================================== --- trunk/OpenMPT/soundlib/modsmp_ctrl.h 2009-10-25 22:17:12 UTC (rev 406) +++ trunk/OpenMPT/soundlib/modsmp_ctrl.h 2009-10-30 22:47:43 UTC (rev 407) @@ -15,7 +15,8 @@ enum ResetFlag { SmpResetCompo = 1, - SmpResetInit = 2, + SmpResetInit, + SmpResetVibrato, }; // Insert silence to given location. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |