From: <sag...@us...> - 2015-04-12 16:09:50
|
Revision: 4927 http://sourceforge.net/p/modplug/code/4927 Author: saga-games Date: 2015-04-12 16:09:36 +0000 (Sun, 12 Apr 2015) Log Message: ----------- [New] Sample and pattern volume fading can now use other fade curves than just linear: Exponential, Logarithmic, Square Root, Quarter Sine, Half Sine Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Ctrl_smp.h trunk/OpenMPT/mptrack/SampleEditorDialogs.cpp trunk/OpenMPT/mptrack/SampleEditorDialogs.h trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/mptrack_08.vcproj trunk/OpenMPT/mptrack/mptrack_10.vcxproj trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters Added Paths: ----------- trunk/OpenMPT/mptrack/FadeLaws.h Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2015-04-11 23:36:29 UTC (rev 4926) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2015-04-12 16:09:36 UTC (rev 4927) @@ -1323,53 +1323,6 @@ } -template<typename T> -void ApplyAmplifyImpl(T *pSample, SmpLength start, SmpLength end, int32 amp, bool fadeIn, bool fadeOut) -//----------------------------------------------------------------------------------------------------- -{ - pSample += start; - SmpLength len = end - start; - int64 l64 = static_cast<int64>(len); - - for(SmpLength i = 0; i < len; i++) - { - int32 l = (pSample[i] * amp) / 100; - if(fadeIn) l = (int32)((l * (int64)i) / l64); - if(fadeOut) l = (int32)((l * (int64)(len - i)) / l64); - Limit(l, std::numeric_limits<T>::min(), std::numeric_limits<T>::max()); - pSample[i] = static_cast<T>(l); - } -} - - -void CCtrlSamples::ApplyAmplify(int32 lAmp, bool fadeIn, bool fadeOut) -//-------------------------------------------------------------------- -{ - if((!m_sndFile.GetSample(m_nSample).pSample)) return; - - BeginWaitCursor(); - ModSample &sample = m_sndFile.GetSample(m_nSample); - - SampleSelectionPoints selection = GetSelectionPoints(); - - m_modDoc.GetSampleUndo().PrepareUndo(m_nSample, sundo_update, "Amplify", selection.nStart, selection.nEnd); - - if (sample.uFlags[CHN_STEREO]) { selection.nStart *= 2; selection.nEnd *= 2; } - if ((fadeIn) && (fadeOut)) lAmp *= 4; - if (sample.uFlags[CHN_16BIT]) - { - ApplyAmplifyImpl<int16>(sample.pSample16, selection.nStart, selection.nEnd, lAmp, fadeIn, fadeOut); - } else - { - ApplyAmplifyImpl<int8>(sample.pSample8, selection.nStart, selection.nEnd, lAmp, fadeIn, fadeOut); - } - sample.PrecomputeLoops(m_sndFile, false); - SetModified(SampleHint().Data(), false, true); - EndWaitCursor(); - SwitchToView(); -} - - void CCtrlSamples::OnRemoveDCOffset() //----------------------------------- { @@ -1450,14 +1403,74 @@ } +template<typename T> +static void ApplyAmplifyImpl(T * MPT_RESTRICT pSample, SmpLength start, SmpLength end, int32 amp, bool fadeIn, bool fadeOut, Fade::Law fadeLaw) +//--------------------------------------------------------------------------------------------------------------------------------------------- +{ + pSample += start; + SmpLength len = end - start, len2 = len / 2; + Fade::Func fadeFunc = Fade::GetFadeFunc(fadeLaw); + + for(SmpLength i = 0; i < len; i++) + { + int32 l = (pSample[i] * amp) / 100; + if(fadeIn && fadeOut) + { + if(i < len2) + l = fadeFunc(l, i, len2); + else + l = fadeFunc(l, len - i, len - len2); + } else if(fadeIn) + { + l = fadeFunc(l, i, len); + } else if(fadeOut) + { + l = fadeFunc(l, len - i, len); + } + Limit(l, std::numeric_limits<T>::min(), std::numeric_limits<T>::max()); + pSample[i] = static_cast<T>(l); + } +} + + +void CCtrlSamples::ApplyAmplify(int32 lAmp, bool fadeIn, bool fadeOut, Fade::Law fadeLaw) +//--------------------------------------------------------------------------------------- +{ + if((!m_sndFile.GetSample(m_nSample).pSample)) return; + + BeginWaitCursor(); + ModSample &sample = m_sndFile.GetSample(m_nSample); + + SampleSelectionPoints selection = GetSelectionPoints(); + + m_modDoc.GetSampleUndo().PrepareUndo(m_nSample, sundo_update, "Amplify", selection.nStart, selection.nEnd); + + selection.nStart *= sample.GetNumChannels(); + selection.nEnd *= sample.GetNumChannels(); + if (sample.uFlags[CHN_16BIT]) + { + ApplyAmplifyImpl(sample.pSample16, selection.nStart, selection.nEnd, lAmp, fadeIn, fadeOut, fadeLaw); + } else + { + ApplyAmplifyImpl(sample.pSample8, selection.nStart, selection.nEnd, lAmp, fadeIn, fadeOut, fadeLaw); + } + sample.PrecomputeLoops(m_sndFile, false); + SetModified(SampleHint().Data(), false, true); + EndWaitCursor(); + SwitchToView(); +} + + void CCtrlSamples::OnAmplify() //---------------------------- { - static int16 snOldAmp = 100; - CAmpDlg dlg(this, snOldAmp); + static int16 oldAmp = 100; + static Fade::Law fadeLaw = Fade::kLinear; + CAmpDlg dlg(this, oldAmp, fadeLaw); if (dlg.DoModal() != IDOK) return; - snOldAmp = dlg.m_nFactor; - ApplyAmplify(dlg.m_nFactor, dlg.m_bFadeIn, dlg.m_bFadeOut); + oldAmp = dlg.m_nFactor; + fadeLaw = dlg.m_fadeLaw; + ApplyAmplify(dlg.m_nFactor, dlg.m_bFadeIn, dlg.m_bFadeOut, dlg.m_fadeLaw); } @@ -1472,7 +1485,7 @@ SampleSelectionPoints sel = GetSelectionPoints(); if(sel.selectionActive && (sel.nStart == 0 || sel.nEnd == m_sndFile.GetSample(m_nSample).nLength)) { - ApplyAmplify(100, (sel.nStart == 0), (sel.nEnd == m_sndFile.GetSample(m_nSample).nLength)); + ApplyAmplify(100, (sel.nStart == 0), (sel.nEnd == m_sndFile.GetSample(m_nSample).nLength), Fade::kLinear); } else { // Can't apply quick fade as no appropriate selection has been made, so ask the user to amplify the whole sample instead. Modified: trunk/OpenMPT/mptrack/Ctrl_smp.h =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.h 2015-04-11 23:36:29 UTC (rev 4926) +++ trunk/OpenMPT/mptrack/Ctrl_smp.h 2015-04-12 16:09:36 UTC (rev 4927) @@ -12,6 +12,7 @@ #pragma once #include "../soundlib/SampleIO.h" +#include "FadeLaws.h" OPENMPT_NAMESPACE_BEGIN @@ -55,7 +56,7 @@ // Applies amplification to sample. Negative values // can be used to invert phase. - void ApplyAmplify(int32 nAmp, bool fadeIn = false, bool fadeOut = false); + void ApplyAmplify(int32 nAmp, bool fadeIn, bool fadeOut, Fade::Law fadeLaw); void ApplyResample(uint32_t newRate); SampleSelectionPoints GetSelectionPoints(); Added: trunk/OpenMPT/mptrack/FadeLaws.h =================================================================== --- trunk/OpenMPT/mptrack/FadeLaws.h (rev 0) +++ trunk/OpenMPT/mptrack/FadeLaws.h 2015-04-12 16:09:36 UTC (rev 4927) @@ -0,0 +1,66 @@ +/* + * FadeLaws.h + * ---------- + * Purpose: Various fade law implementations for sample and pattern fading / interpolation + * Notes : (currently none) + * Authors: OpenMPT Devs + * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. + */ + +#pragma once + +#define _USE_MATH_DEFINES +#include <cmath> +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif +#ifndef M_PI_2 +#define M_PI_2 1.57079632679489661923 +#endif +#include "../common/misc_util.h" + +OPENMPT_NAMESPACE_BEGIN + +namespace Fade +{ + enum Law + { + kLinear, + kPow, + kSqrt, + kLog, + kQuarterSine, + kHalfSine, + }; + + typedef int32 (*Func) (int32 val, int64 i, int64 max); + + static int32 LinearFunc(int32 val, int64 i, int64 max) + { return static_cast<int32>((val * i) / max); } + static int32 PowFunc(int32 val, int64 i, int64 max) + { return static_cast<int32>((val * i * i) / (max * max)); } + static int32 SqrtFunc(int32 val, int64 i, int64 max) + { return Util::Round<int32>(val * std::sqrt(static_cast<double>(i) / max)); } + static int32 LogFunc(int32 val, int64 i, int64 max) + { return Util::Round<int32>(val * std::log10(1.0 + (static_cast<double>(i) / max) * 99.0) * 0.5); } + static int32 QuarterSineFunc(int32 val, int64 i, int64 max) + { return Util::Round<int32>(val * std::sin(M_PI_2 * static_cast<double>(i) / max)); } + static int32 HalfSineFunc(int32 val, int64 i, int64 max) + { return Util::Round<int32>(val * (1.0 + std::cos(M_PI + M_PI * static_cast<double>(i) / max)) * 0.5); } + + static Func GetFadeFunc(Law fadeLaw) + { + switch(fadeLaw) + { + default: + case Fade::kLinear: return LinearFunc; + case Fade::kPow: return PowFunc; + case Fade::kSqrt: return SqrtFunc; + case Fade::kLog: return LogFunc; + case Fade::kQuarterSine: return QuarterSineFunc; + case Fade::kHalfSine: return HalfSineFunc; + } + } +} + +OPENMPT_NAMESPACE_END Property changes on: trunk/OpenMPT/mptrack/FadeLaws.h ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/x-chdr \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Modified: trunk/OpenMPT/mptrack/SampleEditorDialogs.cpp =================================================================== --- trunk/OpenMPT/mptrack/SampleEditorDialogs.cpp 2015-04-11 23:36:29 UTC (rev 4926) +++ trunk/OpenMPT/mptrack/SampleEditorDialogs.cpp 2015-04-12 16:09:36 UTC (rev 4927) @@ -24,11 +24,15 @@ ////////////////////////////////////////////////////////////////////////// // Sample amplification dialog -CAmpDlg::CAmpDlg(CWnd *parent, int16 nFactor, int16 nFactorMin, int16 nFactorMax) -//------------------------------------------------------------------------------- -: CDialog(IDD_SAMPLE_AMPLIFY, parent), m_nFactor(nFactor), -m_nFactorMin(nFactorMin), m_nFactorMax(nFactorMax), -m_bFadeIn(FALSE), m_bFadeOut(FALSE) +CAmpDlg::CAmpDlg(CWnd *parent, int16 factor, Fade::Law fadeLaw, int16 factorMin, int16 factorMax) +//----------------------------------------------------------------------------------------------- + : CDialog(IDD_SAMPLE_AMPLIFY, parent) + , m_nFactor(factor) + , m_nFactorMin(factorMin) + , m_nFactorMax(factorMax) + , m_bFadeIn(FALSE) + , m_bFadeOut(FALSE) + , m_fadeLaw(fadeLaw) {} BOOL CAmpDlg::OnInitDialog() @@ -42,6 +46,28 @@ spin->SetPos32(m_nFactor); } SetDlgItemInt(IDC_EDIT1, m_nFactor); + + CComboBox *combo = (CComboBox *)GetDlgItem(IDC_COMBO1); + const struct + { + const TCHAR *name; + Fade::Law id; + } fadeLaws[] = + { + { _T("Linear"), Fade::kLinear }, + { _T("Exponential"), Fade::kPow }, + { _T("Square Root"), Fade::kSqrt }, + { _T("Logarithmic"), Fade::kLog }, + { _T("Quarter Sine"), Fade::kQuarterSine }, + { _T("Half Sine"), Fade::kHalfSine }, + }; + for(size_t i = 0; i < CountOf(fadeLaws); i++) + { + int id = combo->AddString(fadeLaws[i].name); + combo->SetItemData(id, fadeLaws[i].id); + if(fadeLaws[i].id == m_fadeLaw) combo->SetCurSel(id); + } + return TRUE; } @@ -52,13 +78,15 @@ const int nVal = static_cast<int>(GetDlgItemInt(IDC_EDIT1)); if(nVal < m_nFactorMin || nVal > m_nFactorMax) { - CString str; str.Format(GetStrI18N(__TEXT("Value should be within [%d, %d]")), m_nFactorMin, m_nFactorMax); + CString str; str.Format(GetStrI18N(_T("Value should be within [%d, %d]")), m_nFactorMin, m_nFactorMax); Reporting::Information(str); return; } m_nFactor = static_cast<int16>(nVal); - m_bFadeIn = (IsDlgButtonChecked(IDC_CHECK1) != 0); - m_bFadeOut = (IsDlgButtonChecked(IDC_CHECK2) != 0); + m_bFadeIn = (IsDlgButtonChecked(IDC_CHECK1) != BST_UNCHECKED); + m_bFadeOut = (IsDlgButtonChecked(IDC_CHECK2) != BST_UNCHECKED); + CComboBox *combo = (CComboBox *)GetDlgItem(IDC_COMBO1); + m_fadeLaw = static_cast<Fade::Law>(combo->GetItemData(combo->GetCurSel())); CDialog::OnOK(); } Modified: trunk/OpenMPT/mptrack/SampleEditorDialogs.h =================================================================== --- trunk/OpenMPT/mptrack/SampleEditorDialogs.h 2015-04-11 23:36:29 UTC (rev 4926) +++ trunk/OpenMPT/mptrack/SampleEditorDialogs.h 2015-04-12 16:09:36 UTC (rev 4927) @@ -12,6 +12,7 @@ #pragma once #include "../soundlib/SampleIO.h" +#include "FadeLaws.h" OPENMPT_NAMESPACE_BEGIN @@ -23,11 +24,12 @@ //=========================== { public: + Fade::Law m_fadeLaw; int16 m_nFactor, m_nFactorMin, m_nFactorMax; bool m_bFadeIn, m_bFadeOut; public: - CAmpDlg(CWnd *parent, int16 nFactor=100, int16 nFactorMin = int16_min, int16 nFactorMax = int16_max); + CAmpDlg(CWnd *parent, int16 factor, Fade::Law fadeLaw, int16 factorMin = int16_min, int16 factorMax = int16_max); virtual BOOL OnInitDialog(); virtual void OnOK(); }; Modified: trunk/OpenMPT/mptrack/View_pat.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp 2015-04-11 23:36:29 UTC (rev 4926) +++ trunk/OpenMPT/mptrack/View_pat.cpp 2015-04-12 16:09:36 UTC (rev 4927) @@ -3137,14 +3137,12 @@ //---------------------------------- { CModDoc *pModDoc; - CSoundFile *pSndFile; - if((pModDoc = GetDocument()) == nullptr || !IsEditingEnabled_bmsg()) { return; } - pSndFile = pModDoc->GetSoundFile(); - if(pSndFile == nullptr || !pSndFile->Patterns.IsValidPat(m_nPattern)) + CSoundFile &sndFile = pModDoc->GetrSoundFile(); + if(!sndFile.Patterns.IsValidPat(m_nPattern)) { return; } @@ -3158,7 +3156,7 @@ } // Allocate replacement pattern - ModCommand *pNewPattern = CPattern::AllocatePattern(pSndFile->Patterns[m_nPattern].GetNumRows(), pSndFile->GetNumChannels()); + ModCommand *pNewPattern = CPattern::AllocatePattern(sndFile.Patterns[m_nPattern].GetNumRows(), sndFile.GetNumChannels()); if(pNewPattern == nullptr) { return; @@ -3166,7 +3164,7 @@ // Compute destination rect PatternCursor begin(m_Selection.GetUpperLeft()), end(m_Selection.GetLowerRight()); begin.Move(dy, dx, 0); - if(begin.GetChannel() >= pSndFile->GetNumChannels()) + if(begin.GetChannel() >= sndFile.GetNumChannels()) { // Moved outside pattern range. return; @@ -3177,19 +3175,19 @@ // Extend to parameter column end.Move(0, 0, 1); } - begin.Sanitize(pSndFile->Patterns[m_nPattern].GetNumRows(), pSndFile->GetNumChannels()); - end.Sanitize(pSndFile->Patterns[m_nPattern].GetNumRows(), pSndFile->GetNumChannels()); + begin.Sanitize(sndFile.Patterns[m_nPattern].GetNumRows(), sndFile.GetNumChannels()); + end.Sanitize(sndFile.Patterns[m_nPattern].GetNumRows(), sndFile.GetNumChannels()); PatternRect destination(begin, end); const bool moveSelection = !m_Status[psKeyboardDragSelect | psCtrlDragSelect]; BeginWaitCursor(); - pModDoc->GetPatternUndo().PrepareUndo(m_nPattern, 0, 0, pSndFile->GetNumChannels(), pSndFile->Patterns[m_nPattern].GetNumRows(), moveSelection ? "Move Selection" : "Copy Selection"); + pModDoc->GetPatternUndo().PrepareUndo(m_nPattern, 0, 0, sndFile.GetNumChannels(), sndFile.Patterns[m_nPattern].GetNumRows(), moveSelection ? "Move Selection" : "Copy Selection"); ModCommand *p = pNewPattern; - for(ROWINDEX row = 0; row < pSndFile->Patterns[m_nPattern].GetNumRows(); row++) + for(ROWINDEX row = 0; row < sndFile.Patterns[m_nPattern].GetNumRows(); row++) { - for(CHANNELINDEX chn = 0; chn < pSndFile->GetNumChannels(); chn++, p++) + for(CHANNELINDEX chn = 0; chn < sndFile.GetNumChannels(); chn++, p++) { for (int c = PatternCursor::firstColumn; c <= PatternCursor::lastColumn; c++) { @@ -3210,10 +3208,10 @@ } } - if(xsrc >= 0 && xsrc < (int)pSndFile->GetNumChannels() && ysrc >= 0 && ysrc < (int)pSndFile->Patterns[m_nPattern].GetNumRows()) + if(xsrc >= 0 && xsrc < (int)sndFile.GetNumChannels() && ysrc >= 0 && ysrc < (int)sndFile.Patterns[m_nPattern].GetNumRows()) { // Copy the data - const ModCommand &src = *pSndFile->Patterns[m_nPattern].GetpModCommand(ysrc, xsrc); + const ModCommand &src = *sndFile.Patterns[m_nPattern].GetpModCommand(ysrc, xsrc); switch(c) { case PatternCursor::noteColumn: @@ -3237,8 +3235,8 @@ } CriticalSection cs; - CPattern::FreePattern(pSndFile->Patterns[m_nPattern]); - pSndFile->Patterns[m_nPattern] = pNewPattern; + CPattern::FreePattern(sndFile.Patterns[m_nPattern]); + sndFile.Patterns[m_nPattern] = pNewPattern; cs.Leave(); // Fix: Horizontal scrollbar pos screwed when selecting with mouse @@ -3458,11 +3456,36 @@ } +// Apply amplification and fade function to volume +static void AmplifyFade(int &vol, int amp, ROWINDEX row, ROWINDEX numRows, bool fadeIn, bool fadeOut, Fade::Func &fadeFunc) +//------------------------------------------------------------------------------------------------------------------------- +{ + vol *= amp; + if(fadeIn && fadeOut) + { + ROWINDEX numRows2 = numRows / 2; + if(row < numRows2) + vol = fadeFunc(vol, row + 1, numRows2); + else + vol = fadeFunc(vol, numRows - row, numRows - numRows2); + } else if(fadeIn) + { + vol = fadeFunc(vol, row + 1, numRows); + } else if(fadeOut) + { + vol = fadeFunc(vol, numRows - row, numRows); + } + vol = (vol + 50) / 100; + LimitMax(vol, 64); +} + + void CViewPattern::OnPatternAmplify() //----------------------------------- { - static int16 snOldAmp = 100; - CAmpDlg dlg(this, snOldAmp, 0); + static int16 oldAmp = 100; + static Fade::Law fadeLaw = Fade::kLinear; + CAmpDlg dlg(this, oldAmp, fadeLaw, 0); if(dlg.DoModal() != IDOK) { return; @@ -3474,7 +3497,9 @@ BeginWaitCursor(); PrepareUndo(m_Selection, "Amplify"); - snOldAmp = dlg.m_nFactor; + oldAmp = dlg.m_nFactor; + fadeLaw = dlg.m_fadeLaw; + Fade::Func fadeFunc = GetFadeFunc(fadeLaw); if(pSndFile->Patterns.IsValidPat(m_nPattern)) { @@ -3553,10 +3578,11 @@ } if(nSmp > 0 && nSmp <= pSndFile->GetNumSamples()) { - chvol[nChn] = (BYTE)(pSndFile->GetSample(nSmp).nVolume / 4); + chvol[nChn] = (uint8)(pSndFile->GetSample(nSmp).nVolume / 4); break; } else - { //nonexistant sample and no volume present in patten? assume volume=64. + { + //nonexistant sample and no volume present in patten? assume volume=64. if(useVolCol) { m->volcmd = VOLCMD_VOLUME; @@ -3631,24 +3657,18 @@ if(m->volcmd == VOLCMD_VOLUME) { - int vol = m->vol * dlg.m_nFactor; - if(dlg.m_bFadeIn) vol = (vol * (nRow+1-firstRow)) / cy; - if(dlg.m_bFadeOut) vol = (vol * (cy+firstRow-nRow)) / cy; - vol = (vol + 50) / 100; - LimitMax(vol, 64); - m->vol = (BYTE)vol; + int vol = m->vol; + AmplifyFade(vol, dlg.m_nFactor, nRow - firstRow, cy, dlg.m_bFadeIn, dlg.m_bFadeOut, fadeFunc); + m->vol = static_cast<ModCommand::VOL>(vol); } if(m_Selection.ContainsHorizontal(PatternCursor(0, nChn, PatternCursor::effectColumn)) || m_Selection.ContainsHorizontal(PatternCursor(0, nChn, PatternCursor::paramColumn))) { if(m->command == CMD_VOLUME && m->param <= 64) { - int vol = m->param * dlg.m_nFactor; - if(dlg.m_bFadeIn) vol = (vol * (nRow + 1 - firstRow)) / cy; - if(dlg.m_bFadeOut) vol = (vol * (cy + firstRow - nRow)) / cy; - vol = (vol + 50) / 100; - LimitMax(vol, 64); - m->param = (BYTE)vol; + int vol = m->param; + AmplifyFade(vol, dlg.m_nFactor, nRow - firstRow, cy, dlg.m_bFadeIn, dlg.m_bFadeOut, fadeFunc); + m->param = static_cast<ModCommand::PARAM>(vol); } } } Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2015-04-11 23:36:29 UTC (rev 4926) +++ trunk/OpenMPT/mptrack/mptrack.rc 2015-04-12 16:09:36 UTC (rev 4927) @@ -1330,20 +1330,22 @@ CONTROL "",IDC_SLIDER2,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,114,78,150,12 END -IDD_SAMPLE_AMPLIFY DIALOGEX 0, 0, 175, 71 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +IDD_SAMPLE_AMPLIFY DIALOGEX 0, 0, 190, 82 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Amplify" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - LTEXT "Amplify by",IDC_STATIC,13,19,37,8 - EDITTEXT IDC_EDIT1,54,16,40,14,ES_AUTOHSCROLL - CONTROL "Spin1",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,89,17,11,14 - LTEXT "%",IDC_STATIC,97,19,11,8 - DEFPUSHBUTTON "OK",IDOK,120,6,50,14 - PUSHBUTTON "Cancel",IDCANCEL,120,24,50,14 + LTEXT "Amplify by",IDC_STATIC,13,21,37,8 + EDITTEXT IDC_EDIT1,60,18,40,14,ES_AUTOHSCROLL + CONTROL "Spin1",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,95,19,11,14 + LTEXT "%",IDC_STATIC,103,21,11,8 + DEFPUSHBUTTON "OK",IDOK,132,6,50,14 + PUSHBUTTON "Cancel",IDCANCEL,132,24,50,14 CONTROL "Fade In",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,36,88,10 CONTROL "Fade Out",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,48,88,10 - GROUPBOX "",IDC_STATIC,6,6,108,60 + LTEXT "Fade Curve:",IDC_STATIC,12,62,48,8 + COMBOBOX IDC_COMBO1,60,60,60,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "",IDC_STATIC,6,6,120,72 END IDD_OPTIONS_AUTHOR DIALOGEX 0, 0, 214, 151 Modified: trunk/OpenMPT/mptrack/mptrack_08.vcproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack_08.vcproj 2015-04-11 23:36:29 UTC (rev 4926) +++ trunk/OpenMPT/mptrack/mptrack_08.vcproj 2015-04-12 16:09:36 UTC (rev 4927) @@ -1262,6 +1262,10 @@ > </File> <File + RelativePath=".\FadeLaws.h" + > + </File> + <File RelativePath=".\FileDialog.h" > </File> Modified: trunk/OpenMPT/mptrack/mptrack_10.vcxproj =================================================================== --- trunk/OpenMPT/mptrack/mptrack_10.vcxproj 2015-04-11 23:36:29 UTC (rev 4926) +++ trunk/OpenMPT/mptrack/mptrack_10.vcxproj 2015-04-12 16:09:36 UTC (rev 4927) @@ -1050,6 +1050,7 @@ <ClInclude Include="EffectInfo.h" /> <ClInclude Include="ExceptionHandler.h" /> <ClInclude Include="ExternalSamples.h" /> + <ClInclude Include="FadeLaws.h" /> <ClInclude Include="FileDialog.h" /> <ClInclude Include="FolderScanner.h" /> <ClInclude Include="Globals.h" /> Modified: trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters =================================================================== --- trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters 2015-04-11 23:36:29 UTC (rev 4926) +++ trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters 2015-04-12 16:09:36 UTC (rev 4927) @@ -1074,6 +1074,9 @@ <ClInclude Include="..\sounddev\SoundDeviceUtilities.h"> <Filter>Header Files\sounddev</Filter> </ClInclude> + <ClInclude Include="FadeLaws.h"> + <Filter>Header Files\mptrack</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <None Include="res\bitmap1.bmp"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |