From: <sag...@us...> - 2013-10-23 16:18:15
|
Revision: 2986 http://sourceforge.net/p/modplug/code/2986 Author: saga-games Date: 2013-10-23 16:18:07 +0000 (Wed, 23 Oct 2013) Log Message: ----------- [New] Export: Added option to clean output buffers of plugins before export (renders up to 20 seconds of silence per plugin) [Mod] OpenMPT: Version is now 1.22.05.08 Modified Paths: -------------- trunk/OpenMPT/common/versionNumber.h trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/Vstplug.h trunk/OpenMPT/mptrack/mod2wave.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/soundlib/plugins/PlugInterface.h trunk/OpenMPT/soundlib/plugins/PluginMixBuffer.h Modified: trunk/OpenMPT/common/versionNumber.h =================================================================== --- trunk/OpenMPT/common/versionNumber.h 2013-10-23 12:07:42 UTC (rev 2985) +++ trunk/OpenMPT/common/versionNumber.h 2013-10-23 16:18:07 UTC (rev 2986) @@ -17,7 +17,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 22 #define VER_MINOR 05 -#define VER_MINORMINOR 07 +#define VER_MINORMINOR 08 //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/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-10-23 12:07:42 UTC (rev 2985) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-10-23 16:18:07 UTC (rev 2986) @@ -175,6 +175,18 @@ FillInfo(); + GetDlgItem(IDC_GIVEPLUGSIDLETIME)->EnableWindow(FALSE); + GetDlgItem(IDC_RENDERSILENCE)->EnableWindow(FALSE); + for(PLUGINDEX i = 0; i < MAX_MIXPLUGINS; i++) + { + if(m_pSndFile->m_MixPlugins[i].pMixPlugin != nullptr) + { + GetDlgItem(IDC_GIVEPLUGSIDLETIME)->EnableWindow(TRUE); + GetDlgItem(IDC_RENDERSILENCE)->EnableWindow(TRUE); + break; + } + } + UpdateDialog(); return TRUE; } @@ -480,6 +492,7 @@ loopCount = static_cast<uint16>(GetDlgItemInt(IDC_EDIT5, NULL, FALSE)); if (m_nMaxOrder < m_nMinOrder) m_bSelectPlay = false; m_Settings.Normalize = IsDlgButtonChecked(IDC_CHECK5) != BST_UNCHECKED; + m_Settings.SilencePlugBuffers = IsDlgButtonChecked(IDC_RENDERSILENCE) != BST_UNCHECKED; m_bGivePlugsIdleTime = IsDlgButtonChecked(IDC_GIVEPLUGSIDLETIME) != BST_UNCHECKED; if (m_bGivePlugsIdleTime) { @@ -604,11 +617,12 @@ //-------------------------------------------------------------------------------------------------------------------------- : EncoderFactories(encFactories) , EncoderIndex(defaultEncoder) - , Normalize(false) , SampleRate(44100) , Channels(2) , FinalSampleFormat(SampleFormatInt16) , EncoderSettings(true, Encoder::ModeCBR, 256, 0.8f, -1) + , Normalize(false) + , SilencePlugBuffers(false) { SelectEncoder(EncoderIndex); } @@ -672,6 +686,26 @@ ASSERT(m_Settings.GetEncoderFactory() && m_Settings.GetEncoderFactory()->IsAvailable()); IAudioStreamEncoder *fileEnc = m_Settings.GetEncoderFactory()->ConstructStreamEncoder(fileStream); + // Silence mix buffer of plugins, for plugins that don't clear their reverb buffers and similar stuff when they are reset + if(m_Settings.SilencePlugBuffers) + { + for(PLUGINDEX i = 0; i < MAX_MIXPLUGINS; i++) + { + if(m_pSndFile->m_MixPlugins[i].pMixPlugin != nullptr) + { + // Render up to 20 seconds per plugin + for(int j = 0; j < 20; j++) + { + const float maxVal = m_pSndFile->m_MixPlugins[i].pMixPlugin->RenderSilence(m_Settings.SampleRate); + if(maxVal <= FLT_EPSILON) + { + break; + } + } + } + } + } + MixerSettings oldmixersettings = m_pSndFile->m_MixerSettings; MixerSettings mixersettings = TrackerSettings::Instance().m_MixerSettings; mixersettings.m_nMaxMixChannels = MAX_CHANNELS; // always use max mixing channels when rendering @@ -715,7 +749,7 @@ uint64 l = static_cast<uint64>(m_pSndFile->GetSongTime() + 0.5) * m_Settings.SampleRate * std::max<uint64>(1, 1 + m_pSndFile->GetRepeatCount()); if (m_nMaxPatterns > 0) { - DWORD dwOrds = m_pSndFile->Order.GetLengthFirstEmpty(); + ORDERINDEX dwOrds = m_pSndFile->Order.GetLengthFirstEmpty(); if ((m_nMaxPatterns < dwOrds) && (dwOrds > 0)) l = (l*m_nMaxPatterns) / dwOrds; } Modified: trunk/OpenMPT/mptrack/Vstplug.cpp =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.cpp 2013-10-23 12:07:42 UTC (rev 2985) +++ trunk/OpenMPT/mptrack/Vstplug.cpp 2013-10-23 16:18:07 UTC (rev 2986) @@ -2049,6 +2049,46 @@ } +// Render some silence and return maximum level returned by the plugin. +float CVstPlugin::RenderSilence(size_t numSamples) +//------------------------------------------------ +{ + // The JUCE framework doesn't like processing while being suspended. + const bool wasSuspended = !IsResumed(); + if(wasSuspended) + { + Resume(); + } + + float out[2][MIXBUFFERSIZE]; // scratch buffers + float maxVal = 0.0f; + + while(numSamples > 0) + { + size_t renderSamples = numSamples; + LimitMax(renderSamples, CountOf(out[0])); + MemsetZero(out); + + mixBuffer.ClearInputBuffers(renderSamples); + Process(out[0], out[1], renderSamples); + for(size_t i = 0; i < renderSamples; i++) + { + maxVal = std::max(maxVal, fabs(out[0][i])); + maxVal = std::max(maxVal, fabs(out[1][i])); + } + + numSamples -= renderSamples; + } + + if(wasSuspended) + { + Suspend(); + } + + return maxVal; +} + + void CVstPlugin::Process(float *pOutL, float *pOutR, size_t nSamples) //------------------------------------------------------------------- { @@ -2301,7 +2341,7 @@ void CVstPlugin::HardAllNotesOff() //-------------------------------- { - float in[2][SCRATCH_BUFFER_SIZE], out[2][SCRATCH_BUFFER_SIZE]; // scratch buffers + float out[2][SCRATCH_BUFFER_SIZE]; // scratch buffers // The JUCE framework doesn't like processing while being suspended. const bool wasSuspended = !IsResumed(); @@ -2334,14 +2374,13 @@ // let plug process events while(vstEvents.GetNumQueuedEvents() > 0) { - Process((float*)in, (float*)out, SCRATCH_BUFFER_SIZE); + Process(out[0], out[1], SCRATCH_BUFFER_SIZE); } if(wasSuspended) { Suspend(); } - } Modified: trunk/OpenMPT/mptrack/Vstplug.h =================================================================== --- trunk/OpenMPT/mptrack/Vstplug.h 2013-10-23 12:07:42 UTC (rev 2985) +++ trunk/OpenMPT/mptrack/Vstplug.h 2013-10-23 16:18:07 UTC (rev 2986) @@ -240,6 +240,7 @@ void RestoreAllParameters(long nProg=-1); //rewbs.plugDefaultProgram - added param void RecalculateGain(); void Process(float *pOutL, float *pOutR, size_t nSamples); + float RenderSilence(size_t numSamples); bool MidiSend(uint32 dwMidiCode); bool MidiSysexSend(const char *message, uint32 length); void MidiCC(uint8 nMidiCh, MIDIEvents::MidiCC nController, uint8 nParam, CHANNELINDEX trackChannel); Modified: trunk/OpenMPT/mptrack/mod2wave.h =================================================================== --- trunk/OpenMPT/mptrack/mod2wave.h 2013-10-23 12:07:42 UTC (rev 2985) +++ trunk/OpenMPT/mptrack/mod2wave.h 2013-10-23 16:18:07 UTC (rev 2986) @@ -20,12 +20,14 @@ { std::vector<EncoderFactoryBase*> EncoderFactories; std::size_t EncoderIndex; - bool Normalize; uint32 SampleRate; uint16 Channels; SampleFormat FinalSampleFormat; Encoder::Settings EncoderSettings; FileTags Tags; + bool Normalize; + bool SilencePlugBuffers; + void SelectEncoder(std::size_t index); EncoderFactoryBase *GetEncoderFactory() const; const Encoder::Traits *GetTraits() const; Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2013-10-23 12:07:42 UTC (rev 2985) +++ trunk/OpenMPT/mptrack/mptrack.rc 2013-10-23 16:18:07 UTC (rev 2986) @@ -449,57 +449,60 @@ PUSHBUTTON "Default Settings",IDC_BUTTON_DEFAULT_RESAMPLING,186,180,66,12 END -IDD_WAVECONVERT DIALOGEX 0, 0, 400, 250 +IDD_WAVECONVERT DIALOGEX 0, 0, 388, 257 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Export" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN + DEFPUSHBUTTON "OK",IDOK,270,240,50,14 + PUSHBUTTON "Cancel",IDCANCEL,330,240,50,14 GROUPBOX "Format",IDC_STATIC,6,6,186,48 COMBOBOX IDC_COMBO5,12,18,66,82,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBO1,84,18,54,82,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBO4,144,18,42,82,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBO2,12,36,174,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Render",IDC_STATIC,6,60,186,84 + GROUPBOX "Render",IDC_STATIC,6,60,186,72 PUSHBUTTON "Player &Options",IDC_PLAYEROPTIONS,12,72,60,14,BS_CENTER CONTROL "&Channel mode (one file per channel)",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,90,168,12 CONTROL "&Instrument mode (one file per instrument)",IDC_CHECK6, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,102,168,12 CONTROL "&Normalize Output",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,114,168,12 + GROUPBOX "Limit",IDC_STATIC,6,138,186,96 + CONTROL "Limit file &size to: (KBytes)",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,151,111,11 + EDITTEXT IDC_EDIT1,132,151,50,12,ES_AUTOHSCROLL + CONTROL "Limit song &length to: (seconds)",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,170,111,10 + EDITTEXT IDC_EDIT2,132,170,50,12,ES_AUTOHSCROLL + LTEXT "Play:",IDC_STATIC,12,186,37,8 + CONTROL "&Entire song",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | BS_VCENTER,12,199,54,12 + EDITTEXT IDC_EDIT5,72,199,36,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN5,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,96,199,11,11 + LTEXT "times",IDC_STATIC,115,199,65,12,SS_CENTERIMAGE + CONTROL "From &position",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON | BS_VCENTER,12,216,58,12 + EDITTEXT IDC_EDIT3,72,216,36,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN3,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,96,216,11,11 + CTEXT "to",IDC_STATIC,114,150,8,12,SS_CENTERIMAGE + EDITTEXT IDC_EDIT4,126,216,36,12,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SPIN4,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,150,216,11,11 + GROUPBOX "Plugin Quirks",IDC_STATIC,198,6,186,42 CONTROL "Slow &render (for Kontakt+DFD)",IDC_GIVEPLUGSIDLETIME, - "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE | WS_TABSTOP,12,126,168,12 - GROUPBOX "Limit",IDC_STATIC,6,150,186,96 - CONTROL "Limit file &size to: (KBytes)",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,163,111,11 - EDITTEXT IDC_EDIT1,132,163,50,12,ES_AUTOHSCROLL - CONTROL "Limit song &length to: (seconds)",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,182,111,10 - EDITTEXT IDC_EDIT2,132,182,50,12,ES_AUTOHSCROLL - LTEXT "Play:",IDC_STATIC,12,198,37,8 - CONTROL "&Entire song",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | BS_VCENTER,12,211,54,12 - CONTROL "From &position",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON | BS_VCENTER,12,228,58,12 - EDITTEXT IDC_EDIT5,72,211,36,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "",IDC_SPIN5,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,96,211,11,11 - LTEXT "times",IDC_STATIC,115,211,65,12,SS_CENTERIMAGE - EDITTEXT IDC_EDIT3,72,228,36,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "",IDC_SPIN3,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,96,228,11,11 - CTEXT "to",IDC_STATIC,114,228,8,12,SS_CENTERIMAGE - EDITTEXT IDC_EDIT4,126,228,36,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "",IDC_SPIN4,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,150,228,11,11 - GROUPBOX "Tags",IDC_STATIC,198,102,198,120 - CONTROL "Include Song Information",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,204,114,132,10 - LTEXT "Title:",IDC_STATIC,204,133,17,8 - EDITTEXT IDC_EDIT11,240,130,150,12,ES_AUTOHSCROLL - LTEXT "Author:",IDC_STATIC,204,151,30,8 - EDITTEXT IDC_EDIT6,240,149,150,12,ES_AUTOHSCROLL - LTEXT "Album:",IDC_STATIC,204,170,30,8 - EDITTEXT IDC_EDIT7,240,167,150,12,ES_AUTOHSCROLL - LTEXT "URL:",IDC_STATIC,204,188,30,8 - EDITTEXT IDC_EDIT8,240,186,150,12,ES_AUTOHSCROLL - LTEXT "Genre:",IDC_STATIC,204,205,29,8 - COMBOBOX IDC_COMBO3,240,203,92,64,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP - RTEXT "Year:",IDC_STATIC,336,205,18,8 - EDITTEXT IDC_EDIT9,360,203,30,12,ES_AUTOHSCROLL | ES_NUMBER - DEFPUSHBUTTON "OK",IDOK,282,228,50,14 - PUSHBUTTON "Cancel",IDCANCEL,342,228,50,14 - EDITTEXT IDC_EDIT10,198,6,198,90,ES_MULTILINE | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP + "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE | WS_TABSTOP,204,18,174,12 + CONTROL "Clear plugin &buffers before exporting",IDC_RENDERSILENCE, + "Button",BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE | WS_TABSTOP,204,30,174,12 + EDITTEXT IDC_EDIT10,198,174,186,60,ES_MULTILINE | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "Tags",IDC_STATIC,198,54,186,114 + CONTROL "Incl&ude Song Information",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,204,66,174,10 + LTEXT "Title:",IDC_STATIC,204,80,17,8 + EDITTEXT IDC_EDIT11,240,78,138,12,ES_AUTOHSCROLL + LTEXT "Author:",IDC_STATIC,204,98,30,8 + EDITTEXT IDC_EDIT6,240,96,138,12,ES_AUTOHSCROLL + LTEXT "Album:",IDC_STATIC,204,116,30,8 + EDITTEXT IDC_EDIT7,240,114,138,12,ES_AUTOHSCROLL + LTEXT "URL:",IDC_STATIC,204,134,30,8 + EDITTEXT IDC_EDIT8,240,132,138,12,ES_AUTOHSCROLL + LTEXT "Genre:",IDC_STATIC,204,152,29,8 + COMBOBOX IDC_COMBO3,240,150,78,64,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP + RTEXT "Year:",IDC_STATIC,324,152,18,8 + EDITTEXT IDC_EDIT9,348,150,30,12,ES_AUTOHSCROLL | ES_NUMBER END IDD_PROGRESS DIALOG 0, 0, 186, 55 @@ -697,28 +700,28 @@ STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN - CONTROL "Follow Song",IDC_PATTERN_FOLLOWSONG,"Button",BS_AUTOCHECKBOX | BS_FLAT,312,33,55,8 + CONTROL "Toolbar1",IDC_TOOLBAR1,"ToolbarWindow32",WS_GROUP | 0x4d,2,4,370,18 + CONTROL "Spin1",IDC_SPIN_INSTRUMENT,"msctls_updown32",0x0,6,31,11,12 COMBOBOX IDC_COMBO_INSTRUMENT,18,31,102,137,CBS_DROPDOWNLIST | WS_VSCROLL + PUSHBUTTON "Plugin",IDC_PATINSTROPLUGGUI,126,31,33,13,0,WS_EX_STATICEDGE CTEXT "Row Spacing",IDC_STATIC,168,33,42,8,SS_CENTERIMAGE EDITTEXT IDC_EDIT_SPACING,216,31,28,12,ES_AUTOHSCROLL | ES_NUMBER | NOT WS_TABSTOP CONTROL "Spin1",IDC_SPIN_SPACING,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,236,31,11,11 + CONTROL "Loop Pattern",IDC_PATTERN_LOOP,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,252,33,57,8 + CONTROL "Follow Song",IDC_PATTERN_FOLLOWSONG,"Button",BS_AUTOCHECKBOX | BS_FLAT,312,33,55,8 + LTEXT "Pattern Name",IDC_STATIC_PATTERNNAME,384,33,48,8,SS_CENTERIMAGE + EDITTEXT IDC_EDIT_PATTERNNAME,438,31,109,12,ES_AUTOHSCROLL + LTEXT "Sequence",IDC_STATIC_SEQUENCE_NAME,384,10,36,8 + EDITTEXT IDC_EDIT_SEQNUM,420,8,28,12,ES_AUTOHSCROLL | ES_NUMBER | NOT WS_TABSTOP + CONTROL "",IDC_SPIN_SEQNUM,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,438,6,11,11 + EDITTEXT IDC_EDIT_SEQUENCE_NAME,450,8,97,12,ES_AUTOHSCROLL PUSHBUTTON "<<",IDC_BUTTON2,3,51,14,15,NOT WS_TABSTOP,WS_EX_STATICEDGE PUSHBUTTON ">>",IDC_BUTTON1,15,51,14,15,NOT WS_TABSTOP,WS_EX_STATICEDGE - LTEXT "Pattern Name",IDC_STATIC_PATTERNNAME,384,33,48,8,SS_CENTERIMAGE - EDITTEXT IDC_EDIT_PATTERNNAME,438,31,109,12,ES_AUTOHSCROLL - CONTROL "Toolbar1",IDC_TOOLBAR1,"ToolbarWindow32",WS_GROUP | 0x4d,2,4,370,18 - CONTROL "Spin1",IDC_SPIN_INSTRUMENT,"msctls_updown32",0x0,6,31,11,12 - PUSHBUTTON "Plugin",IDC_PATINSTROPLUGGUI,126,31,33,13,0,WS_EX_STATICEDGE GROUPBOX "",IDC_STATIC,3,23,369,24 - CONTROL "Loop Pattern",IDC_PATTERN_LOOP,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,252,33,57,8 EDITTEXT IDC_EDIT_ORDERLIST_MARGINS,3,65,28,12,ES_AUTOHSCROLL | ES_READONLY CONTROL "",IDC_SPIN_ORDERLIST_MARGINS,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_NOTHOUSANDS,16,70,11,11 - EDITTEXT IDC_EDIT_SEQUENCE_NAME,450,8,97,12,ES_AUTOHSCROLL - LTEXT "Sequence",IDC_STATIC_SEQUENCE_NAME,384,10,36,8 GROUPBOX "",IDC_STATIC_SEQUENCE_NAME_FRAME,378,0,174,24 GROUPBOX "",IDC_STATIC,378,23,174,24 - EDITTEXT IDC_EDIT_SEQNUM,420,8,28,12,ES_AUTOHSCROLL | ES_NUMBER | NOT WS_TABSTOP - CONTROL "",IDC_SPIN_SEQNUM,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,438,6,11,11 END IDD_CONTROL_SAMPLES DIALOGEX 0, 0, 544, 106 @@ -1012,7 +1015,7 @@ CONTROL "Dry Mix",IDC_CHECK11,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_TABSTOP,199,286,37,10 COMBOBOX IDC_COMBO9,285,241,62,99,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "Gain: x 1.0",IDC_STATIC2,353,241,37,14,SS_CENTERIMAGE - CONTROL "",IDC_SPIN10,"msctls_updown32",UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS,392,242,9,11 + CONTROL "",IDC_SPIN10,"msctls_updown32",UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_TABSTOP,392,242,9,11 COMBOBOX IDC_COMBO7,285,261,117,68,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "",IDC_SLIDER10,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,314,282,88,14,WS_EX_STATICEDGE GROUPBOX "Plugins",IDC_STATIC,5,177,408,131 @@ -1605,8 +1608,8 @@ IDD_WAVECONVERT, DIALOG BEGIN - RIGHTMARGIN, 349 - BOTTOMMARGIN, 247 + RIGHTMARGIN, 337 + BOTTOMMARGIN, 254 END IDD_OPTIONS_KEYBOARD, DIALOG Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2013-10-23 12:07:42 UTC (rev 2985) +++ trunk/OpenMPT/mptrack/resource.h 2013-10-23 16:18:07 UTC (rev 2986) @@ -735,6 +735,7 @@ #define IDC_SECONDARYHILITE 2227 #define IDC_GIVEPLUGSIDLETIME 2228 #define IDC_ROWSPERBEAT 2229 +#define IDC_RENDERSILENCE 2229 #define IDC_ROWSPERMEASURE 2230 #define IDC_GOTO_ROW 2231 #define IDC_GOTO_CHAN 2232 Modified: trunk/OpenMPT/soundlib/plugins/PlugInterface.h =================================================================== --- trunk/OpenMPT/soundlib/plugins/PlugInterface.h 2013-10-23 12:07:42 UTC (rev 2985) +++ trunk/OpenMPT/soundlib/plugins/PlugInterface.h 2013-10-23 16:18:07 UTC (rev 2986) @@ -40,6 +40,7 @@ virtual void SaveAllParameters() = 0; virtual void RestoreAllParameters(long nProg=-1) = 0; //rewbs.plugDefaultProgram: added param virtual void Process(float *pOutL, float *pOutR, size_t nSamples) = 0; + virtual float RenderSilence(size_t numSamples) = 0; virtual bool MidiSend(uint32 dwMidiCode) = 0; virtual bool MidiSysexSend(const char *message, uint32 length) = 0; virtual void MidiCC(uint8 nMidiCh, MIDIEvents::MidiCC nController, uint8 nParam, CHANNELINDEX trackChannel) = 0; Modified: trunk/OpenMPT/soundlib/plugins/PluginMixBuffer.h =================================================================== --- trunk/OpenMPT/soundlib/plugins/PluginMixBuffer.h 2013-10-23 12:07:42 UTC (rev 2985) +++ trunk/OpenMPT/soundlib/plugins/PluginMixBuffer.h 2013-10-23 16:18:07 UTC (rev 2986) @@ -107,6 +107,17 @@ } // Silence all output buffers. + void ClearInputBuffers(size_t numSamples) + //--------------------------------------- + { + ASSERT(numSamples <= bufferSize); + for(size_t i = 0; i < outputs; i++) + { + memset(inputsArray[i], 0, numSamples * sizeof(buffer_t)); + } + } + + // Silence all output buffers. void ClearOutputBuffers(size_t numSamples) //---------------------------------------- { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |