From: <rel...@us...> - 2008-10-18 12:35:59
|
Revision: 231 http://modplug.svn.sourceforge.net/modplug/?rev=231&view=rev Author: relabsoluness Date: 2008-10-18 12:35:46 +0000 (Sat, 18 Oct 2008) Log Message: ----------- Patches from Jojo (with small modifications) . File name in treeview wasn't updated when saving with new file name (bug 1731) . BPM approximation showed wrong rows per beat in some cases (bug 2532) . Playing sample selection didn't work properly in all cases (bug 1700). . Setting loop points could affect playing of sample even if loop was disabled (bug 1874) / Play sample button now stops previous note even if mod is playing (bug 1366) / Sustain loop will now be enabled when setting it to sample selection. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/View_smp.cpp Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2008-10-13 17:28:21 UTC (rev 230) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2008-10-18 12:35:46 UTC (rev 231) @@ -996,7 +996,9 @@ { if ((m_pModDoc) && (m_pSndFile)) { - if ((m_pSndFile->IsPaused()) && (m_pModDoc->IsNotePlaying(0, m_nSample, 0))) + // Fix (bug report 1366). + // if ((m_pSndFile->IsPaused()) && (m_pModDoc->IsNotePlaying(0, m_nSample, 0))) + if (m_pModDoc->IsNotePlaying(0, m_nSample, 0)) { m_pModDoc->NoteOff(0, TRUE); } else @@ -2488,7 +2490,12 @@ if ((n >= 0) && (n < (LONG)pins->nLength) && ((n < (LONG)pins->nLoopEnd) || (!(pins->uFlags & CHN_LOOP)))) { pins->nLoopStart = n; - m_pModDoc->AdjustEndOfSample(m_nSample); + if(pins->uFlags & CHN_LOOP) + { + /* only update sample buffer if the loop is actually enabled + (resets sound without any reason otherwise) - bug report 1874 */ + m_pModDoc->AdjustEndOfSample(m_nSample); + } // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, this); m_pModDoc->SetModified(); @@ -2505,7 +2512,12 @@ if ((n >= 0) && (n <= (LONG)pins->nLength) && ((n > (LONG)pins->nLoopStart) || (!(pins->uFlags & CHN_LOOP)))) { pins->nLoopEnd = n; - m_pModDoc->AdjustEndOfSample(m_nSample); + if(pins->uFlags & CHN_LOOP) + { + /* only update sample buffer if the loop is actually enabled + (resets sound without any reason otherwise) - bug report 1874 */ + m_pModDoc->AdjustEndOfSample(m_nSample); + } // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, this); m_pModDoc->SetModified(); Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2008-10-13 17:28:21 UTC (rev 230) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2008-10-18 12:35:46 UTC (rev 231) @@ -580,6 +580,7 @@ SetModified(FALSE); m_bHasValidPath=true; m_ShowSavedialog = false; + UpdateAllViews(NULL, HINT_MODGENERAL); // Update treeview (e.g. filename might have changed). return TRUE; } else { @@ -831,12 +832,15 @@ if (nVol >= 0) pChn->nVolume = nVol; // handle sample looping. - if ((loopstart + 16 < loopend) && (loopstart >= 0) && (loopend <= (LONG)pChn->nLength)) { + // Fix: Bug report 1700. + //if ((loopstart + 16 < loopend) && (loopstart >= 0) && (loopend <= (LONG)pChn->nLength)) { + if ((loopstart + 16 < loopend) && (loopstart >= 0) && (pChn->pInstrument != 0)) + { pChn->nPos = loopstart; pChn->nPosLo = 0; pChn->nLoopStart = loopstart; pChn->nLoopEnd = loopend; - pChn->nLength = loopend; + pChn->nLength = min(UINT(loopend), pChn->pInstrument->nLength); } // handle extra-loud flag @@ -1960,7 +1964,7 @@ switch(m_SndFile.m_nTempoMode) { 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: %.20g BPM", - m_SndFile.m_nMusicTempo, m_SndFile.m_nMusicSpeed, CMainFrame::m_nRowSpacing2, bpm); + m_SndFile.m_nMusicTempo, m_SndFile.m_nMusicSpeed, m_SndFile.m_nRowsPerBeat, bpm); break; case tempo_mode_modern: @@ -1970,7 +1974,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: %.20g BPM", - m_SndFile.m_nMusicTempo, m_SndFile.m_nMusicSpeed, CMainFrame::m_nRowSpacing2, bpm); + m_SndFile.m_nMusicTempo, m_SndFile.m_nMusicSpeed, m_SndFile.m_nRowsPerBeat, bpm); break; } /* Modified: trunk/OpenMPT/mptrack/View_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_smp.cpp 2008-10-13 17:28:21 UTC (rev 230) +++ trunk/OpenMPT/mptrack/View_smp.cpp 2008-10-18 12:35:46 UTC (rev 231) @@ -1503,6 +1503,7 @@ { pins->nSustainStart = m_dwBeginSel; pins->nSustainEnd = m_dwEndSel; + pins->uFlags |= CHN_SUSTAINLOOP; pModDoc->SetModified(); pModDoc->AdjustEndOfSample(m_nSample); // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] @@ -1914,9 +1915,9 @@ CModDoc *pModDoc = GetDocument(); if ((pModDoc) && (pMainFrm)) { - if (note >= 0xFE) + if (note >= NOTE_NOTECUT) { - pModDoc->NoteOff(0, (note == 0xFE) ? TRUE : FALSE); + pModDoc->NoteOff(0, (note == NOTE_NOTECUT) ? TRUE : FALSE); } else { @@ -1926,7 +1927,9 @@ else pModDoc->NoteOff(0, TRUE); DWORD loopstart = m_dwBeginSel, loopend = m_dwEndSel; - if (loopend - loopstart < (UINT)(4 << m_nZoom)) loopend = loopstart = 0; + if (loopend - loopstart < (UINT)(4 << m_nZoom)) + loopend = loopstart = 0; // selection is too small -> no loop + pModDoc->PlayNote(note, 0, m_nSample, FALSE, -1, loopstart, loopend); m_dwStatus |= SMPSTATUS_KEYDOWN; s[0] = 0; @@ -2148,7 +2151,12 @@ { pins->nLoopStart = m_dwMenuParam; pModDoc->SetModified(); - pModDoc->AdjustEndOfSample(m_nSample); + if(pins->uFlags & CHN_LOOP) + { + /* only update sample buffer if the loop is actually enabled + (resets sound without any reason otherwise) - bug report 1874 */ + pModDoc->AdjustEndOfSample(m_nSample); + } // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEINFO | HINT_SAMPLEDATA, NULL); } @@ -2168,7 +2176,12 @@ { pins->nLoopEnd = m_dwMenuParam; pModDoc->SetModified(); - pModDoc->AdjustEndOfSample(m_nSample); + if(pins->uFlags & CHN_LOOP) + { + /* only update sample buffer if the loop is actually enabled + (resets sound without any reason otherwise) - bug report 1874 */ + pModDoc->AdjustEndOfSample(m_nSample); + } // 05/01/05 : ericus replaced "m_nSample << 24" by "m_nSample << 20" : 4000 samples -> 12bits [see Moddoc.h] pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEINFO | HINT_SAMPLEDATA, NULL); } @@ -2337,8 +2350,8 @@ case kcSampleNormalize: PostCtrlMessage(IDC_SAMPLE_NORMALIZE); return wParam; case kcSampleAmplify: PostCtrlMessage(IDC_SAMPLE_AMPLIFY); return wParam; - case kcNoteOff: PlayNote(255); return wParam; - case kcNoteCut: PlayNote(254); return wParam; + case kcNoteOff: PlayNote(NOTE_KEYOFF); return wParam; + case kcNoteCut: PlayNote(NOTE_NOTECUT); return wParam; } if (wParam>=kcSampStartNotes && wParam<=kcSampEndNotes) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |