|
From: <man...@us...> - 2013-04-22 21:19:59
|
Revision: 1939
http://sourceforge.net/p/modplug/code/1939
Author: manxorist
Date: 2013-04-22 21:19:29 +0000 (Mon, 22 Apr 2013)
Log Message:
-----------
[Ref] Replace all GlobalAlloc and GlobalFree in soundlib.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Dlsbank.cpp
trunk/OpenMPT/soundlib/Mmcmp.cpp
trunk/OpenMPT/soundlib/Sndfile.cpp
Modified: trunk/OpenMPT/soundlib/Dlsbank.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Dlsbank.cpp 2013-04-22 21:08:08 UTC (rev 1938)
+++ trunk/OpenMPT/soundlib/Dlsbank.cpp 2013-04-22 21:19:29 UTC (rev 1939)
@@ -1410,7 +1410,7 @@
BOOL CDLSBank::FreeWaveForm(LPBYTE p)
//-----------------------------------
{
- if (p) GlobalFreePtr(p);
+ if (p) free(p);
return TRUE;
}
@@ -1461,7 +1461,7 @@
if (fseek(f, 8, SEEK_CUR) == 0)
{
*pLen = m_pSamplesEx[nWaveLink].dwLen;
- *ppWave = (LPBYTE)GlobalAllocPtr(GHND, *pLen + 8);
+ *ppWave = (LPBYTE)calloc(1, *pLen + 8);
fread((*ppWave), 1, *pLen, f);
bOk = TRUE;
}
@@ -1474,7 +1474,7 @@
if ((chunk.id == IFFID_LIST) && (chunk.listid == IFFID_wave) && (chunk.len > 4))
{
*pLen = chunk.len + 8;
- *ppWave = (LPBYTE)GlobalAllocPtr(GHND, chunk.len + 8);
+ *ppWave = (LPBYTE)calloc(1, chunk.len + 8);
if (*ppWave)
{
memcpy((*ppWave), &chunk, 12);
Modified: trunk/OpenMPT/soundlib/Mmcmp.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Mmcmp.cpp 2013-04-22 21:08:08 UTC (rev 1938)
+++ trunk/OpenMPT/soundlib/Mmcmp.cpp 2013-04-22 21:19:29 UTC (rev 1939)
@@ -129,7 +129,7 @@
|| (!pmmh->nblocks) || (pmmh->filesize < 16) || (pmmh->filesize > 0x8000000)
|| (pmmh->blktable >= dwMemLength) || (pmmh->blktable + 4*pmmh->nblocks > dwMemLength)) return FALSE;
dwFileSize = pmmh->filesize;
- if ((pBuffer = (LPBYTE)GlobalAllocPtr(GHND, (dwFileSize + 31) & ~15)) == NULL) return FALSE;
+ if ((pBuffer = (LPBYTE)calloc(1, (dwFileSize + 31) & ~15)) == NULL) return FALSE;
pblk_table = (LPDWORD)(lpMemFile+pmmh->blktable);
for (UINT nBlock=0; nBlock<pmmh->nblocks; nBlock++)
{
@@ -570,7 +570,7 @@
#ifdef MMCMP_LOG
Log("XPK detected (SrcLen=%d DstLen=%d) filesize=%d\n", dwSrcLen, dwDstLen, dwMemLength);
#endif
- if ((pBuffer = (LPBYTE)GlobalAllocPtr(GHND, (dwDstLen + 31) & ~15)) == NULL) return FALSE;
+ if ((pBuffer = (LPBYTE)calloc(1, (dwDstLen + 31) & ~15)) == NULL) return FALSE;
XPK_DoUnpack(lpMemFile+sizeof(XPKFILEHEADER), dwSrcLen+8-sizeof(XPKFILEHEADER), pBuffer, dwDstLen);
*ppMemFile = pBuffer;
*pdwMemLength = dwDstLen;
@@ -680,7 +680,7 @@
dwDstLen = (lpMemFile[dwMemLength-4]<<16) | (lpMemFile[dwMemLength-3]<<8) | (lpMemFile[dwMemLength-2]);
//Log("PP20 detected: Packed length=%d, Unpacked length=%d\n", dwMemLength, dwDstLen);
if ((dwDstLen < 512) || (dwDstLen > 0x400000) || (dwDstLen > 16*dwMemLength)) return FALSE;
- if ((pBuffer = (LPBYTE)GlobalAllocPtr(GHND, (dwDstLen + 31) & ~15)) == NULL) return FALSE;
+ if ((pBuffer = (LPBYTE)calloc(1, (dwDstLen + 31) & ~15)) == NULL) return FALSE;
PP20_DoUnpack(lpMemFile+4, dwMemLength-4, pBuffer, dwDstLen);
*ppMemFile = pBuffer;
*pdwMemLength = dwDstLen;
Modified: trunk/OpenMPT/soundlib/Sndfile.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.cpp 2013-04-22 21:08:08 UTC (rev 1938)
+++ trunk/OpenMPT/soundlib/Sndfile.cpp 2013-04-22 21:19:29 UTC (rev 1939)
@@ -593,7 +593,7 @@
if(bMMCmp)
{
- GlobalFreePtr(lpStream);
+ free((void*)lpStream);
lpStream = NULL;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <man...@us...> - 2013-04-22 22:11:57
|
Revision: 1947
http://sourceforge.net/p/modplug/code/1947
Author: manxorist
Date: 2013-04-22 22:11:51 +0000 (Mon, 22 Apr 2013)
Log Message:
-----------
[Ref] Move sample saving functions inside #ifndef MODPLUG_NO_FILESAVE.
[Ref] Add one missing #ifndef NO_FLAC.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/SampleFormats.cpp
trunk/OpenMPT/soundlib/Sndfile.h
Modified: trunk/OpenMPT/soundlib/SampleFormats.cpp
===================================================================
--- trunk/OpenMPT/soundlib/SampleFormats.cpp 2013-04-22 22:07:55 UTC (rev 1946)
+++ trunk/OpenMPT/soundlib/SampleFormats.cpp 2013-04-22 22:11:51 UTC (rev 1947)
@@ -393,6 +393,7 @@
// Save WAV
+#ifndef MODPLUG_NO_FILESAVE
bool CSoundFile::SaveWAVSample(SAMPLEINDEX nSample, const LPCSTR lpszFileName) const
//----------------------------------------------------------------------------------
{
@@ -536,6 +537,11 @@
return true;
}
+#endif // MODPLUG_NO_FILESAVE
+
+
+#ifndef MODPLUG_NO_FILESAVE
+
///////////////////////////////////////////////////////////////
// Save RAW
@@ -557,6 +563,8 @@
return true;
}
+#endif // MODPLUG_NO_FILESAVE
+
/////////////////////////////////////////////////////////////
// GUS Patches
@@ -1049,6 +1057,8 @@
}
+#ifndef MODPLUG_NO_FILESAVE
+
bool CSoundFile::SaveXIInstrument(INSTRUMENTINDEX nInstr, const LPCSTR lpszFileName) const
//----------------------------------------------------------------------------------------
{
@@ -1116,7 +1126,9 @@
return true;
}
+#endif // MODPLUG_NO_FILESAVE
+
// Read first sample from XI file into a sample slot
bool CSoundFile::ReadXISample(SAMPLEINDEX nSample, FileReader &file)
//------------------------------------------------------------------
@@ -1628,6 +1640,8 @@
}
+#ifndef MODPLUG_NO_FILESAVE
+
bool CSoundFile::SaveITIInstrument(INSTRUMENTINDEX nInstr, const LPCSTR lpszFileName, bool compress) const
//--------------------------------------------------------------------------------------------------------
{
@@ -1698,7 +1712,9 @@
return true;
}
+#endif // MODPLUG_NO_FILESAVE
+
void ReadInstrumentExtensionField(ModInstrument* pIns, const uint32 code, const uint16 size, FileReader &file)
//------------------------------------------------------------------------------------------------------------
{
@@ -2108,6 +2124,7 @@
}
+#ifndef NO_FLAC
// Helper function for copying OpenMPT's sample data to FLAC's int32 buffer.
template<typename T>
inline static void SampleToFLAC32(FLAC__int32 *dst, const void *src, SmpLength numSamples)
@@ -2118,8 +2135,10 @@
dst[i] = in[i];
}
};
+#endif
+#ifndef MODPLUG_NO_FILESAVE
bool CSoundFile::SaveFLACSample(SAMPLEINDEX nSample, const LPCSTR lpszFileName) const
//-----------------------------------------------------------------------------------
{
@@ -2263,6 +2282,7 @@
return false;
#endif // NO_FLAC
}
+#endif // MODPLUG_NO_FILESAVE
///////////////////////////////////////////////////////////////////////////////////////////////////
Modified: trunk/OpenMPT/soundlib/Sndfile.h
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.h 2013-04-22 22:07:55 UTC (rev 1946)
+++ trunk/OpenMPT/soundlib/Sndfile.h 2013-04-22 22:11:51 UTC (rev 1947)
@@ -698,9 +698,11 @@
bool Read8SVXSample(SAMPLEINDEX nInstr, const LPBYTE lpMemFile, DWORD dwFileLength);
bool ReadFLACSample(SAMPLEINDEX sample, FileReader &file);
bool ReadMP3Sample(SAMPLEINDEX sample, FileReader &file);
+#ifndef MODPLUG_NO_FILESAVE
bool SaveWAVSample(SAMPLEINDEX nSample, const LPCSTR lpszFileName) const;
bool SaveRAWSample(SAMPLEINDEX nSample, const LPCSTR lpszFileName) const;
bool SaveFLACSample(SAMPLEINDEX nSample, const LPCSTR lpszFileName) const;
+#endif
// Instrument file I/O
bool ReadInstrumentFromFile(INSTRUMENTINDEX nInstr, const LPBYTE lpMemFile, DWORD dwFileLength);
@@ -708,8 +710,10 @@
bool ReadITIInstrument(INSTRUMENTINDEX nInstr, FileReader &file);
bool ReadPATInstrument(INSTRUMENTINDEX nInstr, const LPBYTE lpMemFile, DWORD dwFileLength);
bool ReadSampleAsInstrument(INSTRUMENTINDEX nInstr, const LPBYTE lpMemFile, DWORD dwFileLength);
+#ifndef MODPLUG_NO_FILESAVE
bool SaveXIInstrument(INSTRUMENTINDEX nInstr, const LPCSTR lpszFileName) const;
bool SaveITIInstrument(INSTRUMENTINDEX nInstr, const LPCSTR lpszFileName, bool compress) const;
+#endif
// I/O from another sound file
bool ReadInstrumentFromSong(INSTRUMENTINDEX targetInstr, const CSoundFile &srcSong, INSTRUMENTINDEX sourceInstr);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <man...@us...> - 2013-04-22 22:16:27
|
Revision: 1948
http://sourceforge.net/p/modplug/code/1948
Author: manxorist
Date: 2013-04-22 22:16:20 +0000 (Mon, 22 Apr 2013)
Log Message:
-----------
[Ref] Make midi and .itp support #ifdef MODPLUG_TRACKER
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Dlsbank.cpp
trunk/OpenMPT/soundlib/Dlsbank.h
trunk/OpenMPT/soundlib/Load_itp.cpp
trunk/OpenMPT/soundlib/Load_mid.cpp
trunk/OpenMPT/soundlib/Tables.cpp
Modified: trunk/OpenMPT/soundlib/Dlsbank.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Dlsbank.cpp 2013-04-22 22:11:51 UTC (rev 1947)
+++ trunk/OpenMPT/soundlib/Dlsbank.cpp 2013-04-22 22:16:20 UTC (rev 1948)
@@ -11,13 +11,17 @@
#include "stdafx.h"
#include "sndfile.h"
+#ifdef MODPLUG_TRACKER
#include "../mptrack/mptrack.h"
+#endif
#include "dlsbank.h"
#include "Wav.h"
#include "../common/StringFixer.h"
#include "../soundlib/FileReader.h"
#include "SampleIO.h"
+#ifdef MODPLUG_TRACKER
+
//#define DLSBANK_LOG
//#define DLSINSTR_LOG
@@ -1974,4 +1978,7 @@
}
}
return nullptr;
-}
\ No newline at end of file
+}
+
+
+#endif // MODPLUG_TRACKER
Modified: trunk/OpenMPT/soundlib/Dlsbank.h
===================================================================
--- trunk/OpenMPT/soundlib/Dlsbank.h 2013-04-22 22:11:51 UTC (rev 1947)
+++ trunk/OpenMPT/soundlib/Dlsbank.h 2013-04-22 22:16:20 UTC (rev 1948)
@@ -88,6 +88,10 @@
#pragma pack(pop)
+
+#ifdef MODPLUG_TRACKER
+
+
#define SOUNDBANK_TYPE_INVALID 0
#define SOUNDBANK_TYPE_DLS 0x01
#define SOUNDBANK_TYPE_SF2 0x02
@@ -158,3 +162,7 @@
static LONG DLS32BitRelativeLinearToGain(LONG lGain); // 0dB = 0x10000
static LONG DLSMidiVolumeToLinear(UINT nMidiVolume); // [0-127] -> [0-0x10000]
};
+
+
+#endif // MODPLUG_TRACKER
+
Modified: trunk/OpenMPT/soundlib/Load_itp.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_itp.cpp 2013-04-22 22:11:51 UTC (rev 1947)
+++ trunk/OpenMPT/soundlib/Load_itp.cpp 2013-04-22 22:16:20 UTC (rev 1948)
@@ -14,7 +14,9 @@
#include "stdafx.h"
+#ifdef MODPLUG_TRACKER
#include "../mptrack/mptrack.h"
+#endif
#include "../common/version.h"
#include "Loaders.h"
#include "ITTools.h"
@@ -36,6 +38,11 @@
bool CSoundFile::ReadITProject(FileReader &file)
//----------------------------------------------
{
+#ifndef MODPLUG_TRACKER
+ return false;
+#endif
+#ifdef MODPLUG_TRACKER
+
uint32 version;
FileReader::off_t size;
@@ -252,6 +259,7 @@
UpgradeModFlags();
return true;
+#endif
}
Modified: trunk/OpenMPT/soundlib/Load_mid.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mid.cpp 2013-04-22 22:11:51 UTC (rev 1947)
+++ trunk/OpenMPT/soundlib/Load_mid.cpp 2013-04-22 22:16:20 UTC (rev 1948)
@@ -17,6 +17,7 @@
#include "../mptrack/TrackerSettings.h"
#endif // MODPLUG_TRACKER
+#ifdef MODPLUG_TRACKER
#pragma warning(disable:4244)
//#define MIDI_LOG
@@ -1207,4 +1208,11 @@
return true;
}
+#else // !MODPLUG_TRACKER
+bool CSoundFile::ReadMID(const BYTE *lpStream, DWORD dwMemLength)
+{
+ return false;
+}
+
+#endif
Modified: trunk/OpenMPT/soundlib/Tables.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Tables.cpp 2013-04-22 22:11:51 UTC (rev 1947)
+++ trunk/OpenMPT/soundlib/Tables.cpp 2013-04-22 22:16:20 UTC (rev 1948)
@@ -36,7 +36,9 @@
{ MOD_TYPE_S3M, "ScreamTracker III", "s3m" },
{ MOD_TYPE_XM, "FastTracker II", "xm" },
{ MOD_TYPE_IT, "Impulse Tracker", "it" },
+#ifdef MODPLUG_TRACKER
{ MOD_TYPE_IT, "Impulse Tracker Project", "itp" },
+#endif
{ MOD_TYPE_MPT, "OpenMPT", "mptm" },
{ MOD_TYPE_STM, "ScreamTracker II", "stm" },
{ MOD_TYPE_MOD, "NoiseTracker", "nst" },
@@ -84,9 +86,11 @@
{
// Other stuff
{ MOD_TYPE_WAV, "Wave", "wav" },
+#ifdef MODPLUG_TRACKER
{ MOD_TYPE_MID, "MIDI", "mid" },
{ MOD_TYPE_MID, "MIDI", "rmi" },
{ MOD_TYPE_MID, "MIDI", "smf" },
+#endif
};
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <man...@us...> - 2013-04-22 23:15:45
|
Revision: 1955
http://sourceforge.net/p/modplug/code/1955
Author: manxorist
Date: 2013-04-22 23:15:37 +0000 (Mon, 22 Apr 2013)
Log Message:
-----------
[Imp] Add CSoundFile::ApplyFinalOutputGain(). This is not used in the tracker.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Sndfile.h
trunk/OpenMPT/soundlib/Sndmix.cpp
Modified: trunk/OpenMPT/soundlib/Sndfile.h
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.h 2013-04-22 22:59:36 UTC (rev 1954)
+++ trunk/OpenMPT/soundlib/Sndfile.h 2013-04-22 23:15:37 UTC (rev 1955)
@@ -737,6 +737,10 @@
#endif // MODPLUG_TRACKER
void ApplyGlobalVolume(int SoundBuffer[], int RearBuffer[], long lTotalSampleCount);
+#ifndef MODPLUG_TRACKER
+ void ApplyFinalOutputGain(int SoundBuffer[], int RearBuffer[], long lCount); // lCount meaning the number of frames, totally independet from the numer of channels
+#endif
+
// System-Dependant functions
public:
static void *AllocateSample(UINT nbytes);
Modified: trunk/OpenMPT/soundlib/Sndmix.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndmix.cpp 2013-04-22 22:59:36 UTC (rev 1954)
+++ trunk/OpenMPT/soundlib/Sndmix.cpp 2013-04-22 23:15:37 UTC (rev 1955)
@@ -319,6 +319,10 @@
nStat++;
+#ifndef MODPLUG_TRACKER
+ ApplyFinalOutputGain(MixSoundBuffer, MixRearBuffer, lCount);
+#endif
+
#ifndef NO_AGC
// Automatic Gain Control
if (m_MixerSettings.DSPMask & SNDDSP_AGC) m_AGC.Process(MixSoundBuffer, lSampleCount, m_MixerSettings.gdwMixingFreq, m_MixerSettings.gnChannels);
@@ -2274,3 +2278,43 @@
}
}
}
+
+
+#ifndef MODPLUG_TRACKER
+void CSoundFile::ApplyFinalOutputGain(int SoundBuffer[], int RearBuffer[], long lCount) {
+ if(m_MixerSettings.m_FinalOutputGain == (1<<16))
+ {
+ // nothing to do, gain == +/- 0dB
+ return;
+ }
+ // no clipping prevention is done here
+ int32 factor = m_MixerSettings.m_FinalOutputGain;
+ int * buf = SoundBuffer;
+ int * rbuf = RearBuffer;
+ if(m_MixerSettings.gnChannels == 1)
+ {
+ for(int i=0; i<lCount; ++i)
+ {
+ *buf = Util::muldiv(*buf, factor, 1<<16);
+ buf++;
+ }
+ } else if(m_MixerSettings.gnChannels == 2)
+ {
+ for(int i=0; i<lCount*2; ++i)
+ {
+ *buf = Util::muldiv(*buf, factor, 1<<16);
+ buf++;
+ }
+ } else if(m_MixerSettings.gnChannels == 4)
+ {
+ for(int i=0; i<lCount*2; ++i)
+ {
+ *buf = Util::muldiv(*buf, factor, 1<<16);
+ *rbuf = Util::muldiv(*rbuf, factor, 1<<16);
+ buf++;
+ rbuf++;
+ }
+ }
+}
+#endif
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <man...@us...> - 2013-04-22 23:18:34
|
Revision: 1956
http://sourceforge.net/p/modplug/code/1956
Author: manxorist
Date: 2013-04-22 23:18:28 +0000 (Mon, 22 Apr 2013)
Log Message:
-----------
[Fix] Add CSoundFile::ApplyFinalOutputGain(). This is not used in the tracker. (there were 2 changes missing in the last commit)
Modified Paths:
--------------
trunk/OpenMPT/soundlib/MixerSettings.cpp
trunk/OpenMPT/soundlib/MixerSettings.h
Modified: trunk/OpenMPT/soundlib/MixerSettings.cpp
===================================================================
--- trunk/OpenMPT/soundlib/MixerSettings.cpp 2013-04-22 23:15:37 UTC (rev 1955)
+++ trunk/OpenMPT/soundlib/MixerSettings.cpp 2013-04-22 23:18:28 UTC (rev 1956)
@@ -30,4 +30,9 @@
glVolumeRampUpSamples = 16;
glVolumeRampDownSamples = 42;
+
+#ifndef MODPLUG_TRACKER
+ m_FinalOutputGain = 1 << 16; // +/- 0dB
+#endif
+
}
Modified: trunk/OpenMPT/soundlib/MixerSettings.h
===================================================================
--- trunk/OpenMPT/soundlib/MixerSettings.h 2013-04-22 23:15:37 UTC (rev 1955)
+++ trunk/OpenMPT/soundlib/MixerSettings.h 2013-04-22 23:18:28 UTC (rev 1956)
@@ -36,6 +36,10 @@
long glVolumeRampUpSamples, glVolumeRampDownSamples;
//end rewbs.resamplerConf
+#ifndef MODPLUG_TRACKER
+ DWORD m_FinalOutputGain; // factor multiplied to the final mixer output just before clipping and dithering, fixed point 16.16
+#endif
+
bool IsUnsignedSampleFormat() const
{
return m_SampleFormat == SampleFormatUnsigned8;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <man...@us...> - 2013-04-22 23:29:07
|
Revision: 1957
http://sourceforge.net/p/modplug/code/1957
Author: manxorist
Date: 2013-04-22 23:28:46 +0000 (Mon, 22 Apr 2013)
Log Message:
-----------
[Imp] Add CSoundFile::ModTypeToString() and CSoundFile::ModTypeToTracker()
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Sndfile.h
trunk/OpenMPT/soundlib/Tables.cpp
Modified: trunk/OpenMPT/soundlib/Sndfile.h
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.h 2013-04-22 23:18:28 UTC (rev 1956)
+++ trunk/OpenMPT/soundlib/Sndfile.h 2013-04-22 23:28:46 UTC (rev 1957)
@@ -507,6 +507,8 @@
bool ReadMID(const LPCBYTE lpStream, DWORD dwMemLength);
static std::vector<const char *> GetSupportedExtensions(bool otherFormats);
+ static const char * ModTypeToString(MODTYPE modtype);
+ static const char * ModTypeToTracker(MODTYPE modtype);
void UpgradeModFlags();
void UpgradeSong();
Modified: trunk/OpenMPT/soundlib/Tables.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Tables.cpp 2013-04-22 23:18:28 UTC (rev 1956)
+++ trunk/OpenMPT/soundlib/Tables.cpp 2013-04-22 23:28:46 UTC (rev 1957)
@@ -118,6 +118,34 @@
}
+const char * CSoundFile::ModTypeToString(MODTYPE modtype)
+//-------------------------------------------------------
+{
+ for(size_t i = 0; i < CountOf(modFormatInfo); i++)
+ {
+ if(modFormatInfo[i].format & modtype)
+ {
+ return modFormatInfo[i].extension;
+ }
+ }
+ return "";
+}
+
+
+const char * CSoundFile::ModTypeToTracker(MODTYPE modtype)
+//--------------------------------------------------------
+{
+ for(size_t i = 0; i < CountOf(modFormatInfo); i++)
+ {
+ if(modFormatInfo[i].format & modtype)
+ {
+ return modFormatInfo[i].name;
+ }
+ }
+ return "";
+}
+
+
///////////////////////////////////////////////////////////////////////
const uint8 ImpulseTrackerPortaVolCmd[16] =
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2013-04-26 22:13:17
|
Revision: 1977
http://sourceforge.net/p/modplug/code/1977
Author: saga-games
Date: 2013-04-26 22:13:07 +0000 (Fri, 26 Apr 2013)
Log Message:
-----------
[Ref] Make all mod loaders reset global and channel settings to their defaults (in case some other loader already put some garbage there)
Modified Paths:
--------------
trunk/OpenMPT/soundlib/LOAD_AMF.CPP
trunk/OpenMPT/soundlib/LOAD_DBM.CPP
trunk/OpenMPT/soundlib/LOAD_DMF.CPP
trunk/OpenMPT/soundlib/LOAD_DSM.CPP
trunk/OpenMPT/soundlib/Load_669.cpp
trunk/OpenMPT/soundlib/Load_ams.cpp
trunk/OpenMPT/soundlib/Load_digi.cpp
trunk/OpenMPT/soundlib/Load_far.cpp
trunk/OpenMPT/soundlib/Load_gdm.cpp
trunk/OpenMPT/soundlib/Load_imf.cpp
trunk/OpenMPT/soundlib/Load_it.cpp
trunk/OpenMPT/soundlib/Load_itp.cpp
trunk/OpenMPT/soundlib/Load_mdl.cpp
trunk/OpenMPT/soundlib/Load_med.cpp
trunk/OpenMPT/soundlib/Load_mid.cpp
trunk/OpenMPT/soundlib/Load_mod.cpp
trunk/OpenMPT/soundlib/Load_mt2.cpp
trunk/OpenMPT/soundlib/Load_mtm.cpp
trunk/OpenMPT/soundlib/Load_okt.cpp
trunk/OpenMPT/soundlib/Load_psm.cpp
trunk/OpenMPT/soundlib/Load_ptm.cpp
trunk/OpenMPT/soundlib/Load_s3m.cpp
trunk/OpenMPT/soundlib/Load_stm.cpp
trunk/OpenMPT/soundlib/Load_ult.cpp
trunk/OpenMPT/soundlib/Load_wav.cpp
trunk/OpenMPT/soundlib/Load_xm.cpp
trunk/OpenMPT/soundlib/ModSequence.cpp
trunk/OpenMPT/soundlib/ModSequence.h
trunk/OpenMPT/soundlib/Sndfile.cpp
trunk/OpenMPT/soundlib/Sndfile.h
trunk/OpenMPT/soundlib/load_j2b.cpp
Modified: trunk/OpenMPT/soundlib/LOAD_AMF.CPP
===================================================================
--- trunk/OpenMPT/soundlib/LOAD_AMF.CPP 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/LOAD_AMF.CPP 2013-04-26 22:13:07 UTC (rev 1977)
@@ -114,22 +114,20 @@
return false;
}
+ InitializeGlobals();
+ InitializeChannels();
m_nType = MOD_TYPE_AMF0;
m_nChannels = 8;
- m_nInstruments = 0;
- m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME;
m_nDefaultSpeed = fileHeader.defaultSpeed;
m_nDefaultTempo = fileHeader.defaultTempo;
m_nSamples = fileHeader.numSamples;
- m_nRestartPos = 0;
if(fileHeader.restartPos < fileHeader.numOrders)
{
m_nRestartPos = fileHeader.restartPos;
}
m_szNames[0][0] = '\0';
- Order.ReadAsByte(file, fileHeader.numOrders);
- file.Skip(256 - fileHeader.numOrders);
+ Order.ReadAsByte(file, 256, fileHeader.numOrders);
// Read Sample Headers
for(SAMPLEINDEX smp = 1; smp <= GetNumSamples(); smp++)
@@ -371,6 +369,13 @@
return false;
}
+ InitializeGlobals();
+ InitializeChannels();
+
+ m_nType = MOD_TYPE_AMF;
+ m_nChannels = fileHeader.numChannels;
+ m_nSamples = fileHeader.numSamples;
+
StringFixer::ReadString<StringFixer::maybeNullTerminated>(m_szNames[0], fileHeader.title);
if(fileHeader.version < 10)
@@ -381,11 +386,6 @@
SetupMODPanning(true);
}
- m_nType = MOD_TYPE_AMF;
- m_nChannels = fileHeader.numChannels;
- m_nSamples = fileHeader.numSamples;
- m_nInstruments = 0;
-
// Setup Channel Pan Positions
if(fileHeader.version >= 11)
{
Modified: trunk/OpenMPT/soundlib/LOAD_DBM.CPP
===================================================================
--- trunk/OpenMPT/soundlib/LOAD_DBM.CPP 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/LOAD_DBM.CPP 2013-04-26 22:13:07 UTC (rev 1977)
@@ -210,6 +210,10 @@
dwMemPos = sizeof(DBMFileHeader);
nOrders = BigEndianW(pfh->orders);
if (dwMemPos + 2 * nOrders + 8*3 >= dwMemLength) return false;
+
+ InitializeGlobals();
+ InitializeChannels();
+
nInstruments = BigEndianW(pfh->instruments);
nSamples = BigEndianW(pfh->samples);
nPatterns = BigEndianW(pfh->patterns);
Modified: trunk/OpenMPT/soundlib/LOAD_DMF.CPP
===================================================================
--- trunk/OpenMPT/soundlib/LOAD_DMF.CPP 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/LOAD_DMF.CPP 2013-04-26 22:13:07 UTC (rev 1977)
@@ -966,6 +966,7 @@
return false;
}
+ InitializeGlobals();
StringFixer::ReadString<StringFixer::spacePadded>(m_szNames[0], fileHeader.songname);
#ifdef MODPLUG_TRACKER
@@ -1086,6 +1087,7 @@
}
}
+ InitializeChannels();
m_nType = MOD_TYPE_DMF;
m_SongFlags = SONG_LINEARSLIDES | SONG_ITCOMPATGXX; // this will be converted to IT format by MPT. SONG_ITOLDEFFECTS is not set because of tremor and vibrato.
SetModFlag(MSF_COMPATIBLE_PLAY, true);
Modified: trunk/OpenMPT/soundlib/LOAD_DSM.CPP
===================================================================
--- trunk/OpenMPT/soundlib/LOAD_DSM.CPP 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/LOAD_DSM.CPP 2013-04-26 22:13:07 UTC (rev 1977)
@@ -115,6 +115,8 @@
|| (pfh->song_len > dwMemLength)) return false;
psong = (DSMSONG *)(lpStream + sizeof(DSMFILEHEADER));
dwMemPos = sizeof(DSMFILEHEADER) + pfh->song_len;
+
+ InitializeGlobals();
m_nType = MOD_TYPE_DSM;
m_nChannels = psong->numtrk;
if (m_nChannels < 1) m_nChannels = 1;
@@ -130,6 +132,7 @@
for (UINT iPan=0; iPan<16; iPan++)
{
+ ChnSettings[iPan].Reset();
ChnSettings[iPan].nPan = 0x80;
if (psong->panpos[iPan] <= 0x80)
{
Modified: trunk/OpenMPT/soundlib/Load_669.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_669.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_669.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -93,23 +93,18 @@
_669FileHeader fileHeader;
file.Rewind();
- if(!file.ReadConvertEndianness(fileHeader))
+ if(!file.ReadConvertEndianness(fileHeader)
+ || (fileHeader.sig != _669FileHeader::magic669 && fileHeader.sig != _669FileHeader::magic669Ext)
+ || fileHeader.samples > 64
+ || fileHeader.restartPos >= 128
+ || fileHeader.patterns > 128)
{
return false;
}
- if(fileHeader.sig != _669FileHeader::magic669 && fileHeader.sig != _669FileHeader::magic669Ext)
- {
- return false;
- }
-
//bool has669Ext = fileHeader.sig == _669FileHeader::magic669Ext;
- if(fileHeader.samples > 64 || fileHeader.restartPos >= 128
- || fileHeader.patterns > 128)
- {
- return false;
- }
+ InitializeGlobals();
m_nType = MOD_TYPE_669;
m_SongFlags = SONG_LINEARSLIDES;
m_nMinPeriod = 28 << 2;
@@ -143,9 +138,8 @@
// Set up panning
for(CHANNELINDEX chn = 0; chn < 8; chn++)
{
+ ChnSettings[chn].Reset();
ChnSettings[chn].nPan = (chn & 1) ? 0xD0 : 0x30;
- ChnSettings[chn].nVolume = 64;
- ChnSettings[chn].dwFlags.reset();
}
// Reading Patterns
Modified: trunk/OpenMPT/soundlib/Load_ams.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_ams.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_ams.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -392,9 +392,10 @@
return false;
}
+ InitializeGlobals();
+
m_nType = MOD_TYPE_AMS;
m_SongFlags = SONG_ITCOMPATGXX | SONG_ITOLDEFFECTS;
- m_nInstruments = 0;
m_nChannels = (fileHeader.channelConfig & 0x1F) + 1;
m_nSamples = fileHeader.numSamps;
SetModFlag(MSF_COMPATIBLE_PLAY, true);
@@ -423,6 +424,7 @@
// Read channel names
for(CHANNELINDEX chn = 0; chn < GetNumChannels(); chn++)
{
+ ChnSettings[chn].Reset();
ReadAMSString(ChnSettings[chn].szName, file);
}
@@ -754,10 +756,10 @@
return false;
}
+ InitializeGlobals();
+
m_nType = MOD_TYPE_AMS2;
m_SongFlags = SONG_ITCOMPATGXX | SONG_ITOLDEFFECTS | ((headerFlags & AMS2FileHeader::linearSlides) ? SONG_LINEARSLIDES : SongFlags(0));
- m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME;
- m_nSamplePreAmp = m_nVSTiVolume = 48;
m_nInstruments = fileHeader.numIns;
m_nChannels = 32;
SetModFlag(MSF_COMPATIBLE_PLAY, true);
@@ -857,6 +859,7 @@
// Channel names
for(CHANNELINDEX chn = 0; chn < 32; chn++)
{
+ ChnSettings[chn].Reset();
ReadAMSString(ChnSettings[chn].szName, file);
}
Modified: trunk/OpenMPT/soundlib/Load_digi.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_digi.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_digi.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -67,18 +67,17 @@
return false;
}
- Order.ReadFromArray(fileHeader.orders, fileHeader.lastOrdIndex + 1);
+ // Globals
+ InitializeGlobals();
+ InitializeChannels();
- // Globals
m_nType = MOD_TYPE_DIGI;
m_nChannels = fileHeader.numChannels;
- m_nInstruments = 0;
m_nSamples = 31;
m_nSamplePreAmp = 256 / m_nChannels;
- m_nDefaultSpeed = 6;
- m_nDefaultTempo = 125;
- m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME;
+ Order.ReadFromArray(fileHeader.orders, fileHeader.lastOrdIndex + 1);
+
// Read sample headers
for(SAMPLEINDEX smp = 0; smp < 31; smp++)
{
Modified: trunk/OpenMPT/soundlib/Load_far.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_far.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_far.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -147,10 +147,9 @@
}
// Globals
+ InitializeGlobals();
m_nType = MOD_TYPE_FAR;
m_nChannels = 16;
- m_nInstruments = 0;
- m_nSamples = 0;
m_nSamplePreAmp = 32;
m_nDefaultSpeed = fileHeader.defaultSpeed;
m_nDefaultTempo = 80;
@@ -161,9 +160,9 @@
// Read channel settings
for(CHANNELINDEX chn = 0; chn < 16; chn++)
{
+ ChnSettings[chn].Reset();
ChnSettings[chn].dwFlags = fileHeader.onOff[chn] ? ChannelFlags(0) : CHN_MUTE;
ChnSettings[chn].nPan = ((fileHeader.chnPanning[chn] & 0x0F) << 4) + 8;
- ChnSettings[chn].nVolume = 64;
}
// Read song message
Modified: trunk/OpenMPT/soundlib/Load_gdm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_gdm.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_gdm.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -134,44 +134,39 @@
//----------------------------------------
{
file.Rewind();
- GDMFileHeader fileHeader;
- if(!file.ReadConvertEndianness(fileHeader))
- {
- return false;
- }
- // Is it a valid GDM file?
- if(fileHeader.magic != GDMFileHeader::magicGDM_
- || fileHeader.dosEOF[0] != 13 || fileHeader.dosEOF[1] != 10 || fileHeader.dosEOF[2] != 26
- || fileHeader.magic2 != GDMFileHeader::magicGMFS
- || fileHeader.formatMajorVer != 1 || fileHeader.formatMinorVer != 0)
- {
- return false;
- }
-
// 1-MOD, 2-MTM, 3-S3M, 4-669, 5-FAR, 6-ULT, 7-STM, 8-MED
- static const MODTYPE gdmFormatOrigin[] =
+ const MODTYPE gdmFormatOrigin[] =
{
MOD_TYPE_NONE, MOD_TYPE_MOD, MOD_TYPE_MTM, MOD_TYPE_S3M, MOD_TYPE_669, MOD_TYPE_FAR, MOD_TYPE_ULT, MOD_TYPE_STM, MOD_TYPE_MED
};
- m_nType = gdmFormatOrigin[fileHeader.originalFormat % CountOf(gdmFormatOrigin)];
- if(m_nType == MOD_TYPE_NONE)
+ GDMFileHeader fileHeader;
+ if(!file.ReadConvertEndianness(fileHeader)
+ || fileHeader.magic != GDMFileHeader::magicGDM_
+ || fileHeader.dosEOF[0] != 13 || fileHeader.dosEOF[1] != 10 || fileHeader.dosEOF[2] != 26
+ || fileHeader.magic2 != GDMFileHeader::magicGMFS
+ || fileHeader.formatMajorVer != 1 || fileHeader.formatMinorVer != 0
+ || fileHeader.originalFormat >= CountOf(gdmFormatOrigin)
+ || fileHeader.originalFormat == 0)
{
return false;
}
+ InitializeGlobals();
+ m_nType = gdmFormatOrigin[fileHeader.originalFormat];
+
// Song name
- MemsetZero(m_szNames);
StringFixer::ReadString<StringFixer::maybeNullTerminated>(m_szNames[0], fileHeader.songTitle);
// Read channel pan map... 0...15 = channel panning, 16 = surround channel, 255 = channel does not exist
m_nChannels = 32;
for(CHANNELINDEX i = 0; i < 32; i++)
{
+ ChnSettings[i].Reset();
if(fileHeader.panMap[i] < 16)
{
- ChnSettings[i].nPan = MIN((fileHeader.panMap[i] * 16) + 8, 256);
+ ChnSettings[i].nPan = std::min((fileHeader.panMap[i] * 16) + 8, 256);
} else if(fileHeader.panMap[i] == 16)
{
ChnSettings[i].nPan = 128;
@@ -186,9 +181,6 @@
m_nDefaultGlobalVolume = MIN(fileHeader.masterVol * 4, 256);
m_nDefaultSpeed = fileHeader.tempo;
m_nDefaultTempo = fileHeader.bpm;
- m_nRestartPos = 0; // Not supported in this format, so use the default value
- m_nSamplePreAmp = 48; // Dito
- m_nVSTiVolume = 48; // Dito
// Read orders
if(file.Seek(fileHeader.orderOffset))
Modified: trunk/OpenMPT/soundlib/Load_imf.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_imf.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_imf.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -404,6 +404,8 @@
return false;
}
+ InitializeGlobals();
+
// Read channel configuration
std::bitset<32> ignoreChannels; // bit set for each channel that's completely disabled
m_nChannels = 0;
Modified: trunk/OpenMPT/soundlib/Load_it.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_it.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_it.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -293,6 +293,8 @@
return false;
}
+ InitializeGlobals();
+
bool interpretModPlugMade = false;
// OpenMPT crap at the end of file
@@ -411,6 +413,7 @@
// Reading Channels Pan Positions
for(CHANNELINDEX i = 0; i < 64; i++) if(fileHeader.chnpan[i] != 0xFF)
{
+ ChnSettings[i].Reset();
ChnSettings[i].nVolume = Clamp(fileHeader.chnvol[i], uint8(0), uint8(64));
ChnSettings[i].nPan = 128;
ChnSettings[i].dwFlags.reset();
Modified: trunk/OpenMPT/soundlib/Load_itp.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_itp.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_itp.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -57,6 +57,8 @@
return false;
}
+ InitializeGlobals();
+
// Song comments
songMessage.Read(file, file.ReadUint32LE(), SongMessage::leCR);
Modified: trunk/OpenMPT/soundlib/Load_mdl.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mdl.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_mdl.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -314,7 +314,9 @@
dwTrackPos = 0;
pvolenv = ppanenv = ppitchenv = NULL;
nvolenv = npanenv = npitchenv = 0;
- m_nSamples = m_nInstruments = 0;
+
+ InitializeGlobals();
+
while (dwMemPos+6 < dwMemLength)
{
block = *((WORD *)(lpStream+dwMemPos));
@@ -344,7 +346,7 @@
m_nChannels = 4;
for (i=0; i<32; i++)
{
- ChnSettings[i].nVolume = 64;
+ ChnSettings[i].Reset();
ChnSettings[i].nPan = (pmib->channelinfo[i] & 0x7F) << 1;
if (pmib->channelinfo[i] & 0x80)
ChnSettings[i].dwFlags.set(CHN_MUTE);
Modified: trunk/OpenMPT/soundlib/Load_med.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_med.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_med.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -541,8 +541,11 @@
Log(" extra_songs = %d\n", pmmh->extra_songs);
Log("\n");
#endif
+
+ InitializeGlobals();
+ InitializeChannels();
m_nType = MOD_TYPE_MED;
- m_nSamplePreAmp = 0x20;
+ m_nSamplePreAmp = 32;
dwBlockArr = BigEndian(pmmh->blockarr);
dwSmplArr = BigEndian(pmmh->smplarr);
dwExpData = BigEndian(pmmh->expdata);
Modified: trunk/OpenMPT/soundlib/Load_mid.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mid.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_mid.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -532,11 +532,10 @@
miditracks.resize(tracks);
// Reading File...
+ InitializeGlobals();
m_nType = MOD_TYPE_MID;
m_nChannels = 32;
- m_nSamples = 0;
- m_nInstruments = 0;
- m_SongFlags.set(SONG_LINEARSLIDES);
+ m_SongFlags = SONG_LINEARSLIDES;
m_szNames[0][0] = 0;
// MIDI->MOD Tempo Conversion
@@ -571,9 +570,7 @@
for (UINT ics=0; ics<MAX_BASECHANNELS; ics++)
{
// Channel settings
- ChnSettings[ics].nPan = 128;
- ChnSettings[ics].nVolume = 64;
- ChnSettings[ics].dwFlags.reset();
+ ChnSettings[ics].Reset();
// Channels state
chnstate[ics].pan = 128;
chnstate[ics].pitchsrc = 0x2000;
Modified: trunk/OpenMPT/soundlib/Load_mod.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mod.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_mod.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -483,6 +483,7 @@
return false;
}
+ InitializeGlobals();
m_nChannels = 4;
// Check MOD Magic
@@ -753,6 +754,8 @@
return false;
}
+ InitializeGlobals();
+
// We'll have to do some heuristic checks to find out whether this is an old Ultimate Soundtracker module
// or if it was made with the newer Soundtracker versions.
// Thanks for Fraggie for this information! (http://www.un4seen.com/forum/?topic=14471.msg100829#msg100829)
Modified: trunk/OpenMPT/soundlib/Load_mt2.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mt2.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_mt2.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -231,6 +231,9 @@
|| (pfh->wVersion < 0x0200) || (pfh->wVersion >= 0x0300)
|| (pfh->wChannels < 1) || (pfh->wChannels > MAX_BASECHANNELS)) return false;
pdd = NULL;
+
+ InitializeGlobals();
+ InitializeChannels();
m_nType = MOD_TYPE_MT2;
m_nChannels = pfh->wChannels;
m_nRestartPos = pfh->wRestart;
Modified: trunk/OpenMPT/soundlib/Load_mtm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mtm.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_mtm.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -115,6 +115,7 @@
return false;
}
+ InitializeGlobals();
StringFixer::ReadString<StringFixer::maybeNullTerminated>(m_szNames[0], fileHeader.songName);
m_nType = MOD_TYPE_MTM;
m_nSamples = fileHeader.numSamples;
@@ -132,14 +133,13 @@
// Setting Channel Pan Position
for(CHANNELINDEX chn = 0; chn < GetNumChannels(); chn++)
{
+ ChnSettings[chn].Reset();
ChnSettings[chn].nPan = ((fileHeader.panPos[chn] & 0x0F) << 4) + 8;
- ChnSettings[chn].nVolume = 64;
}
// Reading pattern order
const ORDERINDEX readOrders = fileHeader.lastOrder + 1;
- Order.ReadAsByte(file, readOrders);
- file.Skip(128 - readOrders);
+ Order.ReadAsByte(file, 128, readOrders);
// Reading Patterns
const ROWINDEX rowsPerPat = std::min(ROWINDEX(fileHeader.beatsPerTrack), MAX_PATTERN_ROWS);
Modified: trunk/OpenMPT/soundlib/Load_okt.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_okt.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_okt.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -112,8 +112,8 @@
// Parse a pattern block
-void ReadOKTPattern(FileReader &chunk, PATTERNINDEX nPat, CSoundFile *pSndFile)
-//-----------------------------------------------------------------------------
+void ReadOKTPattern(FileReader &chunk, PATTERNINDEX nPat, CSoundFile &sndFile)
+//----------------------------------------------------------------------------
{
if(!chunk.CanRead(2))
{
@@ -122,16 +122,16 @@
ROWINDEX rows = Clamp(static_cast<ROWINDEX>(chunk.ReadUint16BE()), ROWINDEX(1), MAX_PATTERN_ROWS);
- if(pSndFile->Patterns.Insert(nPat, rows))
+ if(sndFile.Patterns.Insert(nPat, rows))
{
return;
}
- const CHANNELINDEX chns = pSndFile->GetNumChannels();
+ const CHANNELINDEX chns = sndFile.GetNumChannels();
for(ROWINDEX row = 0; row < rows; row++)
{
- ModCommand *m = pSndFile->Patterns[nPat].GetRow(row);
+ ModCommand *m = sndFile.Patterns[nPat].GetRow(row);
for(CHANNELINDEX chn = 0; chn < chns; chn++, m++)
{
uint8 note = chunk.ReadUint8();
@@ -294,9 +294,8 @@
vector<bool> sample7bit; // 7-/8-bit sample
ORDERINDEX nOrders = 0;
- MemsetZero(m_szNames);
- m_nChannels = 0;
- m_nSamples = 0;
+ InitializeGlobals();
+ m_szNames[0][0] = '\0';
// Go through IFF chunks...
while(file.BytesLeft())
@@ -327,8 +326,10 @@
uint8 ch1 = chunk.ReadUint8(), ch2 = chunk.ReadUint8();
if(ch1 || ch2)
{
+ ChnSettings[m_nChannels].Reset();
ChnSettings[m_nChannels++].nPan = (((nChn & 3) == 1) || ((nChn & 3) == 2)) ? 0xC0 : 0x40;
}
+ ChnSettings[m_nChannels].Reset();
ChnSettings[m_nChannels++].nPan = (((nChn & 3) == 1) || ((nChn & 3) == 2)) ? 0xC0 : 0x40;
}
break;
@@ -406,7 +407,7 @@
for(PATTERNINDEX nPat = 0; nPat < patternChunks.size(); nPat++)
{
if(patternChunks[nPat].GetLength() > 0)
- ReadOKTPattern(patternChunks[nPat], nPat, this);
+ ReadOKTPattern(patternChunks[nPat], nPat, *this);
else
Patterns.Insert(nPat, 64); // invent empty pattern
}
Modified: trunk/OpenMPT/soundlib/Load_psm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_psm.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_psm.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -287,15 +287,11 @@
}
// Yep, this seems to be a valid file.
+ InitializeGlobals();
m_nType = MOD_TYPE_PSM;
m_SongFlags = SONG_ITOLDEFFECTS | SONG_ITCOMPATGXX;
SetModFlag(MSF_COMPATIBLE_PLAY, true);
- m_nChannels = 0;
- MemsetZero(m_szNames);
-
- m_nVSTiVolume = m_nSamplePreAmp = 48; // not supported in this format, so use a good default value
-
// pattern offset and identifier
PATTERNINDEX numPatterns = 0; // used for setting up the orderlist - final pattern count
vector<FileReader> patternChunks; // pattern offsets (sorted as they occour in the file)
@@ -643,6 +639,7 @@
m_nRestartPos = subsongs[0].restartPos;
for(CHANNELINDEX chn = 0; chn < m_nChannels; chn++)
{
+ ChnSettings[chn].Reset();
ChnSettings[chn].nVolume = subsongs[0].channelVolume[chn];
ChnSettings[chn].nPan = subsongs[0].channelPanning[chn];
ChnSettings[chn].dwFlags.set(CHN_SURROUND, subsongs[0].channelSurround[chn]);
@@ -1141,22 +1138,21 @@
|| (fileHeader.formatVersion != 0x10 && fileHeader.formatVersion != 0x01) // why is this sometimes 0x01?
|| fileHeader.patternVersion != 0 // 255ch pattern version not supported (did anyone use this?)
|| (fileHeader.songType & 3) != 0
- || MAX(fileHeader.numChannelsPlay, fileHeader.numChannelsReal) == 0)
+ || std::max(fileHeader.numChannelsPlay, fileHeader.numChannelsReal) == 0)
{
return false;
}
// Seems to be valid!
-
+ InitializeGlobals();
m_nType = MOD_TYPE_S3M;
- m_nChannels = MIN(MAX(fileHeader.numChannelsPlay, fileHeader.numChannelsReal), MAX_BASECHANNELS);
+ m_nChannels = Clamp(CHANNELINDEX(fileHeader.numChannelsPlay), CHANNELINDEX(fileHeader.numChannelsReal), MAX_BASECHANNELS);
m_nSamplePreAmp = fileHeader.masterVolume;
if(m_nSamplePreAmp == 255)
{
// Most of the time, the master volume value makes sense... Just not when it's 255.
m_nSamplePreAmp = 48;
}
- m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME;
m_nDefaultSpeed = fileHeader.songSpeed;
m_nDefaultTempo = fileHeader.songTempo;
@@ -1174,6 +1170,7 @@
{
for(CHANNELINDEX i = 0; i < 32; i++)
{
+ ChnSettings[i].Reset();
ChnSettings[i].nPan = ((15 - (file.ReadUint8() & 0x0F)) * 256 + 8) / 15; // 15 seems to be left and 0 seems to be right...
ChnSettings[i].nVolume = 64;
ChnSettings[i].dwFlags.reset(); // (i >= fileHeader.numChannelsPlay) ? CHN_MUTE : 0; // don't mute channels, as muted channels are completely ignored in S3M
Modified: trunk/OpenMPT/soundlib/Load_ptm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_ptm.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_ptm.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -95,6 +95,7 @@
StringFixer::ReadString<StringFixer::maybeNullTerminated>(m_szNames[0], pfh.songname);
+ InitializeGlobals();
m_nType = MOD_TYPE_PTM;
m_nChannels = pfh.nchannels;
m_nSamples = MIN(pfh.nsamples, MAX_SAMPLES - 1);
@@ -104,7 +105,7 @@
for (CHANNELINDEX ipan = 0; ipan < m_nChannels; ipan++)
{
- ChnSettings[ipan].nVolume = 64;
+ ChnSettings[ipan].Reset();
ChnSettings[ipan].nPan = ((pfh.chnpan[ipan] & 0x0F) << 4) + 4;
}
for (SAMPLEINDEX ismp = 0; ismp < m_nSamples; ismp++, dwMemPos += sizeof(PTMSAMPLE))
Modified: trunk/OpenMPT/soundlib/Load_s3m.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_s3m.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_s3m.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -443,6 +443,8 @@
return false;
}
+ InitializeGlobals();
+
// ST3 ignored Zxx commands, so if we find that a file was made with ST3, we should erase all MIDI macros.
bool keepMidiMacros = false;
@@ -519,7 +521,7 @@
m_nChannels = 4;
for(CHANNELINDEX i = 0; i < 32; i++)
{
- ChnSettings[i].nVolume = 64;
+ ChnSettings[i].Reset();
if(fileHeader.channels[i] == 0xFF)
{
Modified: trunk/OpenMPT/soundlib/Load_stm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_stm.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_stm.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -130,11 +130,10 @@
StringFixer::ReadString<StringFixer::maybeNullTerminated>(m_szNames[0], fileHeader.songname);
// Read STM header
+ InitializeGlobals();
m_nType = MOD_TYPE_STM;
- m_SongFlags.reset();
m_nSamples = 31;
m_nChannels = 4;
- m_nInstruments = 0;
m_nMinPeriod = 64;
m_nMaxPeriod = 0x7FFF;
m_nDefaultSpeed = fileHeader.initTempo >> 4;
@@ -146,8 +145,7 @@
// Setting up channels
for(CHANNELINDEX chn = 0; chn < 4; chn++)
{
- ChnSettings[chn].dwFlags.reset();
- ChnSettings[chn].nVolume = 64;
+ ChnSettings[chn].Reset();
ChnSettings[chn].nPan = (chn & 1) ? 0x40 : 0xC0;
}
Modified: trunk/OpenMPT/soundlib/Load_ult.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_ult.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_ult.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -389,6 +389,7 @@
return false;
}
+ InitializeGlobals();
StringFixer::ReadString<StringFixer::maybeNullTerminated>(m_szNames[0], fileHeader.songName);
m_nType = MOD_TYPE_ULT;
@@ -435,12 +436,14 @@
{
for(CHANNELINDEX chn = 0; chn < GetNumChannels(); chn++)
{
+ ChnSettings[chn].Reset();
ChnSettings[chn].nPan = ((file.ReadUint8() & 0x0F) << 4) + 8;
}
} else
{
for(CHANNELINDEX chn = 0; chn < GetNumChannels(); chn++)
{
+ ChnSettings[chn].Reset();
ChnSettings[chn].nPan = (chn & 1) ? 192 : 64;
}
}
Modified: trunk/OpenMPT/soundlib/Load_wav.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_wav.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_wav.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -55,6 +55,7 @@
return false;
}
+ InitializeGlobals();
m_nChannels = std::max(wavFile.GetNumChannels(), uint16(2));
if(Patterns.Insert(0, 64) || Patterns.Insert(1, 64))
{
@@ -92,9 +93,8 @@
for(CHANNELINDEX channel = 0; channel < wavFile.GetNumChannels(); channel++)
{
+ ChnSettings[channel].Reset();
ChnSettings[channel].nPan = (channel % 2u) ? 256 : 0;
- ChnSettings[channel].nVolume = 64;
- ChnSettings[channel].dwFlags.reset();
}
// Setting up pattern
Modified: trunk/OpenMPT/soundlib/Load_xm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_xm.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Load_xm.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -263,6 +263,10 @@
return false;
}
+ InitializeGlobals();
+ InitializeChannels();
+ ChangeModTypeTo(MOD_TYPE_XM);
+
FlagSet<TrackerVersions> madeWith(verUnknown);
if(!memcmp(fileHeader.trackerName, "FastTracker v 2.00 ", 20))
@@ -275,15 +279,12 @@
StringFixer::ReadString<StringFixer::spacePadded>(m_szNames[0], fileHeader.songName);
- m_nType = MOD_TYPE_NONE; // Ensure that order list items FE and FF are not converted.
- ChangeModTypeTo(MOD_TYPE_XM);
m_nMinPeriod = 27;
m_nMaxPeriod = 54784;
m_nRestartPos = fileHeader.restartPos;
m_nChannels = fileHeader.channels;
m_nInstruments = std::min(fileHeader.instruments, uint16(MAX_INSTRUMENTS - 1));
- m_nSamples = 0;
m_nDefaultSpeed = Clamp(fileHeader.speed, uint16(1), uint16(31));
m_nDefaultTempo = Clamp(fileHeader.tempo, uint16(32), uint16(512));
Modified: trunk/OpenMPT/soundlib/ModSequence.cpp
===================================================================
--- trunk/OpenMPT/soundlib/ModSequence.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/ModSequence.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -743,14 +743,14 @@
}
-bool ModSequence::ReadAsByte(FileReader &file, size_t howMany)
-//------------------------------------------------------------
+bool ModSequence::ReadAsByte(FileReader &file, size_t howMany, size_t readEntries)
+//--------------------------------------------------------------------------------
{
if(!file.CanRead(howMany))
{
return false;
}
- ORDERINDEX readEntries = static_cast<ORDERINDEX>(howMany);
+ LimitMax(readEntries, howMany);
if(!(m_sndFile.GetType() & MOD_TYPE_MPT))
{
LimitMax(readEntries, MAX_ORDERS);
Modified: trunk/OpenMPT/soundlib/ModSequence.h
===================================================================
--- trunk/OpenMPT/soundlib/ModSequence.h 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/ModSequence.h 2013-04-26 22:13:07 UTC (rev 1977)
@@ -101,7 +101,7 @@
// Read/write.
size_t WriteAsByte(FILE* f, const uint16 count) const;
bool ReadAsByte(const BYTE* pFrom, const int howMany, const int memLength);
- bool ReadAsByte(FileReader &file, size_t howMany);
+ bool ReadAsByte(FileReader &file, size_t howMany, size_t readEntries = SIZE_MAX);
template<typename T, size_t arraySize>
bool ReadFromArray(const T (&orders)[arraySize], size_t howMany = arraySize);
Modified: trunk/OpenMPT/soundlib/Sndfile.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.cpp 2013-04-26 20:45:10 UTC (rev 1976)
+++ trunk/OpenMPT/soundlib/Sndfile.cpp 2013-04-26 22:13:07 UTC (rev 1977)
@@ -472,6 +472,45 @@
}
+// Global variable initializer for loader functions
+void CSoundFi...
[truncated message content] |
|
From: <sag...@us...> - 2013-04-27 13:28:14
|
Revision: 1979
http://sourceforge.net/p/modplug/code/1979
Author: saga-games
Date: 2013-04-27 13:28:06 +0000 (Sat, 27 Apr 2013)
Log Message:
-----------
[Fix] XM order list broke in refactoring commit...
[Ref] Removed unused variant of ModSequence::ReadAsByte
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Load_psm.cpp
trunk/OpenMPT/soundlib/Load_xm.cpp
trunk/OpenMPT/soundlib/ModSequence.cpp
trunk/OpenMPT/soundlib/ModSequence.h
trunk/OpenMPT/soundlib/Snd_defs.h
trunk/OpenMPT/soundlib/Sndfile.cpp
Modified: trunk/OpenMPT/soundlib/Load_psm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_psm.cpp 2013-04-27 13:22:44 UTC (rev 1978)
+++ trunk/OpenMPT/soundlib/Load_psm.cpp 2013-04-27 13:28:06 UTC (rev 1979)
@@ -1156,7 +1156,6 @@
m_nDefaultSpeed = fileHeader.songSpeed;
m_nDefaultTempo = fileHeader.songTempo;
- MemsetZero(m_szNames);
StringFixer::ReadString<StringFixer::spacePadded>(m_szNames[0], fileHeader.songName);
// Read orders
Modified: trunk/OpenMPT/soundlib/Load_xm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_xm.cpp 2013-04-27 13:22:44 UTC (rev 1978)
+++ trunk/OpenMPT/soundlib/Load_xm.cpp 2013-04-27 13:28:06 UTC (rev 1979)
@@ -257,8 +257,7 @@
|| fileHeader.channels == 0
|| fileHeader.channels > MAX_BASECHANNELS
|| _strnicmp(fileHeader.signature, "Extended Module: ", 17)
- || !Order.ReadAsByte(file, std::min(ORDERINDEX(fileHeader.orders), MAX_ORDERS))
- || !file.Seek(fileHeader.size + 60))
+ || !file.CanRead(fileHeader.orders))
{
return false;
}
@@ -295,6 +294,9 @@
// set this here already because XMs compressed with BoobieSqueezer will exit the function early
SetModFlag(MSF_COMPATIBLE_PLAY, true);
+ Order.ReadAsByte(file, fileHeader.orders);
+ file.Seek(fileHeader.size + 60);
+
if(fileHeader.version >= 0x0104)
{
ReadXMPatterns(file, fileHeader, *this);
Modified: trunk/OpenMPT/soundlib/ModSequence.cpp
===================================================================
--- trunk/OpenMPT/soundlib/ModSequence.cpp 2013-04-27 13:22:44 UTC (rev 1978)
+++ trunk/OpenMPT/soundlib/ModSequence.cpp 2013-04-27 13:28:06 UTC (rev 1979)
@@ -728,21 +728,6 @@
}
-bool ModSequence::ReadAsByte(const BYTE* pFrom, const int howMany, const int memLength)
-//-------------------------------------------------------------------------------------
-{
- if(howMany < 0 || howMany > memLength) return false;
- if(m_sndFile.GetType() != MOD_TYPE_MPT && howMany > MAX_ORDERS) return false;
-
- if(GetLength() < static_cast<size_t>(howMany))
- resize(ORDERINDEX(howMany));
-
- for(int i = 0; i<howMany; i++, pFrom++)
- (*this)[i] = *pFrom;
- return true;
-}
-
-
bool ModSequence::ReadAsByte(FileReader &file, size_t howMany, size_t readEntries)
//--------------------------------------------------------------------------------
{
@@ -751,17 +736,14 @@
return false;
}
LimitMax(readEntries, howMany);
- if(!(m_sndFile.GetType() & MOD_TYPE_MPT))
- {
- LimitMax(readEntries, MAX_ORDERS);
- }
+ LimitMax(readEntries, ORDERINDEX_MAX);
if(GetLength() < readEntries)
{
- resize(readEntries);
+ resize((ORDERINDEX)readEntries);
}
- for(int i = 0; i < readEntries; i++)
+ for(size_t i = 0; i < readEntries; i++)
{
(*this)[i] = file.ReadUint8();
}
Modified: trunk/OpenMPT/soundlib/ModSequence.h
===================================================================
--- trunk/OpenMPT/soundlib/ModSequence.h 2013-04-27 13:22:44 UTC (rev 1978)
+++ trunk/OpenMPT/soundlib/ModSequence.h 2013-04-27 13:28:06 UTC (rev 1979)
@@ -100,8 +100,7 @@
// Read/write.
size_t WriteAsByte(FILE* f, const uint16 count) const;
- bool ReadAsByte(const BYTE* pFrom, const int howMany, const int memLength);
- bool ReadAsByte(FileReader &file, size_t howMany, size_t readEntries = SIZE_MAX);
+ bool ReadAsByte(FileReader &file, size_t howMany, size_t readEntries = ORDERINDEX_MAX);
template<typename T, size_t arraySize>
bool ReadFromArray(const T (&orders)[arraySize], size_t howMany = arraySize);
Modified: trunk/OpenMPT/soundlib/Snd_defs.h
===================================================================
--- trunk/OpenMPT/soundlib/Snd_defs.h 2013-04-27 13:22:44 UTC (rev 1978)
+++ trunk/OpenMPT/soundlib/Snd_defs.h 2013-04-27 13:28:06 UTC (rev 1979)
@@ -24,6 +24,7 @@
const CHANNELINDEX CHANNELINDEX_INVALID = uint16_max;
typedef uint16 ORDERINDEX;
const ORDERINDEX ORDERINDEX_INVALID = uint16_max;
+ const ORDERINDEX ORDERINDEX_MAX = uint16_max - 1;
typedef uint16 PATTERNINDEX;
const PATTERNINDEX PATTERNINDEX_INVALID = uint16_max;
typedef uint8 PLUGINDEX;
Modified: trunk/OpenMPT/soundlib/Sndfile.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.cpp 2013-04-27 13:22:44 UTC (rev 1978)
+++ trunk/OpenMPT/soundlib/Sndfile.cpp 2013-04-27 13:28:06 UTC (rev 1979)
@@ -432,8 +432,6 @@
m_nDefaultRowsPerMeasure = m_nCurrentRowsPerMeasure = 16;
#endif // MODPLUG_TRACKER
- m_ModFlags.reset();
-
m_dwLastSavedWithVersion=0;
m_dwCreatedWithVersion=0;
m_bChannelMuteTogglePending.reset();
@@ -495,7 +493,6 @@
SetMixLevels(mixLevels_compatible);
SetModFlags(0);
- Order.resize(1);
Patterns.ClearPatterns();
songMessage.clear();
}
@@ -528,6 +525,7 @@
m_nOldGlbVolSlide = 0;
InitializeGlobals();
+ Order.resize(1);
// Playback
m_nPatternDelay = 0;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <man...@us...> - 2013-04-27 22:28:33
|
Revision: 1986
http://sourceforge.net/p/modplug/code/1986
Author: manxorist
Date: 2013-04-27 22:28:24 +0000 (Sat, 27 Apr 2013)
Log Message:
-----------
[Ref] Apply final output gain for floating point output after the conversion to floating point to avoid underflow or clipping.
[Ref] Remove pModDoc parameter in CSoundFile::Create and remove CSoundFile::GetpModDoc() if !MODPLUG_TRACKER.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Sndfile.cpp
trunk/OpenMPT/soundlib/Sndfile.h
trunk/OpenMPT/soundlib/Sndmix.cpp
Modified: trunk/OpenMPT/soundlib/Sndfile.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.cpp 2013-04-27 18:59:25 UTC (rev 1985)
+++ trunk/OpenMPT/soundlib/Sndfile.cpp 2013-04-27 22:28:24 UTC (rev 1986)
@@ -514,8 +514,8 @@
{
m_pModDoc = pModDoc;
#else
-BOOL CSoundFile::Create(FileReader filereader, void*)
-//---------------------------------------------------
+BOOL CSoundFile::Create(FileReader filereader)
+//--------------------------------------------
{
#endif // MODPLUG_TRACKER
Modified: trunk/OpenMPT/soundlib/Sndfile.h
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.h 2013-04-27 18:59:25 UTC (rev 1985)
+++ trunk/OpenMPT/soundlib/Sndfile.h 2013-04-27 22:28:24 UTC (rev 1986)
@@ -406,11 +406,13 @@
#ifdef MODPLUG_TRACKER
BOOL Create(FileReader filereader, CModDoc *pModDoc);
+#else
+ BOOL Create(FileReader filereader);
+#endif // MODPLUG_TRACKER
+
+#ifdef MODPLUG_TRACKER
// Get parent CModDoc. Can be nullptr if previewing from tree view, and is always nullptr if we're not actually compiling OpenMPT.
CModDoc *GetpModDoc() const { return m_pModDoc; }
-#else
- BOOL Create(FileReader filereader, void *pModDoc=nullptr);
- void *GetpModDoc() const { return nullptr; }
#endif // MODPLUG_TRACKER
BOOL Destroy();
@@ -747,6 +749,7 @@
#ifndef MODPLUG_TRACKER
void ApplyFinalOutputGain(int SoundBuffer[], int RearBuffer[], long lCount); // lCount meaning the number of frames, totally independet from the numer of channels
+ void ApplyFinalOutputGainFloat(float *beg, float *end);
#endif
// System-Dependant functions
Modified: trunk/OpenMPT/soundlib/Sndmix.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndmix.cpp 2013-04-27 18:59:25 UTC (rev 1985)
+++ trunk/OpenMPT/soundlib/Sndmix.cpp 2013-04-27 22:28:24 UTC (rev 1986)
@@ -320,7 +320,11 @@
nStat++;
#ifndef MODPLUG_TRACKER
- ApplyFinalOutputGain(MixSoundBuffer, MixRearBuffer, lCount);
+ if(!m_MixerSettings.IsFloatSampleFormat())
+ {
+ // Apply final output gain for non floating point output
+ ApplyFinalOutputGain(MixSoundBuffer, MixRearBuffer, lCount);
+ }
#endif
#ifndef NO_AGC
@@ -355,9 +359,22 @@
}
#endif
- // Perform clipping
+ #ifndef MODPLUG_TRACKER
+ LPBYTE buf_beg = lpBuffer;
+ #endif
+
+ // Convert to output sample format and optionally perform lipping if needed
lpBuffer += pCvt(lpBuffer, MixSoundBuffer, lTotalSampleCount);
+ #ifndef MODPLUG_TRACKER
+ LPBYTE buf_end = lpBuffer;
+ // Apply final output gain for floating point output after conversion so we do not suffer underflow or clipping
+ if(m_MixerSettings.IsFloatSampleFormat())
+ {
+ ApplyFinalOutputGainFloat(reinterpret_cast<float*>(buf_beg), reinterpret_cast<float*>(buf_end));
+ }
+ #endif
+
// Buffer ready
lRead -= lCount;
m_nBufferCount -= lCount;
@@ -2308,5 +2325,18 @@
}
}
}
+void CSoundFile::ApplyFinalOutputGainFloat(float *beg, float *end) {
+ if(m_MixerSettings.m_FinalOutputGain == (1<<16))
+ {
+ // nothing to do, gain == +/- 0dB
+ return;
+ }
+ // no clipping prevention is done here
+ float factor = static_cast<float>(m_MixerSettings.m_FinalOutputGain) * (1.0f / static_cast<float>(1<<16));
+ for(float *i = beg; i != end; ++i)
+ {
+ *i *= factor;
+ }
+}
#endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <man...@us...> - 2013-04-28 19:40:44
|
Revision: 1997
http://sourceforge.net/p/modplug/code/1997
Author: manxorist
Date: 2013-04-28 19:40:37 +0000 (Sun, 28 Apr 2013)
Log Message:
-----------
[Fix] Fix buffer overflow in X86_InterleaveFrontRear which had probably been there forever (fixes crashes in quad channel mode).
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Fastmix.cpp
trunk/OpenMPT/soundlib/Sndmix.cpp
Modified: trunk/OpenMPT/soundlib/Fastmix.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Fastmix.cpp 2013-04-28 16:56:58 UTC (rev 1996)
+++ trunk/OpenMPT/soundlib/Fastmix.cpp 2013-04-28 19:40:37 UTC (rev 1997)
@@ -2163,16 +2163,17 @@
#endif
-void X86_InterleaveFrontRear(int *pFrontBuf, int *pRearBuf, DWORD nSamples)
-//-------------------------------------------------------------------------
+void X86_InterleaveFrontRear(int *pFrontBuf, int *pRearBuf, DWORD nFrames)
+//------------------------------------------------------------------------
{
+#ifdef ENABLE_X86
_asm {
- mov ecx, nSamples // ecx = samplecount
+ mov ecx, nFrames // ecx = framecount
mov esi, pFrontBuf // esi = front buffer
mov edi, pRearBuf // edi = rear buffer
- lea esi, [esi+ecx*4] // esi = &front[N]
- lea edi, [edi+ecx*4] // edi = &rear[N]
- lea ebx, [esi+ecx*4] // ebx = &front[N*2]
+ lea esi, [esi+ecx*8] // esi = &front[N*2]
+ lea edi, [edi+ecx*8] // edi = &rear[N*2]
+ lea ebx, [esi+ecx*8] // ebx = &front[N*4]
push ebp
interleaveloop:
mov eax, dword ptr [esi-8]
@@ -2190,6 +2191,16 @@
jnz interleaveloop
pop ebp
}
+#else
+ // copy backwards as we are writing back into FrontBuf
+ for(int i=nFrames-1; i>=0; i--)
+ {
+ pFrontBuf[i*4+3] = pRearBuf[i*2+1];
+ pFrontBuf[i*4+2] = pRearBuf[i*2+0];
+ pFrontBuf[i*4+1] = pFrontBuf[i*2+1];
+ pFrontBuf[i*4+0] = pFrontBuf[i*2+0];
+ }
+#endif
}
Modified: trunk/OpenMPT/soundlib/Sndmix.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndmix.cpp 2013-04-28 16:56:58 UTC (rev 1996)
+++ trunk/OpenMPT/soundlib/Sndmix.cpp 2013-04-28 19:40:37 UTC (rev 1997)
@@ -43,7 +43,7 @@
#ifdef ENABLE_X86
extern VOID X86_Dither(int *pBuffer, UINT nSamples, UINT nBits);
#endif
-extern VOID X86_InterleaveFrontRear(int *pFrontBuf, int *pRearBuf, DWORD nSamples);
+extern VOID X86_InterleaveFrontRear(int *pFrontBuf, int *pRearBuf, DWORD nFrames);
extern VOID X86_StereoFill(int *pBuffer, UINT nSamples, LPLONG lpROfs, LPLONG lpLOfs);
extern VOID X86_MonoFromStereo(int *pMixBuf, UINT nSamples);
@@ -265,7 +265,7 @@
#endif // NO_REVERB
// Resetting sound buffer
- X86_StereoFill(MixSoundBuffer, lSampleCount, &gnDryROfsVol, &gnDryLOfsVol);
+ X86_StereoFill(MixSoundBuffer, lCount, &gnDryROfsVol, &gnDryLOfsVol);
ASSERT(lCount<=MIXBUFFERSIZE); // ensure MIXBUFFERSIZE really is our max buffer size
if (m_MixerSettings.gnChannels >= 2)
@@ -337,7 +337,7 @@
// Multichannel
if (m_MixerSettings.gnChannels > 2)
{
- X86_InterleaveFrontRear(MixSoundBuffer, MixRearBuffer, lSampleCount);
+ X86_InterleaveFrontRear(MixSoundBuffer, MixRearBuffer, lCount);
lTotalSampleCount *= 2;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2013-04-28 22:55:15
|
Revision: 1999
http://sourceforge.net/p/modplug/code/1999
Author: saga-games
Date: 2013-04-28 22:55:08 +0000 (Sun, 28 Apr 2013)
Log Message:
-----------
[Fix] Version major/minor was swapped in DBM format.
[Imp] Added version detection for SoundTracker MODs and Mod's Grave.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/LOAD_DBM.CPP
trunk/OpenMPT/soundlib/Load_mod.cpp
Modified: trunk/OpenMPT/soundlib/LOAD_DBM.CPP
===================================================================
--- trunk/OpenMPT/soundlib/LOAD_DBM.CPP 2013-04-28 22:43:36 UTC (rev 1998)
+++ trunk/OpenMPT/soundlib/LOAD_DBM.CPP 2013-04-28 22:55:08 UTC (rev 1999)
@@ -31,7 +31,8 @@
struct PACKED DBMFileHeader
{
uint32 dbm_id; // "DBM0" = 0x304d4244
- uint16 trkver; // Tracker version: 02.15
+ uint8 trkVerHi; // Tracker version: 02.15
+ uint8 trkVerLo;
uint16 reserved;
uint32 name_id; // "NAME" = 0x454d414e
uint32 name_len; // name length: always 44
@@ -222,7 +223,7 @@
nPatterns = BigEndianW(pfh->patterns);
m_nType = MOD_TYPE_DBM;
m_nChannels = CLAMP(BigEndianW(pfh->channels), 1, MAX_BASECHANNELS); // note: MAX_BASECHANNELS is currently 127, but DBM supports up to 128 channels.
- madeWithTracker.Format("Digi Booster %x.%x", pfh->trkver >> 8, pfh->trkver & 0xFF);
+ madeWithTracker.Format("Digi Booster %x.%x", pfh->trkVerHi, pfh->trkVerLo);
if(pfh->songname[0])
{
Modified: trunk/OpenMPT/soundlib/Load_mod.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mod.cpp 2013-04-28 22:43:36 UTC (rev 1998)
+++ trunk/OpenMPT/soundlib/Load_mod.cpp 2013-04-28 22:55:08 UTC (rev 1999)
@@ -577,6 +577,11 @@
// Get number of patterns (including some order list sanity checks)
PATTERNINDEX numPatterns = GetNumPatterns(file, Order, realOrders, totalSampleLen, m_nChannels, isMdKd);
+ if(isMdKd && GetNumChannels() == 8)
+ {
+ // M.K. with 8 channels = Grave Composer
+ madeWithTracker = "Mod's Grave";
+ }
if(isFLT8)
{
@@ -1036,6 +1041,32 @@
}
}
+ switch(minVersion)
+ {
+ case UST1_00:
+ madeWithTracker = "Ultimate Soundtracker 1.0-1.21";
+ break;
+ case UST1_80:
+ madeWithTracker = "Ultimate Soundtracker 1.8-2.0";
+ break;
+ case ST2_00_Exterminator:
+ madeWithTracker = "SoundTracker 2.0 / D.O.C. Sountracker II";
+ break;
+ case ST_III:
+ madeWithTracker = "Defjam Soundtracker III / Alpha Flight SoundTracker IV / D.O.C. SoundTracker IV / VI";
+ break;
+ case ST_IX:
+ madeWithTracker = "D.O.C. SoundTracker IX";
+ break;
+ case MST1_00:
+ madeWithTracker = "Master Soundtracker 1.0";
+ break;
+ case ST2_00:
+ case ST2_00_with_Bxx:
+ madeWithTracker = "SoundTracker 2.0 / 2.1 / 2.2";
+ break;
+ }
+
// Reading samples
if(loadFlags & loadSampleData)
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2013-05-05 00:26:05
|
Revision: 2007
http://sourceforge.net/p/modplug/code/2007
Author: saga-games
Date: 2013-05-05 00:25:59 +0000 (Sun, 05 May 2013)
Log Message:
-----------
[Imp] Brought back S3M / XM tracker identification,
[Fix] Fixed tracker name in PSM new format.
[Imp] DMF: Volume 1 should be silent.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/LOAD_DMF.CPP
trunk/OpenMPT/soundlib/Load_psm.cpp
trunk/OpenMPT/soundlib/Load_s3m.cpp
trunk/OpenMPT/soundlib/Load_xm.cpp
Modified: trunk/OpenMPT/soundlib/LOAD_DMF.CPP
===================================================================
--- trunk/OpenMPT/soundlib/LOAD_DMF.CPP 2013-05-03 14:49:28 UTC (rev 2006)
+++ trunk/OpenMPT/soundlib/LOAD_DMF.CPP 2013-05-05 00:25:59 UTC (rev 2007)
@@ -621,7 +621,7 @@
if((channelInfo & patVolume) != 0)
{
m->volcmd = VOLCMD_VOLUME;
- m->vol = (file.ReadUint8() + 3) / 4;
+ m->vol = (file.ReadUint8() + 2) / 4; // Should be + 3 instead of + 2, but volume 1 is silent in X-Tracker.
}
////////////////////////////////////////////////////////////////
Modified: trunk/OpenMPT/soundlib/Load_psm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_psm.cpp 2013-05-03 14:49:28 UTC (rev 2006)
+++ trunk/OpenMPT/soundlib/Load_psm.cpp 2013-05-05 00:25:59 UTC (rev 2007)
@@ -653,9 +653,9 @@
madeWithTracker = "Epic MegaGames MASI (";
if(newFormat)
- madeWithTracker = "New Version / Sinaria)";
+ madeWithTracker += "New Version / Sinaria)";
else
- madeWithTracker = "New Version)";
+ madeWithTracker += "New Version)";
if(!(loadFlags & loadPatternData))
{
Modified: trunk/OpenMPT/soundlib/Load_s3m.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_s3m.cpp 2013-05-03 14:49:28 UTC (rev 2006)
+++ trunk/OpenMPT/soundlib/Load_s3m.cpp 2013-05-05 00:25:59 UTC (rev 2007)
@@ -176,10 +176,12 @@
trkImpulseTracker = 0x3000,
trkSchismTracker = 0x4000,
trkOpenMPT = 0x5000,
- trkBeRoTracker = 0x6000, // Note: BeRoTracker also used version 0x4100 since 2004.
+ trkBeRoTracker = 0x6000,
+ trkCreamTracker = 0x7000,
trkST3_20 = 0x1320,
trkIT2_14 = 0x3214,
+ trkBeRoTrackerOld = 0x4100, // Used from 2004 to 2012
};
// Flags
@@ -390,7 +392,7 @@
// Pattern decoding flags
enum S3MPattern
{
- s3mEndOfRow = 0x00,
+ s3mEndOfRow = 0x00,
s3mChannelMask = 0x1F,
s3mNotePresent = 0x20,
s3mVolumePresent = 0x40,
@@ -448,16 +450,51 @@
// ST3 ignored Zxx commands, so if we find that a file was made with ST3, we should erase all MIDI macros.
bool keepMidiMacros = false;
- if((fileHeader.cwtv & S3MFileHeader::trackerMask) == S3MFileHeader::trkOpenMPT)
+ mpt::String trackerName;
+ switch(fileHeader.cwtv & S3MFileHeader::trackerMask)
{
- // OpenMPT Version number (Major.Minor)
+ case S3MFileHeader::trkScreamTracker:
+ if(fileHeader.cwtv == S3MFileHeader::trkST3_20 && fileHeader.special == 0 && (fileHeader.ordNum & 0x0F) == 0 && fileHeader.ultraClicks == 0 && (fileHeader.flags & ~0x50) == 0)
+ {
+ // MPT 1.16 and older versions of OpenMPT - Simply keep default (filter) MIDI macros
+ m_dwLastSavedWithVersion = MAKE_VERSION_NUMERIC(1, 16, 00, 00);
+ trackerName = "ModPlug Tracker / OpenMPT";
+ keepMidiMacros = true;
+ } else if(fileHeader.special == 0 && fileHeader.ultraClicks == 0 && fileHeader.flags == 0 && fileHeader.usePanningTable == 0)
+ {
+ trackerName = "Velvet Studio";
+ } else
+ {
+ trackerName = "Scream Tracker %d.%02x";
+ }
+ break;
+ case S3MFileHeader::trkImagoOrpheus:
+ trackerName = "Imago Orpheus %d.%02x";
+ break;
+ case S3MFileHeader::trkImpulseTracker:
+ if(fileHeader.cwtv <= S3MFileHeader::trkIT2_14)
+ trackerName = "Impulse Tracker %d.%02x";
+ else
+ trackerName.Format("Impulse Tracker 2.14p%d", fileHeader.cwtv - S3MFileHeader::trkIT2_14);
+ break;
+ case S3MFileHeader::trkSchismTracker:
+ if(fileHeader.cwtv == S3MFileHeader::trkBeRoTrackerOld)
+ trackerName = "BeRoTracker";
+ else
+ trackerName = "Schism Tracker"; // TODO Version Number
+ break;
+ case S3MFileHeader::trkOpenMPT:
+ trackerName = "OpenMPT %d.%02x";
m_dwLastSavedWithVersion = (fileHeader.cwtv & S3MFileHeader::versionMask) << 16;
- } else if(fileHeader.cwtv == S3MFileHeader::trkST3_20 && fileHeader.special == 0 && (fileHeader.ordNum & 0x0F) == 0 && fileHeader.ultraClicks == 0 && (fileHeader.flags & ~0x50) == 0)
- {
- // MPT 1.16 and older versions of OpenMPT - Simply keep default (filter) MIDI macros
- m_dwLastSavedWithVersion = MAKE_VERSION_NUMERIC(1, 16, 00, 00);
- keepMidiMacros = true;
+ break;
+ case S3MFileHeader::trkBeRoTracker:
+ trackerName = "BeRoTracker";
+ break;
+ case S3MFileHeader::trkCreamTracker:
+ trackerName = "CreamTracker";
+ break;
}
+ madeWithTracker.Format(trackerName, (fileHeader.cwtv & 0xF00) >> 8, (fileHeader.cwtv & 0xFF));
if((fileHeader.cwtv & S3MFileHeader::trackerMask) > S3MFileHeader::trkScreamTracker)
{
@@ -616,7 +653,7 @@
// We won't convert if there are not enough Zxx commands, too "high" Zxx commands
// or there are only "left" or "right" pannings (we assume that stereo should be somewhat balanced),
// and modules not made with an old version of ST3 were probably made in a tracker that supports panning anyway.
- bool pixPlayPanning = (fileHeader.cwtv < S3MFileHeader::trkST3_20);
+ bool pixPlayPanning = (fileHeader.cwtv < S3MFileHeader::trkST3_20);
int zxxCountRight = 0, zxxCountLeft = 0;
// Reading patterns
@@ -707,7 +744,7 @@
S3MConvert(m, false);
}
- if(m.command == CMD_S3MCMDEX && (m.param & 0xF0) == 0xA0 && fileHeader.cwtv < S3MFileHeader::trkST3_20)
+ if(m.command == CMD_S3MCMDEX && (m.param & 0xF0) == 0xA0 && fileHeader.cwtv < S3MFileHeader::trkST3_20)
{
// Convert old SAx panning to S8x (should only be found in PANIC.S3M by Purple Motion)
m.param = 0x80 | ((m.param & 0x0F) ^ 8);
@@ -723,7 +760,7 @@
if(m.param < 0x08)
{
zxxCountLeft++;
- } else if(m.param > 0x08)
+ } else if(m.param > 0x08)
{
zxxCountRight++;
}
Modified: trunk/OpenMPT/soundlib/Load_xm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_xm.cpp 2013-05-03 14:49:28 UTC (rev 2006)
+++ trunk/OpenMPT/soundlib/Load_xm.cpp 2013-05-05 00:25:59 UTC (rev 2007)
@@ -238,12 +238,17 @@
FLAGSET(TrackerVersions)
{
- verUnknown = 0x00, // Probably not made with MPT
- verOldModPlug = 0x01, // Made with MPT Alpha / Beta
- verNewModPlug = 0x02, // Made with MPT (not Alpha / Beta)
- verModPlug1_09 = 0x04, // Made with MPT 1.09 or possibly other version
- verOpenMPT = 0x08, // Made with OpenMPT
- verConfirmed = 0x10, // We are very sure that we found the correct tracker version.
+ verUnknown = 0x00, // Probably not made with MPT
+ verOldModPlug = 0x01, // Made with MPT Alpha / Beta
+ verNewModPlug = 0x02, // Made with MPT (not Alpha / Beta)
+ verModPlug1_09 = 0x04, // Made with MPT 1.09 or possibly other version
+ verOpenMPT = 0x08, // Made with OpenMPT
+ verConfirmed = 0x10, // We are very sure that we found the correct tracker version.
+
+ verFT2Generic = 0x20, // "FastTracker v2.00", but FastTracker has NOT been ruled out
+ verOther = 0x40, // Something we don't know, testing for DigiTrakker.
+ verFT2Clone = 0x80, // NOT FT2: itype changed between instruments, or \0 found in song title
+ verDigiTracker = 0x100, // Probably DigiTrakker
};
@@ -271,12 +276,35 @@
FlagSet<TrackerVersions> madeWith(verUnknown);
- if(!memcmp(fileHeader.trackerName, "FastTracker v 2.00 ", 20))
+ if(!memcmp(fileHeader.trackerName, "FastTracker ", 12))
{
- madeWith = verOldModPlug;
- } else if(fileHeader.size == 276 && fileHeader.version == 0x0104 && !memcmp(fileHeader.trackerName, "FastTracker v2.00 ", 20))
+ if(fileHeader.size && !memcmp(fileHeader.trackerName + 12, "v2.00 ", 8))
+ {
+ if(fileHeader.version < 0x0104)
+ madeWith = verFT2Generic | verConfirmed;
+ else
+ madeWith = verFT2Generic | verNewModPlug;
+
+ // FT2 pads the song title with spaces, some other trackers don't
+ if(madeWith[verFT2Generic] && memchr(fileHeader.songName, '\0', 20) != nullptr)
+ madeWith = verFT2Generic | verNewModPlug;
+ } else if(!memcmp(fileHeader.trackerName + 12, "v 2.00 ", 8))
+ {
+ // Old MPT:
+ // - 1.00a5 (ihdr=245)
+ // - beta 3.3 (ihdr=263)
+ madeWith = verOldModPlug;
+ } else
+ {
+ // ???
+ madeWith.set(verConfirmed);
+ madeWithTracker = "FastTracker Clone";
+ }
+ } else
{
- madeWith = verNewModPlug;
+ // Something else!
+ madeWith.set(verConfirmed);
+ madeWithTracker.AppendChars(fileHeader.trackerName);
}
StringFixer::ReadString<StringFixer::spacePadded>(m_szNames[0], fileHeader.songName);
@@ -308,6 +336,7 @@
// In case of XM versions < 1.04, we need to memorize the sample flags for all samples, as they are not stored immediately after the sample headers.
std::vector<SampleIO> sampleFlags;
uint8 sampleReserved = 0;
+ int instrType = -1;
// Reading instruments
for(INSTRUMENTINDEX instr = 1; instr <= m_nInstruments; instr++)
@@ -328,21 +357,23 @@
// Time for some version detection stuff.
if(madeWith == verOldModPlug)
{
- madeWith |= verConfirmed;
+ madeWith.set(verConfirmed);
if(instrHeader.size == 245)
{
// ModPlug Tracker Alpha
m_dwLastSavedWithVersion = MAKE_VERSION_NUMERIC(1, 00, 00, A5);
+ madeWithTracker = "ModPlug Tracker 1.0a5";
} else if(instrHeader.size == 263)
{
// ModPlug Tracker Beta (Beta 1 still behaves like Alpha, but Beta 3.3 does it this way)
m_dwLastSavedWithVersion = MAKE_VERSION_NUMERIC(1, 00, 00, B3);
+ madeWithTracker = "ModPlug Tracker 1.0b3";
} else
{
// WTF?
madeWith = (verUnknown | verConfirmed);
}
- } else if(madeWith == verNewModPlug && instrHeader.numSamples == 0)
+ } else if(madeWith[verNewModPlug] && instrHeader.numSamples == 0)
{
// Empty instruments make tracker identification pretty easy!
madeWith = ((instrHeader.size == 263 && instrHeader.sampleHeaderSize == 0) ? verNewModPlug : verUnknown) | verConfirmed;
@@ -355,6 +386,17 @@
instrHeader.ConvertToMPT(*Instruments[instr]);
+ if(instrType == -1)
+ {
+ instrType = instrHeader.type;
+ } else if(instrType != instrHeader.type && madeWith[verFT2Generic])
+ {
+ // FT2 writes some random junk for the instrument type field,
+ // but it's always the SAME junk for every instrument saved.
+ madeWith.reset(verFT2Generic);
+ madeWith.set(verFT2Clone);
+ }
+
if(instrHeader.numSamples > 0)
{
// Yep, there are some samples associated with this instrument.
@@ -501,9 +543,11 @@
if(madeWith[verModPlug1_09])
{
m_dwLastSavedWithVersion = MAKE_VERSION_NUMERIC(1, 09, 00, 00);
+ madeWithTracker = "ModPlug Tracker 1.09";
} else if(madeWith[verNewModPlug])
{
m_dwLastSavedWithVersion = MAKE_VERSION_NUMERIC(1, 16, 00, 00);
+ madeWithTracker = "ModPlug Tracker 1.16";
}
}
@@ -523,6 +567,20 @@
SetModFlag(MSF_COMPATIBLE_PLAY, false);
}
+ if(madeWithTracker.empty())
+ {
+ if(madeWith[verDigiTracker] && sampleReserved == 0 && (instrType ? instrType : -1) == -1)
+ {
+ madeWithTracker = "DigiTrakker";
+ } else if(madeWith[verFT2Generic])
+ {
+ madeWithTracker = "FastTracker 2 or compatible";
+ } else
+ {
+ madeWithTracker = "Unknown";
+ }
+ }
+
// Leave if no extra instrument settings are available (end of file reached)
if(file.NoBytesLeft()) return true;
@@ -544,6 +602,11 @@
}
}
+ if(m_dwLastSavedWithVersion >= MAKE_VERSION_NUMERIC(1, 17, 00, 00))
+ {
+ madeWithTracker = "OpenMPT " + MptVersion::ToStr(m_dwLastSavedWithVersion);
+ }
+
// We no longer allow any --- or +++ items in the order list now.
if(m_dwLastSavedWithVersion && m_dwLastSavedWithVersion < MAKE_VERSION_NUMERIC(1, 22, 02, 02))
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2013-05-17 20:36:51
|
Revision: 2090
http://sourceforge.net/p/modplug/code/2090
Author: saga-games
Date: 2013-05-17 20:36:43 +0000 (Fri, 17 May 2013)
Log Message:
-----------
[Fix] MT2 sample tuning takes finetune into account now.
[Fix] MT2 stereo samples are now loaded correctly.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Load_mt2.cpp
trunk/OpenMPT/soundlib/SampleIO.cpp
trunk/OpenMPT/soundlib/SampleIO.h
Modified: trunk/OpenMPT/soundlib/Load_mt2.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mt2.cpp 2013-05-17 00:18:47 UTC (rev 2089)
+++ trunk/OpenMPT/soundlib/Load_mt2.cpp 2013-05-17 20:36:43 UTC (rev 2090)
@@ -132,7 +132,7 @@
DWORD dwFrequency;
BYTE nQuality;
BYTE nChannels;
- BYTE nFlags;
+ BYTE nFlags; // 8 = no interpolation
BYTE nLoop;
DWORD dwLoopStart;
DWORD dwLoopEnd;
@@ -146,10 +146,10 @@
typedef struct PACKED _MT2GROUP
{
- BYTE nSmpNo;
- BYTE nVolume; // 0-128
- BYTE nFinePitch;
- BYTE Reserved[5];
+ uint8 nSmpNo;
+ uint8 nVolume; // 0-128
+ int8 nFinePitch;
+ int8 Reserved[5];
} MT2GROUP;
STATIC_ASSERT(sizeof(MT2GROUP) == 8);
@@ -240,7 +240,7 @@
InitializeGlobals();
InitializeChannels();
- madeWithTracker.Format("MadTracker %d.%x", pfh->wVersion >> 8, pfh->wVersion & 0xFF);
+ madeWithTracker.AppendChars(pfh->szTrackerName);
m_nType = MOD_TYPE_MT2;
m_nChannels = pfh->wChannels;
m_nRestartPos = pfh->wRestart;
@@ -564,6 +564,7 @@
if (iSmp < MAX_SAMPLES)
{
ModSample *psmp = &Samples[iSmp];
+ psmp->Initialize(MOD_TYPE_XM);
psmp->nGlobalVol = 64;
psmp->nVolume = (pms->wVolume >> 7);
psmp->nPan = (pms->nPan == 0x80) ? 128 : (pms->nPan^0x80);
@@ -571,9 +572,6 @@
psmp->nC5Speed = pms->dwFrequency;
psmp->nLoopStart = pms->dwLoopStart;
psmp->nLoopEnd = pms->dwLoopEnd;
- psmp->FrequencyToTranspose();
- psmp->RelativeTone -= pms->nBaseNote - 49;
- psmp->TransposeToFrequency();
if (pms->nQuality == 2) { psmp->uFlags |= CHN_16BIT; psmp->nLength >>= 1; }
if (pms->nChannels == 2) { psmp->nLength >>= 1; }
if (pms->nLoop == 1) psmp->uFlags |= CHN_LOOP;
@@ -611,6 +609,7 @@
Samples[nSmp].nVibSweep = pmi->bVibSweep;
Samples[nSmp].nVibDepth = pmi->bVibDepth;
Samples[nSmp].nVibRate = pmi->bVibRate;
+ Samples[nSmp].nC5Speed = Util::Round<uint32>(SampleMap[nSmp - 1]->dwFrequency * pow(2, -(SampleMap[nSmp - 1]->nBaseNote - 49 - (pmg->nFinePitch / 128.0f)) / 12.0f));
}
}
}
@@ -642,7 +641,7 @@
(sample.uFlags & CHN_16BIT) ? SampleIO::_16bit : SampleIO::_8bit,
(pms->nChannels == 2) ? SampleIO::stereoSplit : SampleIO::mono,
SampleIO::littleEndian,
- SampleIO::deltaPCM)
+ SampleIO::MT2)
.ReadSample(sample, chunk);
}
} else
Modified: trunk/OpenMPT/soundlib/SampleIO.cpp
===================================================================
--- trunk/OpenMPT/soundlib/SampleIO.cpp 2013-05-17 00:18:47 UTC (rev 2089)
+++ trunk/OpenMPT/soundlib/SampleIO.cpp 2013-05-17 20:36:43 UTC (rev 2090)
@@ -63,6 +63,7 @@
bytesRead = CopyMonoSample<ReadInt8PCM<0x80u> >(sample, sourceBuf, fileSize);
break;
case deltaPCM: // 8-Bit / Mono / Delta / PCM
+ case MT2:
bytesRead = CopyMonoSample<ReadInt8DeltaPCM>(sample, sourceBuf, fileSize);
break;
case PCM7to8: // 7 Bit stored as 8-Bit with highest bit unused / Mono / Signed / PCM
@@ -84,6 +85,7 @@
bytesRead = CopyStereoSplitSample<ReadInt8PCM<0x80u> >(sample, sourceBuf, fileSize);
break;
case deltaPCM: // 8-Bit / Stereo Split / Delta / PCM
+ case MT2:
bytesRead = CopyStereoSplitSample<ReadInt8DeltaPCM>(sample, sourceBuf, fileSize);
break;
}
@@ -120,6 +122,7 @@
bytesRead = CopyMonoSample<ReadInt16PCM<0x8000u, littleEndian16> >(sample, sourceBuf, fileSize);
break;
case deltaPCM: // 16-Bit / Stereo Interleaved / Delta / PCM
+ case MT2:
bytesRead = CopyMonoSample<ReadInt16DeltaPCM<littleEndian16> >(sample, sourceBuf, fileSize);
break;
}
@@ -156,6 +159,7 @@
bytesRead = CopyStereoSplitSample<ReadInt16PCM<0x8000u, littleEndian16> >(sample, sourceBuf, fileSize);
break;
case deltaPCM: // 16-Bit / Stereo Split / Delta / PCM
+ case MT2:
bytesRead = CopyStereoSplitSample<ReadInt16DeltaPCM<littleEndian16> >(sample, sourceBuf, fileSize);
break;
}
@@ -358,6 +362,24 @@
uint8 *outBuf = static_cast<uint8 *>(sample.pSample);
bytesRead = DMFUnpack(outBuf, inBuf, inBufMax, sample.GetSampleSizeInBytes());
}
+ } else if(GetEncoding() == MT2 && GetChannelFormat() == stereoSplit && GetBitDepth() <= 16)
+ {
+ // MT2 stereo samples (right channel is stored as a difference from the left channel)
+ if(GetBitDepth() == 8)
+ {
+ int8 *outBuf = static_cast<int8 *>(sample.pSample);
+ for(SmpLength i = 0; i <= sample.nLength * 2; i += 2)
+ {
+ outBuf[i + 1] += outBuf[i];
+ }
+ } else
+ {
+ int16 *outBuf = static_cast<int16 *>(sample.pSample);
+ for(SmpLength i = 0; i <= sample.nLength * 2; i += 2)
+ {
+ outBuf[i + 1] += outBuf[i];
+ }
+ }
}
if(bytesRead > 0)
Modified: trunk/OpenMPT/soundlib/SampleIO.h
===================================================================
--- trunk/OpenMPT/soundlib/SampleIO.h 2013-05-17 00:18:47 UTC (rev 2089)
+++ trunk/OpenMPT/soundlib/SampleIO.h 2013-05-17 20:36:43 UTC (rev 2090)
@@ -78,6 +78,7 @@
PTM8Dto16, // PTM 8-Bit delta value -> 16-Bit sample
PCM7to8, // 8-Bit sample data with unused high bit
ADPCM, // 4-Bit ADPCM-packed
+ MT2, // MadTracker 2 stereo delta encoding
};
SampleIO(Bitdepth bits = _8bit, Channels channels = mono, Endianness endianness = littleEndian, Encoding encoding = signedPCM)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2013-05-18 20:37:23
|
Revision: 2109
http://sourceforge.net/p/modplug/code/2109
Author: saga-games
Date: 2013-05-18 20:37:14 +0000 (Sat, 18 May 2013)
Log Message:
-----------
[Fix] More MT2 fixes for libopenmpt
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Snd_fx.cpp
trunk/OpenMPT/soundlib/Sndmix.cpp
Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Snd_fx.cpp 2013-05-18 19:44:14 UTC (rev 2108)
+++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2013-05-18 20:37:14 UTC (rev 2109)
@@ -4622,7 +4622,7 @@
//-------------------------------------------------------------------------------
{
if ((!note) || (note >= NOTE_MIN_SPECIAL)) return 0;
- if (GetType() & (MOD_TYPE_IT|MOD_TYPE_MPT|MOD_TYPE_S3M|MOD_TYPE_STM|MOD_TYPE_MDL|MOD_TYPE_ULT|MOD_TYPE_WAV
+ if (GetType() & (MOD_TYPE_IT|MOD_TYPE_MPT|MOD_TYPE_MT2|MOD_TYPE_S3M|MOD_TYPE_STM|MOD_TYPE_MDL|MOD_TYPE_ULT|MOD_TYPE_WAV
|MOD_TYPE_FAR|MOD_TYPE_DMF|MOD_TYPE_PTM|MOD_TYPE_AMS|MOD_TYPE_AMS2|MOD_TYPE_DBM|MOD_TYPE_AMF|MOD_TYPE_PSM|MOD_TYPE_J2B|MOD_TYPE_IMF))
{
note--;
@@ -4637,7 +4637,7 @@
//8363 * freq[note%12] / nC5Speed * 2^(5-note/12)
}
} else
- if (GetType() & (MOD_TYPE_XM|MOD_TYPE_MT2))
+ if (GetType() == MOD_TYPE_XM)
{
if (note < 13) note = 13;
note -= 13;
@@ -4688,8 +4688,7 @@
if (GetType() & (MOD_TYPE_MED|MOD_TYPE_MOD|MOD_TYPE_DIGI|MOD_TYPE_MTM|MOD_TYPE_669|MOD_TYPE_AMF0))
{
return (3546895L*4) / period;
- } else
- if (GetType() & (MOD_TYPE_XM|MOD_TYPE_MT2))
+ } else if (GetType() == MOD_TYPE_XM)
{
if(m_SongFlags[SONG_LINEARSLIDES])
return XMLinearTable[period % 768] >> (period / 768);
Modified: trunk/OpenMPT/soundlib/Sndmix.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndmix.cpp 2013-05-18 19:44:14 UTC (rev 2108)
+++ trunk/OpenMPT/soundlib/Sndmix.cpp 2013-05-18 20:37:14 UTC (rev 2109)
@@ -1000,7 +1000,7 @@
{
// Normal loop active
uint32 end = insEnv.Ticks[insEnv.nLoopEnd];
- if(GetType() != MOD_TYPE_XM) end++;
+ if(!(GetType() & (MOD_TYPE_XM | MOD_TYPE_MT2))) end++;
// FT2 compatibility: If the sustain point is at the loop end and the sustain loop has been released, don't loop anymore.
// Test case: EnvLoops.xm
@@ -1011,7 +1011,7 @@
position = insEnv.Ticks[insEnv.nLoopStart];
if(envType == ENV_VOLUME && insEnv.nLoopStart == insEnv.nLoopEnd && insEnv.Values[insEnv.nLoopEnd] == 0
- && (!(GetType() & MOD_TYPE_XM) || (insEnv.nLoopEnd + 1u == insEnv.nNodes)))
+ && (!(GetType() & (MOD_TYPE_XM | MOD_TYPE_MT2)) || (insEnv.nLoopEnd + 1u == insEnv.nNodes)))
{
// Stop channel if the envelope loop only covers the last silent envelope point.
// Can't see a point in this, and it breaks doommix3.xm if you allow loading one-point loops, so disabling it for now.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <man...@us...> - 2013-05-19 14:31:48
|
Revision: 2123
http://sourceforge.net/p/modplug/code/2123
Author: manxorist
Date: 2013-05-19 14:31:42 +0000 (Sun, 19 May 2013)
Log Message:
-----------
[Ref] Silence a bunch of trivial unreferenced parameter warnings.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/SampleFormats.cpp
trunk/OpenMPT/soundlib/Tables.cpp
Modified: trunk/OpenMPT/soundlib/SampleFormats.cpp
===================================================================
--- trunk/OpenMPT/soundlib/SampleFormats.cpp 2013-05-19 14:14:39 UTC (rev 2122)
+++ trunk/OpenMPT/soundlib/SampleFormats.cpp 2013-05-19 14:31:42 UTC (rev 2123)
@@ -25,6 +25,7 @@
#include "ChunkReader.h"
+#ifndef NO_MP3_SAMPLES
// Check for valid MPEG header
static bool IsMPEG(const void *data)
//----------------------------------
@@ -32,6 +33,7 @@
const uint8 *header = static_cast<const uint8 *>(data);
return header[0] == 0xFF && (header[1] & 0xE0) == 0xE0 && (header[1] & 0x18) != 0x08 && (header[1] & 0x06) != 0x00 && (header[2] & 0xF0) != 0xF0;
}
+#endif // NO_MP3_SAMPLES
bool CSoundFile::ReadSampleFromFile(SAMPLEINDEX nSample, const LPBYTE lpMemFile, DWORD dwFileLength)
@@ -2135,6 +2137,9 @@
Samples[sample].Convert(MOD_TYPE_IT, GetType());
return true;
}
+#else
+ UNREFERENCED_PARAMETER(sample);
+ UNREFERENCED_PARAMETER(file);
#endif // NO_FLAC
return false;
}
@@ -2466,6 +2471,9 @@
Samples[sample].Convert(MOD_TYPE_IT, GetType());
return true;
}
+#else
+ UNREFERENCED_PARAMETER(sample);
+ UNREFERENCED_PARAMETER(file);
#endif // NO_MP3_SAMPLES
return false;
}
Modified: trunk/OpenMPT/soundlib/Tables.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Tables.cpp 2013-05-19 14:14:39 UTC (rev 2122)
+++ trunk/OpenMPT/soundlib/Tables.cpp 2013-05-19 14:31:42 UTC (rev 2123)
@@ -141,6 +141,8 @@
exts.push_back(otherFormatInfo[i].extension);
}
}
+#else
+ UNREFERENCED_PARAMETER(otherFormats);
#endif
return exts;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <man...@us...> - 2013-05-19 14:53:51
|
Revision: 2127
http://sourceforge.net/p/modplug/code/2127
Author: manxorist
Date: 2013-05-19 14:53:45 +0000 (Sun, 19 May 2013)
Log Message:
-----------
[Ref] Remove CHN_NOIDO and CHN_HQSRC ChannelFlags and remove CSoundFile::GetResamplingFlag. Instead, store the interpolation mode (which depends on per instrument interpolation mode and the global setting) computed by CSoundFile::ReadNote directly into ModChannel::resamplingMode.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Fastmix.cpp
trunk/OpenMPT/soundlib/ModChannel.h
trunk/OpenMPT/soundlib/Resampler.h
trunk/OpenMPT/soundlib/Snd_defs.h
trunk/OpenMPT/soundlib/Sndfile.h
trunk/OpenMPT/soundlib/Sndmix.cpp
Modified: trunk/OpenMPT/soundlib/Fastmix.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Fastmix.cpp 2013-05-19 14:46:20 UTC (rev 2126)
+++ trunk/OpenMPT/soundlib/Fastmix.cpp 2013-05-19 14:53:45 UTC (rev 2127)
@@ -1488,7 +1488,7 @@
if (pChannel->dwFlags[CHN_FILTER]) nFlags |= MIXNDX_FILTER;
#endif
//rewbs.resamplerConf
- nFlags |= GetResamplingFlag(pChannel);
+ nFlags |= ResamplingModeToMixFlags(pChannel->resamplingMode);
//end rewbs.resamplerConf
if ((nFlags < 0x20) && (pChannel->rightVol == pChannel->leftVol)
&& ((!pChannel->nRampLength) || (pChannel->rightRamp == pChannel->leftRamp)))
@@ -1627,29 +1627,7 @@
return nchused;
}
-UINT CSoundFile::GetResamplingFlag(const ModChannel *pChannel)
-//------------------------------------------------------------
-{
- if (pChannel->pModInstrument) {
- if(IsKnownResamplingMode(pChannel->pModInstrument->nResampling))
- {
- return ResamplingModeToMixFlags(pChannel->pModInstrument->nResampling);
- }
- }
- //didn't manage to get flag from instrument header, use channel flags.
- if(pChannel->dwFlags[CHN_HQSRC])
- {
- return ResamplingModeToMixFlags(m_Resampler.m_Settings.SrcMode);
- } else if(!pChannel->dwFlags[CHN_NOIDO])
- {
- return MIXNDX_LINEARSRC;
- }
-
- return 0;
-}
-
-
void CSoundFile::ProcessPlugins(UINT nCount)
//------------------------------------------
{
Modified: trunk/OpenMPT/soundlib/ModChannel.h
===================================================================
--- trunk/OpenMPT/soundlib/ModChannel.h 2013-05-19 14:46:20 UTC (rev 2126)
+++ trunk/OpenMPT/soundlib/ModChannel.h 2013-05-19 14:53:45 UTC (rev 2127)
@@ -83,6 +83,7 @@
ROWINDEX nPatternLoop;
CHANNELINDEX nMasterChn;
// 8-bit members
+ uint8 resamplingMode;
uint8 nRestoreResonanceOnNewNote; //Like above
uint8 nRestoreCutoffOnNewNote; //Like above
uint8 nNote, nNNA;
Modified: trunk/OpenMPT/soundlib/Resampler.h
===================================================================
--- trunk/OpenMPT/soundlib/Resampler.h 2013-05-19 14:46:20 UTC (rev 2126)
+++ trunk/OpenMPT/soundlib/Resampler.h 2013-05-19 14:53:45 UTC (rev 2127)
@@ -65,6 +65,4 @@
~CResampler() {}
void InitializeTables(bool force=false);
bool IsHQ() const { return m_Settings.SrcMode >= SRCMODE_SPLINE && m_Settings.SrcMode < SRCMODE_DEFAULT; }
- bool IsUltraHQ() const { return m_Settings.SrcMode >= SRCMODE_POLYPHASE && m_Settings.SrcMode < SRCMODE_DEFAULT; }
- bool Is(ResamplingMode cmp) const { return m_Settings.SrcMode == cmp; }
};
Modified: trunk/OpenMPT/soundlib/Snd_defs.h
===================================================================
--- trunk/OpenMPT/soundlib/Snd_defs.h 2013-05-19 14:46:20 UTC (rev 2126)
+++ trunk/OpenMPT/soundlib/Snd_defs.h 2013-05-19 14:53:45 UTC (rev 2127)
@@ -136,8 +136,8 @@
CHN_KEYOFF = 0x200, // exit sustain
CHN_NOTEFADE = 0x400, // fade note (instrument mode)
CHN_SURROUND = 0x800, // use surround channel
- CHN_NOIDO = 0x1000, // (IDO = Interpolation Do?) Indicates if the channel is near enough to an exact multiple of the base frequency that any interpolation won't be noticeable - or if interpolation was switched off completely. --Storlek
- CHN_HQSRC = 0x2000, // High quality sample rate conversion (i.e. apply interpolation)
+ // UNUSED = 0x1000,
+ // UNUSED = 0x2000,
CHN_FILTER = 0x4000, // Apply resonant filter on sample
CHN_VOLUMERAMP = 0x8000, // Apply volume ramping
CHN_VIBRATO = 0x10000, // Apply vibrato
Modified: trunk/OpenMPT/soundlib/Sndfile.h
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.h 2013-05-19 14:46:20 UTC (rev 2126)
+++ trunk/OpenMPT/soundlib/Sndfile.h 2013-05-19 14:53:45 UTC (rev 2127)
@@ -574,7 +574,6 @@
void ResetChannels();
UINT Read(LPVOID lpBuffer, UINT cbBuffer);
UINT CreateStereoMix(int count);
- UINT GetResamplingFlag(const ModChannel *pChannel);
BOOL FadeSong(UINT msec);
BOOL GlobalFadeSong(UINT msec);
void ProcessPlugins(UINT nCount);
Modified: trunk/OpenMPT/soundlib/Sndmix.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndmix.cpp 2013-05-19 14:46:20 UTC (rev 2126)
+++ trunk/OpenMPT/soundlib/Sndmix.cpp 2013-05-19 14:53:45 UTC (rev 2127)
@@ -2005,27 +2005,28 @@
// Clipping volumes
//if (pChn->nNewRightVol > 0xFFFF) pChn->nNewRightVol = 0xFFFF;
//if (pChn->nNewLeftVol > 0xFFFF) pChn->nNewLeftVol = 0xFFFF;
- // Check IDO
- if (m_Resampler.Is(SRCMODE_NEAREST))
+
+ ResamplingMode resamplingMode = m_Resampler.m_Settings.SrcMode; // default to global mixer settings
+ if(pChn->pModInstrument && IsKnownResamplingMode(pChn->pModInstrument->nResampling))
{
- pChn->dwFlags.set(CHN_NOIDO);
- } else
+ // for defined resampling modes, use per-instrument resampling modes if set
+ resamplingMode = (ResamplingMode)pChn->pModInstrument->nResampling;
+ }
+ // disable interpolation in certain cases
+ if(pChn->nInc == 0x10000)
{
- pChn->dwFlags.reset(CHN_NOIDO | CHN_HQSRC);
-
- if (pChn->nInc == 0x10000)
+ // exact samplerate match, do not resample at all, regardless of selected resampler
+ resamplingMode = SRCMODE_NEAREST;
+ } else if(resamplingMode == SRCMODE_LINEAR)
+ {
+ if(((pChn->nInc >= 0xFF00) && (pChn->nInc < 0x10100)))
{
- pChn->dwFlags.set(CHN_NOIDO);
- } else
- if (m_Resampler.IsHQ())
- {
- pChn->dwFlags.set(CHN_HQSRC);
- } else
- {
- if ((pChn->nInc >= 0xFF00) && (pChn->nInc < 0x10100))
- pChn->dwFlags.set(CHN_NOIDO);
+ // disable interpolation if rates are too close
+ resamplingMode = SRCMODE_NEAREST;
}
}
+ // store for the mixer
+ pChn->resamplingMode = (uint8)resamplingMode;
/*if (m_pConfig->getUseGlobalPreAmp())
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <man...@us...> - 2013-05-19 15:40:28
|
Revision: 2128
http://sourceforge.net/p/modplug/code/2128
Author: manxorist
Date: 2013-05-19 15:40:19 +0000 (Sun, 19 May 2013)
Log Message:
-----------
[Ref] Fix some trivial unused variable warnings.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Load_mid.cpp
trunk/OpenMPT/soundlib/Load_mo3.cpp
Modified: trunk/OpenMPT/soundlib/Load_mid.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mid.cpp 2013-05-19 14:53:45 UTC (rev 2127)
+++ trunk/OpenMPT/soundlib/Load_mid.cpp 2013-05-19 15:40:19 UTC (rev 2128)
@@ -1201,7 +1201,7 @@
#else // !MODPLUG_TRACKER
-bool CSoundFile::ReadMID(const BYTE *lpStream, DWORD dwMemLength, ModLoadingFlags loadFlags)
+bool CSoundFile::ReadMID(const BYTE * /*lpStream*/, DWORD /*dwMemLength*/, ModLoadingFlags /*loadFlags*/)
{
return false;
}
Modified: trunk/OpenMPT/soundlib/Load_mo3.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mo3.cpp 2013-05-19 14:53:45 UTC (rev 2127)
+++ trunk/OpenMPT/soundlib/Load_mo3.cpp 2013-05-19 15:40:19 UTC (rev 2128)
@@ -20,8 +20,6 @@
//-------------------------------------------------------------------
{
file.Rewind();
- const void *stream = file.GetRawData();
- int length = file.GetLength();
// No valid MO3 file (magic bytes: "MO3")
if(!file.CanRead(8) || !file.ReadMagic("MO3"))
@@ -46,6 +44,9 @@
#else
+ const void *stream = file.GetRawData();
+ int length = file.GetLength();
+
bool result = false; // Result of trying to load the module, false == fail.
// try to load unmo3.dll dynamically.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <man...@us...> - 2013-05-19 15:46:48
|
Revision: 2129
http://sourceforge.net/p/modplug/code/2129
Author: manxorist
Date: 2013-05-19 15:46:40 +0000 (Sun, 19 May 2013)
Log Message:
-----------
[Ref] Put WriteTuningMap and WriteTuningCollection inside #ifndef MODPLUG_NO_FILESAVE.
[Ref] Trivial unused parameter warning fixes.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Load_it.cpp
trunk/OpenMPT/soundlib/Load_itp.cpp
Modified: trunk/OpenMPT/soundlib/Load_it.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_it.cpp 2013-05-19 15:40:19 UTC (rev 2128)
+++ trunk/OpenMPT/soundlib/Load_it.cpp 2013-05-19 15:46:40 UTC (rev 2129)
@@ -48,6 +48,8 @@
*/
+#ifndef MODPLUG_NO_FILESAVE
+
static bool AreNonDefaultTuningsUsed(CSoundFile& sf)
//--------------------------------------------------
{
@@ -60,7 +62,6 @@
return false;
}
-static void ReadTuningCollection(istream& iStrm, CTuningCollection& tc, const size_t) {tc.Deserialize(iStrm);}
static void WriteTuningCollection(ostream& oStrm, const CTuningCollection& tc) {tc.Serialize(oStrm);}
static void WriteTuningMap(ostream& oStrm, const CSoundFile& sf)
@@ -120,7 +121,11 @@
}
}
+#endif // MODPLUG_NO_FILESAVE
+
+static void ReadTuningCollection(istream& iStrm, CTuningCollection& tc, const size_t) {tc.Deserialize(iStrm);}
+
template<class TUNNUMTYPE, class STRSIZETYPE>
static bool ReadTuningMapTemplate(istream& iStrm, map<uint16, string>& shortToTNameMap, const size_t maxNum = 500)
//----------------------------------------------------------------------------------------------------------------
Modified: trunk/OpenMPT/soundlib/Load_itp.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_itp.cpp 2013-05-19 15:40:19 UTC (rev 2128)
+++ trunk/OpenMPT/soundlib/Load_itp.cpp 2013-05-19 15:46:40 UTC (rev 2129)
@@ -39,9 +39,10 @@
//-------------------------------------------------------------------------
{
#ifndef MODPLUG_TRACKER
+ UNREFERENCED_PARAMETER(file);
+ UNREFERENCED_PARAMETER(loadFlags);
return false;
-#endif
-#ifdef MODPLUG_TRACKER
+#else // MODPLUG_TRACKER
uint32 version;
FileReader::off_t size;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2013-05-19 16:14:26
|
Revision: 2132
http://sourceforge.net/p/modplug/code/2132
Author: saga-games
Date: 2013-05-19 16:14:05 +0000 (Sun, 19 May 2013)
Log Message:
-----------
[Mod] MPTM Loading: Removed order truncation note for old MPTM files (order was not actually truncated anymore)
[Fix] MT2 Loading: Convert effects from XM to IT on loading, this fixes e.g. global volume commands.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Load_it.cpp
trunk/OpenMPT/soundlib/Load_mt2.cpp
trunk/OpenMPT/soundlib/Snd_fx.cpp
Modified: trunk/OpenMPT/soundlib/Load_it.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_it.cpp 2013-05-19 16:12:50 UTC (rev 2131)
+++ trunk/OpenMPT/soundlib/Load_it.cpp 2013-05-19 16:14:05 UTC (rev 2132)
@@ -26,7 +26,6 @@
#define str_tooMuchPatternData (GetStrI18N((MPT_TEXT("Warning: File format limit was reached. Some pattern data may not get written to file."))))
#define str_pattern (GetStrI18N((MPT_TEXT("pattern"))))
#define str_PatternSetTruncationNote (GetStrI18N((MPT_TEXT("The module contains %u patterns but only %u patterns can be loaded in this OpenMPT version."))))
-#define str_SequenceTruncationNote (GetStrI18N((MPT_TEXT("Module has sequence of length %u; it will be truncated to maximum supported length, %u."))))
#define str_LoadingIncompatibleVersion MPT_TEXT("The file informed that it is incompatible with this version of OpenMPT. Loading was terminated.")
#define str_LoadingMoreRecentVersion MPT_TEXT("The loaded file was made with a more recent OpenMPT version and this version may not be able to load all the features or play the file correctly.")
@@ -466,15 +465,6 @@
Order.ReadAsByte(file, fileHeader.ordnum);
} else
{
- ORDERINDEX ordSize = fileHeader.ordnum;
- if(fileHeader.ordnum > GetModSpecifications().ordersMax)
- {
- mpt::String str;
- str.Format(str_SequenceTruncationNote, fileHeader.ordnum, GetModSpecifications().ordersMax);
- AddToLog(str);
- ordSize = GetModSpecifications().ordersMax;
- }
-
if(fileHeader.cwtv > 0x88A && fileHeader.cwtv <= 0x88D)
{
Order.Deserialize(file);
Modified: trunk/OpenMPT/soundlib/Load_mt2.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mt2.cpp 2013-05-19 16:12:50 UTC (rev 2131)
+++ trunk/OpenMPT/soundlib/Load_mt2.cpp 2013-05-19 16:14:05 UTC (rev 2132)
@@ -207,7 +207,7 @@
m->command = p->fxparam2;
m->param = p->fxparam1;
that->ConvertModCommand(*m);
- m->ExtendedMODtoS3MEffect();
+ m->Convert(MOD_TYPE_XM, MOD_TYPE_IT);
} else
{
// TODO: MT2 Effects
@@ -660,4 +660,4 @@
if (dwMemPos+4 >= dwMemLength) break;
}
return true;
-}
+}
\ No newline at end of file
Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Snd_fx.cpp 2013-05-19 16:12:50 UTC (rev 2131)
+++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2013-05-19 16:14:05 UTC (rev 2132)
@@ -449,7 +449,7 @@
// break;
// }
- if(!(GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_IMF | MOD_TYPE_J2B | MOD_TYPE_MID | MOD_TYPE_AMS | MOD_TYPE_AMS2 | MOD_TYPE_DBM))) param <<= 1;
+ if(!(GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_MT2 | MOD_TYPE_IMF | MOD_TYPE_J2B | MOD_TYPE_MID | MOD_TYPE_AMS | MOD_TYPE_AMS2 | MOD_TYPE_DBM))) param <<= 1;
// IT compatibility 16. FT2, ST3 and IT ignore out-of-range values
if(param <= 128)
{
@@ -2330,7 +2330,7 @@
// break;
// }
- if (!(GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_IMF | MOD_TYPE_J2B | MOD_TYPE_MID | MOD_TYPE_AMS | MOD_TYPE_AMS2 | MOD_TYPE_DBM))) param *= 2;
+ if (!(GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT | MOD_TYPE_MT2 | MOD_TYPE_IMF | MOD_TYPE_J2B | MOD_TYPE_MID | MOD_TYPE_AMS | MOD_TYPE_AMS2 | MOD_TYPE_DBM))) param *= 2;
// IT compatibility 16. FT2, ST3 and IT ignore out-of-range values.
// Test case: globalvol-invalid.it
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2013-05-19 20:23:32
|
Revision: 2139
http://sourceforge.net/p/modplug/code/2139
Author: saga-games
Date: 2013-05-19 20:23:13 +0000 (Sun, 19 May 2013)
Log Message:
-----------
[Fix] FT2 compatibility: Emulate FT2's very weird frequency wraparound behaviour with 2xx effects (http://bugs.openmpt.org/view.php?id=386, test case: FreqWarparound.xm)
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Snd_fx.cpp
trunk/OpenMPT/soundlib/Sndmix.cpp
Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Snd_fx.cpp 2013-05-19 20:20:42 UTC (rev 2138)
+++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2013-05-19 20:23:13 UTC (rev 2139)
@@ -4691,9 +4691,23 @@
} else if (GetType() == MOD_TYPE_XM)
{
if(m_SongFlags[SONG_LINEARSLIDES])
- return XMLinearTable[period % 768] >> (period / 768);
- else
+ {
+ uint32 octave = period / 768;
+ if(IsCompatibleMode(TRK_FASTTRACKER2))
+ {
+ // Under normal circumstances, this calculation returns the same values as the non-compatible one.
+ // However, once the 12 octaves are exceeded (through portamento slides), FT2 wraps the frequency around...
+ // Test case: FreqWraparound.xm
+ // 12 octaves * (12 * 64) LUT entries = 9216, add 767 for rounding
+ // Period is a 16 bit value in FT2, hence the "& 0xFFFF".
+ uint32 div = ((9216u + 767u - (period & 0xFFFF)) / 768);
+ octave = ((12 - div) & 0x1F) % 29u;
+ }
+ return XMLinearTable[period % 768] >> octave;
+ } else
+ {
return 8363 * 1712L / period;
+ }
} else
{
if(m_SongFlags[SONG_LINEARSLIDES])
Modified: trunk/OpenMPT/soundlib/Sndmix.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndmix.cpp 2013-05-19 20:20:42 UTC (rev 2138)
+++ trunk/OpenMPT/soundlib/Sndmix.cpp 2013-05-19 20:23:13 UTC (rev 2139)
@@ -230,7 +230,7 @@
m_PatternCuePoints.push_back(cue);
}
#endif
- } else
+ } else
{
#ifdef MODPLUG_TRACKER
if ((m_nMaxOrderPosition) && (m_nCurrentOrder >= m_nMaxOrderPosition))
@@ -1909,7 +1909,7 @@
int32 ninc = Util::muldiv(freq, 0x10000, m_MixerSettings.gdwMixingFreq);
if ((ninc >= 0xFFB0) && (ninc <= 0x10090)) ninc = 0x10000;
if (m_nFreqFactor != 128) ninc = (ninc * m_nFreqFactor) >> 7;
- if (ninc > 0xFF0000) ninc = 0xFF0000;
+ Limit(ninc, 3, 0xFF0000);
pChn->nInc = (ninc + 1) & ~3;
} else
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <man...@us...> - 2013-05-20 12:28:09
|
Revision: 2145
http://sourceforge.net/p/modplug/code/2145
Author: manxorist
Date: 2013-05-20 12:28:03 +0000 (Mon, 20 May 2013)
Log Message:
-----------
[Ref] Silence two signed/unsigned compare warnings.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/tuning.cpp
trunk/OpenMPT/soundlib/tuning.h
Modified: trunk/OpenMPT/soundlib/tuning.cpp
===================================================================
--- trunk/OpenMPT/soundlib/tuning.cpp 2013-05-20 12:27:23 UTC (rev 2144)
+++ trunk/OpenMPT/soundlib/tuning.cpp 2013-05-20 12:28:03 UTC (rev 2145)
@@ -524,7 +524,7 @@
{
uint64 val;
srlztn::ReadAdaptive1248(iStrm, val);
- LimitMax(val, 256); // Read 256 at max.
+ LimitMax(val, 256u); // Read 256 at max.
for(size_t i = 0; i < val; i++)
{
int16 key;
Modified: trunk/OpenMPT/soundlib/tuning.h
===================================================================
--- trunk/OpenMPT/soundlib/tuning.h 2013-05-20 12:27:23 UTC (rev 2144)
+++ trunk/OpenMPT/soundlib/tuning.h 2013-05-20 12:28:03 UTC (rev 2145)
@@ -36,7 +36,7 @@
static RATIOTYPE DefaultBARFUNC(const NOTEINDEXTYPE&, const STEPINDEXTYPE&);
static const NOTEINDEXTYPE s_StepMinDefault = -64;
static const UNOTEINDEXTYPE s_RatioTableSizeDefault = 128;
- static const STEPINDEXTYPE s_RatioTableFineSizeMaxDefault = 1000;
+ static const USTEPINDEXTYPE s_RatioTableFineSizeMaxDefault = 1000;
static const SERIALIZATION_VERSION s_SerializationVersion = 4;
//END STATIC CONST MEMBERS
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <man...@us...> - 2013-05-20 13:39:29
|
Revision: 2147
http://sourceforge.net/p/modplug/code/2147
Author: manxorist
Date: 2013-05-20 13:39:23 +0000 (Mon, 20 May 2013)
Log Message:
-----------
[Imp] Return all listed trackers for a MODTYPE in ModTypeToTracker instead of just the first one from modFormatInfo[].
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Load_gdm.cpp
trunk/OpenMPT/soundlib/Sndfile.h
trunk/OpenMPT/soundlib/Tables.cpp
Modified: trunk/OpenMPT/soundlib/Load_gdm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_gdm.cpp 2013-05-20 12:32:27 UTC (rev 2146)
+++ trunk/OpenMPT/soundlib/Load_gdm.cpp 2013-05-20 13:39:23 UTC (rev 2147)
@@ -158,7 +158,7 @@
InitializeGlobals();
m_nType = gdmFormatOrigin[fileHeader.originalFormat];
- madeWithTracker.Format("BWSB 2GDM %d.%d (converted from %s)", fileHeader.trackerMajorVer, fileHeader.formatMinorVer, ModTypeToTracker(GetType()));
+ madeWithTracker.Format("BWSB 2GDM %d.%d (converted from %s)", fileHeader.trackerMajorVer, fileHeader.formatMinorVer, ModTypeToTracker(GetType()).c_str());
// Song name
StringFixer::ReadString<StringFixer::maybeNullTerminated>(m_szNames[0], fileHeader.songTitle);
Modified: trunk/OpenMPT/soundlib/Sndfile.h
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.h 2013-05-20 12:32:27 UTC (rev 2146)
+++ trunk/OpenMPT/soundlib/Sndfile.h 2013-05-20 13:39:23 UTC (rev 2147)
@@ -527,7 +527,7 @@
static std::vector<const char *> GetSupportedExtensions(bool otherFormats);
static const char * ModTypeToString(MODTYPE modtype);
- static const char * ModTypeToTracker(MODTYPE modtype);
+ static std::string ModTypeToTracker(MODTYPE modtype);
void UpgradeModFlags();
void UpgradeSong();
Modified: trunk/OpenMPT/soundlib/Tables.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Tables.cpp 2013-05-20 12:32:27 UTC (rev 2146)
+++ trunk/OpenMPT/soundlib/Tables.cpp 2013-05-20 13:39:23 UTC (rev 2147)
@@ -162,17 +162,28 @@
}
-const char * CSoundFile::ModTypeToTracker(MODTYPE modtype)
-//--------------------------------------------------------
+std::string CSoundFile::ModTypeToTracker(MODTYPE modtype)
+//-------------------------------------------------------
{
+ std::set<std::string> retvals;
+ std::string retval;
for(size_t i = 0; i < CountOf(modFormatInfo); i++)
{
if(modFormatInfo[i].format & modtype)
{
- return modFormatInfo[i].name;
+ std::string name = modFormatInfo[i].name;
+ if(retvals.find(name) == retvals.end())
+ {
+ retvals.insert(name);
+ if(!retval.empty())
+ {
+ retval += " / ";
+ }
+ retval += name;
+ }
}
}
- return "";
+ return retval;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <man...@us...> - 2013-05-20 18:35:10
|
Revision: 2153
http://sourceforge.net/p/modplug/code/2153
Author: manxorist
Date: 2013-05-20 18:35:04 +0000 (Mon, 20 May 2013)
Log Message:
-----------
[Ref] m_nFreqFactor and m_nTempoFactor are old relicts from ModPlug Player. Disable the code #ifdef MODPLUG_TRACKER. Do not remove them completely because this feature might again be useful for libopenmpt_interactive.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Sndfile.cpp
trunk/OpenMPT/soundlib/Sndfile.h
trunk/OpenMPT/soundlib/Sndmix.cpp
Modified: trunk/OpenMPT/soundlib/Sndfile.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.cpp 2013-05-20 17:44:53 UTC (rev 2152)
+++ trunk/OpenMPT/soundlib/Sndfile.cpp 2013-05-20 18:35:04 UTC (rev 2153)
@@ -416,7 +416,9 @@
m_nMixChannels = 0;
m_nSamples = 0;
m_nInstruments = 0;
+#ifndef MODPLUG_TRACKER
m_nFreqFactor = m_nTempoFactor = 128;
+#endif
m_nMinPeriod = MIN_PERIOD;
m_nMaxPeriod = 0x7FFF;
m_nRepeatCount = 0;
@@ -525,7 +527,9 @@
#endif // MODPLUG_TRACKER
m_nMixChannels = 0;
+#ifndef MODPLUG_TRACKER
m_nFreqFactor = m_nTempoFactor = 128;
+#endif
m_nGlobalVolume = MAX_GLOBAL_VOLUME;
m_nOldGlbVolSlide = 0;
@@ -1690,7 +1694,11 @@
{
case tempo_mode_classic:
default:
+#ifdef MODPLUG_TRACKER
+ m_nSamplesPerTick = (m_MixerSettings.gdwMixingFreq * 5) / (m_nMusicTempo << 1);
+#else // !MODPLUG_TRACKER
m_nSamplesPerTick = (m_MixerSettings.gdwMixingFreq * 5 * m_nTempoFactor) / (m_nMusicTempo << 8);
+#endif
break;
case tempo_mode_modern:
@@ -1712,7 +1720,11 @@
{
case tempo_mode_classic:
default:
+#ifdef MODPLUG_TRACKER
+ return (m_MixerSettings.gdwMixingFreq * 5) / (tempo << 1);
+#else // !MODPLUG_TRACKER
return (m_MixerSettings.gdwMixingFreq * 5 * m_nTempoFactor) / (tempo << 8);
+#endif
case tempo_mode_alternative:
return m_MixerSettings.gdwMixingFreq / tempo;
Modified: trunk/OpenMPT/soundlib/Sndfile.h
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.h 2013-05-20 17:44:53 UTC (rev 2152)
+++ trunk/OpenMPT/soundlib/Sndfile.h 2013-05-20 18:35:04 UTC (rev 2153)
@@ -348,7 +348,11 @@
m_nGlobalVolumeDestination, m_nSamplePreAmp, m_nVSTiVolume;
long m_lHighResRampingGlobalVolume;
bool IsGlobalVolumeUnset() const { return IsFirstTick(); }
- UINT m_nFreqFactor, m_nTempoFactor, m_nOldGlbVolSlide;
+#ifndef MODPLUG_TRACKER
+ UINT m_nFreqFactor; // Pitch shift factor (128 = no pitch shifting). Interesting ModPlug Player relict, but unused in OpenMPT.
+ UINT m_nTempoFactor; // Tempo factor (128 = no tempo adjustment). Interesting ModPlug Player relict, but unused in OpenMPT.
+#endif
+ UINT m_nOldGlbVolSlide;
LONG m_nMinPeriod, m_nMaxPeriod; // min period = highest possible frequency, max period = lowest possible frequency
LONG m_nRepeatCount; // -1 means repeat infinitely.
DWORD m_nGlobalFadeSamples, m_nGlobalFadeMaxSamples;
Modified: trunk/OpenMPT/soundlib/Sndmix.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndmix.cpp 2013-05-20 17:44:53 UTC (rev 2152)
+++ trunk/OpenMPT/soundlib/Sndmix.cpp 2013-05-20 18:35:04 UTC (rev 2153)
@@ -1908,7 +1908,9 @@
int32 ninc = Util::muldiv(freq, 0x10000, m_MixerSettings.gdwMixingFreq << FREQ_FRACBITS);
if ((ninc >= 0xFFB0) && (ninc <= 0x10090)) ninc = 0x10000;
+#ifndef MODPLUG_TRACKER
if (m_nFreqFactor != 128) ninc = (ninc * m_nFreqFactor) >> 7;
+#endif // !MODPLUG_TRACKER
Limit(ninc, 3, 0xFF0000);
pChn->nInc = (ninc + 1) & ~3;
} else
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <man...@us...> - 2013-05-20 18:47:35
|
Revision: 2154
http://sourceforge.net/p/modplug/code/2154
Author: manxorist
Date: 2013-05-20 18:47:29 +0000 (Mon, 20 May 2013)
Log Message:
-----------
[Ref] Apply m_nTempoFactor for all tempo modes.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Sndfile.cpp
trunk/OpenMPT/soundlib/Sndmix.cpp
Modified: trunk/OpenMPT/soundlib/Sndfile.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.cpp 2013-05-20 18:35:04 UTC (rev 2153)
+++ trunk/OpenMPT/soundlib/Sndfile.cpp 2013-05-20 18:47:29 UTC (rev 2154)
@@ -1694,11 +1694,7 @@
{
case tempo_mode_classic:
default:
-#ifdef MODPLUG_TRACKER
m_nSamplesPerTick = (m_MixerSettings.gdwMixingFreq * 5) / (m_nMusicTempo << 1);
-#else // !MODPLUG_TRACKER
- m_nSamplesPerTick = (m_MixerSettings.gdwMixingFreq * 5 * m_nTempoFactor) / (m_nMusicTempo << 8);
-#endif
break;
case tempo_mode_modern:
@@ -1709,6 +1705,9 @@
m_nSamplesPerTick = m_MixerSettings.gdwMixingFreq / m_nMusicTempo;
break;
}
+#ifndef MODPLUG_TRACKER
+ m_nSamplesPerTick = Util::muldivr(m_nSamplesPerTick, m_nTempoFactor, 128);
+#endif // !MODPLUG_TRACKER
}
@@ -1716,18 +1715,17 @@
UINT CSoundFile::GetTickDuration(UINT tempo, UINT speed, ROWINDEX rowsPerBeat)
//----------------------------------------------------------------------------
{
+ UINT retval = 0;
switch(m_nTempoMode)
{
case tempo_mode_classic:
default:
-#ifdef MODPLUG_TRACKER
- return (m_MixerSettings.gdwMixingFreq * 5) / (tempo << 1);
-#else // !MODPLUG_TRACKER
- return (m_MixerSettings.gdwMixingFreq * 5 * m_nTempoFactor) / (tempo << 8);
-#endif
+ retval = (m_MixerSettings.gdwMixingFreq * 5) / (tempo << 1);
+ break;
case tempo_mode_alternative:
- return m_MixerSettings.gdwMixingFreq / tempo;
+ retval = m_MixerSettings.gdwMixingFreq / tempo;
+ break;
case tempo_mode_modern:
{
@@ -1746,9 +1744,15 @@
m_dBufferDiff++;
}
ASSERT(abs(m_dBufferDiff) < 1);
- return bufferCount;
+ retval = bufferCount;
}
+ break;
}
+#ifndef MODPLUG_TRACKER
+ // when the user modifies the tempo, we do not really care about accurate tempo error accumulation
+ retval = Util::muldivr(retval, m_nTempoFactor, 128);
+#endif // !MODPLUG_TRACKER
+ return retval;
}
Modified: trunk/OpenMPT/soundlib/Sndmix.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndmix.cpp 2013-05-20 18:35:04 UTC (rev 2153)
+++ trunk/OpenMPT/soundlib/Sndmix.cpp 2013-05-20 18:47:29 UTC (rev 2154)
@@ -1909,7 +1909,7 @@
int32 ninc = Util::muldiv(freq, 0x10000, m_MixerSettings.gdwMixingFreq << FREQ_FRACBITS);
if ((ninc >= 0xFFB0) && (ninc <= 0x10090)) ninc = 0x10000;
#ifndef MODPLUG_TRACKER
- if (m_nFreqFactor != 128) ninc = (ninc * m_nFreqFactor) >> 7;
+ ninc = Util::muldivr(ninc, m_nFreqFactor, 128);
#endif // !MODPLUG_TRACKER
Limit(ninc, 3, 0xFF0000);
pChn->nInc = (ninc + 1) & ~3;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <sag...@us...> - 2013-05-20 20:17:56
|
Revision: 2157
http://sourceforge.net/p/modplug/code/2157
Author: saga-games
Date: 2013-05-20 20:17:49 +0000 (Mon, 20 May 2013)
Log Message:
-----------
[Ref] Kill a few 64-bit compiler warnings.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/ITTools.cpp
trunk/OpenMPT/soundlib/LOAD_DMF.CPP
trunk/OpenMPT/soundlib/ModChannel.cpp
trunk/OpenMPT/soundlib/SampleIO.cpp
trunk/OpenMPT/soundlib/XMTools.cpp
trunk/OpenMPT/soundlib/load_j2b.cpp
Modified: trunk/OpenMPT/soundlib/ITTools.cpp
===================================================================
--- trunk/OpenMPT/soundlib/ITTools.cpp 2013-05-20 19:39:12 UTC (rev 2156)
+++ trunk/OpenMPT/soundlib/ITTools.cpp 2013-05-20 20:17:49 UTC (rev 2157)
@@ -521,11 +521,11 @@
C5Speed = mptSmp.nC5Speed ? mptSmp.nC5Speed : 8363;
// Size and loops
- length = mptSmp.nLength;
- loopbegin = mptSmp.nLoopStart;
- loopend = mptSmp.nLoopEnd;
- susloopbegin = mptSmp.nSustainStart;
- susloopend = mptSmp.nSustainEnd;
+ length = std::min(mptSmp.nLength, (SmpLength)uint32_max);
+ loopbegin = std::min(mptSmp.nLoopStart, (SmpLength)uint32_max);
+ loopend = std::min(mptSmp.nLoopEnd, (SmpLength)uint32_max);
+ susloopbegin = std::min(mptSmp.nSustainStart, (SmpLength)uint32_max);
+ susloopend = std::min(mptSmp.nSustainEnd, (SmpLength)uint32_max);
// Auto Vibrato settings
static const uint8 autovibxm2it[8] = { 0, 2, 4, 1, 3, 0, 0, 0 }; // OpenMPT VibratoType -> IT Vibrato
Modified: trunk/OpenMPT/soundlib/LOAD_DMF.CPP
===================================================================
--- trunk/OpenMPT/soundlib/LOAD_DMF.CPP 2013-05-20 19:39:12 UTC (rev 2156)
+++ trunk/OpenMPT/soundlib/LOAD_DMF.CPP 2013-05-20 20:17:49 UTC (rev 2157)
@@ -1188,8 +1188,8 @@
}
-int DMFUnpack(LPBYTE psample, const uint8 *ibuf, const uint8 *ibufmax, uint32 maxlen)
-//-----------------------------------------------------------------------------------
+uintptr_t DMFUnpack(LPBYTE psample, const uint8 *ibuf, const uint8 *ibufmax, uint32 maxlen)
+//-----------------------------------------------------------------------------------------
{
DMFHTree tree;
Modified: trunk/OpenMPT/soundlib/ModChannel.cpp
===================================================================
--- trunk/OpenMPT/soundlib/ModChannel.cpp 2013-05-20 19:39:12 UTC (rev 2156)
+++ trunk/OpenMPT/soundlib/ModChannel.cpp 2013-05-20 20:17:49 UTC (rev 2157)
@@ -39,7 +39,8 @@
if(resetMask & resetSetPosAdvanced)
{
nPeriod = 0;
- nPos = nLength = 0;
+ nPos = 0;
+ nLength = 0;
nLoopStart = 0;
nLoopEnd = 0;
nROfs = nLOfs = 0;
Modified: trunk/OpenMPT/soundlib/SampleIO.cpp
===================================================================
--- trunk/OpenMPT/soundlib/SampleIO.cpp 2013-05-20 19:39:12 UTC (rev 2156)
+++ trunk/OpenMPT/soundlib/SampleIO.cpp 2013-05-20 20:17:49 UTC (rev 2157)
@@ -20,7 +20,7 @@
// External decompressors
extern void AMSUnpack(const int8 * const source, size_t sourceSize, void * const dest, const size_t destSize, char packCharacter);
extern uint16 MDLReadBits(uint32 &bitbuf, uint32 &bitnum, const uint8 *(&ibuf), int8 n);
-extern int DMFUnpack(LPBYTE psample, const uint8 *ibuf, const uint8 *ibufmax, uint32 maxlen);
+extern uintptr_t DMFUnpack(LPBYTE psample, const uint8 *ibuf, const uint8 *ibufmax, uint32 maxlen);
#if MPT_COMPILER_GCC
Modified: trunk/OpenMPT/soundlib/XMTools.cpp
===================================================================
--- trunk/OpenMPT/soundlib/XMTools.cpp 2013-05-20 19:39:12 UTC (rev 2156)
+++ trunk/OpenMPT/soundlib/XMTools.cpp 2013-05-20 20:17:49 UTC (rev 2157)
@@ -392,9 +392,9 @@
}
// Sample Length and Loops
- length = mptSmp.nLength;
- loopStart = mptSmp.nLoopStart;
- loopLength = mptSmp.nLoopEnd - mptSmp.nLoopStart;
+ length = std::min(mptSmp.nLength, (SmpLength)uint32_max);
+ loopStart = std::min(mptSmp.nLoopStart, (SmpLength)uint32_max);
+ loopLength = std::min(mptSmp.nLoopEnd - mptSmp.nLoopStart, (SmpLength)uint32_max);
if(mptSmp.uFlags[CHN_16BIT])
{
Modified: trunk/OpenMPT/soundlib/load_j2b.cpp
===================================================================
--- trunk/OpenMPT/soundlib/load_j2b.cpp 2013-05-20 19:39:12 UTC (rev 2156)
+++ trunk/OpenMPT/soundlib/load_j2b.cpp 2013-05-20 20:17:49 UTC (rev 2157)
@@ -993,7 +993,7 @@
|| fileHeader.fileLength != file.GetLength()
|| fileHeader.packedLength != file.BytesLeft()
|| fileHeader.packedLength == 0
- || fileHeader.crc32 != crc32(0, reinterpret_cast<const Bytef *>(file.GetRawData()), file.BytesLeft())
+ || fileHeader.crc32 != crc32(0, reinterpret_cast<const Bytef *>(file.GetRawData()), fileHeader.packedLength)
)
{
return false;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|