From: <sag...@us...> - 2014-02-28 01:52:51
|
Revision: 3788 http://sourceforge.net/p/modplug/code/3788 Author: saga-games Date: 2014-02-28 01:52:36 +0000 (Fri, 28 Feb 2014) Log Message: ----------- [Ref] Put all variables that are related to the current playback state of CSoundFile into a child object m_PlayState. Modified Paths: -------------- trunk/OpenMPT/libopenmpt/libopenmpt_impl.cpp trunk/OpenMPT/mptrack/Ctrl_gen.cpp trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/mptrack/Draw_pat.cpp trunk/OpenMPT/mptrack/EffectInfo.cpp trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainbar.cpp trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/ModConvert.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/PSRatioCalc.cpp trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/soundlib/Fastmix.cpp trunk/OpenMPT/soundlib/SampleFormats.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp trunk/OpenMPT/soundlib/modsmp_ctrl.cpp trunk/OpenMPT/test/test.cpp Modified: trunk/OpenMPT/libopenmpt/libopenmpt_impl.cpp =================================================================== --- trunk/OpenMPT/libopenmpt/libopenmpt_impl.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/libopenmpt/libopenmpt_impl.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -645,9 +645,9 @@ double module_impl::set_position_seconds( double seconds ) { GetLengthType t = m_sndFile->GetLength( eNoAdjust, GetLengthTarget( seconds ) ); m_sndFile->InitializeVisitedRows(); - m_sndFile->m_nCurrentOrder = t.lastOrder; + m_sndFile->m_PlayState.m_nCurrentOrder = t.lastOrder; m_sndFile->SetCurrentOrder( t.lastOrder ); - m_sndFile->m_nNextRow = t.lastRow; + m_sndFile->m_PlayState.m_nNextRow = t.lastRow; m_currentPositionSeconds = m_sndFile->GetLength( eAdjust, GetLengthTarget( t.lastOrder, t.lastRow ) ).duration; return m_currentPositionSeconds; } @@ -664,9 +664,9 @@ row = 0; } m_sndFile->InitializeVisitedRows(); - m_sndFile->m_nCurrentOrder = order; + m_sndFile->m_PlayState.m_nCurrentOrder = order; m_sndFile->SetCurrentOrder( order ); - m_sndFile->m_nNextRow = row; + m_sndFile->m_PlayState.m_nNextRow = row; m_currentPositionSeconds = m_sndFile->GetLength( eAdjust, GetLengthTarget( order, row ) ).duration; return m_currentPositionSeconds; } @@ -753,10 +753,10 @@ } std::int32_t module_impl::get_current_speed() const { - return m_sndFile->m_nMusicSpeed; + return m_sndFile->m_PlayState.m_nMusicSpeed; } std::int32_t module_impl::get_current_tempo() const { - return m_sndFile->m_nMusicTempo; + return m_sndFile->m_PlayState.m_nMusicTempo; } std::int32_t module_impl::get_current_order() const { return m_sndFile->GetCurrentOrder(); @@ -773,7 +773,7 @@ return pattern; } std::int32_t module_impl::get_current_row() const { - return m_sndFile->m_nRow; + return m_sndFile->m_PlayState.m_nRow; } std::int32_t module_impl::get_current_playing_channels() const { return m_sndFile->GetMixStat(); @@ -791,13 +791,13 @@ if ( channel < 0 || channel >= m_sndFile->GetNumChannels() ) { return 0.0f; } - return m_sndFile->Chn[channel].nLeftVU * (1.0f/128.0f); + return m_sndFile->m_PlayState.Chn[channel].nLeftVU * (1.0f/128.0f); } float module_impl::get_current_channel_vu_right( std::int32_t channel ) const { if ( channel < 0 || channel >= m_sndFile->GetNumChannels() ) { return 0.0f; } - return m_sndFile->Chn[channel].nRightVU * (1.0f/128.0f); + return m_sndFile->m_PlayState.Chn[channel].nRightVU * (1.0f/128.0f); } float module_impl::get_current_channel_vu_rear_left( std::int32_t channel ) const { if ( channel < 0 || channel >= m_sndFile->GetNumChannels() ) { Modified: trunk/OpenMPT/mptrack/Ctrl_gen.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/Ctrl_gen.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -270,7 +270,7 @@ if ((tempo >= m_sndFile.GetModSpecifications().tempoMin) && (tempo <= m_sndFile.GetModSpecifications().tempoMax) && (tempo != m_sndFile.m_nDefaultTempo)) { m_sndFile.m_nDefaultTempo = tempo; - m_sndFile.m_nMusicTempo = tempo; + m_sndFile.m_PlayState.m_nMusicTempo = tempo; m_modDoc.SetModified(); m_modDoc.UpdateAllViews(NULL, HINT_MODGENERAL, this); @@ -282,7 +282,7 @@ const UINT gv = MAX_SLIDER_GLOBAL_VOL - m_SliderGlobalVol.GetPos(); if ((gv >= 0) && (gv <= MAX_SLIDER_GLOBAL_VOL) && (gv != m_sndFile.m_nDefaultGlobalVolume)) { - m_sndFile.m_nGlobalVolume = gv; + m_sndFile.m_PlayState.m_nGlobalVolume = gv; m_sndFile.m_nDefaultGlobalVolume = gv; m_modDoc.SetModified(); @@ -351,7 +351,7 @@ m_bEditsLocked=true; m_EditTempo.SetModify(FALSE); m_sndFile.m_nDefaultTempo = n; - m_sndFile.m_nMusicTempo = n; + m_sndFile.m_PlayState.m_nMusicTempo = n; m_modDoc.SetModified(); m_modDoc.UpdateAllViews(NULL, HINT_MODGENERAL, this); UpdateView(HINT_MODGENERAL, NULL); @@ -378,7 +378,7 @@ m_bEditsLocked=true; m_EditSpeed.SetModify(FALSE); m_sndFile.m_nDefaultSpeed = n; - m_sndFile.m_nMusicSpeed = n; + m_sndFile.m_PlayState.m_nMusicSpeed = n; m_modDoc.SetModified(); m_modDoc.UpdateAllViews(NULL, HINT_MODGENERAL, this); m_bEditsLocked=false; @@ -453,7 +453,7 @@ m_bEditsLocked = true; m_EditGlobalVol.SetModify(FALSE); m_sndFile.m_nDefaultGlobalVolume = n; - m_sndFile.m_nGlobalVolume = n; + m_sndFile.m_PlayState.m_nGlobalVolume = n; m_modDoc.SetModified(); m_modDoc.UpdateAllViews(NULL, HINT_MODGENERAL, this); UpdateView(HINT_MODGENERAL, NULL); @@ -543,7 +543,7 @@ return TRUE; break; case IDC_SLIDER_GLOBALVOL: - (displayDBValues) ? setAsDecibels(pszText, m_sndFile.m_nGlobalVolume, m_sndFile.GetPlayConfig().getNormalGlobalVol()) : wsprintf(pszText, moreRecentMixModeNote); + (displayDBValues) ? setAsDecibels(pszText, m_sndFile.m_PlayState.m_nGlobalVolume, m_sndFile.GetPlayConfig().getNormalGlobalVol()) : wsprintf(pszText, moreRecentMixModeNote); return TRUE; break; } Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -2232,14 +2232,14 @@ pIns->SetCutoff(pIns->GetCutoff(), bCutOff); for (CHANNELINDEX i = 0; i < MAX_CHANNELS; i++) { - if (m_sndFile.Chn[i].pModInstrument == pIns) + if (m_sndFile.m_PlayState.Chn[i].pModInstrument == pIns) { if (bCutOff) { - m_sndFile.Chn[i].nCutOff = pIns->GetCutoff(); + m_sndFile.m_PlayState.Chn[i].nCutOff = pIns->GetCutoff(); } else { - m_sndFile.Chn[i].nCutOff = 0x7F; + m_sndFile.m_PlayState.Chn[i].nCutOff = 0x7F; } } } @@ -2261,14 +2261,14 @@ pIns->SetResonance(pIns->GetResonance(), bReso); for(CHANNELINDEX i = 0; i < MAX_CHANNELS; i++) { - if (m_sndFile.Chn[i].pModInstrument == pIns) + if (m_sndFile.m_PlayState.Chn[i].pModInstrument == pIns) { if (bReso) { - m_sndFile.Chn[i].nResonance = pIns->GetResonance(); + m_sndFile.m_PlayState.Chn[i].nResonance = pIns->GetResonance(); } else { - m_sndFile.Chn[i].nResonance = 0; + m_sndFile.m_PlayState.Chn[i].nResonance = 0; } } } @@ -2296,8 +2296,8 @@ { for(CHANNELINDEX i = 0; i < MAX_CHANNELS; i++) { - if(m_sndFile.Chn[i].pModInstrument == pIns) - m_sndFile.Chn[i].nFilterMode = instFiltermode; + if(m_sndFile.m_PlayState.Chn[i].pModInstrument == pIns) + m_sndFile.m_PlayState.Chn[i].nFilterMode = instFiltermode; } } } @@ -2414,10 +2414,10 @@ { for (UINT i=0; i<MAX_CHANNELS; i++) { - if (m_sndFile.Chn[i].pModInstrument == pIns) + if (m_sndFile.m_PlayState.Chn[i].pModInstrument == pIns) { - if (pIns->IsCutoffEnabled()) m_sndFile.Chn[i].nCutOff = pIns->GetCutoff(); - if (pIns->IsResonanceEnabled()) m_sndFile.Chn[i].nResonance = pIns->GetResonance(); + if (pIns->IsCutoffEnabled()) m_sndFile.m_PlayState.Chn[i].nCutOff = pIns->GetCutoff(); + if (pIns->IsResonanceEnabled()) m_sndFile.m_PlayState.Chn[i].nResonance = pIns->GetResonance(); } } } Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -284,7 +284,7 @@ ORDERINDEX &nOrder = bShiftClick ? m_nScrollPos2nd : m_nScrollPos; if ((sel < 0) || (sel >= sndFile.Order.GetLength()) || (!m_pParent) || (!pMainFrm)) return false; - if (!bIgnoreCurSel && sel == nOrder && (sel == sndFile.m_nCurrentOrder || !setPlayPos)) return true; + if (!bIgnoreCurSel && sel == nOrder && (sel == sndFile.m_PlayState.m_nCurrentOrder || !setPlayPos)) return true; const ORDERINDEX nShownLength = GetLength(); InvalidateSelection(); nOrder = sel; @@ -326,10 +326,10 @@ if(isPlaying && sndFile.m_SongFlags[SONG_PATTERNLOOP]) { - sndFile.m_nPattern = n; - sndFile.m_nCurrentOrder = sndFile.m_nNextOrder = m_nScrollPos; + sndFile.m_PlayState.m_nPattern = n; + sndFile.m_PlayState.m_nCurrentOrder = sndFile.m_PlayState.m_nNextOrder = m_nScrollPos; pMainFrm->ResetNotificationBuffer(); - sndFile.m_nNextRow = 0; + sndFile.m_PlayState.m_nNextRow = 0; // update channel parameters and play time m_pModDoc.SetElapsedTime(m_nScrollPos, 0); @@ -339,7 +339,7 @@ { SongFlags pausedFlags = sndFile.m_SongFlags & (SONG_PAUSED | SONG_STEP | SONG_PATTERNLOOP); - sndFile.m_nCurrentOrder = m_nScrollPos; + sndFile.m_PlayState.m_nCurrentOrder = m_nScrollPos; sndFile.SetCurrentOrder(m_nScrollPos); sndFile.m_SongFlags.set(pausedFlags); @@ -720,7 +720,7 @@ LineTo(dc.m_hDC, rect.right, rect.bottom); // Drawing the 'ctrl-transition' indicator - if(nIndex == sndFile.m_nSeqOverride) + if(nIndex == sndFile.m_PlayState.m_nSeqOverride) { MoveToEx(dc.m_hDC, rect.left + 4, rect.bottom - 4, NULL); LineTo(dc.m_hDC, rect.right - 4, rect.bottom - 4); @@ -1402,10 +1402,10 @@ if(order < length) { - if(sndFile.m_nSeqOverride == order) + if(sndFile.m_PlayState.m_nSeqOverride == order) { // This item is already queued: Dequeue it. - sndFile.m_nSeqOverride = ORDERINDEX_INVALID; + sndFile.m_PlayState.m_nSeqOverride = ORDERINDEX_INVALID; } else { if(sndFile.Order.IsPositionLocked(order)) @@ -1414,7 +1414,7 @@ OnUnlockPlayback(); } - sndFile.m_nSeqOverride = order; + sndFile.m_PlayState.m_nSeqOverride = order; } InvalidateRect(NULL, FALSE); } Modified: trunk/OpenMPT/mptrack/Draw_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/Draw_pat.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/Draw_pat.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -1669,13 +1669,13 @@ //xtraInfo.Format("Chan: %d; macro: %X; cutoff: %X; reso: %X; pan: %X", xtraInfo.Format("Chn:%d; Vol:%X; Mac:%X; Cut:%X%s; Res:%X; Pan:%X%s", nChn + 1, - pSndFile->Chn[nChn].nGlobalVol, - pSndFile->Chn[nChn].nActiveMacro, - pSndFile->Chn[nChn].nCutOff, - (pSndFile->Chn[nChn].nFilterMode == FLTMODE_HIGHPASS) ? "-Hi" : "", - pSndFile->Chn[nChn].nResonance, - pSndFile->Chn[nChn].nPan, - pSndFile->Chn[nChn].dwFlags[CHN_SURROUND] ? "-S" : ""); + pSndFile->m_PlayState.Chn[nChn].nGlobalVol, + pSndFile->m_PlayState.Chn[nChn].nActiveMacro, + pSndFile->m_PlayState.Chn[nChn].nCutOff, + (pSndFile->m_PlayState.Chn[nChn].nFilterMode == FLTMODE_HIGHPASS) ? "-Hi" : "", + pSndFile->m_PlayState.Chn[nChn].nResonance, + pSndFile->m_PlayState.Chn[nChn].nPan, + pSndFile->m_PlayState.Chn[nChn].dwFlags[CHN_SURROUND] ? "-S" : ""); pMainFrm->SetXInfoText(xtraInfo); } Modified: trunk/OpenMPT/mptrack/EffectInfo.cpp =================================================================== --- trunk/OpenMPT/mptrack/EffectInfo.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/EffectInfo.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -188,8 +188,8 @@ case CMD_SMOOTHMIDI: if (param < 0x80 && nChn != CHANNELINDEX_INVALID) { - macroIndex = sndFile.Chn[nChn].nActiveMacro; - chanSpec.Format(": currently %d: ", sndFile.Chn[nChn].nActiveMacro); + macroIndex = sndFile.m_PlayState.Chn[nChn].nActiveMacro; + chanSpec.Format(": currently %d: ", sndFile.m_PlayState.Chn[nChn].nActiveMacro); } else { Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -902,7 +902,7 @@ // Add an entry to the notification history - Notification notification(notifyType, notifyItem, streamPosition, m_pSndFile->m_nRow, m_pSndFile->m_nTickCount, m_pSndFile->m_nCurrentOrder, m_pSndFile->m_nPattern, m_pSndFile->GetMixStat()); + Notification notification(notifyType, notifyItem, streamPosition, m_pSndFile->m_PlayState.m_nRow, m_pSndFile->m_PlayState.m_nTickCount, m_pSndFile->m_PlayState.m_nCurrentOrder, m_pSndFile->m_PlayState.m_nPattern, m_pSndFile->GetMixStat()); m_pSndFile->ResetMixStat(); @@ -916,7 +916,7 @@ { for(CHANNELINDEX k = 0; k < MAX_CHANNELS; k++) { - const ModChannel &chn = m_pSndFile->Chn[k]; + const ModChannel &chn = m_pSndFile->m_PlayState.Chn[k]; if(chn.pModSample == &m_pSndFile->GetSample(smp) && chn.nLength != 0 // Corrent sample is set up on this channel && (!chn.dwFlags[CHN_NOTEFADE] || chn.nFadeOutVol)) // And it hasn't completely faded out yet, so it's still playing { @@ -946,7 +946,7 @@ { for(CHANNELINDEX k = 0; k < MAX_CHANNELS; k++) { - const ModChannel &chn = m_pSndFile->Chn[k]; + const ModChannel &chn = m_pSndFile->m_PlayState.Chn[k]; SmpLength pos = Notification::PosInvalid; if(chn.pModInstrument == m_pSndFile->Instruments[ins] // Correct instrument is set up on this channel @@ -979,8 +979,8 @@ // Pattern channel VU meters for(CHANNELINDEX k = 0; k < m_pSndFile->GetNumChannels(); k++) { - uint32 vul = m_pSndFile->Chn[k].nLeftVU; - uint32 vur = m_pSndFile->Chn[k].nRightVU; + uint32 vul = m_pSndFile->m_PlayState.Chn[k].nLeftVU; + uint32 vur = m_pSndFile->m_PlayState.Chn[k].nRightVU; notification.pos[k] = (vul << 8) | (vur); } } @@ -1282,9 +1282,9 @@ // Stop sample preview channels for(CHANNELINDEX i = m_pSndFile->m_nChannels; i < MAX_CHANNELS; i++) { - if(!(m_pSndFile->Chn[i].nMasterChn)) + if(!(m_pSndFile->m_PlayState.Chn[i].nMasterChn)) { - m_pSndFile->Chn[i].nPos = m_pSndFile->Chn[i].nPosLo = m_pSndFile->Chn[i].nLength = 0; + m_pSndFile->m_PlayState.Chn[i].nPos = m_pSndFile->m_PlayState.Chn[i].nPosLo = m_pSndFile->m_PlayState.Chn[i].nLength = 0; } } } @@ -1570,7 +1570,7 @@ m_WaveFile.Destroy(); m_WaveFile.Create(FileReader()); // Avoid global volume ramping when trying samples in the treeview. - m_WaveFile.m_nDefaultGlobalVolume = m_WaveFile.m_nGlobalVolume = MAX_GLOBAL_VOLUME; + m_WaveFile.m_nDefaultGlobalVolume = m_WaveFile.m_PlayState.m_nGlobalVolume = MAX_GLOBAL_VOLUME; m_WaveFile.SetMixLevels(mixLevels_117RC3); m_WaveFile.m_nSamplePreAmp = static_cast<uint32>(m_WaveFile.GetPlayConfig().getNormalSamplePreAmp()); m_WaveFile.m_nDefaultTempo = 125; @@ -2143,7 +2143,7 @@ if(m_pSndFile != nullptr && m_pSndFile != &m_WaveFile && !m_pSndFile->IsPaused()) { - PATTERNINDEX nPat = m_pSndFile->m_nPattern; + PATTERNINDEX nPat = m_pSndFile->m_PlayState.m_nPattern; if(m_pSndFile->Patterns.IsValidIndex(nPat)) { if(nPat < 10) strcat(s, " "); Modified: trunk/OpenMPT/mptrack/Mainbar.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mainbar.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/Mainbar.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -430,7 +430,7 @@ // Update play/pause button if (nCurrentTempo == -1) SetButtonInfo(PLAYCMD_INDEX, ID_PLAYER_PAUSE, TBBS_BUTTON, TOOLBAR_IMAGE_PAUSE); // Update Speed - int nSpeed = pSndFile->m_nMusicSpeed; + int nSpeed = pSndFile->m_PlayState.m_nMusicSpeed; if (nSpeed != nCurrentSpeed) { //rewbs.envRowGrid @@ -445,7 +445,7 @@ wsprintf(s, "%d", nCurrentSpeed); m_EditSpeed.SetWindowText(s); } - int nTempo = pSndFile->m_nMusicTempo; + int nTempo = pSndFile->m_PlayState.m_nMusicTempo; if (nTempo != nCurrentTempo) { if (nCurrentTempo < 0) m_SpinTempo.EnableWindow(TRUE); @@ -453,7 +453,7 @@ wsprintf(s, "%d", nCurrentTempo); m_EditTempo.SetWindowText(s); } - int nRowsPerBeat = pSndFile->m_nCurrentRowsPerBeat; + int nRowsPerBeat = pSndFile->m_PlayState.m_nCurrentRowsPerBeat; if (nRowsPerBeat != nCurrentRowsPerBeat) { if (nCurrentRowsPerBeat < 0) m_SpinRowsPerBeat.EnableWindow(TRUE); @@ -518,10 +518,10 @@ { if (n < 0) { - pSndFile->m_nMusicSpeed = std::max(UINT(nCurrentSpeed - 1), pSndFile->GetModSpecifications().speedMin); + pSndFile->m_PlayState.m_nMusicSpeed = std::max(UINT(nCurrentSpeed - 1), pSndFile->GetModSpecifications().speedMin); } else { - pSndFile->m_nMusicSpeed = std::min(UINT(nCurrentSpeed + 1), pSndFile->GetModSpecifications().speedMax); + pSndFile->m_PlayState.m_nMusicSpeed = std::min(UINT(nCurrentSpeed + 1), pSndFile->GetModSpecifications().speedMax); } m_SpinSpeed.SetPos(0); } @@ -535,7 +535,7 @@ } } else { - if (static_cast<ROWINDEX>(nCurrentRowsPerBeat) < pSndFile->m_nCurrentRowsPerMeasure) + if (static_cast<ROWINDEX>(nCurrentRowsPerBeat) < pSndFile->m_PlayState.m_nCurrentRowsPerMeasure) { SetRowsPerBeat(nCurrentRowsPerBeat + 1); } @@ -568,7 +568,7 @@ if(pModDoc == nullptr || pSndFile == nullptr) return; - pSndFile->m_nCurrentRowsPerBeat = nNewRPB; + pSndFile->m_PlayState.m_nCurrentRowsPerBeat = nNewRPB; PATTERNINDEX nPat = pSndFile->GetCurrentPattern(); if(pSndFile->Patterns[nPat].GetOverrideSignature()) { Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -1065,7 +1065,7 @@ } m_SndFile.SetCurrentOrder(startOrder); m_SndFile.GetLength(eAdjust, GetLengthTarget(startOrder, 0)); // adjust playback variables / visited rows vector - m_SndFile.m_nCurrentOrder = startOrder; + m_SndFile.m_PlayState.m_nCurrentOrder = startOrder; if (l < max) max = l; Modified: trunk/OpenMPT/mptrack/ModConvert.cpp =================================================================== --- trunk/OpenMPT/mptrack/ModConvert.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/ModConvert.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -152,7 +152,7 @@ // Removing all instrument headers from channels for(CHANNELINDEX nChn = 0; nChn < MAX_CHANNELS; nChn++) { - m_SndFile.Chn[nChn].pModInstrument = nullptr; + m_SndFile.m_PlayState.Chn[nChn].pModInstrument = nullptr; } for(INSTRUMENTINDEX nIns = 0; nIns <= m_SndFile.GetNumInstruments(); nIns++) if (m_SndFile.Instruments[nIns]) Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -145,7 +145,7 @@ m_bsInstrumentModified.reset(); #ifdef _DEBUG - ModChannel *p = m_SndFile.Chn; + ModChannel *p = m_SndFile.m_PlayState.Chn; if (((DWORD)p) & 7) Log("ModChannel struct is not aligned (0x%08X)\n", p); #endif // Fix: save pattern scrollbar position when switching to other tab @@ -705,13 +705,13 @@ MemsetZero(m_SndFile.m_szNames); //m_SndFile.SetTitle("untitled"); - m_SndFile.m_nMusicTempo = m_SndFile.m_nDefaultTempo = 125; - m_SndFile.m_nMusicSpeed = m_SndFile.m_nDefaultSpeed = 6; + m_SndFile.m_PlayState.m_nMusicTempo = m_SndFile.m_nDefaultTempo = 125; + m_SndFile.m_PlayState.m_nMusicSpeed = m_SndFile.m_nDefaultSpeed = 6; // Set up levels //if(m_SndFile.m_nMixLevels == mixLevels_original || m_SndFile.m_nMixLevels == mixLevels_compatible) { - m_SndFile.m_nGlobalVolume = m_SndFile.m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME; + m_SndFile.m_PlayState.m_nGlobalVolume = m_SndFile.m_nDefaultGlobalVolume = MAX_GLOBAL_VOLUME; m_SndFile.m_nSamplePreAmp = m_SndFile.m_nVSTiVolume = 48; } /*else @@ -730,7 +730,7 @@ m_SndFile.ChnSettings[nChn].dwFlags.reset(); m_SndFile.ChnSettings[nChn].nVolume = 64; m_SndFile.ChnSettings[nChn].nPan = 128; - m_SndFile.Chn[nChn].nGlobalVol = 64; + m_SndFile.m_PlayState.Chn[nChn].nGlobalVol = 64; } // Setup LRRL panning scheme for MODs m_SndFile.SetupMODPanning(); @@ -1054,10 +1054,10 @@ // All notes off for (UINT i=0; i<MAX_CHANNELS; i++) { - if ((i < GetNumChannels()) || (m_SndFile.Chn[i].nMasterChn)) + if ((i < GetNumChannels()) || (m_SndFile.m_PlayState.Chn[i].nMasterChn)) { - m_SndFile.Chn[i].dwFlags.set(CHN_KEYOFF | CHN_NOTEFADE); - m_SndFile.Chn[i].nFadeOutVol = 0; + m_SndFile.m_PlayState.Chn[i].dwFlags.set(CHN_KEYOFF | CHN_NOTEFADE); + m_SndFile.m_PlayState.Chn[i].nFadeOutVol = 0; } } } @@ -1072,7 +1072,7 @@ // Find a channel to play on nChn = FindAvailableChannel(); - ModChannel &chn = m_SndFile.Chn[nChn]; + ModChannel &chn = m_SndFile.m_PlayState.Chn[nChn]; // reset channel properties; in theory the chan is completely unused anyway. chn.Reset(ModChannel::resetTotal, m_SndFile, CHANNELINDEX_INVALID); @@ -1200,7 +1200,7 @@ //end rewbs.vstiLive const ChannelFlags mask = (fade ? CHN_NOTEFADE : (CHN_NOTEFADE | CHN_KEYOFF)); - ModChannel *pChn = &m_SndFile.Chn[stopChn != CHANNELINDEX_INVALID ? stopChn : m_SndFile.m_nChannels]; + ModChannel *pChn = &m_SndFile.m_PlayState.Chn[stopChn != CHANNELINDEX_INVALID ? stopChn : m_SndFile.m_nChannels]; for(CHANNELINDEX i = m_SndFile.GetNumChannels(); i < MAX_CHANNELS; i++, pChn++) if (!pChn->nMasterChn) { @@ -1224,7 +1224,7 @@ bool CModDoc::IsNotePlaying(UINT note, SAMPLEINDEX nsmp, INSTRUMENTINDEX nins) //---------------------------------------------------------------------------- { - ModChannel *pChn = &m_SndFile.Chn[m_SndFile.GetNumChannels()]; + ModChannel *pChn = &m_SndFile.m_PlayState.Chn[m_SndFile.GetNumChannels()]; for (CHANNELINDEX i = m_SndFile.GetNumChannels(); i < MAX_CHANNELS; i++, pChn++) if (!pChn->nMasterChn) { if(pChn->nLength != 0 && !pChn->dwFlags[CHN_NOTEFADE | CHN_KEYOFF| CHN_MUTE] @@ -1276,13 +1276,13 @@ // Mute pattern channel if (doMute) { - m_SndFile.Chn[nChn].dwFlags.set(muteType); + m_SndFile.m_PlayState.Chn[nChn].dwFlags.set(muteType); // Kill VSTi notes on muted channel. PLUGINDEX nPlug = m_SndFile.GetBestPlugin(nChn, PrioritiseInstrument, EvenIfMuted); if ((nPlug) && (nPlug<=MAX_MIXPLUGINS)) { CVstPlugin *pPlug = (CVstPlugin*)m_SndFile.m_MixPlugins[nPlug - 1].pMixPlugin; - const ModInstrument* pIns = m_SndFile.Chn[nChn].pModInstrument; + const ModInstrument* pIns = m_SndFile.m_PlayState.Chn[nChn].pModInstrument; if (pPlug && pIns) { pPlug->MidiCommand(m_SndFile.GetBestMidiChannel(nChn), pIns->nMidiProgram, pIns->wMidiBank, NOTE_KEYOFF, 0, nChn); @@ -1291,21 +1291,21 @@ } else { // On unmute alway cater for both mute types - this way there's no probs if user changes mute mode. - m_SndFile.Chn[nChn].dwFlags.reset(CHN_SYNCMUTE | CHN_MUTE); + m_SndFile.m_PlayState.Chn[nChn].dwFlags.reset(CHN_SYNCMUTE | CHN_MUTE); } // Mute any NNA'd channels for (CHANNELINDEX i = m_SndFile.GetNumChannels(); i < MAX_CHANNELS; i++) { - if (m_SndFile.Chn[i].nMasterChn == nChn + 1u) + if (m_SndFile.m_PlayState.Chn[i].nMasterChn == nChn + 1u) { if (doMute) { - m_SndFile.Chn[i].dwFlags.set(muteType); + m_SndFile.m_PlayState.Chn[i].dwFlags.set(muteType); } else { // On unmute alway cater for both mute types - this way there's no probs if user changes mute mode. - m_SndFile.Chn[i].dwFlags.reset(CHN_SYNCMUTE | CHN_MUTE); + m_SndFile.m_PlayState.Chn[i].dwFlags.reset(CHN_SYNCMUTE | CHN_MUTE); } } } @@ -1350,7 +1350,7 @@ if (m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); m_SndFile.ChnSettings[nChn].dwFlags.set(CHN_NOFX, bNoFx); - if(updateMix) m_SndFile.Chn[nChn].dwFlags.set(CHN_NOFX, bNoFx); + if(updateMix) m_SndFile.m_PlayState.Chn[nChn].dwFlags.set(CHN_NOFX, bNoFx); return true; } @@ -1460,10 +1460,10 @@ } // Update playing channel - m_SndFile.Chn[nChn].dwFlags.set(CHN_SURROUND, surround); + m_SndFile.m_PlayState.Chn[nChn].dwFlags.set(CHN_SURROUND, surround); if(surround) { - m_SndFile.Chn[nChn].nPan = 128; + m_SndFile.m_PlayState.Chn[nChn].nPan = 128; } return true; } @@ -1480,7 +1480,7 @@ if(m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); ok = true; } - m_SndFile.Chn[nChn].nGlobalVol = nVolume; + m_SndFile.m_PlayState.Chn[nChn].nGlobalVol = nVolume; return ok; } @@ -1497,8 +1497,8 @@ if(m_SndFile.GetType() & (MOD_TYPE_S3M | MOD_TYPE_IT | MOD_TYPE_MPT)) SetModified(); ok = true; } - m_SndFile.Chn[nChn].nPan = nPan; - m_SndFile.Chn[nChn].dwFlags.reset(CHN_SURROUND); + m_SndFile.m_PlayState.Chn[nChn].nPan = nPan; + m_SndFile.m_PlayState.Chn[nChn].dwFlags.reset(CHN_SURROUND); return ok; } @@ -2003,13 +2003,13 @@ CriticalSection cs; - for(CHANNELINDEX i = m_SndFile.GetNumChannels(); i < MAX_CHANNELS; i++) if (!m_SndFile.Chn[i].nMasterChn) + for(CHANNELINDEX i = m_SndFile.GetNumChannels(); i < MAX_CHANNELS; i++) if (!m_SndFile.m_PlayState.Chn[i].nMasterChn) { - m_SndFile.Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); - if (!isPlaying) m_SndFile.Chn[i].nLength = 0; + m_SndFile.m_PlayState.Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); + if (!isPlaying) m_SndFile.m_PlayState.Chn[i].nLength = 0; } - m_SndFile.m_bPositionChanged = true; + m_SndFile.m_PlayState.m_bPositionChanged = true; if(isPlaying) { @@ -2033,20 +2033,20 @@ if (pMainFrm->GetModPlaying() == this) { bool isLooping = m_SndFile.m_SongFlags[SONG_PATTERNLOOP]; - PATTERNINDEX nPat = m_SndFile.m_nPattern; - ROWINDEX nRow = m_SndFile.m_nRow; - ROWINDEX nNextRow = m_SndFile.m_nNextRow; + PATTERNINDEX nPat = m_SndFile.m_PlayState.m_nPattern; + ROWINDEX nRow = m_SndFile.m_PlayState.m_nRow; + ROWINDEX nNextRow = m_SndFile.m_PlayState.m_nNextRow; pMainFrm->PauseMod(); if ((isLooping) && (nPat < m_SndFile.Patterns.Size())) { CriticalSection cs; - if ((m_SndFile.m_nCurrentOrder < m_SndFile.Order.size()) && (m_SndFile.Order[m_SndFile.m_nCurrentOrder] == nPat)) + if ((m_SndFile.m_PlayState.m_nCurrentOrder < m_SndFile.Order.size()) && (m_SndFile.Order[m_SndFile.m_PlayState.m_nCurrentOrder] == nPat)) { - m_SndFile.m_nNextOrder = m_SndFile.m_nCurrentOrder; - m_SndFile.m_nNextRow = nNextRow; - m_SndFile.m_nRow = nRow; + m_SndFile.m_PlayState.m_nNextOrder = m_SndFile.m_PlayState.m_nCurrentOrder; + m_SndFile.m_PlayState.m_nNextRow = nNextRow; + m_SndFile.m_PlayState.m_nRow = nRow; } else { for (ORDERINDEX nOrd = 0; nOrd < m_SndFile.Order.size(); nOrd++) @@ -2054,10 +2054,10 @@ if (m_SndFile.Order[nOrd] == m_SndFile.Order.GetInvalidPatIndex()) break; if (m_SndFile.Order[nOrd] == nPat) { - m_SndFile.m_nCurrentOrder = nOrd; - m_SndFile.m_nNextOrder = nOrd; - m_SndFile.m_nNextRow = nNextRow; - m_SndFile.m_nRow = nRow; + m_SndFile.m_PlayState.m_nCurrentOrder = nOrd; + m_SndFile.m_PlayState.m_nNextOrder = nOrd; + m_SndFile.m_PlayState.m_nNextRow = nNextRow; + m_SndFile.m_PlayState.m_nRow = nRow; break; } } @@ -2097,9 +2097,9 @@ m_SndFile.m_SongFlags.reset(SONG_STEP | SONG_PATTERNLOOP); m_SndFile.SetCurrentPos(0); //m_SndFile.visitedSongRows.Initialize(true); - m_SndFile.m_lTotalSampleCount = 0; + m_SndFile.m_PlayState.m_lTotalSampleCount = 0; - m_SndFile.m_bPositionChanged = true; + m_SndFile.m_PlayState.m_bPositionChanged = true; cs.Leave(); @@ -2258,7 +2258,7 @@ { case tempo_mode_alternative: Message.Format("Using alternative tempo interpretation.\n\nAssuming:\n. %d ticks per second\n. %d ticks per row\n. %d rows per beat\nthe tempo is approximately: %.8g BPM", - m_SndFile.m_nMusicTempo, m_SndFile.m_nMusicSpeed, m_SndFile.m_nCurrentRowsPerBeat, bpm); + m_SndFile.m_PlayState.m_nMusicTempo, m_SndFile.m_PlayState.m_nMusicSpeed, m_SndFile.m_PlayState.m_nCurrentRowsPerBeat, bpm); break; case tempo_mode_modern: @@ -2268,7 +2268,7 @@ case tempo_mode_classic: default: Message.Format("Using standard tempo interpretation.\n\nAssuming:\n. A mod tempo (tick duration factor) of %d\n. %d ticks per row\n. %d rows per beat\nthe tempo is approximately: %.8g BPM", - m_SndFile.m_nMusicTempo, m_SndFile.m_nMusicSpeed, m_SndFile.m_nCurrentRowsPerBeat, bpm); + m_SndFile.m_PlayState.m_nMusicTempo, m_SndFile.m_PlayState.m_nMusicSpeed, m_SndFile.m_PlayState.m_nCurrentRowsPerBeat, bpm); break; } @@ -2387,18 +2387,18 @@ // Cut instruments/samples for(CHANNELINDEX i = 0; i < MAX_CHANNELS; i++) { - m_SndFile.Chn[i].nPatternLoopCount = 0; - m_SndFile.Chn[i].nPatternLoop = 0; - m_SndFile.Chn[i].nFadeOutVol = 0; - m_SndFile.Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); + m_SndFile.m_PlayState.Chn[i].nPatternLoopCount = 0; + m_SndFile.m_PlayState.Chn[i].nPatternLoop = 0; + m_SndFile.m_PlayState.Chn[i].nFadeOutVol = 0; + m_SndFile.m_PlayState.Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); } - if ((nOrd < m_SndFile.Order.size()) && (m_SndFile.Order[nOrd] == nPat)) m_SndFile.m_nCurrentOrder = m_SndFile.m_nNextOrder = nOrd; + if ((nOrd < m_SndFile.Order.size()) && (m_SndFile.Order[nOrd] == nPat)) m_SndFile.m_PlayState.m_nCurrentOrder = m_SndFile.m_PlayState.m_nNextOrder = nOrd; m_SndFile.m_SongFlags.reset(SONG_PAUSED | SONG_STEP); if(loop) m_SndFile.LoopPattern(nPat); else m_SndFile.LoopPattern(PATTERNINDEX_INVALID); - m_SndFile.m_nNextRow = 0; + m_SndFile.m_PlayState.m_nNextRow = 0; // set playback timer in the status bar (and update channel status) SetElapsedTime(nOrd, 0); @@ -2448,12 +2448,12 @@ // Cut instruments/samples for(CHANNELINDEX i = m_SndFile.GetNumChannels(); i < MAX_CHANNELS; i++) { - m_SndFile.Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); + m_SndFile.m_PlayState.Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); } - if ((nOrd < m_SndFile.Order.size()) && (m_SndFile.Order[nOrd] == nPat)) m_SndFile.m_nCurrentOrder = m_SndFile.m_nNextOrder = nOrd; + if ((nOrd < m_SndFile.Order.size()) && (m_SndFile.Order[nOrd] == nPat)) m_SndFile.m_PlayState.m_nCurrentOrder = m_SndFile.m_PlayState.m_nNextOrder = nOrd; m_SndFile.m_SongFlags.reset(SONG_PAUSED | SONG_STEP); m_SndFile.LoopPattern(nPat); - m_SndFile.m_nNextRow = nRow; + m_SndFile.m_PlayState.m_nNextRow = nRow; // set playback timer in the status bar (and update channel status) SetElapsedTime(nOrd, nRow); @@ -2503,7 +2503,7 @@ // Cut instruments/samples for(CHANNELINDEX i = m_SndFile.GetNumChannels(); i < MAX_CHANNELS; i++) { - m_SndFile.Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); + m_SndFile.m_PlayState.Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); } m_SndFile.m_SongFlags.reset(SONG_PAUSED | SONG_STEP); m_SndFile.SetCurrentOrder(nOrd); @@ -2511,7 +2511,7 @@ m_SndFile.DontLoopPattern(nPat, nRow); else m_SndFile.LoopPattern(nPat); - m_SndFile.m_nNextRow = nRow; + m_SndFile.m_PlayState.m_nNextRow = nRow; // set playback timer in the status bar (and update channel status) SetElapsedTime(nOrd, nRow); @@ -2668,7 +2668,7 @@ // Search for available channel for(CHANNELINDEX j = m_SndFile.m_nChannels; j < MAX_CHANNELS; j++) { - const ModChannel &chn = m_SndFile.Chn[j]; + const ModChannel &chn = m_SndFile.m_PlayState.Chn[j]; if(!chn.nLength) return j; else if(chn.dwFlags[CHN_NOTEFADE]) Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -203,7 +203,7 @@ for(CHANNELINDEX nChn = 0; nChn < GetNumChannels(); nChn++) { settings[nChn] = m_SndFile.ChnSettings[nChn]; - chns[nChn] = m_SndFile.Chn[nChn]; + chns[nChn] = m_SndFile.m_PlayState.Chn[nChn]; recordStates[nChn] = IsChannelRecord(nChn); chnMutePendings[nChn] = m_SndFile.m_bChannelMuteTogglePending[nChn]; } @@ -215,7 +215,7 @@ if(newOrder[nChn] < GetNumChannels()) { m_SndFile.ChnSettings[nChn] = settings[newOrder[nChn]]; - m_SndFile.Chn[nChn] = chns[newOrder[nChn]]; + m_SndFile.m_PlayState.Chn[nChn] = chns[newOrder[nChn]]; if(recordStates[newOrder[nChn]] == 1) Record1Channel(nChn, true); if(recordStates[newOrder[nChn]] == 2) Record2Channel(nChn, true); m_SndFile.m_bChannelMuteTogglePending[nChn] = chnMutePendings[newOrder[nChn]]; @@ -233,7 +233,7 @@ for(CHANNELINDEX nChn = GetNumChannels(); nChn < MAX_BASECHANNELS; nChn++) { m_SndFile.InitChannel(nChn); - m_SndFile.Chn[nChn].dwFlags.set(CHN_MUTE); + m_SndFile.m_PlayState.Chn[nChn].dwFlags.set(CHN_MUTE); } return GetNumChannels(); Modified: trunk/OpenMPT/mptrack/PSRatioCalc.cpp =================================================================== --- trunk/OpenMPT/mptrack/PSRatioCalc.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/PSRatioCalc.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -28,8 +28,8 @@ if(sampleRate <= 0) sampleRate = 8363; - m_nSpeed = sndFile.m_nMusicSpeed; - m_nTempo = sndFile.m_nMusicTempo; + m_nSpeed = sndFile.m_PlayState.m_nMusicSpeed; + m_nTempo = sndFile.m_PlayState.m_nMusicTempo; // Sample rate will not change. We can calculate original duration once and disgard sampleRate. m_lMsOrig = static_cast<ULONGLONG>(1000.0 * ((double)smp.nLength / sampleRate)); @@ -151,7 +151,7 @@ void CPSRatioCalc::CalcRows() { - double rowTime = sndFile.GetRowDuration(sndFile.m_nMusicTempo, sndFile.m_nMusicSpeed); + double rowTime = sndFile.GetRowDuration(sndFile.m_PlayState.m_nMusicTempo, sndFile.m_PlayState.m_nMusicSpeed); m_dRowsOrig = (double)m_lMsOrig / rowTime; m_dRowsNew = m_dRowsOrig*(m_dRatio / 100); Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -583,9 +583,9 @@ // Update mixing flags... for(CHANNELINDEX nChn = 0; nChn < MAX_CHANNELS; nChn++) { - if(sndFile.Chn[nChn].pModInstrument == &ins) + if(sndFile.m_PlayState.Chn[nChn].pModInstrument == &ins) { - sndFile.Chn[nChn].GetEnvelope(envelope).flags.set(flags, enable); + sndFile.m_PlayState.Chn[nChn].GetEnvelope(envelope).flags.set(flags, enable); } } @@ -886,7 +886,7 @@ m_dcMemMain.FillRect(&m_rcClient, CBrush::FromHandle(CMainFrame::brushBlack)); if (m_bGrid) { - DrawGrid(&m_dcMemMain, pModDoc->GetrSoundFile().m_nMusicSpeed); + DrawGrid(&m_dcMemMain, pModDoc->GetrSoundFile().m_PlayState.m_nMusicSpeed); } // Middle line (half volume or pitch / panning center) Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -1680,7 +1680,7 @@ const bool isMuted = pModDoc->IsChannelMuted(chn); if(!isMuted) pModDoc->MuteChannel(chn, true); - pSndFile->Chn[chn].Reset(ModChannel::resetTotal, *pSndFile, chn); + pSndFile->m_PlayState.Chn[chn].Reset(ModChannel::resetTotal, *pSndFile, chn); if(!isMuted) pModDoc->MuteChannel(chn, false); } @@ -2459,10 +2459,10 @@ // Cut instruments/samples in virtual channels for(CHANNELINDEX i = pSndFile->GetNumChannels(); i < MAX_CHANNELS; i++) { - pSndFile->Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); + pSndFile->m_PlayState.Chn[i].dwFlags.set(CHN_NOTEFADE | CHN_KEYOFF); } pSndFile->LoopPattern(m_nPattern); - pSndFile->m_nNextRow = row == ROWINDEX_INVALID ? GetCurrentRow() : row; + pSndFile->m_PlayState.m_nNextRow = row == ROWINDEX_INVALID ? GetCurrentRow() : row; pSndFile->m_SongFlags.reset(SONG_PAUSED); pSndFile->m_SongFlags.set(SONG_STEP); @@ -3657,7 +3657,7 @@ ROWINDEX nRow = GetCurrentRow(); PATTERNINDEX nPattern = m_nPattern; if(IsLiveRecord()) - SetEditPos(*pSndFile, nRow, nPattern, pSndFile->m_nRow, pSndFile->m_nPattern); + SetEditPos(*pSndFile, nRow, nPattern, pSndFile->m_PlayState.m_nRow, pSndFile->m_PlayState.m_nPattern); ModCommand *pRow = pSndFile->Patterns[nPattern].GetpModCommand(nRow, nChn); @@ -3685,7 +3685,7 @@ //Figure out which plug param (if any) is controllable using the active macro on this channel. long activePlugParam = -1; - BYTE activeMacro = pSndFile->Chn[nChn].nActiveMacro; + BYTE activeMacro = pSndFile->m_PlayState.Chn[nChn].nActiveMacro; if (pSndFile->m_MidiCfg.GetParameteredMacroType(activeMacro) == sfx_plug) { @@ -3699,7 +3699,7 @@ int foundMacro = pSndFile->m_MidiCfg.FindMacroForParam(paramIndex); if (foundMacro >= 0) { - pSndFile->Chn[nChn].nActiveMacro = foundMacro; + pSndFile->m_PlayState.Chn[nChn].nActiveMacro = foundMacro; if (pRow->command == CMD_NONE || pRow->command == CMD_SMOOTHMIDI || pRow->command == CMD_MIDI) //we overwrite existing Zxx and \xx only. { pModDoc->GetPatternUndo().PrepareUndo(nPattern, nChn, nRow, 1, 1, "Automation Entry"); @@ -3737,7 +3737,7 @@ if(m_nPlayPat != PATTERNINDEX_INVALID) SetEditPos(rSf, editpos.row, editpos.pattern, m_nPlayRow, m_nPlayPat); else - SetEditPos(rSf, editpos.row, editpos.pattern, rSf.m_nRow, rSf.m_nPattern); + SetEditPos(rSf, editpos.row, editpos.pattern, rSf.m_PlayState.m_nRow, rSf.m_PlayState.m_nPattern); } else { editpos.pattern = m_nPattern; @@ -5178,7 +5178,7 @@ { newcmd.command = (sndFile.TypeIsS3M_IT_MPT()) ? CMD_S3MCMDEX : CMD_MODCMDEX; UINT maxSpeed = 0x0F; - if(sndFile.m_nMusicSpeed > 0) maxSpeed = MIN(0x0F, sndFile.m_nMusicSpeed - 1); + if(sndFile.m_PlayState.m_nMusicSpeed > 0) maxSpeed = MIN(0x0F, sndFile.m_PlayState.m_nMusicSpeed - 1); newcmd.param = 0xD0 + MIN(maxSpeed, m_nPlayTick); } } @@ -5612,8 +5612,8 @@ return; } - const ROWINDEX currentTick = sndFile->m_nMusicSpeed * row + m_nPlayTick; - const ROWINDEX ticksPerNote = TrackerSettings::Instance().recordQuantizeRows * sndFile->m_nMusicSpeed; + const ROWINDEX currentTick = sndFile->m_PlayState.m_nMusicSpeed * row + m_nPlayTick; + const ROWINDEX ticksPerNote = TrackerSettings::Instance().recordQuantizeRows * sndFile->m_PlayState.m_nMusicSpeed; // Previous quantization step const ROWINDEX quantLow = (currentTick / ticksPerNote) * ticksPerNote; @@ -5622,10 +5622,10 @@ if(currentTick - quantLow < quantHigh - currentTick) { - row = quantLow / sndFile->m_nMusicSpeed; + row = quantLow / sndFile->m_PlayState.m_nMusicSpeed; } else { - row = quantHigh / sndFile->m_nMusicSpeed; + row = quantHigh / sndFile->m_PlayState.m_nMusicSpeed; } if(!sndFile->Patterns[pat].IsValidRow(row)) Modified: trunk/OpenMPT/mptrack/View_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_smp.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/View_smp.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -2222,9 +2222,9 @@ p[i] = (signed char) ((*((short int *)(p+i*2))) / 256); } sample.uFlags.reset(CHN_16BIT); - for (CHANNELINDEX j = 0; j < MAX_CHANNELS; j++) if (sndFile.Chn[j].pModSample == &sample) + for (CHANNELINDEX j = 0; j < MAX_CHANNELS; j++) if (sndFile.m_PlayState.Chn[j].pModSample == &sample) { - sndFile.Chn[j].dwFlags.reset(CHN_16BIT); + sndFile.m_PlayState.Chn[j].dwFlags.reset(CHN_16BIT); } sample.PrecomputeLoops(sndFile, false); @@ -2415,7 +2415,7 @@ { CSoundFile &sndFile = GetDocument()->GetrSoundFile(); sndFile.KeyOff(noteChannel[note - NOTE_MIN]); - sndFile.Chn[noteChannel[note - NOTE_MIN]].dwFlags.set(CHN_NOTEFADE); + sndFile.m_PlayState.Chn[noteChannel[note - NOTE_MIN]].dwFlags.set(CHN_NOTEFADE); noteChannel[note - NOTE_MIN] = CHANNELINDEX_INVALID; } Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -2250,13 +2250,13 @@ for(CHANNELINDEX nChn = 0; nChn < MAX_CHANNELS; nChn++) { - if(sndFile.Chn[nChn].pCurrentSample != nullptr) + if(sndFile.m_PlayState.Chn[nChn].pCurrentSample != nullptr) { if(updateSamples) { for(SAMPLEINDEX nSmp = sndFile.GetNumSamples(); nSmp >= 1; nSmp--) { - if(sndFile.Chn[nChn].pModSample == &sndFile.GetSample(nSmp)) + if(sndFile.m_PlayState.Chn[nChn].pModSample == &sndFile.GetSample(nSmp)) { pInfo->samplesPlaying.set(nSmp); break; @@ -2267,7 +2267,7 @@ { for(INSTRUMENTINDEX nIns = sndFile.GetNumInstruments(); nIns >= 1; nIns--) { - if(sndFile.Chn[nChn].pModInstrument == sndFile.Instruments[nIns]) + if(sndFile.m_PlayState.Chn[nChn].pModInstrument == sndFile.Instruments[nIns]) { pInfo->instrumentsPlaying.set(nIns); break; Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -146,7 +146,7 @@ // Time signature. numerator = rows per beats / rows pear measure (should sound somewhat logical to you). // the denominator is a bit more tricky, since it cannot be set explicitely. so we just assume quarters for now. - timeInfo.timeSigNumerator = sndFile.m_nCurrentRowsPerMeasure / MAX(sndFile.m_nCurrentRowsPerBeat, 1); + timeInfo.timeSigNumerator = sndFile.m_PlayState.m_nCurrentRowsPerMeasure / MAX(sndFile.m_PlayState.m_nCurrentRowsPerBeat, 1); timeInfo.timeSigDenominator = 4; //gcd(pSndFile->m_nCurrentRowsPerMeasure, pSndFile->m_nCurrentRowsPerBeat); } } Modified: trunk/OpenMPT/soundlib/Fastmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Fastmix.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/soundlib/Fastmix.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -284,7 +284,7 @@ for(uint32 nChn = 0; nChn < m_nMixChannels; nChn++) { - ModChannel &chn = Chn[ChnMix[nChn]]; + ModChannel &chn = m_PlayState.Chn[m_PlayState.ChnMix[nChn]]; uint32 functionNdx = 0; if(!chn.pCurrentSample) continue; @@ -317,7 +317,7 @@ pbuffer = MixRearBuffer; //Look for plugins associated with this implicit tracker channel. - PLUGINDEX nMixPlugin = GetBestPlugin(ChnMix[nChn], PrioritiseInstrument, RespectMutes); + PLUGINDEX nMixPlugin = GetBestPlugin(m_PlayState.ChnMix[nChn], PrioritiseInstrument, RespectMutes); if ((nMixPlugin > 0) && (nMixPlugin <= MAX_MIXPLUGINS)) { Modified: trunk/OpenMPT/soundlib/SampleFormats.cpp =================================================================== --- trunk/OpenMPT/soundlib/SampleFormats.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/soundlib/SampleFormats.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -184,9 +184,9 @@ Instruments[nInstr] = nullptr; for(CHANNELINDEX i = 0; i < MAX_CHANNELS; i++) { - if (Chn[i].pModInstrument == pIns) + if (m_PlayState.Chn[i].pModInstrument == pIns) { - Chn[i].pModInstrument = nullptr; + m_PlayState.Chn[i].pModInstrument = nullptr; } } delete pIns; Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2014-02-27 23:28:17 UTC (rev 3787) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2014-02-28 01:52:36 UTC (rev 3788) @@ -122,12 +122,12 @@ retval.lastOrder = retval.endOrder = ORDERINDEX_INVALID; retval.lastRow = retval.endRow = ROWINDEX_INVALID; - ModChannel origChannels[CountOf(Chn)]; + ModChannel origChannels[CountOf(m_PlayState.Chn)]; if(adjustMode & eAdjust) { - for(CHANNELINDEX i = 0; i < CountOf(Chn); i++) + for(CHANNELINDEX i = 0; i < CountOf(m_PlayState.Chn); i++) { - origChannels[i] = Chn[i]; + origChannels[i] = m_PlayState.Chn[i]; } } @@ -255,7 +255,7 @@ memory.chnSettings[chn].patLoop = memory.elapsedTime; } - ModChannel *pChn = Chn; + ModChannel *pChn = m_PlayState.Chn; ModCommand *p = Patterns[nPattern].GetRow(nRow); ModCommand *nextRow = nullptr; for(CHANNELINDEX nChn = 0; nChn < GetNumChannels(); p++, pChn++, nChn++) if(!p->IsEmpty()) @@ -565,7 +565,7 @@ if((adjustMode & eAdjustSamplePositions) == eAdjustSamplePositions) { // Super experimental and dirty sample seeking - pChn = Chn; + pChn = m_PlayState.Chn; p = Patterns[nPattern].GetRow(nRow); for(CHANNELINDEX nChn = 0; nChn < GetNumChannels(); p++, pChn++, nChn++) { @@ -674,55 +674,55 @@ if(retval.targetReached || target.mode == GetLengthTarget::NoTarget) { // Target found, or there is no target (i.e. play whole song)... - m_nGlobalVolume = memory.glbVol; - m_nFrameDelay = m_nPatternDelay = 0; - m_lTotalSampleCount = memory.renderedSamples; - m_bPositionChanged = true; + m_PlayState.m_nGlobalVolume = memory.glbVol; + m_PlayState.m_nFrameDelay = m_PlayState.m_nPatternDelay = 0; + m_PlayState.m_lTotalSampleCount = memory.renderedSamples; + m_PlayState.m_bPositionChanged = true; if(IsCompatibleMode(TRK_IMPULSETRACKER | TRK_FASTTRACKER2)) { // IT compatibility 16. Global volume slide params are stored per channel (FT2/IT) for(CHANNELINDEX n = 0; n < GetNumChannels(); n++) { - Chn[n].nOldGlobalVolSlide = memory.chnSettings[n].oldGlbVolSlide; + m_PlayState.Chn[n].nOldGlobalVolSlide = memory.chnSettings[n].oldGlbVolSlide; } } else { - m_nOldGlbVolSlide = memory.chnSettings[0].oldGlbVolSlide; + m_PlayState.m_nOldGlbVolSlide = memory.chnSettings[0].oldGlbVolSlide; } - m_nMusicSpeed = memory.musicSpeed; - m_nMusicTempo = memory.musicTempo; + m_PlayState.m_nMusicSpeed = memory.musicSpeed; + m_PlayState.m_nMusicTempo = memory.musicTempo; for(CHANNELINDEX n = 0; n < GetNumChannels(); n++) { - Chn[n].nOldHiOffset = memory.chnSettings[n].hiOffset; - Chn[n].nGlobalVol = memory.chnSettings[n].chnVol; + m_PlayState.Chn[n].nOldHiOffset = memory.chnSettings[n].hiOffset; + m_PlayState.Chn[n].nGlobalVol = memory.chnSettings[n].chnVol; if(memory.chnSettings[n].note != NOTE_NONE) { - Chn[n].nNewNote = memory.chnSettings[n].note; + m_PlayState.Chn[n].nNewNote = memory.chnSettings[n].note; if(ModCommand::IsNote(memory.chnSettings[n].note)) { - Chn[n].nLastNote = memory.chnSettings[n].note; + m_PlayState.Chn[n].nLastNote = memory.chnSettings[n].note; } } - if(memory.chnSettings[n].instr) Chn[n].nNewIns = memory.chnSettings[n].instr; + if(memory.chnSettings[n].instr) m_PlayState.Chn[n].nNewIns = memory.chnSettings[n].instr; if(memory.chnSettings[n].vol != 0xFF) { if(memory.chnSettings[n].vol > 64) memory.chnSettings[n].vol = 64; - Chn[n].nVolume = memory.chnSettings[n].vol * 4; + m_PlayState.Chn[n].nVolume = memory.chnSettings[n].vol * 4; } } } else if(adjustMode != eAdjustOnSuccess) { // Target not found (e.g. when jumping to a hidden sub song), reset global variables... - m_nMusicSpeed = m_nDefaultSpeed; - m_nMusicTempo = m_nDefaultTempo; - m_nGlobalVolume = m_nDefaultGlobalVolume; - for(CHANNELINDEX i = 0; i < CountOf(Chn); i++) + m_PlayState.m_nMusicSpeed = m_nDefaultSpeed; + m_PlayState.m_nMusicTempo = m_nDefaultTempo; + m_PlayState.m_nGlobalVolume = m_nDefaultGlobalVolume; + for(CHANNELINDEX i = 0; i < CountOf(m_PlayState.Chn); i++) { - Chn[i] = origChannels[i]; + m_PlayState.Chn[i] = origChannels[i]; } } // When adjusting the playback status, we will also want to update the visited rows vector according to the current position. - visitedSongRows.Set(visitedRows); + m_PlayState.visitedSongRows.Set(visitedRows); } return retval; @@ -1080,7 +1080,7 @@ //------------------------------------------------------------------------------------------------- { if (note < NOTE_MIN) return; - ModChannel *pChn = &Chn[nChn]; + ModChannel *pChn = &m_PlayState.Chn[nChn]; const ModSample *pSmp = pChn->pModSample; const ModInstrument *pIns = pChn->pModInstrument; @@ -1411,16 +1411,16 @@ CHANNELINDEX CSoundFile::GetNNAChannel(CHANNELINDEX nChn) const //------------------------------------------------------------- { - const ModChannel *pChn = &Chn[nChn]; + const ModChannel *pChn = &m_PlayState.Chn[nChn]; // Check for empty channel - const ModChannel *pi = &Chn[m_nChannels]; + const ModChannel *pi = &m_PlayState.Chn[m_nChannels]; 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 CHANNELINDEX result = 0; DWORD vol = 64*65536; // 25% DWORD envpos = 0xFFFFFF; - const ModChannel *pj = &Chn[m_nChannels]; + const ModChannel *pj = &m_PlayState.Chn[m_nChannels]; for (CHANNELINDEX j=m_nChannels; j<MAX_CHANNELS; j++, pj++) { if (!pj->nFadeOutVol) return j; @@ -1444,7 +1444,7 @@ void CSoundFile::CheckNNA(CHANNELINDEX nChn, UINT instr, int note, bool forceCut) //------------------------------------------------------------------------------- { - ModChannel *pChn = &Chn[nChn]; + ModChannel *pChn = &m_PlayState.Chn[nChn]; const ModInstrument *pIns = nullptr; if(!ModCommand::IsNote(note)) { @@ -1460,7 +1460,7 @@ CHANNELINDEX n = GetNNAChannel(nChn); if(!n) return; - ModChannel &chn = Chn[n]; + ModChannel &chn = m_PlayState.Chn[n]; // Copy Channel chn = *pChn; chn.dwFlags.reset(CHN_VIBRATO | CHN_TREMOLO | CHN_PANBRELLO | CHN_MUTE | CHN_PORTAMENTO); @@ -1624,7 +1624,7 @@ CHANNELINDEX n = GetNNAChannel(nChn); if(n != 0) { - ModChannel *p = &Chn[n]; + ModChannel *p = &m_PlayState.Chn[n]; // Copy Channel *p = *pChn; p->dwFlags.reset(CHN_VIBRATO | CHN_TREMOLO | CHN_PANBRELLO | CHN_MUTE | CHN_PORTAMENTO); @@ -1681,13 +1681,13 @@ BOOL CSoundFile::ProcessEffects() //------------------------------- { - ModChannel *pChn = Chn; + ModChannel *pChn = m_PlayState.Chn; ROWINDEX nBreakRow = ROWINDEX_INVALID; // Is changed if a break to row command is encountered ROWINDEX nPatLoopRow = ROWINDEX_INVALID; // Is changed if a pattern loop jump-back is executed ORDERINDEX nPosJump = ORDERINDEX_INVALID; // ScreamTracker 2 only updates effects on every 16th tick. - if((m_nTickCount & 0x0F) != 0 && GetType() == MOD_TYPE_STM) + if((m_PlayState.m_nTickCount & 0x0F) != 0 && GetType() == MOD_TYPE_STM) { return TRUE; } @@ -1706,7 +1706,7 @@ bool bPorta = (cmd == CMD_TONEPORTAMENTO) || (cmd == CMD_TONEPORTAVOL) || (volcmd == VOLCMD_TONEPORTAMENTO); UINT nStartTick = 0; - pChn->isFirstTick = (m_nTickCount == 0); + pChn->isFirstTick = (m_PlayState.m_nTickCount == 0); pChn->dwFlags.reset(CHN_FASTVOLRAMP); @@ -1745,7 +1745,7 @@ pChn->m_plugParamTargetValue = targetvalue; pChn->m_plugParamValueStep = (targetvalue - m_MixPlugins[nPlug-1].pMixPlugin->GetParameter(plugparam)) / float(GetNumTicksOnCurrentRow()); } - if(m_nTickCount + 1 == GetNumTicksOnCurrentRow()) + if(m_PlayState.m_nTickCount + 1 == GetNumTicksOnCurrentRow()) { // On last tick, set parameter exactly to target value. m_MixPlugins[nPlug-1].pMixPlugin->SetParameter(plugparam, pChn->m_plugParamTargetValue); } @@ -1770,7 +1770,7 @@ // Process Invert Loop (MOD Effect, called every row) if(!m_SongFlags[SONG_FIRSTTICK]) { - InvertLoop(&Chn[nChn]); + InvertLoop(&m_PlayState.Chn[nChn]); } // Process special effects (note delay, pattern delay, pattern loop) @@ -1838,8 +1838,8 @@ // ST3 doesn't have per-channel pattern loop memory, so spam all changes to other channels as well. for (CHANNELINDEX i = 0; i < GetNumChannels(); i++) { - Chn[i].nPatternLoop = pChn->nPatternLoop; - Chn[i].nPatternLoopCount = pChn->nPatternLoopCount; + m_PlayState.Chn[i].nPatternLoop = pChn->nPatternLoop; + m_PlayState.Chn[i].nPatternLoopCount = pChn->nPatternLoopCount; } } } else if ((param & 0xF0) == 0xE0) @@ -1848,13 +1848,13 @@ // In Scream Tracker 3 / Impulse Tracker, only the first delay command on this row is considered. // Test cases: PatternDelays.it, PatternDelays.s3m, PatternDelays.xm // XXX In Scream Tracker 3, the "left" channels are evaluated before the "right" channels, which is not emulated here! - if(!(GetType() & (MOD_TYPE_S3M | MOD_TYPE_IT | MOD_TYPE_MPT)) || !m_nPatternDelay) + if(!(GetType() & (MOD_TYPE_S3M | MOD_TYPE_IT | MOD_TYPE_MPT)) || !m_PlayState.m_nPatternDelay) { if(!(GetType() & (MOD_TYPE_S3M)) || (param & 0x0F) != 0) { // While Impulse Tracker *does* count S60 as a valid row delay (and thus ignores any other row delay commands on the right), // Scream Tracker 3 simply ignores such commands. - m_nPatternDelay = 1 + (param & 0x0F); + m_PlayState.m_nPatternDelay = 1 + (param & 0x0F); } } } @@ -1868,13 +1868,13 @@ pChn->rowCommand.volcmd = VOLCMD_NONE; } - bool triggerNote = (m_nTickCount == nStartTick); // Can be delayed by a note delay effect - if((GetType() & (MOD_TYPE_S3M | MOD_TYPE_IT | MOD_TYPE_MPT)) && nStartTick > 0 && (m_nTickCount % (m_nMusicSpeed + m_nFrameDelay)) == nStartTick) + bool triggerNote = (m_PlayState.m_nTickCount == nStartTick); // Can be delayed by a note delay effect + if((GetType() & (MOD_TYPE_S3M | MOD_TYPE_IT | MOD_TYPE_MPT)) && nStartTick > 0 && (m_PlayState.m_nTickCount % (m_PlayState.m_nMusicSpeed + m_PlayState.m_nFrameDelay)) == nStartTick) { // IT compatibility: Delayed notes (using SDx) that are on the same row as a Row Delay effect are retriggered. Scream Tracker 3 does the same. // Test case: PatternDelay-NoteDelay.it triggerNote = true; - } else if(IsCompatibleMode(TRK_FASTTRACKER2) && nStartTick >= m_nMusicSpeed) + } else if(IsCompatibleMode(TRK_FASTTRACKER2) && nStartTick >= m_PlayState.m_nMusicSpeed) { // FT2 compatibility: Note delays greater than the song speed should be ignored. // However, EEx pattern delay is *not* considered at all. @@ -2193,13 +2193,13 @@ so... hxx = (hx | (oldhxx & 0xf0)) ??? TODO is this done correctly? */ - bool doVolumeColumn = m_nTickCount >= nStartTick; + bool doVolumeColumn = m_PlayState.m_nTickCount >= nStartTick; // FT2 compatibility: If there's a note delay, volume column effects are NOT executed // on the first tick and, if there's an instrument number, on the delayed tick. // Test case: VolColDelay.xm, PortaDelay.xm if(IsCompatibleMode(TRK_FASTTRACKER2) && nStartTick != 0) { - doVolumeColumn = m_nTickCount != 0 && (m_nTickCount != nStartTick || (pChn->rowCommand.instr == 0 && volcmd != VOLCMD_TONEPORTAMENTO)); + doVolumeColumn = m_PlayState.m_nTickCount != 0 && (m_PlayState.m_nTickCount != nStartTick || (pChn->rowCommand.instr == 0 && volcmd != VOLCMD_TONEPORTAMENTO)); } if(volcmd > VOLCMD_PANNING && doVolumeColumn) { @@ -2282,7 +2282,7 @@ case VOLCMD_FINEVOLUP: // IT Compatibility: Fine volume slides in the volume column are only executed on the first tick, not on multiples of the first tick in case of pattern delay // Test case: FineVolColSlide.it - if(m_nTickCount == nStartTick || !IsCompatibleMode(TRK_IMPULSETRACKER)) + if(m_PlayState.m_nTickCount == nStartTick || !IsCompatibleMode(TRK_IMPULSETRACKER)) { // IT Compatibility: Volume column volume slides have their own memory // Test case: VolColMemory.it @@ -2293,7 +2293,7 @@ case VOLCMD_FINEVOLDOWN: // IT Compatibility: Fine volume slides in the volume column are only executed on the first tick, not on multiples of the first tick in case of pattern delay // Test case: FineVolColSlide.it - if(m_nTickCount == nStartTick || !IsCompatibleMode(TRK_IMPULSETRACKER)) + if(m_PlayState.m_nTickCount == nStartTick || !IsCompatibleMode(TRK_IMPULSETRACKER)) { // IT Compatibility: Volume column volume slides have their own memory // Test case: VolColMemory.it @@ -2332,7 +2332,7 @@ break; case VOLCMD_OFFSET: //rewbs.volOff - if (m_nTickCount == nStartTick) + if (m_PlayState.m_nTickCount == nStartTick) SampleOffset(nChn, vol << 3); break; } @@ -2401,9 +2401,9 @@ // -> CODE#0010 // -> DESC="add extended parameter mechanism to pattern effects" m = nullptr; - if (m_nRow < Patterns[m_nPattern].GetNumRows()-1) + if (m_PlayState.m_nRow < Patterns[m_PlayState.m_nPattern].GetNumRows()-1) { - m = Patterns[m_nPattern].GetpModCommand(m_nRow + 1, nChn); + m = Patterns[m_PlayState.m_nPattern].GetpModCommand(m_PlayState.m_nRow + 1, nChn); } if (m && m->command == CMD_XPARAM) { @@ -2424,7 +2424,7 @@ // Set Offset case CMD_OFFSET: - if (m_nTickCount) break; + if (m_PlayState.m_nTickCount) break; // FT2 compatibility: Portamento + Offset = Ignore offset // Test case: porta-offset.xm if(bPorta && GetType() == MOD_TYPE_XM) @@ -2437,7 +2437,7 @@ // Arpeggio case CMD_ARPEGGIO: // IT compatibility 01. Don't ignore Arpeggio if no note is playing (also valid for ST3) - if(m_nTickCount) break; + if(m_PlayState.m_nTickCount) break; if((!pChn->nPeriod || !pChn->nNote) && (pChn->pModInstrument == nullptr || !pChn->pModInstrument->HasValidMIDIChannel()) // Plugin arpeggio && !IsCompatibleMode(TRK_IMPULSETRACKER | TRK_SCREAMTRACKER)) break; @@ -2528,7 +2528,7 @@ // Test case: globalvol-invalid.it if (param <= 128) { - m_nGlobalVolume = param * 2; + m_PlayState.m_nGlobalVolume = param * 2; } break; @@ -2538,7 +2538,7 @@ if(IsCompatibleMode(TRK_IMPULSETRACKER | TRK_FASTTRACKER2)) GlobalVolSlide(param, pChn->nOldGlobalVolSlide); else - GlobalVolSlide(param, m_nOldGlbVolSlide); + GlobalVolSlide(param, m_PlayState.m_nOldGlbVolSlide); break; // Set 8-bit Panning @@ -2610,7 +2610,7 @@ // This is how Key Off is supposed to sound... (in FT2 at least) if(IsCompatibleMode(TRK_FASTTRACKER2)) { - if (m_nTickCount == param) + if (m_PlayState.m_nTickCount == param) { // XM: Key-Off + Sample == Note Cut if(pChn->pModInstrument == nullptr || !pChn->pModInstrument->VolEnv.dwFlags[ENV_ENABLED]) @@ -2692,11 +2692,11 @@ // Position Jump case CMD_POSITIONJUMP: - m_nNextPatStartRow = 0; // FT2 E60 bug + m_PlayState.m_nNextPatStartRow = 0; // FT2 E60 bug nPosJump = param; - if(m_SongFlags[SONG_PATTERNLOOP] && m_nSeqOverride == ORDERINDEX_INVALID) + if(m_SongFlags[SONG_PATTERNLOOP] && m_PlayState.m_nSeqOverride == ORDERINDEX_INVALID) { - m_nSeqOverride = param; + m_PlayState.m_nSeqOverride = param; //Releasing pattern loop after position jump could cause //instant jumps - modifying behavior so that now position jumps //occurs also when pattern loop is enabled. @@ -2718,12 +2718,12 @@ break; } - m_... [truncated message content] |