From: <rel...@us...> - 2008-11-03 21:56:04
|
Revision: 235 http://modplug.svn.sourceforge.net/modplug/?rev=235&view=rev Author: relabsoluness Date: 2008-11-03 21:30:18 +0000 (Mon, 03 Nov 2008) Log Message: ----------- (Patch from Jojo, merged with some addition and modifications) + Sample tab: Signed/unsigned sample conversion. + Sample tab: Added button for phase invert to toolbar. Modified Paths: -------------- trunk/OpenMPT/mptrack/CommandSet.cpp trunk/OpenMPT/mptrack/CommandSet.h trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Ctrl_smp.h trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/res/patterns.bmp trunk/OpenMPT/mptrack/resource.h Modified: trunk/OpenMPT/mptrack/CommandSet.cpp =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.cpp 2008-10-25 19:06:55 UTC (rev 234) +++ trunk/OpenMPT/mptrack/CommandSet.cpp 2008-11-03 21:30:18 UTC (rev 235) @@ -2289,6 +2289,16 @@ commands[kcVSTGUINextPresetJump].isDummy = false; commands[kcVSTGUINextPresetJump].Message = "Plugin preset forward jump"; + commands[kcSampleInvert].UID = 1784; + commands[kcSampleInvert].Message = "Invert sample phase"; + commands[kcSampleInvert].isHidden = false; + commands[kcSampleInvert].isDummy = false; + + commands[kcSampleSignUnsign].UID = 1785; + commands[kcSampleSignUnsign].Message = "Signed/Unsigned conversion"; + commands[kcSampleSignUnsign].isHidden = false; + commands[kcSampleSignUnsign].isDummy = false; + #ifdef _DEBUG for (int i=0; i<kcNumCommands; i++) { if (commands[i].UID != 0) { // ignore unset UIDs Modified: trunk/OpenMPT/mptrack/CommandSet.h =================================================================== --- trunk/OpenMPT/mptrack/CommandSet.h 2008-10-25 19:06:55 UTC (rev 234) +++ trunk/OpenMPT/mptrack/CommandSet.h 2008-11-03 21:30:18 UTC (rev 235) @@ -566,7 +566,9 @@ kcSampleDelete, kcSampleZoomUp, kcSampleZoomDown, - kcEndSampleEditing=kcSampleZoomDown, + kcSampleInvert, + kcSampleSignUnsign, + kcEndSampleEditing=kcSampleSignUnsign, //kcSampStartNotes to kcInsNoteMapEndNoteStops must be contiguous. kcSampStartNotes, Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2008-10-25 19:06:55 UTC (rev 234) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2008-11-03 21:30:18 UTC (rev 235) @@ -65,6 +65,8 @@ ON_COMMAND(IDC_SAMPLE_DOWNSAMPLE, OnDownsample) ON_COMMAND(IDC_SAMPLE_REVERSE, OnReverse) ON_COMMAND(IDC_SAMPLE_SILENCE, OnSilence) + ON_COMMAND(IDC_SAMPLE_INVERT, OnInvert) + ON_COMMAND(IDC_SAMPLE_SIGN_UNSIGN, OnSignUnSign) ON_COMMAND(IDC_CHECK1, OnSetPanningChanged) ON_COMMAND(ID_PREVINSTRUMENT, OnPrevInstrument) ON_COMMAND(ID_NEXTINSTRUMENT, OnNextInstrument) @@ -209,6 +211,8 @@ m_ToolBar2.AddButton(IDC_SAMPLE_DOWNSAMPLE, 29); m_ToolBar2.AddButton(IDC_SAMPLE_REVERSE, 11); m_ToolBar2.AddButton(IDC_SAMPLE_SILENCE, 22); + m_ToolBar2.AddButton(IDC_SAMPLE_INVERT, 35); + m_ToolBar2.AddButton(IDC_SAMPLE_SIGN_UNSIGN, 36); // Setup Controls m_EditName.SetLimitText(32); m_EditFileName.SetLimitText(22); @@ -457,6 +461,14 @@ OnSilence(); break; + case IDC_SAMPLE_INVERT: + OnInvert(); + break; + + case IDC_SAMPLE_SIGN_UNSIGN: + OnSignUnSign(); + break; + case IDC_SAMPLE_NORMALIZE: OnNormalize(); break; @@ -1075,20 +1087,17 @@ } -void CCtrlSamples::OnAmplify() -//---------------------------- +void CCtrlSamples::ApplyAmplify(LONG lAmp, bool bFadeIn, bool bFadeOut) +//----------------------------------------------------------------------- { - static int16 snOldAmp = 100; SAMPLEVIEWSTATE viewstate; DWORD dwStart, dwEnd; MODINSTRUMENT *pins; - CAmpDlg dlg(this, snOldAmp); memset(&viewstate, 0, sizeof(viewstate)); SendViewMessage(VIEWMSG_SAVESTATE, (LPARAM)&viewstate); if ((!m_pModDoc) || (!m_pSndFile) || (!m_pSndFile->Ins[m_nSample].pSample)) return; - if (dlg.DoModal() != IDOK) return; - snOldAmp = dlg.m_nFactor; + BeginWaitCursor(); pins = &m_pSndFile->Ins[m_nSample]; dwStart = viewstate.dwBeginSel; @@ -1102,8 +1111,7 @@ } if (pins->uFlags & CHN_STEREO) { dwStart *= 2; dwEnd *= 2; } UINT len = dwEnd - dwStart; - LONG lAmp = dlg.m_nFactor; - if ((dlg.m_bFadeIn) && (dlg.m_bFadeOut)) lAmp *= 4; + if ((bFadeIn) && (bFadeOut)) lAmp *= 4; if (pins->uFlags & CHN_16BIT) { signed short *p = ((signed short *)pins->pSample) + dwStart; @@ -1111,8 +1119,8 @@ for (UINT i=0; i<len; i++) { LONG l = (p[i] * lAmp) / 100; - if (dlg.m_bFadeIn) l = (LONG)((l * (LONGLONG)i) / len); - if (dlg.m_bFadeOut) l = (LONG)((l * (LONGLONG)(len-i)) / len); + if (bFadeIn) l = (LONG)((l * (LONGLONG)i) / len); + if (bFadeOut) l = (LONG)((l * (LONGLONG)(len-i)) / len); if (l < -32768) l = -32768; if (l > 32767) l = 32767; p[i] = (signed short)l; @@ -1124,8 +1132,8 @@ for (UINT i=0; i<len; i++) { LONG l = (p[i] * lAmp) / 100; - if (dlg.m_bFadeIn) l = (LONG)((l * (LONGLONG)i) / len); - if (dlg.m_bFadeOut) l = (LONG)((l * (LONGLONG)(len-i)) / len); + if (bFadeIn) l = (LONG)((l * (LONGLONG)i) / len); + if (bFadeOut) l = (LONG)((l * (LONGLONG)(len-i)) / len); if (l < -128) l = -128; if (l > 127) l = 127; p[i] = (signed char)l; @@ -1140,6 +1148,17 @@ } +void CCtrlSamples::OnAmplify() +//---------------------------- +{ + static int16 snOldAmp = 100; + CAmpDlg dlg(this, snOldAmp); + if (dlg.DoModal() != IDOK) return; + snOldAmp = dlg.m_nFactor; + ApplyAmplify(dlg.m_nFactor, dlg.m_bFadeIn, dlg.m_bFadeOut); +} + + const int gSinc2x16Odd[16] = { // Kaiser window, beta=7.400 -19, 97, -295, 710, -1494, 2958, -6155, 20582, 20582, -6155, 2958, -1494, 710, -295, 97, -19, @@ -2138,6 +2157,54 @@ } +void CCtrlSamples::OnInvert() +//-------------------------------- +{ + ApplyAmplify(-100); +} + + +void CCtrlSamples::OnSignUnSign() +//------------------------------- +{ + // purpose: sign/unsign a sample ("distortion") + SAMPLEVIEWSTATE viewstate; + DWORD dwStart, dwEnd; + MODINSTRUMENT *pins; + + memset(&viewstate, 0, sizeof(viewstate)); + SendViewMessage(VIEWMSG_SAVESTATE, (LPARAM)&viewstate); + if ((!m_pModDoc) || (!m_pSndFile) || (!m_pSndFile->Ins[m_nSample].pSample)) return; + BeginWaitCursor(); + pins = &m_pSndFile->Ins[m_nSample]; + dwStart = viewstate.dwBeginSel; + dwEnd = viewstate.dwEndSel; + if (dwEnd > pins->nLength) dwEnd = pins->nLength; + if (dwStart > dwEnd) dwStart = dwEnd; + if (dwStart >= dwEnd) + { + dwStart = 0; + dwEnd = pins->nLength; + } + if (pins->uFlags & CHN_STEREO) { dwStart *= 2; dwEnd *= 2; } + UINT len = dwEnd - dwStart; + if (pins->uFlags & CHN_16BIT) + { + signed short *p = ((signed short *)pins->pSample) + dwStart; + for (UINT i=0; i<len; ++i) p[i] += 0x8000; //unsign + } else { + signed char *p = ((signed char *)pins->pSample) + dwStart; + for (UINT i=0; i<len; ++i) p[i] += 0x80; //unsign + } + + m_pModDoc->AdjustEndOfSample(m_nSample); + m_pModDoc->UpdateAllViews(NULL, (m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEDATA, NULL); + m_pModDoc->SetModified(); + EndWaitCursor(); + SwitchToView(); +} + + void CCtrlSamples::OnSilence() //---------------------------- { Modified: trunk/OpenMPT/mptrack/Ctrl_smp.h =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.h 2008-10-25 19:06:55 UTC (rev 234) +++ trunk/OpenMPT/mptrack/Ctrl_smp.h 2008-11-03 21:30:18 UTC (rev 235) @@ -34,6 +34,10 @@ void UpdateTimeStretchParameterString(); void ReadTimeStretchParameters(); + // Applies amplification to sample. Negative values + // can be used to invert phase. + void ApplyAmplify(LONG nAmp, bool bFadeIn = false, bool bFadeOut = false); + public: CCtrlSamples(); ~CCtrlSamples(); @@ -72,6 +76,8 @@ afx_msg void OnDownsample(); afx_msg void OnReverse(); afx_msg void OnSilence(); + afx_msg void OnInvert(); + afx_msg void OnSignUnSign(); afx_msg void OnNameChanged(); afx_msg void OnFileNameChanged(); afx_msg void OnVolumeChanged(); Modified: trunk/OpenMPT/mptrack/View_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_smp.cpp 2008-10-25 19:06:55 UTC (rev 234) +++ trunk/OpenMPT/mptrack/View_smp.cpp 2008-11-03 21:30:18 UTC (rev 235) @@ -2380,10 +2380,12 @@ case kcSampleSave: PostCtrlMessage(IDC_SAMPLE_SAVEAS); return wParam; case kcSampleNew: PostCtrlMessage(IDC_SAMPLE_NEW); return wParam; - case kcSampleReverse: PostCtrlMessage(IDC_SAMPLE_REVERSE); return wParam; - case kcSampleSilence: PostCtrlMessage(IDC_SAMPLE_SILENCE); return wParam; - case kcSampleNormalize: PostCtrlMessage(IDC_SAMPLE_NORMALIZE); return wParam; - case kcSampleAmplify: PostCtrlMessage(IDC_SAMPLE_AMPLIFY); return wParam; + case kcSampleReverse: PostCtrlMessage(IDC_SAMPLE_REVERSE); return wParam; + case kcSampleSilence: PostCtrlMessage(IDC_SAMPLE_SILENCE); return wParam; + case kcSampleNormalize: PostCtrlMessage(IDC_SAMPLE_NORMALIZE); return wParam; + case kcSampleAmplify: PostCtrlMessage(IDC_SAMPLE_AMPLIFY); return wParam; + case kcSampleInvert: PostCtrlMessage(IDC_SAMPLE_INVERT); return wParam; + case kcSampleSignUnsign: PostCtrlMessage(IDC_SAMPLE_SIGN_UNSIGN); return wParam; case kcNoteOff: PlayNote(NOTE_KEYOFF); return wParam; case kcNoteCut: PlayNote(NOTE_NOTECUT); return wParam; Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2008-10-25 19:06:55 UTC (rev 234) +++ trunk/OpenMPT/mptrack/mptrack.rc 2008-11-03 21:30:18 UTC (rev 235) @@ -751,7 +751,7 @@ CTEXT "Length: 000000 (16-bit)",IDC_TEXT5,175,6,90,13, SS_CENTERIMAGE,WS_EX_STATICEDGE CONTROL "Toolbar2",IDC_TOOLBAR2,"ToolbarWindow32",WS_GROUP | - 0x4d,268,4,136,17 + 0x4d,268,4,164,17 GROUPBOX "",IDC_STATIC,3,22,94,78 LTEXT "Default Volume",IDC_STATIC,8,32,49,8 LTEXT "Global Volume",IDC_STATIC,8,45,46,8 @@ -2433,6 +2433,8 @@ STRINGTABLE BEGIN IDC_SAMPLE_SILENCE "Silence Sample\nSilence" + IDC_SAMPLE_INVERT "Invert phase\nInvert phase" + IDC_SAMPLE_SIGN_UNSIGN "Signed/Unsigned conversion\nSigned/Unsigned conversion" IDC_INSTRUMENT_NEW "Create a new instrument\nNew instrument (hold shift to duplicate)" IDC_INSTRUMENT_OPEN "Import instrument\nImport instrument" IDC_INSTRUMENT_SAVEAS "Save the current instrument to disk\nSave instrument" Modified: trunk/OpenMPT/mptrack/res/patterns.bmp =================================================================== (Binary files differ) Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2008-10-25 19:06:55 UTC (rev 234) +++ trunk/OpenMPT/mptrack/resource.h 2008-11-03 21:30:18 UTC (rev 235) @@ -587,6 +587,8 @@ #define IDC_CHECK_EQ 2052 #define IDC_CHECK_AGC 2053 #define IDC_SAMPLE_SILENCE 2054 +#define IDC_SAMPLE_INVERT 2055 +#define IDC_SAMPLE_SIGN_UNSIGN 2056 #define IDC_INSTRUMENT_NEW 2060 #define IDC_INSTRUMENT_OPEN 2061 #define IDC_INSTRUMENT_SAVEAS 2062 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |