|
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.
|