From: <sag...@us...> - 2015-07-10 21:34:12
|
Revision: 5401 http://sourceforge.net/p/modplug/code/5401 Author: saga-games Date: 2015-07-10 21:34:06 +0000 (Fri, 10 Jul 2015) Log Message: ----------- [Fix] Preview revision introduced crashes when entering note cut/fade/off in the pattern editor [Imp] Also instantly preview the effect of note cut/off/fade in the pattern editor (i.e. kill notes) [Mod] OpenMPT: Version is now 1.25.00.17 Modified Paths: -------------- trunk/OpenMPT/common/versionNumber.h trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Moddoc.h trunk/OpenMPT/mptrack/View_ins.cpp trunk/OpenMPT/mptrack/View_pat.cpp Modified: trunk/OpenMPT/common/versionNumber.h =================================================================== --- trunk/OpenMPT/common/versionNumber.h 2015-07-10 20:21:25 UTC (rev 5400) +++ trunk/OpenMPT/common/versionNumber.h 2015-07-10 21:34:06 UTC (rev 5401) @@ -19,7 +19,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 25 #define VER_MINOR 00 -#define VER_MINORMINOR 16 +#define VER_MINORMINOR 17 //Version string. For example "1.17.02.28" #define MPT_VERSION_STR VER_STRINGIZE(VER_MAJORMAJOR) "." VER_STRINGIZE(VER_MAJOR) "." VER_STRINGIZE(VER_MINOR) "." VER_STRINGIZE(VER_MINORMINOR) Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2015-07-10 20:21:25 UTC (rev 5400) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2015-07-10 21:34:06 UTC (rev 5401) @@ -1158,7 +1158,17 @@ } else { CriticalSection cs; + // Apply note cut / off / fade (also on preview channels) m_SndFile.NoteChange(&m_SndFile.m_PlayState.Chn[nChn], note); + for(CHANNELINDEX c = m_SndFile.GetNumChannels(); c < MAX_CHANNELS; c++) + { + ModChannel &chn = m_SndFile.m_PlayState.Chn[c]; + if(chn.nMasterChn == 0) + { + m_SndFile.NoteChange(&chn, note); + } + } + if (pause) m_SndFile.m_SongFlags.set(SONG_PAUSED); } return nChn; @@ -1216,11 +1226,11 @@ } -// Apply DNA/NNA settings for note preview -void CModDoc::CheckNNA(ModCommand::NOTE note, INSTRUMENTINDEX ins, const std::bitset<128> &playingNotes) -//------------------------------------------------------------------------------------------------------ +// Apply DNA/NNA settings for note preview. It will also set the specified note to be playing in the playingNotes set. +void CModDoc::CheckNNA(ModCommand::NOTE note, INSTRUMENTINDEX ins, std::bitset<128> &playingNotes) +//------------------------------------------------------------------------------------------------ { - if(ins > GetNumInstruments() || m_SndFile.Instruments[ins] == nullptr) + if(ins > GetNumInstruments() || m_SndFile.Instruments[ins] == nullptr || note >= playingNotes.size()) { return; } @@ -1256,6 +1266,7 @@ } } } + playingNotes.set(note); } Modified: trunk/OpenMPT/mptrack/Moddoc.h =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.h 2015-07-10 20:21:25 UTC (rev 5400) +++ trunk/OpenMPT/mptrack/Moddoc.h 2015-07-10 21:34:06 UTC (rev 5401) @@ -211,7 +211,7 @@ void ProcessMIDI(uint32 midiData, INSTRUMENTINDEX ins, IMixPlugin *plugin, InputTargetContext ctx); CHANNELINDEX PlayNote(UINT note, INSTRUMENTINDEX nins, SAMPLEINDEX nsmp, bool pause, LONG nVol=-1, SmpLength loopStart = 0, SmpLength loopEnd = 0, CHANNELINDEX nCurrentChn = CHANNELINDEX_INVALID, const SmpLength sampleOffset = 0); bool NoteOff(UINT note, bool fade = false, INSTRUMENTINDEX ins = INSTRUMENTINDEX_INVALID, CHANNELINDEX currentChn = CHANNELINDEX_INVALID, CHANNELINDEX stopChn = CHANNELINDEX_INVALID); //rewbs.vstiLive: add params - void CheckNNA(ModCommand::NOTE note, INSTRUMENTINDEX ins, const std::bitset<128> &playingNotes); + void CheckNNA(ModCommand::NOTE note, INSTRUMENTINDEX ins, std::bitset<128> &playingNotes); bool IsNotePlaying(UINT note, SAMPLEINDEX nsmp = 0, INSTRUMENTINDEX nins = 0); bool MuteChannel(CHANNELINDEX nChn, bool bMute); Modified: trunk/OpenMPT/mptrack/View_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_ins.cpp 2015-07-10 20:21:25 UTC (rev 5400) +++ trunk/OpenMPT/mptrack/View_ins.cpp 2015-07-10 21:34:06 UTC (rev 5401) @@ -1934,8 +1934,12 @@ { CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); CModDoc *pModDoc = GetDocument(); - if ((pModDoc) && (pMainFrm) && (note > 0) && (note<128)) + if (pModDoc == nullptr || pMainFrm == nullptr) { + return; + } + if (note > 0 && note<128) + { CHAR s[64]; if (note >= NOTE_MIN_SPECIAL) { @@ -1956,7 +1960,6 @@ } CriticalSection cs; pModDoc->CheckNNA(note, m_nInstrument, m_baPlayingNote); - m_baPlayingNote[note] = true; pModDoc->PlayNote(note, m_nInstrument, 0, false); } s[0] = 0; @@ -1967,6 +1970,9 @@ } pMainFrm->SetInfoText(s); } + } else + { + pModDoc->PlayNote(note, m_nInstrument, 0, false); } } Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2015-07-10 20:21:25 UTC (rev 5400) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2015-07-10 21:34:06 UTC (rev 5401) @@ -5456,7 +5456,6 @@ } bool isPlaying = ((pMainFrm->GetModPlaying() == pModDoc) && (pMainFrm->IsPlaying())); pModDoc->CheckNNA(newcmd.note, nPlayIns, m_baPlayingNote); - m_baPlayingNote.set(newcmd.note); pModDoc->PlayNote(newcmd.note, nPlayIns, 0, !isPlaying, 4 * vol, 0, 0, nChn); } } @@ -5733,7 +5732,6 @@ for(int i = 0; i < numNotes; i++) { pModDoc->CheckNNA(note, nPlayIns, m_baPlayingNote); - m_baPlayingNote.set(note); pModDoc->PlayNote(chordNotes[i], nPlayIns, 0, !isPlaying && i == 0, -1, 0, 0, chn); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |