From: <sag...@us...> - 2012-05-14 21:50:19
|
Revision: 1269 http://modplug.svn.sourceforge.net/modplug/?rev=1269&view=rev Author: saga-games Date: 2012-05-14 21:50:12 +0000 (Mon, 14 May 2012) Log Message: ----------- [Ref] Moved InitializeSample to ModSample::Initialize. Modified Paths: -------------- trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/soundlib/ITTools.cpp trunk/OpenMPT/soundlib/Load_imf.cpp trunk/OpenMPT/soundlib/Load_mod.cpp trunk/OpenMPT/soundlib/Load_s3m.cpp trunk/OpenMPT/soundlib/ModSample.cpp trunk/OpenMPT/soundlib/ModSample.h trunk/OpenMPT/soundlib/ModSequence.cpp trunk/OpenMPT/soundlib/Snd_defs.h trunk/OpenMPT/soundlib/XMTools.cpp Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2012-05-13 20:04:12 UTC (rev 1268) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2012-05-14 21:50:12 UTC (rev 1269) @@ -733,7 +733,7 @@ ctrlSmp::ResetSamples(m_SndFile, ctrlSmp::SmpResetInit); - InitializeSample(m_SndFile.GetSample(1)); + m_SndFile.GetSample(1).Initialize(m_SndFile.GetType()); if ((!m_SndFile.m_nInstruments) && (m_SndFile.GetType() & MOD_TYPE_XM)) { Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2012-05-13 20:04:12 UTC (rev 1268) +++ trunk/OpenMPT/mptrack/Moddoc.h 2012-05-14 21:50:12 UTC (rev 1269) @@ -241,7 +241,6 @@ SAMPLEINDEX InsertSample(bool bLimit = false); INSTRUMENTINDEX InsertInstrument(SAMPLEINDEX lSample = SAMPLEINDEX_INVALID, INSTRUMENTINDEX lDuplicate = INSTRUMENTINDEX_INVALID); void InitializeInstrument(ModInstrument *pIns); - void InitializeSample(ModSample &sample); bool RemoveOrder(SEQUENCEINDEX nSeq, ORDERINDEX nOrd); bool RemovePattern(PATTERNINDEX nPat); bool RemoveSample(SAMPLEINDEX nSmp); Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2012-05-13 20:04:12 UTC (rev 1268) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2012-05-14 21:50:12 UTC (rev 1269) @@ -448,7 +448,7 @@ } if (!m_SndFile.m_szNames[i][0]) strcpy(m_SndFile.m_szNames[i], "untitled"); if (i > m_SndFile.GetNumSamples()) m_SndFile.m_nSamples = i; - InitializeSample(m_SndFile.GetSample(i)); + m_SndFile.GetSample(i).Initialize(m_SndFile.GetType()); SetModified(); return i; } @@ -554,27 +554,6 @@ } -void CModDoc::InitializeSample(ModSample &sample) -//----------------------------------------------- -{ - sample.nVolume = 256; - sample.nGlobalVol = 64; - sample.nPan = 128; - sample.nC5Speed = 8363; - sample.RelativeTone = 0; - sample.nFineTune = 0; - sample.nVibType = VIB_SINE; - sample.nVibSweep = 0; - sample.nVibDepth = 0; - sample.nVibRate = 0; - sample.uFlags &= ~(CHN_PANNING|CHN_SUSTAINLOOP|CHN_LOOP); - if(m_SndFile.GetType() == MOD_TYPE_XM) - { - sample.uFlags |= CHN_PANNING; - } -} - - // Load default instrument values for inserting new instrument during editing void CModDoc::InitializeInstrument(ModInstrument *pIns) //----------------------------------------------------- Modified: trunk/OpenMPT/soundlib/ITTools.cpp =================================================================== --- trunk/OpenMPT/soundlib/ITTools.cpp 2012-05-13 20:04:12 UTC (rev 1268) +++ trunk/OpenMPT/soundlib/ITTools.cpp 2012-05-14 21:50:12 UTC (rev 1269) @@ -499,10 +499,9 @@ return 0; } + mptSmp.Initialize(MOD_TYPE_IT); StringFixer::ReadString<StringFixer::nullTerminated>(mptSmp.filename, filename); - mptSmp.uFlags = 0; - // Volume / Panning mptSmp.nVolume = vol * 4; LimitMax(mptSmp.nVolume, WORD(256)); Modified: trunk/OpenMPT/soundlib/Load_imf.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_imf.cpp 2012-05-13 20:04:12 UTC (rev 1268) +++ trunk/OpenMPT/soundlib/Load_imf.cpp 2012-05-14 21:50:12 UTC (rev 1269) @@ -98,7 +98,7 @@ }; #pragma pack(pop) -static BYTE imfEffects[] = +static const uint8 imfEffects[] = { CMD_NONE, CMD_SPEED, // 0x01 1xx Set Tempo @@ -539,6 +539,7 @@ ModSample &sample = Samples[firstsample + nSmp]; + sample.Initialize(); StringFixer::ReadString<StringFixer::nullTerminated>(sample.filename, imfsmp.filename); strcpy(m_szNames[m_nSamples], sample.filename); @@ -547,7 +548,6 @@ sample.nLoopEnd = LittleEndian(imfsmp.loop_end); sample.nC5Speed = LittleEndian(imfsmp.C5Speed); sample.nVolume = imfsmp.volume * 4; - sample.nGlobalVol = 256; sample.nPan = imfsmp.panning; if(imfsmp.flags & 1) sample.uFlags |= CHN_LOOP; Modified: trunk/OpenMPT/soundlib/Load_mod.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_mod.cpp 2012-05-13 20:04:12 UTC (rev 1268) +++ trunk/OpenMPT/soundlib/Load_mod.cpp 2012-05-14 21:50:12 UTC (rev 1269) @@ -227,13 +227,10 @@ // Convert an MOD sample header to OpenMPT's internal sample header. void ConvertToMPT(ModSample &mptSmp) const { - mptSmp.uFlags = 0; + mptSmp.Initialize(MOD_TYPE_MOD); mptSmp.nLength = length * 2; - mptSmp.RelativeTone = 0; mptSmp.nFineTune = MOD2XMFineTune(finetune & 0x0F); mptSmp.nVolume = 4 * min(volume, 64); - mptSmp.nGlobalVol = 64; - mptSmp.nPan = 128; SmpLength lStart = loopStart * 2; SmpLength lLength = loopLength * 2; Modified: trunk/OpenMPT/soundlib/Load_s3m.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_s3m.cpp 2012-05-13 20:04:12 UTC (rev 1268) +++ trunk/OpenMPT/soundlib/Load_s3m.cpp 2012-05-14 21:50:12 UTC (rev 1269) @@ -174,6 +174,7 @@ trkImpulseTracker = 0x3000, trkSchismTracker = 0x4000, trkOpenMPT = 0x5000, + trkBeRoTracker = 0x6000, // Note: BeRoTracker also used version 0x4100 since 2004. trkST3_20 = 0x1320, trkIT2_14 = 0x3214, @@ -288,6 +289,7 @@ // Convert an S3M sample header to OpenMPT's internal sample header. void ConvertToMPT(ModSample &mptSmp) const { + mptSmp.Initialize(MOD_TYPE_S3M); StringFixer::ReadString<StringFixer::maybeNullTerminated>(mptSmp.filename, filename); if((sampleType == typePCM || sampleType == typeNone) && magic == idSCRS) @@ -299,11 +301,6 @@ mptSmp.nLoopStart = min(loopStart, mptSmp.nLength - 1); mptSmp.nLoopEnd = min(loopEnd, mptSmp.nLength); mptSmp.uFlags = (flags & smpLoop) ? CHN_LOOP : 0; - } else - { - mptSmp.nLength = 0; - mptSmp.nLoopStart = mptSmp.nLoopEnd = 0; - mptSmp.uFlags = 0; } if(mptSmp.nLoopEnd < 2 || mptSmp.nLoopStart >= mptSmp.nLoopEnd || mptSmp.nLoopEnd - mptSmp.nLoopStart < 1) @@ -314,8 +311,6 @@ // Volume / Panning mptSmp.nVolume = min(defaultVolume, 64) * 4; - mptSmp.nGlobalVol = 64; - mptSmp.nPan = 128; // C-5 frequency mptSmp.nC5Speed = c5speed; @@ -443,7 +438,7 @@ if((fileHeader.cwtv & S3MFileHeader::trackerMask) > S3MFileHeader::trkScreamTracker) { - // 2xyy - Imago Orpheus, 3xyy - IT, 4xyy - Schism, 5xyy - OpenMPT + // 2xyy - Imago Orpheus, 3xyy - IT, 4xyy - Schism, 5xyy - OpenMPT, 6xyy - BeRoTracker if((fileHeader.cwtv & S3MFileHeader::trackerMask) != S3MFileHeader::trkImpulseTracker || fileHeader.cwtv >= S3MFileHeader::trkIT2_14) { // Keep MIDI macros if this is not an old IT version (BABYLON.S3M by Necros has Zxx commands and was saved with IT 2.05) Modified: trunk/OpenMPT/soundlib/ModSample.cpp =================================================================== --- trunk/OpenMPT/soundlib/ModSample.cpp 2012-05-13 20:04:12 UTC (rev 1268) +++ trunk/OpenMPT/soundlib/ModSample.cpp 2012-05-14 21:50:12 UTC (rev 1269) @@ -90,6 +90,33 @@ } +// Initialize sample slot with default values. +void ModSample::Initialize(MODTYPE type) +//-------------------------------------- +{ + nLength = 0; + nLoopStart = nLoopEnd = 0; + nSustainStart = nSustainEnd = 0; + nVolume = 256; + nGlobalVol = 64; + nPan = 128; + nC5Speed = 8363; + RelativeTone = 0; + nFineTune = 0; + nVibType = VIB_SINE; + nVibSweep = 0; + nVibDepth = 0; + nVibRate = 0; + uFlags &= ~(CHN_PANNING | CHN_SUSTAINLOOP | CHN_LOOP); + if(type == MOD_TYPE_XM) + { + uFlags |= CHN_PANNING; + } + filename[0] = '\0'; +} + + +// Returns sample rate of the sample. uint32 ModSample::GetSampleRate(const MODTYPE type) const //------------------------------------------------------- { Modified: trunk/OpenMPT/soundlib/ModSample.h =================================================================== --- trunk/OpenMPT/soundlib/ModSample.h 2012-05-13 20:04:12 UTC (rev 1268) +++ trunk/OpenMPT/soundlib/ModSample.h 2012-05-14 21:50:12 UTC (rev 1269) @@ -13,21 +13,22 @@ // Sample Struct struct ModSample { - UINT nLength, nLoopStart, nLoopEnd; // In samples, not bytes - UINT nSustainStart, nSustainEnd; // Dito - LPSTR pSample; // Pointer to sample data - UINT nC5Speed; // Frequency of middle c, in Hz (for IT/S3M/MPTM) - WORD nPan; // Default sample panning (if pan flag is set) - WORD nVolume; // Default volume - WORD nGlobalVol; // Global volume (sample volume is multiplied by this) - WORD uFlags; // Sample flags - signed char RelativeTone; // Relative note to middle c (for MOD/XM) - signed char nFineTune; // Finetune period (for MOD/XM) - BYTE nVibType; // Auto vibrato type - BYTE nVibSweep; // Auto vibrato sweep (i.e. how long it takes until the vibrato effect reaches its full strength) - BYTE nVibDepth; // Auto vibrato depth - BYTE nVibRate; // Auto vibrato rate (speed) - //CHAR name[MAX_SAMPLENAME]; // Maybe it would be nicer to have sample names here, but that would require some refactoring. Also, would this slow down the mixer (cache misses)? + SmpLength nLength; // In samples, not bytes + SmpLength nLoopStart, nLoopEnd; // Dito + SmpLength nSustainStart, nSustainEnd; // Dito + LPSTR pSample; // Pointer to sample data + uint32 nC5Speed; // Frequency of middle c, in Hz (for IT/S3M/MPTM) + uint16 nPan; // Default sample panning (if pan flag is set) + uint16 nVolume; // Default volume + uint16 nGlobalVol; // Global volume (sample volume is multiplied by this) + uint16 uFlags; // Sample flags + int8 RelativeTone; // Relative note to middle c (for MOD/XM) + int8 nFineTune; // Finetune period (for MOD/XM) + uint8 nVibType; // Auto vibrato type + uint8 nVibSweep; // Auto vibrato sweep (i.e. how long it takes until the vibrato effect reaches its full strength) + uint8 nVibDepth; // Auto vibrato depth + uint8 nVibRate; // Auto vibrato rate (speed) + //CHAR name[MAX_SAMPLENAME]; // Maybe it would be nicer to have sample names here, but that would require some refactoring. Also, would this slow down the mixer (cache misses)? CHAR filename[MAX_SAMPLEFILENAME]; // Return the size of one (elementary) sample in bytes. @@ -48,4 +49,7 @@ // Translate sample properties between two given formats. void Convert(MODTYPE fromType, MODTYPE toType); + + // Initialize sample slot with default values. + void Initialize(MODTYPE type = MOD_TYPE_NONE); }; Modified: trunk/OpenMPT/soundlib/ModSequence.cpp =================================================================== --- trunk/OpenMPT/soundlib/ModSequence.cpp 2012-05-13 20:04:12 UTC (rev 1268) +++ trunk/OpenMPT/soundlib/ModSequence.cpp 2012-05-14 21:50:12 UTC (rev 1269) @@ -118,8 +118,10 @@ std::fill(iter, end(), GetInvalidPatIndex()); if(GetLengthTailTrimmed() > specs.ordersMax) { +#ifdef MODPLUG_TRACKER if (m_pSndFile->GetpModDoc()) m_pSndFile->GetpModDoc()->AddToLog("WARNING: Order list has been trimmed!\n"); +#endif // MODPLUG_TRACKER } } resize(specs.ordersMax); @@ -532,9 +534,11 @@ const ORDERINDEX nFirstOrder = GetLengthTailTrimmed() + 1; // +1 for separator item if(nFirstOrder + GetSequence(1).GetLengthTailTrimmed() > m_pSndFile->GetModSpecifications().ordersMax) { +#ifdef MODPLUG_TRACKER wsprintf(s, "WARNING: Cannot merge Sequence %d (too long!)\n", removedSequences); if (m_pSndFile->GetpModDoc()) m_pSndFile->GetpModDoc()->AddToLog(s); +#endif // MODPLUG_TRACKER RemoveSequence(1); continue; } @@ -569,9 +573,11 @@ } else { // cannot create new pattern: notify the user +#ifdef MODPLUG_TRACKER wsprintf(s, "CONFLICT: Pattern break commands in Pattern %d might be broken since it has been used in several sequences!", nPat); if (m_pSndFile->GetpModDoc()) m_pSndFile->GetpModDoc()->AddToLog(s); +#endif // MODPLUG_TRACKER } } m->param = static_cast<BYTE>(m->param + nFirstOrder); Modified: trunk/OpenMPT/soundlib/Snd_defs.h =================================================================== --- trunk/OpenMPT/soundlib/Snd_defs.h 2012-05-13 20:04:12 UTC (rev 1268) +++ trunk/OpenMPT/soundlib/Snd_defs.h 2012-05-14 21:50:12 UTC (rev 1269) @@ -46,11 +46,11 @@ -#define MOD_AMIGAC2 0x1AB // Period of Amiga middle-c -#define MAX_SAMPLE_LENGTH 0x10000000 // 0x04000000 (64MB -> now 256MB). - // Note: Sample size in bytes can be more than 256 MB. - // The meaning of this constant is handled differently in various places; sometimes it's samples, sometimes it's bytes... -#define MAX_SAMPLE_RATE 192000 // Max playback / render rate in Hz +#define MOD_AMIGAC2 0x1AB // Period of Amiga middle-c +const SmpLength MAX_SAMPLE_LENGTH = 0x10000000; // 0x04000000 (64MB -> now 256MB). + // Note: Sample size in bytes can be more than 256 MB. + // The meaning of this constant is handled differently in various places; sometimes it's samples, sometimes it's bytes... +#define MAX_SAMPLE_RATE 192000 // Max playback / render rate in Hz const ROWINDEX MAX_PATTERN_ROWS = 1024; // -> CODE#0008 -> DESC="#define to set pattern size" -! BEHAVIOUR_CHANGE#0008 const ORDERINDEX MAX_ORDERS = 256; @@ -352,7 +352,7 @@ // Misc Flags (can safely be turned on or off) #define SNDMIX_DIRECTTODISK 0x10000 // WAV writer mode #define SNDMIX_ENABLEMMX 0x20000 // use MMX-accelerated code -#define SNDMIX_NOBACKWARDJUMPS 0x40000 // stop when jumping back in the order (currently unused as it seems) +//#define SNDMIX_NOBACKWARDJUMPS 0x40000 // stop when jumping back in the order (currently unused as it seems) #define SNDMIX_MAXDEFAULTPAN 0x80000 // Used by the MOD loader (currently unused) #define SNDMIX_MUTECHNMODE 0x100000 // Notes are not played on muted channels Modified: trunk/OpenMPT/soundlib/XMTools.cpp =================================================================== --- trunk/OpenMPT/soundlib/XMTools.cpp 2012-05-13 20:04:12 UTC (rev 1268) +++ trunk/OpenMPT/soundlib/XMTools.cpp 2012-05-14 21:50:12 UTC (rev 1269) @@ -387,17 +387,17 @@ void XMSample::ConvertToMPT(ModSample &mptSmp) const //-------------------------------------------------- { + mptSmp.Initialize(MOD_TYPE_XM); + // Volume mptSmp.nVolume = vol * 4; LimitMax(mptSmp.nVolume, WORD(256)); - mptSmp.nGlobalVol = 64; // Panning mptSmp.nPan = pan; mptSmp.uFlags = CHN_PANNING; // Sample Frequency - mptSmp.nC5Speed = 0; mptSmp.nFineTune = finetune; mptSmp.RelativeTone = relnote; @@ -405,7 +405,6 @@ mptSmp.nLength = LittleEndian(length); mptSmp.nLoopStart = LittleEndian(loopStart); mptSmp.nLoopEnd = mptSmp.nLoopStart + LittleEndian(loopLength); - mptSmp.nSustainStart = mptSmp.nSustainEnd = 0; if((flags & XMSample::sample16Bit)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |