From: <sag...@us...> - 2014-02-23 20:46:01
|
Revision: 3764 http://sourceforge.net/p/modplug/code/3764 Author: saga-games Date: 2014-02-23 20:45:52 +0000 (Sun, 23 Feb 2014) Log Message: ----------- [New] Added options tab for sample and instrument editor settings. [New] Added two new key behaviours for how to stop sample editor note previews. [Mod] The following settings are no longer hidden: DefaultFormat, FinetuneStep, FLACCompressionLevel, MayNormalizeSamplesOnLoad, UndoBufferSize, DefaultPlugVolumeHandling [Mod] OpenMPT: Version is now 1.22.07.25 Modified Paths: -------------- trunk/OpenMPT/common/versionNumber.h trunk/OpenMPT/mptrack/Ctrl_ins.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Ctrl_smp.h trunk/OpenMPT/mptrack/FileDialog.cpp trunk/OpenMPT/mptrack/FileDialog.h trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Moptions.cpp trunk/OpenMPT/mptrack/Moptions.h trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h trunk/OpenMPT/mptrack/Undo.cpp trunk/OpenMPT/mptrack/Undo.h trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/mptrack/View_smp.h trunk/OpenMPT/mptrack/View_tre.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/soundlib/SampleFormats.cpp Modified: trunk/OpenMPT/common/versionNumber.h =================================================================== --- trunk/OpenMPT/common/versionNumber.h 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/common/versionNumber.h 2014-02-23 20:45:52 UTC (rev 3764) @@ -17,7 +17,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 22 #define VER_MINOR 07 -#define VER_MINORMINOR 24 +#define VER_MINORMINOR 25 //Version string. For example "1.17.02.28" #define MPT_VERSION_STR VER_STRINGIZE(VER_MAJORMAJOR) "." VER_STRINGIZE(VER_MAJOR) "." VER_STRINGIZE(VER_MINOR) "." VER_STRINGIZE(VER_MINORMINOR) Modified: trunk/OpenMPT/mptrack/Ctrl_ins.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/Ctrl_ins.cpp 2014-02-23 20:45:52 UTC (rev 3764) @@ -1681,6 +1681,7 @@ FileDialog dlg = OpenFileDialog() .AllowMultiSelect() + .EnableAudioPreview() .ExtensionFilter( "All Instruments|*.xi;*.pat;*.iti;*.flac;*.wav;*.aif;*.aiff|" "FastTracker II Instruments (*.xi)|*.xi|" @@ -1734,7 +1735,7 @@ } SanitizeFilename(szFileName); - int index = 0; + int index = (m_sndFile.GetType() == MOD_TYPE_XM || !TrackerSettings::Instance().compressITI) ? 0 : 1; FileDialog dlg = SaveFileDialog() .DefaultExtension(m_sndFile.GetType() == MOD_TYPE_XM ? "xi" : "iti") .DefaultFilename(szFileName) @@ -2724,9 +2725,9 @@ uint16 ptl = 0; if(m_EditPitchTempoLock.GetWindowTextLength() > 0) { - char buffer[7]; - m_EditPitchTempoLock.GetWindowText(buffer, 6); - ptl = atoi(buffer); + TCHAR buffer[8]; + m_EditPitchTempoLock.GetWindowText(buffer, CountOf(buffer)); + ptl = _ttoi(buffer); } if(!ptl) { Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2014-02-23 20:45:52 UTC (rev 3764) @@ -408,8 +408,6 @@ } SetCurrentSample((lParam > 0) ? ((SAMPLEINDEX)lParam) : m_nSample); - m_nFinetuneStep = (uint16)theApp.GetSettings().Read<int32>("Sample Editor", "FinetuneStep", 25); - // Initial Update if (!m_bInitialized) UpdateView((m_nSample << HINT_SHIFT_SMP) | HINT_SAMPLEINFO | HINT_MODTYPE, NULL); CChildFrame *pFrame = (CChildFrame *)GetParentFrame(); @@ -966,6 +964,7 @@ static int nLastIndex = 0; FileDialog dlg = OpenFileDialog() .AllowMultiSelect() + .EnableAudioPreview() .ExtensionFilter("All Samples|*.wav;*.flac;*.pat;*.s3i;*.smp;*.snd;*.raw;*.xi;*.aif;*.aiff;*.its;*.8sv;*.8svx;*.svx;*.pcm;*.mp1;*.mp2;*.mp3|" "Wave Files (*.wav)|*.wav|" #ifndef NO_FLAC @@ -1008,7 +1007,7 @@ { mpt::PathString fileName; bool doBatchSave = CMainFrame::GetInputHandler()->ShiftPressed(); - bool defaultFLAC = false; + SampleEditorDefaultFormat defaultFormat = TrackerSettings::Instance().m_defaultSampleFormat; if(!doBatchSave) { @@ -1024,7 +1023,10 @@ } if(fileName.empty()) fileName = mpt::PathString::FromLocale(m_sndFile.m_szNames[m_nSample]); if(fileName.empty()) fileName = MPT_PATHSTRING("untitled"); - if(mpt::PathString::CompareNoCase(fileName.GetFileExt(), MPT_PATHSTRING(".flac"))) defaultFLAC = true; + + const mpt::PathString ext = fileName.GetFileExt(); + if(!mpt::PathString::CompareNoCase(ext, MPT_PATHSTRING(".flac"))) defaultFormat = dfFLAC; + else if(!mpt::PathString::CompareNoCase(ext, MPT_PATHSTRING(".wav"))) defaultFormat = dfWAV; } else { // save all samples @@ -1039,15 +1041,21 @@ } SanitizeFilename(fileName); - mpt::PathString format = theApp.GetSettings().Read<mpt::PathString>("Sample Editor", "DefaultFormat", defaultFLAC ? MPT_PATHSTRING("flac") : MPT_PATHSTRING("wav")); - int filter = 1; - if(!mpt::PathString::CompareNoCase(format, MPT_PATHSTRING("flac"))) + int filter; + switch(defaultFormat) + { + case dfWAV: + filter = 0; + break; + case dfFLAC: + default: + filter = 1; + case dfRAW: filter = 2; - else if(!mpt::PathString::CompareNoCase(format, MPT_PATHSTRING("raw"))) - filter = 3; + } FileDialog dlg = SaveFileDialog() - .DefaultExtension(format) + .DefaultExtension(ToSettingValue(defaultFormat).as<std::string>()) .DefaultFilename(fileName) .ExtensionFilter("Wave File (*.wav)|*.wav|" "FLAC File (*.flac)|*.flac|" @@ -2993,8 +3001,8 @@ { uint32 d = sample.nC5Speed; if (d < 1) d = 8363; - if(d < m_nFinetuneStep) d = m_nFinetuneStep; - d += (pos * m_nFinetuneStep); + if(d < TrackerSettings::Instance().m_nFinetuneStep) d = TrackerSettings::Instance().m_nFinetuneStep; + d += (pos * TrackerSettings::Instance().m_nFinetuneStep); sample.nC5Speed = Clamp(d, 1u, 9999999u); // 9999999 is max. in Impulse Tracker int transp = ModSample::FrequencyToTranspose(sample.nC5Speed) >> 7; int basenote = 60 - transp; Modified: trunk/OpenMPT/mptrack/Ctrl_smp.h =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.h 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/Ctrl_smp.h 2014-02-23 20:45:52 UTC (rev 3764) @@ -40,7 +40,6 @@ uint32 m_nSequenceMs; uint32 m_nSeekWindowMs; uint32 m_nOverlapMs; - uint16 m_nFinetuneStep; // Increment finetune by x when using spin control. Default = 25 SampleIO m_nPreviousRawFormat; bool rememberRawFormat; Modified: trunk/OpenMPT/mptrack/FileDialog.cpp =================================================================== --- trunk/OpenMPT/mptrack/FileDialog.cpp 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/FileDialog.cpp 2014-02-23 20:45:52 UTC (rev 3764) @@ -29,16 +29,18 @@ // Prepare filename buffer. std::vector<WCHAR> filenameBuffer(uint16_max, 0); - filenameBuffer.insert(filenameBuffer.begin(), defaultFilename.begin(), defaultFilename.end()); - filenameBuffer.push_back(0); + wcscpy(&filenameBuffer[0], defaultFilename.c_str()); + //filenameBuffer.insert(filenameBuffer.begin(), defaultFilename.begin(), defaultFilename.end()); + //filenameBuffer.push_back(0); + preview = preview && TrackerSettings::Instance().previewInFileDialogs; const std::wstring workingDirectoryNative = workingDirectory.AsNative(); // First, set up the dialog... OPENFILENAMEW ofn; MemsetZero(ofn); - ofn.lStructSize = sizeof(OPENFILENAMEW); - ofn.hwndOwner = (parent != nullptr ? parent : theApp.m_pMainWnd)->GetSafeHwnd(); + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = (parent != nullptr ? parent : theApp.m_pMainWnd)->m_hWnd; ofn.hInstance = theApp.m_hInstance; ofn.lpstrFilter = extFilter.c_str(); ofn.lpstrCustomFilter = NULL; @@ -50,12 +52,12 @@ ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = workingDirectory.empty() ? NULL : workingDirectoryNative.c_str(); ofn.lpstrTitle = NULL; - ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | (multiSelect ? OFN_ALLOWMULTISELECT : 0) | (load ? 0 : (OFN_OVERWRITEPROMPT | OFN_NOREADONLYRETURN)); + ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | (multiSelect ? OFN_ALLOWMULTISELECT : 0) | (load ? 0 : (OFN_OVERWRITEPROMPT | OFN_NOREADONLYRETURN)) | (preview ? OFN_ENABLEHOOK : 0); ofn.nFileOffset = 0; ofn.nFileExtension = 0; ofn.lpstrDefExt = defaultExtension.empty() ? NULL : defaultExtension.c_str(); - ofn.lCustData = NULL; - ofn.lpfnHook = NULL; + ofn.lCustData = reinterpret_cast<LPARAM>(this); + ofn.lpfnHook = OFNHookProc; ofn.lpTemplateName = NULL; ofn.pvReserved = NULL; ofn.dwReserved = 0; @@ -66,6 +68,11 @@ BOOL result = load ? GetOpenFileNameW(&ofn) : GetSaveFileNameW(&ofn); CMainFrame::GetInputHandler()->Bypass(false); + if(stopPreview) + { + CMainFrame::GetMainFrame()->StopPreview(); + } + if(result == FALSE) { return false; @@ -108,6 +115,31 @@ } +// Callback function for instrument preview +UINT_PTR CALLBACK FileDialog::OFNHookProc(HWND hdlg, UINT uiMsg, WPARAM /*wParam*/, LPARAM lParam) +//------------------------------------------------------------------------------------------------ +{ + if(uiMsg == WM_NOTIFY) + { + OFNOTIFY *ofn = reinterpret_cast<OFNOTIFY *>(lParam); + WCHAR path[MAX_PATH]; + if(ofn->hdr.code == CDN_SELCHANGE && CommDlg_OpenSave_GetFilePathW(GetParent(hdlg), path, CountOf(path)) > 0) + { + FileDialog *that = reinterpret_cast<FileDialog *>(ofn->lpOFN->lCustData); + if(path[0] && that->lastPreviewFile != path) + { + that->lastPreviewFile = path; + if(CMainFrame::GetMainFrame()->PlaySoundFile(mpt::PathString::FromNative(path), NOTE_MIDDLEC)) + { + that->stopPreview = true; + } + } + } + } + return 0; +} + + // Helper callback to set start path. int CALLBACK BrowseForFolder::BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM /*lParam*/, LPARAM lpData) //------------------------------------------------------------------------------------------------------ @@ -130,7 +162,7 @@ BROWSEINFOW bi; MemsetZero(bi); - bi.hwndOwner = (parent != nullptr ? parent : theApp.m_pMainWnd)->GetSafeHwnd(); + bi.hwndOwner = (parent != nullptr ? parent : theApp.m_pMainWnd)->m_hWnd; bi.lpszTitle = caption.empty() ? NULL : caption.c_str(); bi.pszDisplayName = path; bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_USENEWUI; Modified: trunk/OpenMPT/mptrack/FileDialog.h =================================================================== --- trunk/OpenMPT/mptrack/FileDialog.h 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/FileDialog.h 2014-02-23 20:45:52 UTC (rev 3764) @@ -22,16 +22,17 @@ std::wstring defaultExtension; std::wstring defaultFilename; std::wstring extFilter; + std::wstring lastPreviewFile; mpt::PathString workingDirectory; - mpt::PathString lastPreviewFile; mpt::PathString extension; PathList filenames; int *filterIndex; bool load; bool multiSelect; + bool preview, stopPreview; protected: - FileDialog(bool load) : filterIndex(nullptr), load(load), multiSelect(false) { } + FileDialog(bool load) : filterIndex(nullptr), load(load), multiSelect(false), preview(false), stopPreview(false) { } public: // Default extension to use if none is specified. @@ -50,6 +51,8 @@ FileDialog &WorkingDirectory(const mpt::PathString &dir) { workingDirectory = dir; return *this; } // Pointer to a variable holding the index of the last extension filter to use. Holds the selected filter after the dialog has been closed. FileDialog &FilterIndex(int *index) { filterIndex = index; return *this; } + // Enable preview of instrument files (if globally enabled). + FileDialog &EnableAudioPreview() { preview = true; return *this; } // Show the file selection dialog. bool Show(const CWnd *parent = nullptr); @@ -96,6 +99,7 @@ }; +// Folder browser. class BrowseForFolder { protected: Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2014-02-23 20:45:52 UTC (rev 3764) @@ -1838,6 +1838,7 @@ CPropertySheet dlg("OpenMPT Setup", this, m_nLastOptionsPage); COptionsGeneral general; COptionsSoundcard sounddlg(TrackerSettings::Instance().GetSoundDeviceID()); + COptionsSampleEditor smpeditor; COptionsKeyboard keyboard; COptionsColors colors; COptionsPlayer playerdlg; @@ -1860,6 +1861,7 @@ #ifndef NO_EQ dlg.AddPage(&eqdlg); #endif + dlg.AddPage(&smpeditor); dlg.AddPage(&keyboard); dlg.AddPage(&colors); dlg.AddPage(&mididlg); @@ -2373,7 +2375,7 @@ return 0; } -//rewbs.customKeys + LRESULT CMainFrame::OnCustomKeyMsg(WPARAM wParam, LPARAM lParam) //--------------------------------------------------------------- { @@ -2454,8 +2456,8 @@ return wParam; } -//end rewbs.customKeys + void CMainFrame::OnInitMenu(CMenu* pMenu) //--------------------------------------- { @@ -2500,8 +2502,8 @@ pSndFile->m_bIsRendering = false; return true; } -//end rewbs.VSTTimeInfo + // We have swicthed focus to a new module - might need to update effect keys to reflect module type bool CMainFrame::UpdateEffectKeys() //--------------------------------- Modified: trunk/OpenMPT/mptrack/Moptions.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moptions.cpp 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/Moptions.cpp 2014-02-23 20:45:52 UTC (rev 3764) @@ -690,7 +690,110 @@ } +BEGIN_MESSAGE_MAP(COptionsSampleEditor, CPropertyPage) + ON_EN_CHANGE(IDC_EDIT_UNDOSIZE, OnUndoSizeChanged) + ON_EN_CHANGE(IDC_EDIT_FINETUNE, OnSettingsChanged) + ON_EN_CHANGE(IDC_FLAC_COMPRESSION, OnSettingsChanged) + ON_CBN_SELCHANGE(IDC_DEFAULT_FORMAT, OnSettingsChanged) + ON_CBN_SELCHANGE(IDC_VOLUME_HANDLING, OnSettingsChanged) + ON_COMMAND(IDC_RADIO1, OnSettingsChanged) + ON_COMMAND(IDC_RADIO2, OnSettingsChanged) + ON_COMMAND(IDC_RADIO3, OnSettingsChanged) + ON_COMMAND(IDC_COMPRESS_ITI, OnSettingsChanged) + ON_COMMAND(IDC_PREVIEW_SAMPLES, OnSettingsChanged) + ON_COMMAND(IDC_NORMALIZE, OnSettingsChanged) +END_MESSAGE_MAP() + +void COptionsSampleEditor::DoDataExchange(CDataExchange* pDX) +//----------------------------------------------------------- +{ + CPropertyPage::DoDataExchange(pDX); + //{{AFX_DATA_MAP(COptionsSampleEditor) + DDX_Control(pDX, IDC_DEFAULT_FORMAT, m_cbnDefaultSampleFormat); + DDX_Control(pDX, IDC_VOLUME_HANDLING, m_cbnDefaultVolumeHandling); + //}}AFX_DATA_MAP +} + + +BOOL COptionsSampleEditor::OnInitDialog() +//--------------------------------------- +{ + CPropertyPage::OnInitDialog(); + SetDlgItemInt(IDC_EDIT_FINETUNE, TrackerSettings::Instance().m_nFinetuneStep); + SetDlgItemInt(IDC_EDIT_UNDOSIZE, TrackerSettings::Instance().m_SampleUndoBufferSize.Get().GetSizeInPercent()); + OnUndoSizeChanged(); + + m_cbnDefaultSampleFormat.SetItemData(m_cbnDefaultSampleFormat.AddString("FLAC"), dfFLAC); + m_cbnDefaultSampleFormat.SetItemData(m_cbnDefaultSampleFormat.AddString("WAV"), dfWAV); + m_cbnDefaultSampleFormat.SetItemData(m_cbnDefaultSampleFormat.AddString("RAW"), dfRAW); + m_cbnDefaultSampleFormat.SetCurSel(TrackerSettings::Instance().m_defaultSampleFormat); + + SetDlgItemInt(IDC_FLAC_COMPRESSION, TrackerSettings::Instance().m_FLACCompressionLevel); + CSpinButtonCtrl *spin = (CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1); + if(spin) + { + spin->SetRange(0, 8); + spin->SetPos(TrackerSettings::Instance().m_FLACCompressionLevel); + } + + CheckRadioButton(IDC_RADIO1, IDC_RADIO3, IDC_RADIO1 + TrackerSettings::Instance().sampleEditorKeyBehaviour); + + CheckDlgButton(IDC_COMPRESS_ITI, TrackerSettings::Instance().compressITI ? MF_CHECKED : MF_UNCHECKED); + + m_cbnDefaultSampleFormat.SetItemData(m_cbnDefaultVolumeHandling.AddString("MIDI volume"), PLUGIN_VOLUMEHANDLING_MIDI); + m_cbnDefaultSampleFormat.SetItemData(m_cbnDefaultVolumeHandling.AddString("Dry/Wet ratio"), PLUGIN_VOLUMEHANDLING_DRYWET); + m_cbnDefaultSampleFormat.SetItemData(m_cbnDefaultVolumeHandling.AddString("None"), PLUGIN_VOLUMEHANDLING_IGNORE); + m_cbnDefaultVolumeHandling.SetCurSel(TrackerSettings::Instance().DefaultPlugVolumeHandling); + + CheckDlgButton(IDC_PREVIEW_SAMPLES, TrackerSettings::Instance().previewInFileDialogs ? MF_CHECKED : MF_UNCHECKED); + CheckDlgButton(IDC_NORMALIZE, TrackerSettings::Instance().m_MayNormalizeSamplesOnLoad ? MF_CHECKED : MF_UNCHECKED); + + return TRUE; +} + + +void COptionsSampleEditor::OnOK() +//------------------------------- +{ + CPropertyPage::OnOK(); + + TrackerSettings::Instance().m_nFinetuneStep = GetDlgItemInt(IDC_EDIT_FINETUNE); + TrackerSettings::Instance().m_SampleUndoBufferSize = SampleUndoBufferSize(GetDlgItemInt(IDC_EDIT_UNDOSIZE)); + TrackerSettings::Instance().m_defaultSampleFormat = static_cast<SampleEditorDefaultFormat>(m_cbnDefaultSampleFormat.GetItemData(m_cbnDefaultSampleFormat.GetCurSel())); + TrackerSettings::Instance().m_FLACCompressionLevel = GetDlgItemInt(IDC_FLAC_COMPRESSION); + TrackerSettings::Instance().sampleEditorKeyBehaviour = static_cast<SampleEditorKeyBehaviour>(GetCheckedRadioButton(IDC_RADIO1, IDC_RADIO3) -IDC_RADIO1); + TrackerSettings::Instance().compressITI = IsDlgButtonChecked(IDC_COMPRESS_ITI) != MF_UNCHECKED; + TrackerSettings::Instance().DefaultPlugVolumeHandling = static_cast<PLUGVOLUMEHANDLING>(m_cbnDefaultVolumeHandling.GetItemData(m_cbnDefaultVolumeHandling.GetCurSel())); + TrackerSettings::Instance().previewInFileDialogs = IsDlgButtonChecked(IDC_PREVIEW_SAMPLES) != MF_UNCHECKED; + TrackerSettings::Instance().m_MayNormalizeSamplesOnLoad = IsDlgButtonChecked(IDC_NORMALIZE) != MF_UNCHECKED; + + std::vector<CModDoc *> docs = theApp.GetOpenDocuments(); + for(std::vector<CModDoc *>::iterator i = docs.begin(); i != docs.end(); i++) + { + (**i).GetSampleUndo().RestrictBufferSize(); + } +} + + +BOOL COptionsSampleEditor::OnSetActive() +//-------------------------------------- +{ + CMainFrame::m_nLastOptionsPage = OPTIONS_PAGE_SAMPLEDITOR; + return CPropertyPage::OnSetActive(); +} + + +void COptionsSampleEditor::OnUndoSizeChanged() +//-------------------------------------------- +{ + uint32 sizeMB = mpt::saturate_cast<uint32>(SampleUndoBufferSize(GetDlgItemInt(IDC_EDIT_UNDOSIZE)).GetSizeInBytes() >> 20); + CString text; + text.Format("%% of physical memory (%u MiB)", sizeMB); + SetDlgItemText(IDC_UNDOSIZE, text); +} + + #if defined(MPT_SETTINGS_CACHE) BEGIN_MESSAGE_MAP(COptionsAdvanced, CPropertyPage) Modified: trunk/OpenMPT/mptrack/Moptions.h =================================================================== --- trunk/OpenMPT/mptrack/Moptions.h 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/Moptions.h 2014-02-23 20:45:52 UTC (rev 3764) @@ -19,6 +19,7 @@ OPTIONS_PAGE_MIXER, OPTIONS_PAGE_PLAYER, OPTIONS_PAGE_EQ, + OPTIONS_PAGE_SAMPLEDITOR, OPTIONS_PAGE_KEYBOARD, OPTIONS_PAGE_COLORS, OPTIONS_PAGE_MIDI, @@ -126,3 +127,26 @@ afx_msg void OnPreviewChanged(); DECLARE_MESSAGE_MAP(); }; + + +//=============================================== +class COptionsSampleEditor : public CPropertyPage +//=============================================== +{ +protected: + CComboBox m_cbnDefaultSampleFormat, m_cbnDefaultVolumeHandling; + +public: + COptionsSampleEditor() : CPropertyPage(IDD_OPTIONS_SAMPLEEDITOR) { } + +protected: + + virtual BOOL OnInitDialog(); + virtual void OnOK(); + virtual void DoDataExchange(CDataExchange* pDX); + virtual BOOL OnSetActive(); + + afx_msg void OnSettingsChanged() { SetModified(TRUE); } + afx_msg void OnUndoSizeChanged(); + DECLARE_MESSAGE_MAP(); +}; Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2014-02-23 20:45:52 UTC (rev 3764) @@ -108,16 +108,22 @@ } -static uint32 GetDefaultUndoBufferSize() -//-------------------------------------- +void SampleUndoBufferSize::CalculateSize() +//---------------------------------------- { - MEMORYSTATUS gMemStatus; - MemsetZero(gMemStatus); - GlobalMemoryStatus(&gMemStatus); - // Allow allocations of at least 16MB - if(gMemStatus.dwTotalPhys < 16*1024*1024) - gMemStatus.dwTotalPhys = 16*1024*1024; - return std::max<uint32>(gMemStatus.dwTotalPhys / 10, 1 << 20);; + if(sizePercent < 0) + sizePercent = 0; + // Don't use GlobalMemoryStatusEx here since we want a percentage of the memory that's actually *available* to OpenMPT, which is a max of 4GB in 32-bit mode. + MEMORYSTATUS memStatus; + memStatus.dwLength = sizeof(MEMORYSTATUS); + GlobalMemoryStatus(&memStatus); + sizeByte = mpt::saturate_cast<size_t>(memStatus.dwTotalPhys * uint64(sizePercent) / 100); + + // Pretend there's at least one MiB of memory (haha) + if(sizePercent != 0 && sizeByte < 1 * 1024 * 1024) + { + sizeByte = 1 * 1024 * 1024; + } } @@ -195,9 +201,14 @@ , orderlistMargins(conf, "Pattern Editor", "DefaultSequenceMargins", 0) , rowDisplayOffset(conf, "Pattern Editor", "RowDisplayOffset", 0) // Sample Editor - , m_SampleUndoMaxBufferMB(conf, "Sample Editor", "UndoBufferSize", GetDefaultUndoBufferSize() >> 20) + , m_SampleUndoBufferSize(conf, "Sample Editor", "UndoBufferSize", SampleUndoBufferSize()) + , sampleEditorKeyBehaviour(conf, "Sample Editor", "KeyBehaviour", seNoteOffOnNewKey) + , m_defaultSampleFormat(conf, "Sample Editor", "DefaultFormat", dfFLAC) + , m_nFinetuneStep(conf, "Sample Editor", "FinetuneStep", 25) + , m_FLACCompressionLevel(conf, "Sample Editor", "FLACCompressionLevel", 5) + , compressITI(conf, "Sample Editor", "CompressITI", true) , m_MayNormalizeSamplesOnLoad(conf, "Sample Editor", "MayNormalizeSamplesOnLoad", true) - , SampleEditorFLACCompressionLevel(conf, "Sample Editor", "FLACCompressionLevel", 5) + , previewInFileDialogs(conf, "Sample Editor", "PreviewInFileDialogs", false) // Export , ExportDefaultToSoundcardSamplerate(conf, "Export", "DefaultToSoundcardSamplerate", true) , ExportStreamEncoderSettings(conf, "Export") @@ -510,6 +521,13 @@ } m_szKbdFile = theApp.RelativePathToAbsolute(m_szKbdFile); + // Sample undo buffer size (used to be a hidden, absolute setting in MiB) + int64 oldUndoSize = m_SampleUndoBufferSize.Get().GetSizeInPercent(); + if(storedVersion < MAKE_VERSION_NUMERIC(1,22,07,25) && oldUndoSize != SampleUndoBufferSize::defaultSize && oldUndoSize != 0) + { + m_SampleUndoBufferSize = SampleUndoBufferSize(static_cast<int32>(100 * (oldUndoSize << 20) / SampleUndoBufferSize(100).GetSizeInBytes())); + } + // Last fixup: update config version IniVersion = MptVersion::str; @@ -902,7 +920,7 @@ for(size_t i = 0; i < CountOf(chords); i++) { uint32 chord; - if((chord = conf.Read<int32>("Chords", CSoundFile::GetNoteName(i + NOTE_MIN), -1)) >= 0) + if((chord = conf.Read<int32>("Chords", CSoundFile::GetNoteName(ModCommand::NOTE(i + NOTE_MIN)), -1)) >= 0) { if((chord & 0xFFFFFFC0) || (!chords[i].notes[0])) { @@ -922,7 +940,7 @@ for(size_t i = 0; i < CountOf(chords); i++) { int32 s = (chords[i].key) | (chords[i].notes[0] << 6) | (chords[i].notes[1] << 12) | (chords[i].notes[2] << 18); - conf.Write<int32>("Chords", CSoundFile::GetNoteName(i + NOTE_MIN), s); + conf.Write<int32>("Chords", CSoundFile::GetNoteName(ModCommand::NOTE(i + NOTE_MIN)), s); } } Modified: trunk/OpenMPT/mptrack/TrackerSettings.h =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/TrackerSettings.h 2014-02-23 20:45:52 UTC (rev 3764) @@ -139,10 +139,12 @@ #endif STATIC_ASSERT(sizeof(EQPreset) == 60); -template<> inline SettingValue ToSettingValue(const EQPreset &val) { +template<> inline SettingValue ToSettingValue(const EQPreset &val) +{ return SettingValue(EncodeBinarySetting<EQPreset>(val), "EQPreset"); } -template<> inline EQPreset FromSettingValue(const SettingValue &val) { +template<> inline EQPreset FromSettingValue(const SettingValue &val) +{ ASSERT(val.GetTypeTag() == "EQPreset"); return DecodeBinarySetting<EQPreset>(val.as<std::vector<char> >()); } @@ -172,6 +174,47 @@ atRecordAsMacro, }; +// Sample editor preview behaviour +enum SampleEditorKeyBehaviour +{ + seNoteOffOnNewKey, + seNoteOffOnKeyUp, + seNoteOffOnKeyRestrike, +}; + +enum SampleEditorDefaultFormat +{ + dfFLAC, + dfWAV, + dfRAW, +}; + + +class SampleUndoBufferSize +{ +protected: + size_t sizeByte; + int32 sizePercent; + + void CalculateSize(); + +public: + enum + { + defaultSize = 10, // In percent + }; + + SampleUndoBufferSize(int32 percent = defaultSize) : sizePercent(percent) { CalculateSize(); } + void Set(int32 percent) { sizePercent = percent; CalculateSize(); } + + int32 GetSizeInPercent() const { return sizePercent; } + size_t GetSizeInBytes() const { return sizeByte; } +}; + +template<> inline SettingValue ToSettingValue(const SampleUndoBufferSize &val) { return SettingValue(val.GetSizeInPercent()); } +template<> inline SampleUndoBufferSize FromSettingValue(const SettingValue &val) { return SampleUndoBufferSize(val.as<int32>()); } + + std::string IgnoredCCsToString(const std::bitset<128> &midiIgnoreCCs); std::bitset<128> StringToIgnoredCCs(const std::string &in); @@ -182,6 +225,9 @@ template<> inline SettingValue ToSettingValue(const RecordAftertouchOptions &val) { return SettingValue(int32(val)); } template<> inline RecordAftertouchOptions FromSettingValue(const SettingValue &val) { return RecordAftertouchOptions(val.as<int32>()); } +template<> inline SettingValue ToSettingValue(const SampleEditorKeyBehaviour &val) { return SettingValue(int32(val)); } +template<> inline SampleEditorKeyBehaviour FromSettingValue(const SettingValue &val) { return SampleEditorKeyBehaviour(val.as<int32>()); } + template<> inline SettingValue ToSettingValue(const MODTYPE &val) { return SettingValue(SettingsModTypeToString(val), "MODTYPE"); } template<> inline MODTYPE FromSettingValue(const SettingValue &val) { ASSERT(val.GetTypeTag() == "MODTYPE"); return SettingsStringToModType(val.as<std::string>()); } @@ -224,6 +270,34 @@ return StringToIgnoredCCs(val.as<std::string>()); } +template<> inline SettingValue ToSettingValue(const SampleEditorDefaultFormat &val) +{ + const char *format; + switch(val) + { + case dfWAV: + format = "wav"; + break; + case dfFLAC: + default: + format = "flac"; + break; + case dfRAW: + format = "raw"; + } + return SettingValue(format); +} +template<> inline SampleEditorDefaultFormat FromSettingValue(const SettingValue &val) +{ + std::string format = val.as<std::string>(); + for(std::string::iterator c = format.begin(); c != format.end(); c++) *c = std::string::value_type(::tolower(*c)); + if(format == "wav") + return dfWAV; + if(format == "raw") + return dfRAW; + else // if(format == "flac") + return dfFLAC; +} //=================== @@ -341,10 +415,14 @@ // Sample Editor - Setting<uint32> m_SampleUndoMaxBufferMB; - uint32 GetSampleUndoBufferSize() const { return m_SampleUndoMaxBufferMB << 20; } + Setting<SampleUndoBufferSize> m_SampleUndoBufferSize; + Setting<SampleEditorKeyBehaviour> sampleEditorKeyBehaviour; + Setting<SampleEditorDefaultFormat> m_defaultSampleFormat; + Setting<uint32> m_nFinetuneStep; // Increment finetune by x when using spin control. Default = 25 + Setting<int32> m_FLACCompressionLevel; // FLAC compression level for saving (0...8) + Setting<bool> compressITI; Setting<bool> m_MayNormalizeSamplesOnLoad; - Setting<int32> SampleEditorFLACCompressionLevel; // Custom compression level (0...8) + Setting<bool> previewInFileDialogs; // Export Modified: trunk/OpenMPT/mptrack/Undo.cpp =================================================================== --- trunk/OpenMPT/mptrack/Undo.cpp 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/Undo.cpp 2014-02-23 20:45:52 UTC (rev 3764) @@ -540,7 +540,7 @@ //------------------------------------ { size_t capacity = GetBufferCapacity(UndoBuffer) + GetBufferCapacity(RedoBuffer); - while(capacity > TrackerSettings::Instance().GetSampleUndoBufferSize()) + while(capacity > TrackerSettings::Instance().m_SampleUndoBufferSize.Get().GetSizeInBytes()) { RestrictBufferSize(UndoBuffer, capacity); RestrictBufferSize(RedoBuffer, capacity); @@ -553,7 +553,7 @@ { for(SAMPLEINDEX smp = 1; smp <= buffer.size(); smp++) { - if(capacity <= TrackerSettings::Instance().GetSampleUndoBufferSize()) return; + if(capacity <= TrackerSettings::Instance().m_SampleUndoBufferSize.Get().GetSizeInBytes()) return; for(size_t i = 0; i < buffer[smp - 1].size(); i++) { if(buffer[smp - 1][i].samplePtr != nullptr) Modified: trunk/OpenMPT/mptrack/Undo.h =================================================================== --- trunk/OpenMPT/mptrack/Undo.h 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/Undo.h 2014-02-23 20:45:52 UTC (rev 3764) @@ -144,7 +144,6 @@ void ClearUndo(undobuf_t &buffer, const SAMPLEINDEX smp); void DeleteStep(undobuf_t &buffer, const SAMPLEINDEX smp, const size_t step); bool SampleBufferExists(const undobuf_t &buffer, const SAMPLEINDEX smp) const; - void RestrictBufferSize(); void RestrictBufferSize(undobuf_t &buffer, size_t &capacity); size_t GetBufferCapacity(const undobuf_t &buffer) const; @@ -164,6 +163,7 @@ void RemoveLastUndoStep(const SAMPLEINDEX smp); const char *GetUndoName(const SAMPLEINDEX smp) const; const char *GetRedoName(const SAMPLEINDEX smp) const; + void RestrictBufferSize(); CSampleUndo(CModDoc &parent) : modDoc(parent) { } Modified: trunk/OpenMPT/mptrack/View_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_smp.cpp 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/View_smp.cpp 2014-02-23 20:45:52 UTC (rev 3764) @@ -130,6 +130,7 @@ MemsetZero(m_NcButtonState); m_bmpEnvBar.Create(IDB_SMPTOOLBAR, 20, 0, RGB(192,192,192)); m_lastDrawPoint.SetPoint(-1, -1); + noteChannel.assign(NOTE_MAX - NOTE_MIN + 1, CHANNELINDEX_INVALID); offScreenDC = nullptr; offScreenBitmap = nullptr; } @@ -2365,7 +2366,7 @@ if (note >= NOTE_MIN_SPECIAL) { pModDoc->NoteOff(0, (note == NOTE_NOTECUT)); - } else if(ModCommand::IsNote((ModCommand::NOTE)note)) + } else { if(m_dwStatus[SMPSTATUS_KEYDOWN]) pModDoc->NoteOff(note, true); @@ -2373,10 +2374,13 @@ pModDoc->NoteOff(0, true); SmpLength loopstart = m_dwBeginSel, loopend = m_dwEndSel; - if (loopend - loopstart < (SmpLength)(4 << m_nZoom)) - loopend = loopstart = 0; // selection is too small -> no loop + // If selection is too small -> no loop + if(m_nZoom >= 0 && loopend - loopstart < (SmpLength)(4 << m_nZoom)) + loopend = loopstart = 0; + else if(m_nZoom < 0 && loopend - loopstart < 4) + loopend = loopstart = 0; - pModDoc->PlayNote(note, 0, m_nSample, false, -1, loopstart, loopend, CHANNELINDEX_INVALID, nStartPos); + noteChannel[note - NOTE_MIN] = pModDoc->PlayNote(note, 0, m_nSample, false, -1, loopstart, loopend, CHANNELINDEX_INVALID, nStartPos); m_dwStatus.set(SMPSTATUS_KEYDOWN); @@ -2391,7 +2395,16 @@ pMainFrm->SetInfoText(s.c_str()); } } +} + +void CViewSample::NoteOff(ModCommand::NOTE note) +//---------------------------------------------- +{ + CSoundFile &sndFile = GetDocument()->GetrSoundFile(); + sndFile.KeyOff(noteChannel[note - NOTE_MIN]); + sndFile.Chn[noteChannel[note - NOTE_MIN]].dwFlags.set(CHN_NOTEFADE); + noteChannel[note - NOTE_MIN] = CHANNELINDEX_INVALID; } @@ -2906,15 +2919,49 @@ case kcNoteCut: PlayNote(NOTE_NOTECUT); return wParam; } - if (wParam >= kcSampStartNotes && wParam <= kcSampEndNotes) + if(wParam >= kcSampStartNotes && wParam <= kcSampEndNotes) { - PlayNote(static_cast<ModCommand::NOTE>(wParam - kcSampStartNotes + 1 + pMainFrm->GetBaseOctave() * 12)); - return wParam; - } - if (wParam >= kcSampStartNoteStops && wParam <= kcSampEndNoteStops) + const ModCommand::NOTE note = static_cast<ModCommand::NOTE>(wParam - kcSampStartNotes + NOTE_MIN + pMainFrm->GetBaseOctave() * 12); + if(ModCommand::IsNote(note)) + { + switch(TrackerSettings::Instance().sampleEditorKeyBehaviour) + { + case seNoteOffOnKeyRestrike: + if(noteChannel[note - NOTE_MIN] != CHANNELINDEX_INVALID) + { + NoteOff(note); + break; + } + // Fall-through + default: + PlayNote(note); + } + return wParam; + } + } else if(wParam >= kcSampStartNoteStops && wParam <= kcSampEndNoteStops) { - m_dwStatus.reset(SMPSTATUS_KEYDOWN); - return wParam; + const ModCommand::NOTE note = static_cast<ModCommand::NOTE>(wParam - kcSampStartNoteStops + NOTE_MIN + pMainFrm->GetBaseOctave() * 12); + if(ModCommand::IsNote(note)) + { + switch(TrackerSettings::Instance().sampleEditorKeyBehaviour) + { + case seNoteOffOnNewKey: + m_dwStatus.reset(SMPSTATUS_KEYDOWN); + if(noteChannel[note - NOTE_MIN] != CHANNELINDEX_INVALID) + { + // Release sustain loop on key up + pModDoc->GetrSoundFile().KeyOff(noteChannel[note - NOTE_MIN]); + } + break; + case seNoteOffOnKeyUp: + if(noteChannel[note - NOTE_MIN] != CHANNELINDEX_INVALID) + { + NoteOff(note); + } + break; + } + return wParam; + } } return NULL; Modified: trunk/OpenMPT/mptrack/View_smp.h =================================================================== --- trunk/OpenMPT/mptrack/View_smp.h 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/View_smp.h 2014-02-23 20:45:52 UTC (rev 3764) @@ -64,6 +64,7 @@ int32 SampleToScreen(SmpLength pos) const; SmpLength ScreenToSample(int32 x) const; void PlayNote(ModCommand::NOTE note, const SmpLength nStartPos = 0); + void NoteOff(ModCommand::NOTE note); void InvalidateSample(); void SetCurSel(SmpLength nBegin, SmpLength nEnd); void ScrollToPosition(int x); Modified: trunk/OpenMPT/mptrack/View_tre.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_tre.cpp 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/View_tre.cpp 2014-02-23 20:45:52 UTC (rev 3764) @@ -1557,6 +1557,7 @@ //--------------------------------------------- { FileDialog dlg = OpenFileDialog() + .EnableAudioPreview() .ExtensionFilter( "All Instruments and Banks|*.xi;*.pat;*.iti;*.wav;*.aif;*.aiff;*.sf2;*.sbk;*.dls;*.flac;*.mp1;*.mp2;*.mp3|" "FastTracker II Instruments (*.xi)|*.xi|" Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/mptrack.rc 2014-02-23 20:45:52 UTC (rev 3764) @@ -125,6 +125,38 @@ PUSHBUTTON "Add",IDC_BUTTON_ADD,174,78,50,14 END +IDD_OPTIONS_SAMPLEEDITOR DIALOGEX 0, 0, 286, 269 +STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Samples" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "Sample Editor",IDC_STATIC,6,6,270,138 + LTEXT "Sample Undo Buffer:",IDC_STATIC,12,20,78,8 + EDITTEXT IDC_EDIT_UNDOSIZE,114,18,42,12,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_UNDOSIZE,162,20,108,16 + LTEXT "Frequency Finetune Steps:",IDC_STATIC,12,38,114,8 + EDITTEXT IDC_EDIT_FINETUNE,114,36,42,12,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "Hz",IDC_STATIC,162,38,30,8 + LTEXT "Default Sample Format:",IDC_STATIC,12,56,102,8 + COMBOBOX IDC_DEFAULT_FORMAT,114,54,42,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "FLAC Compression Level:",IDC_STATIC,12,74,90,8 + EDITTEXT IDC_FLAC_COMPRESSION,114,72,42,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN1,"msctls_updown32",UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,150,72,11,11 + LTEXT "Note Cuts:",IDC_STATIC,12,90,252,12 + CONTROL "On New Note",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,18,102,246,12 + CONTROL "On Key Release",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,18,114,246,12 + CONTROL "Press Again",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,18,126,246,12 + GROUPBOX "Instrument Editor",IDC_STATIC,6,150,270,48 + CONTROL "Compress ITI Files",IDC_COMPRESS_ITI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,162,258,12 + LTEXT "Default Plugin Volume Command Handling:",IDC_STATIC,12,182,150,8 + COMBOBOX IDC_VOLUME_HANDLING,162,180,78,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Common",IDC_STATIC,6,204,270,48 + CONTROL "Preview Samples / Instruments in File Browser",IDC_PREVIEW_SAMPLES, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,217,258,12 + CONTROL "Normalize 24-/32-bit Samples on Load",IDC_NORMALIZE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,234,258,12 +END + IDD_EDITHISTORY DIALOGEX 0, 0, 316, 185 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Module edit history" @@ -308,6 +340,14 @@ BOTTOMMARGIN, 94 END + IDD_OPTIONS_SAMPLEEDITOR, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 279 + TOPMARGIN, 7 + BOTTOMMARGIN, 262 + END + IDD_EDITHISTORY, DIALOG BEGIN LEFTMARGIN, 7 Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/mptrack/resource.h 2014-02-23 20:45:52 UTC (rev 3764) @@ -132,7 +132,8 @@ #define IDD_AUTOTUNE 531 #define IDD_INPUT 532 #define IDD_CLIPBOARD 533 -#define IDD_OPTIONS_ADVANCED 540 +#define IDD_OPTIONS_ADVANCED 534 +#define IDD_OPTIONS_SAMPLEEDITOR 535 #define IDC_BUTTON1 1001 #define IDC_BUTTON2 1002 #define IDC_BUTTON3 1003 @@ -926,6 +927,15 @@ #define IDC_FIND 2438 #define IDC_PITCHWHEELDEPTH 2439 #define IDC_PROMPT 2440 +#define IDC_EDIT_FINETUNE 2441 +#define IDC_EDIT_UNDOSIZE 2442 +#define IDC_FLAC_COMPRESSION 2443 +#define IDC_DEFAULT_FORMAT 2444 +#define IDC_COMPRESS_ITI 2445 +#define IDC_PREVIEW_SAMPLES 2446 +#define IDC_VOLUME_HANDLING 2447 +#define IDC_NORMALIZE 2448 +#define IDC_UNDOSIZE 2449 #define IDC_SLIDER_NUMBUFFERS 2454 #define IDC_EDIT_STATISTICS 2455 #define IDC_VUMETER 2456 @@ -1229,7 +1239,7 @@ #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 -#define _APS_NEXT_RESOURCE_VALUE 541 +#define _APS_NEXT_RESOURCE_VALUE 536 #define _APS_NEXT_COMMAND_VALUE 44643 #define _APS_NEXT_CONTROL_VALUE 2479 #define _APS_NEXT_SYMED_VALUE 901 Modified: trunk/OpenMPT/soundlib/SampleFormats.cpp =================================================================== --- trunk/OpenMPT/soundlib/SampleFormats.cpp 2014-02-23 19:53:03 UTC (rev 3763) +++ trunk/OpenMPT/soundlib/SampleFormats.cpp 2014-02-23 20:45:52 UTC (rev 3764) @@ -2179,7 +2179,7 @@ FLAC__stream_encoder_set_total_samples_estimate(encoder, sample.nLength); FLAC__stream_encoder_set_metadata(encoder, metadata, writeLoopData ? 3 : 2); #ifdef MODPLUG_TRACKER - FLAC__stream_encoder_set_compression_level(encoder, TrackerSettings::Instance().SampleEditorFLACCompressionLevel); + FLAC__stream_encoder_set_compression_level(encoder, TrackerSettings::Instance().m_FLACCompressionLevel); #endif // MODPLUG_TRACKER encoder.f = mpt_fopen(filename, "wb"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |