From: <rel...@us...> - 2009-02-14 16:22:12
|
Revision: 249 http://modplug.svn.sourceforge.net/modplug/?rev=249&view=rev Author: relabsoluness Date: 2009-02-14 16:22:07 +0000 (Sat, 14 Feb 2009) Log Message: ----------- (Patch from Jojo, merged somewhat modified) + Can now optionally normalize all samples instead of just one (click normalize with shift down) Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-01-29 20:46:51 UTC (rev 248) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2009-02-14 16:22:07 UTC (rev 249) @@ -1032,63 +1032,88 @@ void CCtrlSamples::OnNormalize() //------------------------------ { + if(!m_pModDoc || !m_pSndFile) + return; + + //Default case: Normalize current sample + UINT iMinSample = m_nSample, iMaxSample = m_nSample; + + //Shift -> Normalize all samples + if(CMainFrame::GetInputHandler()->ShiftPressed()) + { + int ans = MessageBox(GetStrI18N(TEXT("This will normalize all samples independently. Continue?")), GetStrI18N(TEXT("Normalize")), MB_YESNO | MB_ICONQUESTION); + if(ans == IDNO) return; + iMinSample = 1; + iMaxSample = m_pSndFile->m_nSamples; + } + + BeginWaitCursor(); - if ((m_pModDoc) && (m_pSndFile) && (m_pSndFile->Ins[m_nSample].pSample)) + BOOL bModified = FALSE; + + for(UINT iSmp = iMinSample; iSmp <= iMaxSample; iSmp++) { - BOOL bOk = FALSE; - MODINSTRUMENT *pins = &m_pSndFile->Ins[m_nSample]; - - if (pins->uFlags & CHN_16BIT) + if (m_pSndFile->Ins[iSmp].pSample) { - UINT len = pins->nLength; - signed short *p = (signed short *)pins->pSample; - if (pins->uFlags & CHN_STEREO) len *= 2; - int max = 1; - for (UINT i=0; i<len; i++) + BOOL bOk = FALSE; + MODINSTRUMENT *pins = &m_pSndFile->Ins[iSmp]; + + if (pins->uFlags & CHN_16BIT) { - if (p[i] > max) max = p[i]; - if (-p[i] > max) max = -p[i]; - } - if (max < 32767) + UINT len = pins->nLength; + signed short *p = (signed short *)pins->pSample; + if (pins->uFlags & CHN_STEREO) len *= 2; + int max = 1; + for (UINT i=0; i<len; i++) + { + if (p[i] > max) max = p[i]; + if (-p[i] > max) max = -p[i]; + } + if (max < 32767) + { + max++; + for (UINT j=0; j<len; j++) + { + int l = p[j]; + p[j] = (l << 15) / max; + } + bModified = bOk = TRUE; + } + } else { - max++; - for (UINT j=0; j<len; j++) + UINT len = pins->nLength; + signed char *p = (signed char *)pins->pSample; + if (pins->uFlags & CHN_STEREO) len *= 2; + int max = 1; + for (UINT i=0; i<len; i++) { - int l = p[j]; - p[j] = (l << 15) / max; + if (p[i] > max) max = p[i]; + if (-p[i] > max) max = -p[i]; } - bOk = TRUE; + if (max < 127) + { + max++; + for (UINT j=0; j<len; j++) + { + int l = p[j]; + p[j] = (l << 7) / max; + } + bModified = bOk = TRUE; + } } - } else - { - UINT len = pins->nLength; - signed char *p = (signed char *)pins->pSample; - if (pins->uFlags & CHN_STEREO) len *= 2; - int max = 1; - for (UINT i=0; i<len; i++) + + if (bOk) { - if (p[i] > max) max = p[i]; - if (-p[i] > max) max = -p[i]; + m_pModDoc->AdjustEndOfSample(iSmp); + m_pModDoc->UpdateAllViews(NULL, (iSmp << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, NULL); } - if (max < 127) - { - max++; - for (UINT j=0; j<len; j++) - { - int l = p[j]; - p[j] = (l << 7) / max; - } - bOk = TRUE; - } } - if (bOk) - { - 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, NULL); - m_pModDoc->SetModified(); - } } + + if(bModified) + { + m_pModDoc->SetModified(); + } EndWaitCursor(); SwitchToView(); } Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2009-01-29 20:46:51 UTC (rev 248) +++ trunk/OpenMPT/mptrack/mptrack.rc 2009-02-14 16:22:07 UTC (rev 249) @@ -2421,7 +2421,7 @@ IDC_SAMPLE_NEW "Create a new sample\nNew Sample" IDC_SAMPLE_OPEN "Load sample from disk\nImport sample" IDC_SAMPLE_SAVEAS "Save the current sample to disk\nSave sample" - IDC_SAMPLE_NORMALIZE "Normalize the current sample (full scale)\nNormalize" + IDC_SAMPLE_NORMALIZE "Normalize the current sample (full scale)\nNormalize (hold shift to normalize all samples)" IDC_SAMPLE_AMPLIFY "Amplify selection\nAmplify" IDC_SAMPLE_UPSAMPLE "Stretch selection\nUpsample" IDC_SAMPLE_REVERSE "Reverse selection\nReverse" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |