From: <sag...@us...> - 2009-09-10 21:01:07
|
Revision: 360 http://modplug.svn.sourceforge.net/modplug/?rev=360&view=rev Author: saga-games Date: 2009-09-10 21:00:57 +0000 (Thu, 10 Sep 2009) Log Message: ----------- [Fix] Instrument Tab: Proper limits for IT/XM fadeout values [Fix] XM / IT Saver: Limit fadeout values properly [Imp] IT Compatibility Export: Removed stereo sample support [Imp] Updated DE_jojo.mkb keymap (added Save As command) [Imp] Updated IT Mod Specifications [Imp] Comments tab: Usage of existing sample size + bit depth functions to calculate information [Imp] XM Loader: Advanced "made with MPT" detection Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/view_com.cpp trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Load_xm.cpp trunk/OpenMPT/soundlib/mod_specifications.h Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2009-09-10 13:31:37 UTC (rev 359) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2009-09-10 21:00:57 UTC (rev 360) @@ -801,7 +801,7 @@ m_ComboDCA.AddString("Note Off"); m_ComboDCA.AddString("Note Fade"); // FadeOut Volume - m_SpinFadeOut.SetRange(0, 32000); + m_SpinFadeOut.SetRange(0, 8192); // Global Volume m_SpinGlobalVol.SetRange(0, 64); // Panning @@ -1072,7 +1072,13 @@ m_SpinMidiPR.EnableWindow(bITandXM); m_SpinMidiBK.EnableWindow(bITandXM); //rewbs.MidiBank //end rewbs.instroVSTi + m_SpinFadeOut.EnableWindow(bITandXM); + if(m_pSndFile->m_nType & MOD_TYPE_XM) + m_SpinFadeOut.SetRange(0, 4095); + else + m_SpinFadeOut.SetRange(0, 8192); + m_NoteMap.EnableWindow(bITandXM); m_CbnResampling.EnableWindow(bITandXM); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2009-09-10 13:31:37 UTC (rev 359) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2009-09-10 21:00:57 UTC (rev 360) @@ -768,7 +768,7 @@ //------------------------------------------------------- { // shorten instrument envelope if necessary (for mod conversion) - const int iEnvMax = m_SndFile.GetModSpecifications().envelopePointsMax; + const UINT iEnvMax = m_SndFile.GetModSpecifications().envelopePointsMax; bool bResult = false; #define TRIMENV(i) if(i > iEnvMax) {i = iEnvMax; bResult = true;} Modified: trunk/OpenMPT/mptrack/view_com.cpp =================================================================== --- trunk/OpenMPT/mptrack/view_com.cpp 2009-09-10 13:31:37 UTC (rev 359) +++ trunk/OpenMPT/mptrack/view_com.cpp 2009-09-10 21:00:57 UTC (rev 360) @@ -252,15 +252,13 @@ case SMPLIST_SIZE: if (pSmp->nLength) { - UINT nShift = (pSmp->uFlags & CHN_16BIT) ? 9 : 10; - if (pSmp->uFlags & CHN_STEREO) nShift--; - wsprintf(s, "%d KB", pSmp->nLength >> nShift); + wsprintf(s, "%d KB", pSmp->GetSampleSizeInBytes() >> 10); } break; case SMPLIST_TYPE: if (pSmp->nLength) { - strcpy(s, (pSmp->uFlags & CHN_16BIT) ? "16 Bit" : "8 Bit"); + wsprintf(s, "%d Bit", pSmp->GetElementarySampleSize() << 3); } break; case SMPLIST_INSTR: Modified: trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb =================================================================== --- trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb 2009-09-10 13:31:37 UTC (rev 359) +++ trunk/OpenMPT/packageTemplate/extraKeymaps/DE_jojo.mkb 2009-09-10 21:00:57 UTC (rev 360) @@ -8,6 +8,7 @@ 0:1346:2:79:1 //File/Open: Ctrl+O (KeyDown) 0:1348:2:87:5 //File/Close: Ctrl+W (KeyDown|KeyHold) 0:1349:2:83:1 //File/Save: Ctrl+S (KeyDown) +0:1350:3:83:1 //File/Save As: Shift+Ctrl+S (KeyDown) 0:1693:0:166:1 //Previous Document: (KeyDown) 0:1694:0:167:1 //Next Document: (KeyDown) 0:1030:0:116:1 //Play song/Pause song: F5 (KeyDown) Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2009-09-10 13:31:37 UTC (rev 359) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2009-09-10 21:00:57 UTC (rev 360) @@ -301,7 +301,7 @@ } if (pis->mbank<=128) pIns->wMidiBank = pis->mbank; - pIns->nFadeOut = pis->fadeout << 5; // should be 6? + pIns->nFadeOut = pis->fadeout << 5; pIns->nGlobalVol = pis->gbv >> 1; if (pIns->nGlobalVol > 64) pIns->nGlobalVol = 64; for (UINT j = 0; j < 120; j++) @@ -2003,7 +2003,7 @@ //if (pIns->nDCT<DCT_PLUGIN) iti.dct = pIns->nDCT; else iti.dct =0; iti.dct = pIns->nDCT; //rewbs.instroVSTi: will other apps barf if they get an unknown DCT? iti.dca = pIns->nDNA; - iti.fadeout = pIns->nFadeOut >> 5; // should be 6? + iti.fadeout = min(pIns->nFadeOut >> 5 , 256); iti.pps = pIns->nPPS; iti.ppc = pIns->nPPC; iti.gbv = (BYTE)(pIns->nGlobalVol << 1); @@ -2648,7 +2648,7 @@ iti.nna = pIns->nNNA; if (pIns->nDCT<DCT_PLUGIN) iti.dct = pIns->nDCT; else iti.dct =0; iti.dca = pIns->nDNA; - iti.fadeout = pIns->nFadeOut >> 5; + iti.fadeout = min(pIns->nFadeOut >> 5 , 256); iti.pps = pIns->nPPS; iti.ppc = pIns->nPPC; iti.gbv = (BYTE)(pIns->nGlobalVol << 1); @@ -2991,30 +2991,10 @@ if (psmp->uFlags & CHN_PANNING) itss.dfp |= 0x80; if ((psmp->pSample) && (psmp->nLength)) itss.cvt = 0x01; UINT flags = RS_PCM8S; - /* -#ifndef NO_PACKING - if (nPacking) + if (psmp->uFlags & CHN_16BIT) { - if ((!(psmp->uFlags & (CHN_16BIT|CHN_STEREO))) - && (CanPackSample(psmp->pSample, psmp->nLength, nPacking))) - { - flags = RS_ADPCM4; - itss.cvt = 0xFF; - } - } else -#endif // NO_PACKING - */ - { - if (psmp->uFlags & CHN_STEREO) - { - flags = RS_STPCM8S; - itss.flags |= 0x04; - } - if (psmp->uFlags & CHN_16BIT) - { - itss.flags |= 0x02; - flags = (psmp->uFlags & CHN_STEREO) ? RS_STPCM16S : RS_PCM16S; - } + itss.flags |= 0x02; + flags = RS_PCM16S; } itss.samplepointer = dwPos; fseek(f, smppos[nsmp-1], SEEK_SET); Modified: trunk/OpenMPT/soundlib/Load_xm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_xm.cpp 2009-09-10 13:31:37 UTC (rev 359) +++ trunk/OpenMPT/soundlib/Load_xm.cpp 2009-09-10 21:00:57 UTC (rev 360) @@ -119,22 +119,6 @@ if ((!channels) || (channels > MAX_BASECHANNELS)) return false; // -! BEHAVIOUR_CHANGE#0006 - if (!memcmp((LPCSTR)lpStream + 0x26, "FastTracker v2.00 ", 20) && bProbablyMadeWithModPlug) bMadeWithModPlug = true; - if (!memcmp((LPCSTR)lpStream + 0x26, "FastTracker v 2.00 ", 20)) - { - bMadeWithModPlug = true; - m_dwLastSavedWithVersion = MAKE_VERSION_NUMERIC(1, 00, 00, 00); - } - - if (!memcmp((LPCSTR)lpStream + 0x26, "OpenMPT ", 8)) - { - //bMadeWithModPlug = true; // Don't set it - it's also used by compatibility export - CHAR sVersion[13]; - memcpy(sVersion, lpStream + 0x26 + 8, 12); - sVersion[12] = 0; - m_dwLastSavedWithVersion = MptVersion::ToNum(sVersion); - } - m_nType = MOD_TYPE_XM; m_nMinPeriod = 27; m_nMaxPeriod = 54784; @@ -334,7 +318,10 @@ Instruments[iIns]->nPluginVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE; memcpy(Instruments[iIns]->name, pih->name, 22); - + // look for null-terminated instr name - that's most likely a tune made with modplug + for(int i = 0; i < 22; i++) + if(pih->name[i] == 0) bProbablyMadeWithModPlug = true; + if ((nsamples = pih->samples) > 0) { /* we have samples, so let's read the rest of this instrument @@ -560,6 +547,9 @@ pSmp->nVibRate = xmsh.vibrate; memcpy(pSmp->filename, xmss.name, 22); pSmp->filename[21] = 0; + // look for null-terminated sample name - that's most likely a tune made with modplug + for(int i = 0; i < 22; i++) + if(xmss.name[i] == 0) bProbablyMadeWithModPlug = true; } #if 0 if ((xmsh.reserved2 > nsamples) && (xmsh.reserved2 <= 16)) @@ -648,6 +638,25 @@ bMadeWithModPlug = true; } + // Check various things to find out whether this has been made with MPT. + // Null chars in names -> most likely made with MPT, which disguises as FT2 + if (!memcmp((LPCSTR)lpStream + 0x26, "FastTracker v2.00 ", 20) && bProbablyMadeWithModPlug) bMadeWithModPlug = true; + if (!memcmp((LPCSTR)lpStream + 0x26, "FastTracker v 2.00 ", 20)) + { + // Early MPT 1.0 alpha/beta versions + bMadeWithModPlug = true; + m_dwLastSavedWithVersion = MAKE_VERSION_NUMERIC(1, 00, 00, 00); + } + + if (!memcmp((LPCSTR)lpStream + 0x26, "OpenMPT ", 8)) + { + //bMadeWithModPlug = true; // Don't set it - it's also used by compatibility export + CHAR sVersion[13]; + memcpy(sVersion, lpStream + 0x26 + 8, 12); + sVersion[12] = 0; + m_dwLastSavedWithVersion = MptVersion::ToNum(sVersion); + } + if(bMadeWithModPlug) { SetModFlag(MSF_COMPATIBLE_PLAY, false); @@ -862,7 +871,7 @@ { memcpy(xmih.name, pIns->name, 22); xmih.type = pIns->nMidiProgram; - xmsh.volfade = pIns->nFadeOut; + xmsh.volfade = min(pIns->nFadeOut, 0xFFF); // FFF is maximum in FT2 xmsh.vnum = (BYTE)pIns->VolEnv.nNodes; xmsh.pnum = (BYTE)pIns->PanEnv.nNodes; if (xmsh.vnum > 12) xmsh.vnum = 12; Modified: trunk/OpenMPT/soundlib/mod_specifications.h =================================================================== --- trunk/OpenMPT/soundlib/mod_specifications.h 2009-09-10 13:31:37 UTC (rev 359) +++ trunk/OpenMPT/soundlib/mod_specifications.h 2009-09-10 21:00:57 UTC (rev 360) @@ -33,10 +33,10 @@ INSTRUMENTINDEX instrumentsMax; BYTE defaultMixLevels; BYTE MIDIMappingDirectivesMax; - UINT speedMin; - UINT speedMax; - bool hasComments; - int envelopePointsMax; + UINT speedMin; // Minimum ticks per frame + UINT speedMax; // Maximum ticks per frame + bool hasComments; // True if format has a comments field + UINT envelopePointsMax; // Maximum number of points of each envelope }; @@ -103,7 +103,7 @@ 1, //Min Speed 31, //Max Speed false, //No song comments - 0, //Envelope point count + 0, //No instrument envelopes }; // MOD with MPT extensions. @@ -132,7 +132,7 @@ 1, //Min Speed 31, //Max Speed false, //No song comments - 0, //Envelope point count + 0, //No instrument envelopes }; const CModSpecifications xm = @@ -216,7 +216,7 @@ 1, //Min Speed 255, //Max Speed false, //No song comments - 0, //Envelope point count + 0, //No instrument envelopes }; // S3M with MPT extensions @@ -245,7 +245,7 @@ 1, //Min Speed 255, //Max Speed false, //No song comments - 0, //Envelope point count + 0, //No instrument envelopes }; const CModSpecifications it = @@ -266,8 +266,8 @@ 1, //Min pattern rows 256, //Max pattern rows 25, //Max mod name length - 256, //SamplesMax - 200, //instrumentMax + 99, //SamplesMax + 99, //instrumentMax mixLevels_original, //defaultMixLevels 0, //Max MIDI mapping directives 1, //Min Speed This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |