|
From: <sag...@us...> - 2015-04-11 12:49:01
|
Revision: 4922
http://sourceforge.net/p/modplug/code/4922
Author: saga-games
Date: 2015-04-11 12:48:48 +0000 (Sat, 11 Apr 2015)
Log Message:
-----------
[Mod] MPTM Saving: Only write out full envelope information for those envelope types that need it.
[Mod] PLM Loader: Improve Note-less offset command in OpenMPT (already works as intended in libopenmpt)
[Ref] Small changes
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Load_669.cpp
trunk/OpenMPT/soundlib/Load_it.cpp
trunk/OpenMPT/soundlib/Load_itp.cpp
trunk/OpenMPT/soundlib/Load_plm.cpp
trunk/OpenMPT/soundlib/MIDIMacros.h
Modified: trunk/OpenMPT/soundlib/Load_669.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_669.cpp 2015-04-10 10:56:00 UTC (rev 4921)
+++ trunk/OpenMPT/soundlib/Load_669.cpp 2015-04-11 12:48:48 UTC (rev 4922)
@@ -66,6 +66,7 @@
{
mptSmp.Initialize();
+ mptSmp.nC5Speed = 8363;
mptSmp.nLength = length;
mptSmp.nLoopStart = loopStart;
mptSmp.nLoopEnd = loopEnd;
@@ -161,7 +162,13 @@
continue;
}
- std::vector<uint8> effect(8, 0xFF);
+ const ModCommand::COMMAND effTrans[] =
+ {
+ CMD_PORTAMENTOUP, CMD_PORTAMENTODOWN, CMD_TONEPORTAMENTO, CMD_PORTAMENTOUP,
+ CMD_ARPEGGIO, CMD_SPEED, CMD_PANNINGSLIDE, CMD_RETRIG,
+ };
+
+ uint8 effect[8] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
for(ROWINDEX row = 0; row < 64; row++)
{
PatternRow m = Patterns[pat].GetRow(row);
@@ -202,14 +209,8 @@
m->param = effect[chn] & 0x0F;
- static const ModCommand::COMMAND effTrans[] =
+ if((effect[chn] >> 4) < CountOf(effTrans))
{
- CMD_PORTAMENTOUP, CMD_PORTAMENTODOWN, CMD_TONEPORTAMENTO, CMD_PORTAMENTOUP,
- CMD_ARPEGGIO, CMD_SPEED, CMD_PANNINGSLIDE, CMD_RETRIG,
- };
-
- if(static_cast<uint8>(effect[chn] >> 4) < CountOf(effTrans))
- {
m->command = effTrans[effect[chn] >> 4];
} else
{
@@ -242,7 +243,7 @@
case 5:
// F - set tempo
- // TODO: param 0 is a "super fast tempo" in extended mode (?)
+ // TODO: param 0 is a "super fast tempo" in extended mode (?)
effect[chn] = 0xFF;
break;
Modified: trunk/OpenMPT/soundlib/Load_it.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_it.cpp 2015-04-10 10:56:00 UTC (rev 4921)
+++ trunk/OpenMPT/soundlib/Load_it.cpp 2015-04-11 12:48:48 UTC (rev 4922)
@@ -943,7 +943,7 @@
{
// ModPlug Tracker 1.00a5, instruments 560 bytes apart
m_dwLastSavedWithVersion = MAKE_VERSION_NUMERIC(1, 00, 00, A5);
- madeWithTracker = "ModPlug tracker 1.00a5";
+ madeWithTracker = "ModPlug Tracker 1.00a5";
interpretModPlugMade = true;
} else if(fileHeader.cwtv == 0x0214 && fileHeader.cmwt == 0x0214 && !memcmp(fileHeader.reserved, "CHBI", 4))
{
@@ -1000,6 +1000,9 @@
case 7:
madeWithTracker = mpt::String::Print("ITMCK %1.%2.%3", (fileHeader.cwtv >> 8) & 0x0F, (fileHeader.cwtv >> 4) & 0x0F, fileHeader.cwtv & 0x0F);
break;
+ case 0xD:
+ madeWithTracker = "spc2it";
+ break;
}
}
@@ -1957,24 +1960,28 @@
if(GetType() & MOD_TYPE_MPT)
{
- uint32 maxNodes = 0;
+ uint32 maxNodes[3] = { 0 };
for(INSTRUMENTINDEX nIns = 1; nIns <= m_nInstruments; nIns++) if(Instruments[nIns] != nullptr)
{
- maxNodes = std::max(maxNodes, Instruments[nIns]->VolEnv.nNodes);
- maxNodes = std::max(maxNodes, Instruments[nIns]->PanEnv.nNodes);
- maxNodes = std::max(maxNodes, Instruments[nIns]->PitchEnv.nNodes);
+ maxNodes[0] = std::max(maxNodes[0], Instruments[nIns]->VolEnv.nNodes);
+ maxNodes[1] = std::max(maxNodes[1], Instruments[nIns]->PanEnv.nNodes);
+ maxNodes[2] = std::max(maxNodes[2], Instruments[nIns]->PitchEnv.nNodes);
}
// write full envelope information for MPTM files (more env points)
- if(maxNodes > 25)
+ if(maxNodes[0] > 25)
{
WriteInstrumentPropertyForAllInstruments(MAGIC4BE('V','E','.','.'), sizeof(ModInstrument().VolEnv.nNodes), f, nInstruments);
WriteInstrumentPropertyForAllInstruments(MAGIC4BE('V','P','[','.'), sizeof(ModInstrument().VolEnv.Ticks), f, nInstruments);
WriteInstrumentPropertyForAllInstruments(MAGIC4BE('V','E','[','.'), sizeof(ModInstrument().VolEnv.Values), f, nInstruments);
-
+ }
+ if(maxNodes[1] > 25)
+ {
WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','E','.','.'), sizeof(ModInstrument().PanEnv.nNodes), f, nInstruments);
WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','P','[','.'), sizeof(ModInstrument().PanEnv.Ticks), f, nInstruments);
WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','E','[','.'), sizeof(ModInstrument().PanEnv.Values), f, nInstruments);
-
+ }
+ if(maxNodes[2] > 25)
+ {
WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','i','E','.'), sizeof(ModInstrument().PitchEnv.nNodes), f, nInstruments);
WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','i','P','['), sizeof(ModInstrument().PitchEnv.Ticks), f, nInstruments);
WriteInstrumentPropertyForAllInstruments(MAGIC4BE('P','i','E','['), sizeof(ModInstrument().PitchEnv.Values), f, nInstruments);
Modified: trunk/OpenMPT/soundlib/Load_itp.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_itp.cpp 2015-04-10 10:56:00 UTC (rev 4921)
+++ trunk/OpenMPT/soundlib/Load_itp.cpp 2015-04-11 12:48:48 UTC (rev 4922)
@@ -110,7 +110,10 @@
for(CHANNELINDEX chn = 0; chn < m_nChannels; chn++)
{
ChnSettings[chn].nPan = static_cast<uint16>(file.ReadUint32LE());
- ChnSettings[chn].dwFlags = static_cast<ChannelFlags>(file.ReadUint32LE());
+ ChnSettings[chn].dwFlags.reset();
+ uint32 flags = file.ReadUint32LE();
+ if(flags & 0x100) ChnSettings[chn].dwFlags.set(CHN_MUTE);
+ if(flags & 0x800) ChnSettings[chn].dwFlags.set(CHN_SURROUND);
ChnSettings[chn].nVolume = static_cast<uint16>(file.ReadUint32LE());
file.ReadString<mpt::String::maybeNullTerminated>(ChnSettings[chn].szName, size);
}
@@ -186,7 +189,7 @@
if(pat < numNamedPats)
{
- char patName[MAX_PATTERNNAME];
+ char patName[32];
pattNames.ReadString<mpt::String::maybeNullTerminated>(patName, patNameLen);
Patterns[pat].SetName(patName);
}
@@ -210,13 +213,13 @@
}
}
- // Load embeded samples
+ // Load embedded samples
// Read original number of samples
m_nSamples = static_cast<SAMPLEINDEX>(file.ReadUint32LE());
LimitMax(m_nSamples, SAMPLEINDEX(MAX_SAMPLES - 1));
- // Read number of embeded samples
+ // Read number of embedded samples
uint32 embeddedSamples = file.ReadUint32LE();
// Read samples
Modified: trunk/OpenMPT/soundlib/Load_plm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_plm.cpp 2015-04-10 10:56:00 UTC (rev 4921)
+++ trunk/OpenMPT/soundlib/Load_plm.cpp 2015-04-11 12:48:48 UTC (rev 4922)
@@ -268,6 +268,7 @@
const uint32 patternEnd = ord.x + patHeader.numRows;
maxPos = std::max(maxPos, patternEnd);
+ ModCommand::NOTE lastNote[32]= { 0 };
for(ROWINDEX r = 0; r < patHeader.numRows; r++, curRow++)
{
if(curRow >= rowsPerPat)
@@ -290,7 +291,7 @@
uint8 data[5];
file.ReadArray(data);
if(data[0])
- m->note = (data[0] >> 4) * 12 + (data[0] & 0x0F) + 12 + NOTE_MIN;
+ lastNote[c] = m->note = (data[0] >> 4) * 12 + (data[0] & 0x0F) + 12 + NOTE_MIN;
else
m->note = NOTE_NONE;
m->instr = data[1];
@@ -358,6 +359,10 @@
m->param = mpt::saturate_cast<ModCommand::PARAM>(((m->param * Samples[m->instr].nLength) / 255) >> 8);
}
}
+ if((data[3] == 0x13 || data[3] == 0x16) && m->note == NOTE_NONE)
+ {
+ m->note = lastNote[c];
+ }
}
}
if(patHeader.numChannels > numChannels)
Modified: trunk/OpenMPT/soundlib/MIDIMacros.h
===================================================================
--- trunk/OpenMPT/soundlib/MIDIMacros.h 2015-04-10 10:56:00 UTC (rev 4921)
+++ trunk/OpenMPT/soundlib/MIDIMacros.h 2015-04-11 12:48:48 UTC (rev 4922)
@@ -10,6 +10,12 @@
#pragma once
+enum
+{
+ NUM_MACROS = 16, // number of parametered macros
+ MACRO_LENGTH = 32, // max number of chars per macro
+};
+
#ifdef MODPLUG_TRACKER
OPENMPT_NAMESPACE_BEGIN
class CSoundFile;
@@ -70,10 +76,7 @@
};
-#define NUM_MACROS 16 // number of parametered macros
-#define MACRO_LENGTH 32 // max number of chars per macro
-
#ifdef NEEDS_PRAGMA_PACK
#pragma pack(push, 1)
#endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|