171 lines
5.8 KiB
C
171 lines
5.8 KiB
C
|
/*
|
||
|
* Ctrl_smp.h
|
||
|
* ----------
|
||
|
* Purpose: Sample tab, upper panel.
|
||
|
* Notes : (currently none)
|
||
|
* Authors: Olivier Lapicque
|
||
|
* OpenMPT Devs
|
||
|
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
|
||
|
*/
|
||
|
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include "openmpt/all/BuildSettings.hpp"
|
||
|
|
||
|
#include "../soundlib/SampleIO.h"
|
||
|
#include "../tracklib/FadeLaws.h"
|
||
|
|
||
|
OPENMPT_NAMESPACE_BEGIN
|
||
|
|
||
|
enum OpenSampleTypes
|
||
|
{
|
||
|
OpenSampleKnown = (1<<0),
|
||
|
OpenSampleRaw = (1<<1),
|
||
|
};
|
||
|
MPT_DECLARE_ENUM(OpenSampleTypes)
|
||
|
|
||
|
class CCtrlSamples: public CModControlDlg
|
||
|
{
|
||
|
protected:
|
||
|
friend class DoPitchShiftTimeStretch;
|
||
|
|
||
|
struct SampleSelectionPoints
|
||
|
{
|
||
|
SmpLength nStart;
|
||
|
SmpLength nEnd;
|
||
|
bool selectionActive; // does sample selection exist or not?
|
||
|
};
|
||
|
|
||
|
CModControlBar m_ToolBar1, m_ToolBar2;
|
||
|
CEdit m_EditSample, m_EditName, m_EditFileName, m_EditFineTune;
|
||
|
CEdit m_EditLoopStart, m_EditLoopEnd, m_EditSustainStart, m_EditSustainEnd;
|
||
|
CEdit m_EditVibSweep, m_EditVibDepth, m_EditVibRate;
|
||
|
CEdit m_EditVolume, m_EditGlobalVol, m_EditPanning;
|
||
|
CSpinButtonCtrl m_SpinVolume, m_SpinGlobalVol, m_SpinPanning, m_SpinVibSweep, m_SpinVibDepth, m_SpinVibRate;
|
||
|
CSpinButtonCtrl m_SpinLoopStart, m_SpinLoopEnd, m_SpinSustainStart, m_SpinSustainEnd;
|
||
|
CSpinButtonCtrl m_SpinFineTune, m_SpinSample;
|
||
|
CSpinButtonCtrl m_SpinSequenceMs, m_SpinSeekWindowMs, m_SpinOverlap, m_SpinStretchAmount;
|
||
|
CComboBox m_ComboAutoVib, m_ComboLoopType, m_ComboSustainType, m_ComboZoom, m_CbnBaseNote;
|
||
|
CButton m_CheckPanning;
|
||
|
double m_dTimeStretchRatio = 100;
|
||
|
uint32 m_nSequenceMs = 0;
|
||
|
uint32 m_nSeekWindowMs = 0;
|
||
|
uint32 m_nOverlapMs = 0;
|
||
|
SAMPLEINDEX m_nSample = 1;
|
||
|
INSTRUMENTINDEX m_editInstrumentName = INSTRUMENTINDEX_INVALID;
|
||
|
bool m_rememberRawFormat = false;
|
||
|
bool m_startedEdit = false;
|
||
|
|
||
|
CComboBox m_ComboPitch, m_ComboQuality, m_ComboFFT;
|
||
|
|
||
|
void UpdateTimeStretchParameters();
|
||
|
void ReadTimeStretchParameters();
|
||
|
|
||
|
void ApplyAmplify(const double amp, const double fadeInStart, const double fadeOutEnd, const bool fadeIn, const bool fadeOut, const Fade::Law fadeLaw);
|
||
|
void ApplyResample(SAMPLEINDEX smp, uint32 newRate, ResamplingMode mode, bool ignoreSelection = false, bool updatePatternCommands = false);
|
||
|
|
||
|
SampleSelectionPoints GetSelectionPoints();
|
||
|
void SetSelectionPoints(SmpLength nStart, SmpLength nEnd);
|
||
|
|
||
|
void PropagateAutoVibratoChanges();
|
||
|
|
||
|
bool IsOPLInstrument() const;
|
||
|
|
||
|
INSTRUMENTINDEX GetParentInstrumentWithSameName() const;
|
||
|
|
||
|
public:
|
||
|
CCtrlSamples(CModControlView &parent, CModDoc &document);
|
||
|
~CCtrlSamples();
|
||
|
|
||
|
bool SetCurrentSample(SAMPLEINDEX nSmp, LONG lZoom = -1, bool bUpdNum = true);
|
||
|
bool InsertSample(bool duplicate, int8 *confirm = nullptr);
|
||
|
bool OpenSample(const mpt::PathString &fileName, FlagSet<OpenSampleTypes> types = OpenSampleKnown | OpenSampleRaw);
|
||
|
bool OpenSample(const CSoundFile &sndFile, SAMPLEINDEX nSample);
|
||
|
void OpenSamples(const std::vector<mpt::PathString> &files, FlagSet<OpenSampleTypes> types);
|
||
|
void SaveSample(bool doBatchSave);
|
||
|
|
||
|
void Normalize(bool allSamples);
|
||
|
void RemoveDCOffset(bool allSamples);
|
||
|
|
||
|
Setting<LONG> &GetSplitPosRef() override {return TrackerSettings::Instance().glSampleWindowHeight;}
|
||
|
|
||
|
public:
|
||
|
//{{AFX_VIRTUAL(CCtrlSamples)
|
||
|
BOOL OnInitDialog() override;
|
||
|
void DoDataExchange(CDataExchange* pDX) override; // DDX/DDV support
|
||
|
CRuntimeClass *GetAssociatedViewClass() override;
|
||
|
void RecalcLayout() override;
|
||
|
void OnActivatePage(LPARAM) override;
|
||
|
void OnDeactivatePage() override;
|
||
|
void UpdateView(UpdateHint hint, CObject *pObj = nullptr) override;
|
||
|
LRESULT OnModCtrlMsg(WPARAM wParam, LPARAM lParam) override;
|
||
|
BOOL GetToolTipText(UINT uId, LPTSTR pszText) override;
|
||
|
BOOL PreTranslateMessage(MSG* pMsg) override;
|
||
|
//}}AFX_VIRTUAL
|
||
|
protected:
|
||
|
//{{AFX_MSG(CCtrlSamples)
|
||
|
afx_msg void OnEditFocus();
|
||
|
afx_msg void OnSampleChanged();
|
||
|
afx_msg void OnZoomChanged();
|
||
|
afx_msg void OnPrevInstrument();
|
||
|
afx_msg void OnNextInstrument();
|
||
|
afx_msg void OnTbnDropDownToolBar(NMHDR* pNMHDR, LRESULT* pResult);
|
||
|
afx_msg void OnSampleNew();
|
||
|
afx_msg void OnSampleDuplicate() { InsertSample(true); }
|
||
|
afx_msg void OnSampleOpen();
|
||
|
afx_msg void OnSampleOpenKnown();
|
||
|
afx_msg void OnSampleOpenRaw();
|
||
|
afx_msg void OnSampleSave();
|
||
|
afx_msg void OnSampleSaveOne() { SaveSample(false); }
|
||
|
afx_msg void OnSampleSaveAll() { SaveSample(true); }
|
||
|
afx_msg void OnSamplePlay();
|
||
|
afx_msg void OnNormalize();
|
||
|
afx_msg void OnAmplify();
|
||
|
afx_msg void OnQuickFade();
|
||
|
afx_msg void OnRemoveDCOffset();
|
||
|
afx_msg void OnResample();
|
||
|
afx_msg void OnReverse();
|
||
|
afx_msg void OnSilence();
|
||
|
afx_msg void OnInvert();
|
||
|
afx_msg void OnSignUnSign();
|
||
|
afx_msg void OnAutotune();
|
||
|
afx_msg void OnNameChanged();
|
||
|
afx_msg void OnFileNameChanged();
|
||
|
afx_msg void OnVolumeChanged();
|
||
|
afx_msg void OnGlobalVolChanged();
|
||
|
afx_msg void OnSetPanningChanged();
|
||
|
afx_msg void OnPanningChanged();
|
||
|
afx_msg void OnFineTuneChanged();
|
||
|
afx_msg void OnFineTuneChangedDone();
|
||
|
afx_msg void OnBaseNoteChanged();
|
||
|
afx_msg void OnLoopTypeChanged();
|
||
|
afx_msg void OnLoopPointsChanged();
|
||
|
afx_msg void OnSustainTypeChanged();
|
||
|
afx_msg void OnSustainPointsChanged();
|
||
|
afx_msg void OnVibTypeChanged();
|
||
|
afx_msg void OnVibDepthChanged();
|
||
|
afx_msg void OnVibSweepChanged();
|
||
|
afx_msg void OnVibRateChanged();
|
||
|
afx_msg void OnXFade();
|
||
|
afx_msg void OnStereoSeparation();
|
||
|
afx_msg void OnKeepSampleOnDisk();
|
||
|
afx_msg void OnVScroll(UINT, UINT, CScrollBar *);
|
||
|
afx_msg LRESULT OnCustomKeyMsg(WPARAM, LPARAM);
|
||
|
afx_msg void OnXButtonUp(UINT nFlags, UINT nButton, CPoint point);
|
||
|
|
||
|
afx_msg void OnPitchShiftTimeStretch();
|
||
|
afx_msg void OnEnableStretchToSize();
|
||
|
afx_msg void OnEstimateSampleSize();
|
||
|
|
||
|
afx_msg void OnInitOPLInstrument();
|
||
|
|
||
|
MPT_NOINLINE void SetModified(SampleHint hint, bool updateAll, bool waveformModified);
|
||
|
void PrepareUndo(const char *description, sampleUndoTypes type = sundo_none, SmpLength start = 0, SmpLength end = 0);
|
||
|
|
||
|
//}}AFX_MSG
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
};
|
||
|
|
||
|
OPENMPT_NAMESPACE_END
|