|
From: <sag...@us...> - 2011-08-08 14:57:44
|
Revision: 968
http://modplug.svn.sourceforge.net/modplug/?rev=968&view=rev
Author: saga-games
Date: 2011-08-08 14:57:37 +0000 (Mon, 08 Aug 2011)
Log Message:
-----------
[Ref] Some CHANNELINDEX refactoring.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Snd_fx.cpp
trunk/OpenMPT/soundlib/Sndfile.h
trunk/OpenMPT/soundlib/Sndmix.cpp
Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Snd_fx.cpp 2011-08-08 14:27:41 UTC (rev 967)
+++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2011-08-08 14:57:37 UTC (rev 968)
@@ -753,8 +753,8 @@
}
-void CSoundFile::NoteChange(UINT nChn, int note, bool bPorta, bool bResetEnv, bool bManual)
-//-----------------------------------------------------------------------------------------
+void CSoundFile::NoteChange(CHANNELINDEX nChn, int note, bool bPorta, bool bResetEnv, bool bManual)
+//-------------------------------------------------------------------------------------------------
{
if (note < NOTE_MIN) return;
MODCHANNEL * const pChn = &Chn[nChn];
@@ -1045,20 +1045,20 @@
}
-UINT CSoundFile::GetNNAChannel(UINT nChn) const
-//---------------------------------------------
+CHANNELINDEX CSoundFile::GetNNAChannel(CHANNELINDEX nChn) const
+//-------------------------------------------------------------
{
const MODCHANNEL *pChn = &Chn[nChn];
// Check for empty channel
const MODCHANNEL *pi = &Chn[m_nChannels];
- for (UINT i=m_nChannels; i<MAX_CHANNELS; i++, pi++) if (!pi->nLength) return i;
+ for (CHANNELINDEX i=m_nChannels; i<MAX_CHANNELS; i++, pi++) if (!pi->nLength) return i;
if (!pChn->nFadeOutVol) return 0;
// All channels are used: check for lowest volume
- UINT result = 0;
+ CHANNELINDEX result = 0;
DWORD vol = 64*65536; // 25%
DWORD envpos = 0xFFFFFF;
const MODCHANNEL *pj = &Chn[m_nChannels];
- for (UINT j=m_nChannels; j<MAX_CHANNELS; j++, pj++)
+ for (CHANNELINDEX j=m_nChannels; j<MAX_CHANNELS; j++, pj++)
{
if (!pj->nFadeOutVol) return j;
DWORD v = pj->nVolume;
@@ -1078,8 +1078,8 @@
}
-void CSoundFile::CheckNNA(UINT nChn, UINT instr, int note, BOOL bForceCut)
-//------------------------------------------------------------------------
+void CSoundFile::CheckNNA(CHANNELINDEX nChn, UINT instr, int note, BOOL bForceCut)
+//--------------------------------------------------------------------------------
{
MODCHANNEL *pChn = &Chn[nChn];
MODINSTRUMENT* pHeader = 0;
@@ -1131,7 +1131,7 @@
if (pChn->dwFlags & CHN_MUTE) return;
bool applyDNAtoPlug; //rewbs.VSTiNNA
- for (UINT i=nChn; i<MAX_CHANNELS; p++, i++)
+ for (CHANNELINDEX i=nChn; i<MAX_CHANNELS; p++, i++)
if ((i >= m_nChannels) || (p == pChn))
{
applyDNAtoPlug = false; //rewbs.VSTiNNA
@@ -1248,7 +1248,7 @@
//if ((pChn->nVolume) && (pChn->nLength))
if (((pChn->nVolume) && (pChn->nLength)) || applyNNAtoPlug) //rewbs.VSTiNNA
{
- UINT n = GetNNAChannel(nChn);
+ CHANNELINDEX n = GetNNAChannel(nChn);
if (n)
{
MODCHANNEL *p = &Chn[n];
@@ -1939,9 +1939,9 @@
case CMD_GLOBALVOLSLIDE:
//IT compatibility 16. Saving last global volume slide param per channel (FT2/IT)
if(IsCompatibleMode(TRK_IMPULSETRACKER | TRK_FASTTRACKER2))
- GlobalVolSlide(param, &pChn->nOldGlobalVolSlide);
+ GlobalVolSlide(param, pChn->nOldGlobalVolSlide);
else
- GlobalVolSlide(param, &m_nOldGlbVolSlide);
+ GlobalVolSlide(param, m_nOldGlbVolSlide);
break;
// Set 8-bit Panning
@@ -2768,8 +2768,8 @@
}
-void CSoundFile::ExtendedMODCommands(UINT nChn, UINT param)
-//---------------------------------------------------------
+void CSoundFile::ExtendedMODCommands(CHANNELINDEX nChn, UINT param)
+//-----------------------------------------------------------------
{
MODCHANNEL *pChn = &Chn[nChn];
UINT command = param & 0xF0;
@@ -2833,8 +2833,8 @@
}
-void CSoundFile::ExtendedS3MCommands(UINT nChn, UINT param)
-//---------------------------------------------------------
+void CSoundFile::ExtendedS3MCommands(CHANNELINDEX nChn, UINT param)
+//-----------------------------------------------------------------
{
MODCHANNEL *pChn = &Chn[nChn];
UINT command = param & 0xF0;
@@ -2895,7 +2895,7 @@
case 2:
{
MODCHANNEL *bkp = &Chn[m_nChannels];
- for (UINT i=m_nChannels; i<MAX_CHANNELS; i++, bkp++)
+ for (CHANNELINDEX i=m_nChannels; i<MAX_CHANNELS; i++, bkp++)
{
if (bkp->nMasterChn == nChn+1)
{
@@ -3431,8 +3431,8 @@
//rewbs.volOffset: moved offset code to own method as it will be used in several places now
-void CSoundFile::SampleOffset(UINT nChn, UINT param, bool bPorta)
-//---------------------------------------------------------------
+void CSoundFile::SampleOffset(CHANNELINDEX nChn, UINT param, bool bPorta)
+//-----------------------------------------------------------------------
{
MODCHANNEL *pChn = &Chn[nChn];
@@ -3510,8 +3510,8 @@
}
//end rewbs.volOffset:
-void CSoundFile::RetrigNote(UINT nChn, int param, UINT offset) //rewbs.VolOffset: added offset param.
-//------------------------------------------------------------
+void CSoundFile::RetrigNote(CHANNELINDEX nChn, int param, UINT offset) //rewbs.VolOffset: added offset param.
+//--------------------------------------------------------------------
{
// Retrig: bit 8 is set if it's the new XM retrig
MODCHANNEL *pChn = &Chn[nChn];
@@ -3681,8 +3681,8 @@
}
-void CSoundFile::NoteCut(UINT nChn, UINT nTick)
-//---------------------------------------------
+void CSoundFile::NoteCut(CHANNELINDEX nChn, UINT nTick)
+//-----------------------------------------------------
{
if(nTick == 0)
{
@@ -3725,8 +3725,8 @@
}
-void CSoundFile::KeyOff(UINT nChn)
-//--------------------------------
+void CSoundFile::KeyOff(CHANNELINDEX nChn)
+//----------------------------------------
{
MODCHANNEL *pChn = &Chn[nChn];
const bool bKeyOn = (pChn->dwFlags & CHN_KEYOFF) ? false : true;
@@ -3881,11 +3881,11 @@
}
-void CSoundFile::GlobalVolSlide(UINT param, UINT * nOldGlobalVolSlide)
-//-----------------------------------------
+void CSoundFile::GlobalVolSlide(UINT param, UINT &nOldGlobalVolSlide)
+//--------------------------------------------------------------------
{
LONG nGlbSlide = 0;
- if (param) *nOldGlobalVolSlide = param; else param = *nOldGlobalVolSlide;
+ if (param) nOldGlobalVolSlide = param; else param = nOldGlobalVolSlide;
if (((param & 0x0F) == 0x0F) && (param & 0xF0))
{
if (m_dwSongFlags & SONG_FIRSTTICK) nGlbSlide = (param >> 4) * 2;
@@ -4077,8 +4077,8 @@
}
-UINT CSoundFile::GetBestPlugin(UINT nChn, UINT priority, bool respectMutes)
-//-------------------------------------------------------------------------
+UINT CSoundFile::GetBestPlugin(CHANNELINDEX nChn, UINT priority, bool respectMutes)
+//---------------------------------------------------------------------------------
{
if (nChn > MAX_CHANNELS) //Check valid channel number
{
@@ -4112,41 +4112,46 @@
}
-UINT __cdecl CSoundFile::GetChannelPlugin(UINT nChn, bool respectMutes) const
-//---------------------------------------------------------------------------
+UINT __cdecl CSoundFile::GetChannelPlugin(CHANNELINDEX nChn, bool respectMutes) const
+//-----------------------------------------------------------------------------------
{
const MODCHANNEL *pChn = &Chn[nChn];
// If it looks like this is an NNA channel, we need to find the master channel.
// This ensures we pick up the right ChnSettings.
// NB: nMasterChn==0 means no master channel, so we need to -1 to get correct index.
- if (nChn>=m_nChannels && pChn && pChn->nMasterChn>0) {
+ if (nChn>=m_nChannels && pChn && pChn->nMasterChn > 0)
+ {
nChn = pChn->nMasterChn-1;
}
UINT nPlugin;
- if ( (respectMutes && (pChn->dwFlags & CHN_MUTE)) ||
- (pChn->dwFlags&CHN_NOFX) ) {
+ if ( (respectMutes && (pChn->dwFlags & CHN_MUTE)) || (pChn->dwFlags&CHN_NOFX) )
+ {
nPlugin = 0;
- } else {
+ } else
+ {
nPlugin = ChnSettings[nChn].nMixPlugin;
}
return nPlugin;
}
-UINT CSoundFile::GetActiveInstrumentPlugin(UINT nChn, bool respectMutes) const
-//----------------------------------------------------------------------------
+UINT CSoundFile::GetActiveInstrumentPlugin(CHANNELINDEX nChn, bool respectMutes) const
+//------------------------------------------------------------------------------------
{
const MODCHANNEL *pChn = &Chn[nChn];
// Unlike channel settings, pModInstrument is copied from the original chan to the NNA chan,
// so we don't need to worry about finding the master chan.
UINT nPlugin=0;
- if (pChn && pChn->pModInstrument) {
- if (respectMutes && pChn->pModSample && (pChn->pModSample->uFlags & CHN_MUTE)) {
+ if (pChn && pChn->pModInstrument)
+ {
+ if (respectMutes && pChn->pModSample && (pChn->pModSample->uFlags & CHN_MUTE))
+ {
nPlugin = 0;
- } else {
+ } else
+ {
nPlugin = pChn->pModInstrument->nMixPlug;
}
}
Modified: trunk/OpenMPT/soundlib/Sndfile.h
===================================================================
--- trunk/OpenMPT/soundlib/Sndfile.h 2011-08-08 14:27:41 UTC (rev 967)
+++ trunk/OpenMPT/soundlib/Sndfile.h 2011-08-08 14:57:37 UTC (rev 968)
@@ -215,7 +215,8 @@
MODINSTRUMENT *pModInstrument; // Currently assigned instrument slot
MODCHANNEL_ENVINFO VolEnv, PanEnv, PitchEnv; // Envelope playback info
MODSAMPLE *pModSample; // Currently assigned sample slot
- DWORD nMasterChn, nVUMeter;
+ CHANNELINDEX nMasterChn;
+ DWORD nVUMeter;
LONG nGlobalVol, nInsVol;
LONG nFineTune, nTranspose;
LONG nPortamentoSlide, nAutoVibDepth;
@@ -881,13 +882,13 @@
BOOL ReadNote();
BOOL ProcessRow();
BOOL ProcessEffects();
- UINT GetNNAChannel(UINT nChn) const;
- void CheckNNA(UINT nChn, UINT instr, int note, BOOL bForceCut);
- void NoteChange(UINT nChn, int note, bool bPorta = false, bool bResetEnv = true, bool bManual = false);
+ CHANNELINDEX GetNNAChannel(CHANNELINDEX nChn) const;
+ void CheckNNA(CHANNELINDEX nChn, UINT instr, int note, BOOL bForceCut);
+ void NoteChange(CHANNELINDEX nChn, int note, bool bPorta = false, bool bResetEnv = true, bool bManual = false);
void InstrumentChange(MODCHANNEL *pChn, UINT instr, bool bPorta = false, bool bUpdVol = true, bool bResetEnv = true);
// Channel Effects
- void KeyOff(UINT nChn);
+ void KeyOff(CHANNELINDEX nChn);
// Global Effects
void SetTempo(UINT param, bool setAsNonModcommand = false);
void SetSpeed(UINT param);
@@ -938,12 +939,12 @@
void FineVolumeDown(MODCHANNEL *pChn, UINT param);
void Tremolo(MODCHANNEL *pChn, UINT param);
void Panbrello(MODCHANNEL *pChn, UINT param);
- void RetrigNote(UINT nChn, int param, UINT offset=0); //rewbs.volOffset: added last param
- void SampleOffset(UINT nChn, UINT param, bool bPorta); //rewbs.volOffset: moved offset code to own method
- void NoteCut(UINT nChn, UINT nTick);
+ void RetrigNote(CHANNELINDEX nChn, int param, UINT offset=0); //rewbs.volOffset: added last param
+ void SampleOffset(CHANNELINDEX nChn, UINT param, bool bPorta); //rewbs.volOffset: moved offset code to own method
+ void NoteCut(CHANNELINDEX nChn, UINT nTick);
int PatternLoop(MODCHANNEL *, UINT param);
- void ExtendedMODCommands(UINT nChn, UINT param);
- void ExtendedS3MCommands(UINT nChn, UINT param);
+ void ExtendedMODCommands(CHANNELINDEX nChn, UINT param);
+ void ExtendedS3MCommands(CHANNELINDEX nChn, UINT param);
void ExtendedChannelEffect(MODCHANNEL *, UINT param);
inline void InvertLoop(MODCHANNEL* pChn);
void ProcessMacroOnChannel(CHANNELINDEX nChn);
@@ -952,7 +953,7 @@
void SetupChannelFilter(MODCHANNEL *pChn, bool bReset, int flt_modifier = 256) const;
// Low-Level effect processing
void DoFreqSlide(MODCHANNEL *pChn, LONG nFreqSlide);
- void GlobalVolSlide(UINT param, UINT * nOldGlobalVolSlide);
+ void GlobalVolSlide(UINT param, UINT &nOldGlobalVolSlide);
DWORD IsSongFinished(UINT nOrder, UINT nRow) const;
void UpdateTimeSignature();
@@ -1028,7 +1029,7 @@
DWORD CutOffToFrequency(UINT nCutOff, int flt_modifier=256) const; // [0-255] => [1-10KHz]
#endif
#ifdef MODPLUG_TRACKER
- VOID ProcessMidiOut(UINT nChn, MODCHANNEL *pChn); //rewbs.VSTdelay : added arg.
+ VOID ProcessMidiOut(CHANNELINDEX nChn, MODCHANNEL *pChn); //rewbs.VSTdelay : added arg.
#endif
VOID ApplyGlobalVolume(int SoundBuffer[], long lTotalSampleCount);
@@ -1084,8 +1085,8 @@
void ResetChannelEnvelope(MODCHANNEL_ENVINFO &env);
void SetDefaultInstrumentValues(MODINSTRUMENT *pIns);
private:
- UINT __cdecl GetChannelPlugin(UINT nChan, bool respectMutes) const;
- UINT __cdecl GetActiveInstrumentPlugin(UINT nChan, bool respectMutes) const;
+ UINT __cdecl GetChannelPlugin(CHANNELINDEX nChn, bool respectMutes) const;
+ UINT __cdecl GetActiveInstrumentPlugin(CHANNELINDEX, bool respectMutes) const;
UINT GetBestMidiChan(const MODCHANNEL *pChn) const;
void HandlePatternTransitionEvents();
@@ -1093,7 +1094,7 @@
long GetSampleOffset();
public:
- UINT GetBestPlugin(UINT nChn, UINT priority, bool respectMutes);
+ UINT GetBestPlugin(CHANNELINDEX nChn, UINT priority, bool respectMutes);
// A couple of functions for handling backwards jumps and stuff to prevent infinite loops when counting the mod length or rendering to wav.
public:
Modified: trunk/OpenMPT/soundlib/Sndmix.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Sndmix.cpp 2011-08-08 14:27:41 UTC (rev 967)
+++ trunk/OpenMPT/soundlib/Sndmix.cpp 2011-08-08 14:57:37 UTC (rev 968)
@@ -824,7 +824,7 @@
// Reset channel values
MODCHANNEL *pChn = Chn;
MODCOMMAND *m = Patterns[m_nPattern].GetRow(m_nRow);
- for (UINT nChn=0; nChn<m_nChannels; pChn++, nChn++, m++)
+ for (CHANNELINDEX nChn=0; nChn<m_nChannels; pChn++, nChn++, m++)
{
pChn->nRowNote = m->note;
pChn->nRowInstr = m->instr;
@@ -1864,7 +1864,7 @@
{
/*int nchn32 = 0;
MODCHANNEL *pChn = Chn;
- for (UINT nChn=0; nChn<m_nChannels; nChn++,pChn++)
+ for (CHANNELINDEX nChn=0; nChn<m_nChannels; nChn++,pChn++)
{
//if(!(pChn->dwFlags & CHN_MUTE)) //removed by rewbs: fix http://www.modplug.com/forum/viewtopic.php?t=3358
nchn32++;
@@ -1908,7 +1908,7 @@
// Update channels data
m_nMixChannels = 0;
MODCHANNEL *pChn = Chn;
- for (UINT nChn = 0; nChn < MAX_CHANNELS; nChn++, pChn++)
+ for (CHANNELINDEX nChn = 0; nChn < MAX_CHANNELS; nChn++, pChn++)
{
skipchn:
@@ -2331,22 +2331,29 @@
//-------------------------------------------------------
{
MODCHANNEL *pChn = &Chn[nChn];
- if(nChn < m_nChannels && pChn->nRowCommand == CMD_MIDI || pChn->nRowCommand == CMD_SMOOTHMIDI)
+ if(nChn < m_nChannels)
{
- // Only smooth MIDI macros are processed on every tick
- if((pChn->nRowCommand == CMD_MIDI) && !(m_dwSongFlags & SONG_FIRSTTICK)) return;
- if(pChn->nRowParam < 0x80)
- ProcessMIDIMacro(nChn, (pChn->nRowCommand == CMD_SMOOTHMIDI), m_MidiCfg.szMidiSFXExt[pChn->nActiveMacro], pChn->nRowParam);
- else
- ProcessMIDIMacro(nChn, (pChn->nRowCommand == CMD_SMOOTHMIDI), m_MidiCfg.szMidiZXXExt[(pChn->nRowParam & 0x7F)], 0);
+ // TODO evaluate per-plugin macros here
+ //ProcessMIDIMacro(nChn, false, m_MidiCfg.szMidiGlb[MIDIOUT_PAN]);
+ //ProcessMIDIMacro(nChn, false, m_MidiCfg.szMidiGlb[MIDIOUT_VOLUME]);
+
+ if(pChn->nRowCommand == CMD_MIDI || pChn->nRowCommand == CMD_SMOOTHMIDI)
+ {
+ // Only smooth MIDI macros are processed on every tick
+ if((pChn->nRowCommand == CMD_MIDI) && !(m_dwSongFlags & SONG_FIRSTTICK)) return;
+ if(pChn->nRowParam < 0x80)
+ ProcessMIDIMacro(nChn, (pChn->nRowCommand == CMD_SMOOTHMIDI), m_MidiCfg.szMidiSFXExt[pChn->nActiveMacro], pChn->nRowParam);
+ else
+ ProcessMIDIMacro(nChn, (pChn->nRowCommand == CMD_SMOOTHMIDI), m_MidiCfg.szMidiZXXExt[(pChn->nRowParam & 0x7F)], 0);
+ }
}
}
#ifdef MODPLUG_TRACKER
-VOID CSoundFile::ProcessMidiOut(UINT nChn, MODCHANNEL *pChn) //rewbs.VSTdelay: added arg
-//----------------------------------------------------------
+VOID CSoundFile::ProcessMidiOut(CHANNELINDEX nChn, MODCHANNEL *pChn) //rewbs.VSTdelay: added arg
+//------------------------------------------------------------------
{
// Do we need to process midi?
// For now there is no difference between mute and sync mute with VSTis.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|