|
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.
|