From: <man...@us...> - 2014-02-01 21:26:12
|
Revision: 3623 http://sourceforge.net/p/modplug/code/3623 Author: manxorist Date: 2014-02-01 21:26:00 +0000 (Sat, 01 Feb 2014) Log Message: ----------- [Mod] Move mixer-related settings from the Soundcard and Player settings pages into their own page. Rename Player settings page to DSP as it only contains DSP-related settings after the move. [Ref] sounddev: Split KeepDeviceRunnig from ExclusiveMode setting. [New] Add dithering option to soundcard settings. [New] Make KeepDeviceRunning and HardwareTiming settings accessable via GUI. [New] Make KeepDeviceOpen and OpenDeviceAtStartup settings accessable via GUI. [Mod] Change the unit of volume ramping settings from samples to microseconds so that stays consistent accross sample rate changes. [Mod] Mod Export: Only show settings pages that are relevant for rendering in player options dialog. [Mod] OpenMPT: Version is now 1.22.07.18 Modified Paths: -------------- trunk/OpenMPT/common/versionNumber.h trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/Moptions.h trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/mptrack/Mpdlgs.h trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/sounddev/SoundDevice.h trunk/OpenMPT/sounddev/SoundDeviceASIO.cpp trunk/OpenMPT/soundlib/MixerSettings.cpp trunk/OpenMPT/soundlib/MixerSettings.h trunk/OpenMPT/soundlib/Sndmix.cpp Modified: trunk/OpenMPT/common/versionNumber.h =================================================================== --- trunk/OpenMPT/common/versionNumber.h 2014-02-01 20:47:55 UTC (rev 3622) +++ trunk/OpenMPT/common/versionNumber.h 2014-02-01 21:26:00 UTC (rev 3623) @@ -17,7 +17,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 22 #define VER_MINOR 07 -#define VER_MINORMINOR 17 +#define VER_MINORMINOR 18 //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/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2014-02-01 20:47:55 UTC (rev 3622) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2014-02-01 21:26:00 UTC (rev 3623) @@ -1158,14 +1158,6 @@ } -void CMainFrame::SetPreAmp(UINT n) -//-------------------------------- -{ - TrackerSettings::Instance().MixerPreAmp = n; - if (m_pSndFile) m_pSndFile->SetPreAmp(TrackerSettings::Instance().MixerPreAmp); -} - - void CMainFrame::ResetNotificationBuffer() //---------------------------------------- { @@ -1786,6 +1778,7 @@ COptionsKeyboard keyboard; COptionsColors colors; COptionsPlayer playerdlg; + COptionsMixer mixerdlg; CMidiSetupDlg mididlg(TrackerSettings::Instance().m_dwMidiSetup, TrackerSettings::Instance().m_nMidiDevice); #ifndef NO_EQ CEQSetupDlg eqdlg(&TrackerSettings::Instance().m_EqSettings); @@ -1797,7 +1790,10 @@ #endif // MPT_SETTINGS_CACHE dlg.AddPage(&general); dlg.AddPage(&sounddlg); + dlg.AddPage(&mixerdlg); +#if !defined(NO_REVERB) || !defined(NO_DSP) || !defined(NO_EQ) || !defined(NO_AGC) dlg.AddPage(&playerdlg); +#endif #ifndef NO_EQ dlg.AddPage(&eqdlg); #endif Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2014-02-01 20:47:55 UTC (rev 3622) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2014-02-01 21:26:00 UTC (rev 3623) @@ -470,7 +470,6 @@ BOOL SetupDirectories(const mpt::PathString &szModDir, const mpt::PathString &szSampleDir, const mpt::PathString &szInstrDir, const mpt::PathString &szVstDir, const mpt::PathString &szPresetDir); BOOL SetupMidi(DWORD d, LONG n); - void SetPreAmp(UINT n); HWND GetFollowSong() const; HWND GetFollowSong(const CModDoc *pDoc) const { return (pDoc == GetModPlaying()) ? GetFollowSong() : NULL; } void ResetNotificationBuffer(); Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2014-02-01 20:47:55 UTC (rev 3622) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2014-02-01 21:26:00 UTC (rev 3623) @@ -600,8 +600,16 @@ void CWaveConvert::OnPlayerOptions() //---------------------------------- { - CMainFrame::m_nLastOptionsPage = 2; - CMainFrame::GetMainFrame()->OnViewOptions(); + CPropertySheet dlg("Mixer Settings", this); + COptionsMixer mixerpage; + dlg.AddPage(&mixerpage); + COptionsPlayer dsppage; + dlg.AddPage(&dsppage); +#ifndef NO_EQ + CEQSetupDlg eqpage(&TrackerSettings::Instance().m_EqSettings); + dlg.AddPage(&eqpage); +#endif + dlg.DoModal(); } Modified: trunk/OpenMPT/mptrack/Moptions.h =================================================================== --- trunk/OpenMPT/mptrack/Moptions.h 2014-02-01 20:47:55 UTC (rev 3622) +++ trunk/OpenMPT/mptrack/Moptions.h 2014-02-01 21:26:00 UTC (rev 3623) @@ -16,6 +16,7 @@ enum { OPTIONS_PAGE_GENERAL=0, OPTIONS_PAGE_SOUNDCARD, + OPTIONS_PAGE_MIXER, OPTIONS_PAGE_PLAYER, OPTIONS_PAGE_EQ, OPTIONS_PAGE_KEYBOARD, Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp 2014-02-01 20:47:55 UTC (rev 3622) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp 2014-02-01 21:26:00 UTC (rev 3623) @@ -73,7 +73,8 @@ ON_CBN_SELCHANGE(IDC_COMBO3, OnSettingsChanged) ON_CBN_SELCHANGE(IDC_COMBO4, OnSettingsChanged) ON_CBN_SELCHANGE(IDC_COMBO5, OnSettingsChanged) - ON_CBN_SELCHANGE(IDC_COMBO6, OnSettingsChanged) + ON_CBN_SELCHANGE(IDC_COMBO6, OnSampleFormatChanged) + ON_CBN_SELCHANGE(IDC_COMBO10, OnSettingsChanged) ON_CBN_SELCHANGE(IDC_COMBO9, OnSettingsChanged) ON_CBN_EDITCHANGE(IDC_COMBO2, OnSettingsChanged) ON_CBN_EDITCHANGE(IDC_COMBO_UPDATEINTERVAL, OnSettingsChanged) @@ -82,6 +83,14 @@ END_MESSAGE_MAP() +void COptionsSoundcard::OnSampleFormatChanged() +//--------------------------------------------- +{ + OnSettingsChanged(); + UpdateDither(); +} + + void COptionsSoundcard::DoDataExchange(CDataExchange* pDX) //-------------------------------------------------------- { @@ -91,13 +100,11 @@ DDX_Control(pDX, IDC_COMBO2, m_CbnLatencyMS); DDX_Control(pDX, IDC_COMBO_UPDATEINTERVAL, m_CbnUpdateIntervalMS); DDX_Control(pDX, IDC_COMBO3, m_CbnMixingFreq); - DDX_Control(pDX, IDC_COMBO4, m_CbnPolyphony); DDX_Control(pDX, IDC_COMBO5, m_CbnChannels); DDX_Control(pDX, IDC_COMBO6, m_CbnSampleFormat); + DDX_Control(pDX, IDC_COMBO10, m_CbnDither); DDX_Control(pDX, IDC_COMBO9, m_CbnBaseChannel); DDX_Control(pDX, IDC_BUTTON2, m_BtnDriverPanel); - DDX_Control(pDX, IDC_SLIDER1, m_SliderStereoSep); - DDX_Control(pDX, IDC_SLIDER_PREAMP, m_SliderPreAmp); DDX_Control(pDX, IDC_EDIT_STATISTICS, m_EditStatistics); //}}AFX_DATA_MAP } @@ -110,7 +117,7 @@ , m_CurrentDeviceCaps(theApp.GetSoundDevicesManager()->GetDeviceCaps(dev, TrackerSettings::Instance().GetSampleRates(), CMainFrame::GetMainFrame(), CMainFrame::GetMainFrame()->gpSoundDevice, true)) , m_Settings(TrackerSettings::Instance().GetSoundDeviceSettings(dev)) { - m_PreAmpNoteShowed = false; + return; } @@ -204,41 +211,12 @@ void COptionsSoundcard::UpdateEverything() //---------------------------------------- { - - CHAR s[128]; - - CheckDlgButton(IDC_CHECK2, (TrackerSettings::Instance().MixerFlags & SNDMIX_SOFTPANNING) ? MF_CHECKED : MF_UNCHECKED); - - // Max Mixing Channels + // General { - m_CbnPolyphony.ResetContent(); - for (UINT n = 0; n < CountOf(nCPUMix); n++) - { - wsprintf(s, "%d (%s)", nCPUMix[n], szCPUNames[n]); - m_CbnPolyphony.AddString(s); - if (TrackerSettings::Instance().MixerMaxChannels == nCPUMix[n]) m_CbnPolyphony.SetCurSel(n); - } + CheckDlgButton(IDC_CHECK6, TrackerSettings::Instance().m_SoundSettingsKeepDeviceOpen ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(IDC_CHECK7, TrackerSettings::Instance().m_SoundSettingsOpenDeviceAtStartup ? BST_CHECKED : BST_UNCHECKED); } - // Stereo Separation - { - m_SliderStereoSep.SetRange(0, 4); - m_SliderStereoSep.SetPos(2); - for (int n=0; n<=4; n++) - { - if ((int)TrackerSettings::Instance().MixerStereoSeparation <= (int)(32 << n)) - { - m_SliderStereoSep.SetPos(n); - break; - } - } - UpdateStereoSep(); - } - // Pre-Amplification - { - m_SliderPreAmp.SetTicFreq(5); - m_SliderPreAmp.SetRange(0, 40); - SetPreAmpSliderPosition(); - } + // Sound Device { m_CbnDevice.ResetContent(); @@ -325,6 +303,7 @@ UpdateSampleRates(); UpdateChannels(); UpdateSampleFormat(); + UpdateDither(); } @@ -369,7 +348,6 @@ } m_CbnBaseChannel.SetCurSel(sel); } - m_BtnDriverPanel.ShowWindow(m_CurrentDeviceCaps.CanDriverPanel ? SW_SHOW : SW_HIDE); } @@ -385,7 +363,7 @@ { if(m_CurrentDeviceCaps.CanSampleFormat || (SampleFormatFloat32 == m_Settings.sampleFormat)) { - UINT ndx = m_CbnSampleFormat.AddString("Floating Point"); + UINT ndx = m_CbnSampleFormat.AddString("Float"); m_CbnSampleFormat.SetItemData(ndx, (32+128)); if(SampleFormatFloat32 == m_Settings.sampleFormat) { @@ -409,63 +387,40 @@ } -void COptionsSoundcard::OnHScroll(UINT n, UINT pos, CScrollBar *p) -//---------------------------------------------------------------- +void COptionsSoundcard::UpdateDither() +//------------------------------------ { - CPropertyPage::OnHScroll(n, pos, p); - // stereo sep + UINT n = 0; + m_CbnDither.ResetContent(); + SampleFormat sampleFormat = (SampleFormat)(m_CbnSampleFormat.GetItemData(m_CbnSampleFormat.GetCurSel())); + if(sampleFormat.IsInt()) { - UpdateStereoSep(); + m_CbnDither.EnableWindow(TRUE); + m_CbnDither.AddString("no dithering"); + m_CbnDither.AddString("default dithering"); + m_CbnDither.AddString("0.5bit dithering"); + m_CbnDither.AddString("1bit dithering"); + } else if(m_CurrentDeviceCaps.HasInternalDither) + { + m_CbnDither.EnableWindow(TRUE); + m_CbnDither.AddString("no dithering"); + m_CbnDither.AddString("default dithering"); + } else + { + m_CbnDither.EnableWindow(FALSE); + m_CbnDither.AddString("no dithering"); + m_CbnDither.AddString("no dithering"); } - // PreAmp - if(p == (CScrollBar *)(&m_SliderPreAmp)) + if(m_Settings.DitherType < 0 || m_Settings.DitherType > m_CbnDither.GetCount()) { - if(m_PreAmpNoteShowed == true) - { - int n = m_SliderPreAmp.GetPos(); - if ((n >= 0) && (n <= 40)) // approximately +/- 10dB - { - CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); - if (pMainFrm) pMainFrm->SetPreAmp(64 + (n * 8)); - } - } else - { - m_PreAmpNoteShowed = true; - Reporting::Information(str_preampChangeNote); - SetPreAmpSliderPosition(); - } + m_CbnDither.SetCurSel(1); + } else + { + m_CbnDither.SetCurSel(m_Settings.DitherType); } } -void COptionsSoundcard::UpdateStereoSep() -//--------------------------------------- -{ - CHAR s[64]; - TrackerSettings::Instance().MixerStereoSeparation = 32 << m_SliderStereoSep.GetPos(); - CMainFrame::GetMainFrame()->SetupPlayer(); - wsprintf(s, "%d%%", (TrackerSettings::Instance().MixerStereoSeparation * 100) / 128); - SetDlgItemText(IDC_TEXT1, s); - -} - - -void COptionsSoundcard::SetPreAmpSliderPosition() -//----------------------------------------------- -{ - int n = (TrackerSettings::Instance().MixerPreAmp - 64) / 8; - if ((n < 0) || (n > 40)) n = 16; - m_SliderPreAmp.SetPos(n); -} - - -void COptionsSoundcard::OnVScroll(UINT n, UINT pos, CScrollBar *p) -//---------------------------------------------------------------- -{ - CPropertyPage::OnVScroll(n, pos, p); -} - - void COptionsSoundcard::OnDeviceChanged() //--------------------------------------- { @@ -519,13 +474,22 @@ void COptionsSoundcard::UpdateControls() //-------------------------------------- { + if(!m_CurrentDeviceCaps.CanKeepDeviceRunning) + { + m_Settings.KeepDeviceRunning = false; + } + m_BtnDriverPanel.EnableWindow(m_CurrentDeviceCaps.CanDriverPanel ? TRUE : FALSE); GetDlgItem(IDC_CHECK4)->EnableWindow(m_CurrentDeviceCaps.CanExclusiveMode ? TRUE : FALSE); GetDlgItem(IDC_CHECK5)->EnableWindow(m_CurrentDeviceCaps.CanBoostThreadPriority ? TRUE : FALSE); + GetDlgItem(IDC_CHECK8)->EnableWindow(m_CurrentDeviceCaps.CanKeepDeviceRunning ? TRUE : FALSE); + GetDlgItem(IDC_CHECK9)->EnableWindow(m_CurrentDeviceCaps.CanUseHardwareTiming ? TRUE : FALSE); GetDlgItem(IDC_STATIC_UPDATEINTERVAL)->EnableWindow(m_CurrentDeviceCaps.CanUpdateInterval ? TRUE : FALSE); GetDlgItem(IDC_COMBO_UPDATEINTERVAL)->EnableWindow(m_CurrentDeviceCaps.CanUpdateInterval ? TRUE : FALSE); GetDlgItem(IDC_CHECK4)->SetWindowText(mpt::ToCString(m_CurrentDeviceCaps.ExclusiveModeDescription)); CheckDlgButton(IDC_CHECK4, m_Settings.ExclusiveMode ? MF_CHECKED : MF_UNCHECKED); CheckDlgButton(IDC_CHECK5, m_Settings.BoostThreadPriority ? MF_CHECKED : MF_UNCHECKED); + CheckDlgButton(IDC_CHECK8, m_Settings.KeepDeviceRunning ? MF_CHECKED : MF_UNCHECKED); + CheckDlgButton(IDC_CHECK9, m_Settings.UseHardwareTiming ? MF_CHECKED : MF_UNCHECKED); } @@ -540,12 +504,15 @@ void COptionsSoundcard::OnOK() //---------------------------- { - if(IsDlgButtonChecked(IDC_CHECK2)) - TrackerSettings::Instance().MixerFlags = TrackerSettings::Instance().MixerFlags | SNDMIX_SOFTPANNING; - else - TrackerSettings::Instance().MixerFlags = TrackerSettings::Instance().MixerFlags & ~SNDMIX_SOFTPANNING; + // General + { + TrackerSettings::Instance().m_SoundSettingsKeepDeviceOpen = IsDlgButtonChecked(IDC_CHECK6) ? true : false; + TrackerSettings::Instance().m_SoundSettingsOpenDeviceAtStartup = IsDlgButtonChecked(IDC_CHECK7) ? true : false; + } m_Settings.ExclusiveMode = IsDlgButtonChecked(IDC_CHECK4) ? true : false; m_Settings.BoostThreadPriority = IsDlgButtonChecked(IDC_CHECK5) ? true : false; + m_Settings.KeepDeviceRunning = IsDlgButtonChecked(IDC_CHECK8) ? true : false; + m_Settings.UseHardwareTiming = IsDlgButtonChecked(IDC_CHECK9) ? true : false; // Mixing Freq { m_Settings.Samplerate = m_CbnMixingFreq.GetItemData(m_CbnMixingFreq.GetCurSel()); @@ -564,14 +531,10 @@ UINT n = m_CbnSampleFormat.GetItemData(m_CbnSampleFormat.GetCurSel()); m_Settings.sampleFormat = (SampleFormat)(n & 0xFF); } - // Polyphony + // Dither { - int nmmx = m_CbnPolyphony.GetCurSel(); - if ((nmmx >= 0) && (nmmx < CountOf(nCPUMix))) - { - TrackerSettings::Instance().MixerMaxChannels = nCPUMix[nmmx]; - CMainFrame::GetMainFrame()->SetupPlayer(); - } + UINT n = m_CbnDither.GetCurSel(); + m_Settings.DitherType = (DitherMode)(n); } const SoundDeviceID dev = m_CurrentDeviceInfo.id; // Latency @@ -638,19 +601,338 @@ } +////////////////// +// COptionsMixer + +BEGIN_MESSAGE_MAP(COptionsMixer, CPropertyPage) + ON_WM_HSCROLL() + ON_WM_VSCROLL() + ON_CBN_SELCHANGE(IDC_COMBO_FILTER, OnResamplerChanged) + ON_EN_UPDATE(IDC_WFIRCUTOFF, OnSettingsChanged) + ON_EN_UPDATE(IDC_COMBO_FILTERWINDOW, OnSettingsChanged) + ON_EN_UPDATE(IDC_RAMPING_IN, OnResamplerChanged) + ON_EN_UPDATE(IDC_RAMPING_OUT, OnResamplerChanged) + ON_CBN_SELCHANGE(IDC_COMBO_POLYPHONY, OnSettingsChanged) + // slider stereo sep + ON_COMMAND(IDC_CHECK_SOFTPAN, OnSettingsChanged) + // slider preamp +END_MESSAGE_MAP() + + +void COptionsMixer::DoDataExchange(CDataExchange* pDX) +//---------------------------------------------------- +{ + CPropertyPage::DoDataExchange(pDX); + //{{AFX_DATA_MAP(COptionsSoundcard) + DDX_Control(pDX, IDC_COMBO_FILTER, m_CbnResampling); + DDX_Control(pDX, IDC_WFIRCUTOFF, m_CEditWFIRCutoff); + DDX_Control(pDX, IDC_COMBO_FILTERWINDOW, m_CbnWFIRType); + DDX_Control(pDX, IDC_RAMPING_IN, m_CEditRampUp); + DDX_Control(pDX, IDC_RAMPING_OUT, m_CEditRampDown); + DDX_Control(pDX, IDC_EDIT_VOLRAMP_SAMPLES_UP, m_CInfoRampUp); + DDX_Control(pDX, IDC_EDIT_VOLRAMP_SAMPLES_DOWN, m_CInfoRampDown); + DDX_Control(pDX, IDC_COMBO_POLYPHONY, m_CbnPolyphony); + DDX_Control(pDX, IDC_SLIDER_STEREOSEP, m_SliderStereoSep); + // check box soft pan + DDX_Control(pDX, IDC_SLIDER_PREAMP, m_SliderPreAmp); + //}}AFX_DATA_MAP +} + + +BOOL COptionsMixer::OnInitDialog() +//-------------------------------- +{ + CPropertyPage::OnInitDialog(); + + // Resampling type + { + m_CbnResampling.AddString("No Interpolation (1 tap)"); + m_CbnResampling.AddString("Linear (2 tap)"); + m_CbnResampling.AddString("Cubic spline (4 tap)"); + m_CbnResampling.AddString("Polyphase (8 tap)"); + m_CbnResampling.AddString("XMMS-ModPlug (8 tap)"); + m_CbnResampling.SetCurSel(TrackerSettings::Instance().ResamplerMode); + } + + // Resampler bandwidth + { + m_CEditWFIRCutoff.SetWindowText(mpt::ToString(TrackerSettings::Instance().ResamplerCutoffPercent).c_str()); + } + + // Resampler filter window + { + // done in OnResamplerChanged() + } + + // volume ramping + { +#if 0 + m_CEditRampUp.SetWindowText(mpt::ToString(TrackerSettings::Instance().MixerVolumeRampUpSamples).c_str()); + m_CEditRampDown.SetWindowText(mpt::ToString(TrackerSettings::Instance().MixerVolumeRampDownSamples).c_str()); +#else + m_CEditRampUp.SetWindowText(mpt::ToString(TrackerSettings::Instance().GetMixerSettings().GetVolumeRampUpMicroseconds()).c_str()); + m_CEditRampDown.SetWindowText(mpt::ToString(TrackerSettings::Instance().GetMixerSettings().GetVolumeRampDownMicroseconds()).c_str()); +#endif + UpdateRamping(); + } + + // Max Mixing Channels + { + m_CbnPolyphony.ResetContent(); + for (UINT n = 0; n < CountOf(nCPUMix); n++) + { + CHAR s[64]; + wsprintf(s, "%d (%s)", nCPUMix[n], szCPUNames[n]); + m_CbnPolyphony.AddString(s); + if (TrackerSettings::Instance().MixerMaxChannels == nCPUMix[n]) m_CbnPolyphony.SetCurSel(n); + } + } + + // Stereo Separation + { + m_SliderStereoSep.SetRange(0, 4); + m_SliderStereoSep.SetPos(2); + for (int n=0; n<=4; n++) + { + if ((int)TrackerSettings::Instance().MixerStereoSeparation <= (int)(32 << n)) + { + m_SliderStereoSep.SetPos(n); + break; + } + } + UpdateStereoSep(); + } + + // soft pan + { + CheckDlgButton(IDC_CHECK_SOFTPAN, (TrackerSettings::Instance().MixerFlags & SNDMIX_SOFTPANNING) ? BST_CHECKED : BST_UNCHECKED); + } + + // Pre-Amplification + { + m_SliderPreAmp.SetTicFreq(5); + m_SliderPreAmp.SetRange(0, 40); + int n = (TrackerSettings::Instance().MixerPreAmp - 64) / 8; + if ((n < 0) || (n > 40)) n = 16; + m_SliderPreAmp.SetPos(n); + } + + OnResamplerChanged(); + + return TRUE; +} + + +BOOL COptionsMixer::OnSetActive() +//------------------------------- +{ + CMainFrame::m_nLastOptionsPage = OPTIONS_PAGE_MIXER; + return CPropertyPage::OnSetActive(); +} + + +void COptionsMixer::OnResamplerChanged() +//-------------------------------------- +{ + int dwSrcMode = m_CbnResampling.GetCurSel(); + switch(dwSrcMode) + { + case SRCMODE_FIRFILTER: + m_CbnWFIRType.ResetContent(); + m_CbnWFIRType.AddString("Hann"); + m_CbnWFIRType.AddString("Hamming"); + m_CbnWFIRType.AddString("Blackman Exact"); + m_CbnWFIRType.AddString("Blackman 3 Tap 61"); + m_CbnWFIRType.AddString("Blackman 3 Tap 67"); + m_CbnWFIRType.AddString("Blackman Harris"); + m_CbnWFIRType.AddString("Blackman 4 Tap 74"); + m_CbnWFIRType.AddString("Kaiser a=7.5"); + m_CbnWFIRType.SetCurSel(TrackerSettings::Instance().ResamplerSubMode); + break; + case SRCMODE_POLYPHASE: + m_CbnWFIRType.ResetContent(); + m_CbnWFIRType.AddString("Auto"); + m_CbnWFIRType.AddString("Auto"); + m_CbnWFIRType.AddString("Auto"); + m_CbnWFIRType.AddString("Auto"); + m_CbnWFIRType.AddString("Auto"); + m_CbnWFIRType.AddString("Auto"); + m_CbnWFIRType.AddString("Auto"); + m_CbnWFIRType.AddString("Auto"); + m_CbnWFIRType.SetCurSel(TrackerSettings::Instance().ResamplerSubMode); + break; + default: + m_CbnWFIRType.ResetContent(); + m_CbnWFIRType.AddString("none"); + m_CbnWFIRType.AddString("none"); + m_CbnWFIRType.AddString("none"); + m_CbnWFIRType.AddString("none"); + m_CbnWFIRType.AddString("none"); + m_CbnWFIRType.AddString("none"); + m_CbnWFIRType.AddString("none"); + m_CbnWFIRType.AddString("none"); + m_CbnWFIRType.SetCurSel(TrackerSettings::Instance().ResamplerSubMode); + break; + } + switch(dwSrcMode) + { + case SRCMODE_POLYPHASE: + m_CEditWFIRCutoff.EnableWindow(TRUE); + m_CbnWFIRType.EnableWindow(FALSE); + break; + case SRCMODE_FIRFILTER: + m_CEditWFIRCutoff.EnableWindow(TRUE); + m_CbnWFIRType.EnableWindow(TRUE); + break; + default: + m_CEditWFIRCutoff.EnableWindow(FALSE); + m_CbnWFIRType.EnableWindow(FALSE); + break; + } + OnSettingsChanged(); +} + + +void COptionsMixer::OnRampingChanged() +//------------------------------------ +{ + UpdateRamping(); + OnSettingsChanged(); +} + + +void COptionsMixer::OnScroll(UINT n, UINT pos, CScrollBar *p) +//----------------------------------------------------------- +{ + MPT_UNREFERENCED_PARAMETER(n); + MPT_UNREFERENCED_PARAMETER(pos); + MPT_UNREFERENCED_PARAMETER(p); + // stereo sep + { + UpdateStereoSep(); + } +} + + +void COptionsMixer::UpdateRamping() +//--------------------------------- +{ + MixerSettings settings = TrackerSettings::Instance().GetMixerSettings(); + CString s; + m_CEditRampUp.GetWindowText(s); + settings.SetVolumeRampUpMicroseconds(atol(s)); + m_CEditRampDown.GetWindowText(s); + settings.SetVolumeRampDownMicroseconds(atol(s)); + s.Format("%i samples at %i Hz", (int)settings.GetVolumeRampUpSamples(), (int)settings.gdwMixingFreq); + m_CInfoRampUp.SetWindowText(s); + s.Format("%i samples at %i Hz", (int)settings.GetVolumeRampDownSamples(), (int)settings.gdwMixingFreq); + m_CInfoRampDown.SetWindowText(s); +} + + +void COptionsMixer::UpdateStereoSep() +//----------------------------------- +{ + CString s; + s.Format("%d%%", ((32 << m_SliderStereoSep.GetPos()) * 100) / 128); + SetDlgItemText(IDC_TEXT_STEREOSEP, s); +} + + +void COptionsMixer::OnOK() +//------------------------ +{ + // resampler mode + { + TrackerSettings::Instance().ResamplerMode = (ResamplingMode)m_CbnResampling.GetCurSel(); + } + + // resampler bandwidth + { + CString s; + m_CEditWFIRCutoff.GetWindowText(s); + if(s != "") + { + int newCutoff = atoi(s); + Limit(newCutoff, 0, 100); + TrackerSettings::Instance().ResamplerCutoffPercent = newCutoff; + } + { + s.Format("%d", TrackerSettings::Instance().ResamplerCutoffPercent.Get()); + m_CEditWFIRCutoff.SetWindowText(s); + } + } + + // resampler filter window + { + TrackerSettings::Instance().ResamplerSubMode = (uint8)m_CbnWFIRType.GetCurSel(); + } + + // volume ramping + { +#if 0 + CString s; + m_CEditRampUp.GetWindowText(s); + TrackerSettings::Instance().MixerVolumeRampUpSamples = atol(s); + m_CEditRampDown.GetWindowText(s); + TrackerSettings::Instance().MixerVolumeRampDownSamples = atol(s); +#else + MixerSettings settings = TrackerSettings::Instance().GetMixerSettings(); + CString s; + m_CEditRampUp.GetWindowText(s); + settings.SetVolumeRampUpMicroseconds(atol(s)); + m_CEditRampDown.GetWindowText(s); + settings.SetVolumeRampDownMicroseconds(atol(s)); + TrackerSettings::Instance().SetMixerSettings(settings); +#endif + } + + // Polyphony + { + int nmmx = m_CbnPolyphony.GetCurSel(); + if((nmmx >= 0) && (nmmx < CountOf(nCPUMix))) + { + TrackerSettings::Instance().MixerMaxChannels = nCPUMix[nmmx]; + } + } + + // stereo sep + { + TrackerSettings::Instance().MixerStereoSeparation = 32 << m_SliderStereoSep.GetPos(); + } + + // soft pan + { + if(IsDlgButtonChecked(IDC_CHECK2)) + { + TrackerSettings::Instance().MixerFlags = TrackerSettings::Instance().MixerFlags | SNDMIX_SOFTPANNING; + } else + { + TrackerSettings::Instance().MixerFlags = TrackerSettings::Instance().MixerFlags & ~SNDMIX_SOFTPANNING; + } + } + + // pre amp + { + int n = m_SliderPreAmp.GetPos(); + if ((n >= 0) && (n <= 40)) // approximately +/- 10dB + { + TrackerSettings::Instance().MixerPreAmp = 64 + (n * 8); + } + } + + CMainFrame::GetMainFrame()->SetupPlayer(); + + CPropertyPage::OnOK(); +} + + ////////////////////////////////////////////////////////// // COptionsPlayer BEGIN_MESSAGE_MAP(COptionsPlayer, CPropertyPage) ON_WM_HSCROLL() - ON_CBN_SELCHANGE(IDC_COMBO1, OnResamplerChanged) ON_CBN_SELCHANGE(IDC_COMBO2, OnSettingsChanged) - //rewbs.resamplerConf - ON_CBN_SELCHANGE(IDC_WFIRTYPE, OnWFIRTypeChanged) - ON_EN_UPDATE(IDC_WFIRCUTOFF, OnSettingsChanged) - ON_EN_UPDATE(IDC_RAMPING_IN, OnSettingsChanged) - ON_EN_UPDATE(IDC_RAMPING_OUT, OnSettingsChanged) - //end rewbs.resamplerConf ON_COMMAND(IDC_CHECK1, OnSettingsChanged) ON_COMMAND(IDC_CHECK2, OnSettingsChanged) ON_COMMAND(IDC_CHECK3, OnSettingsChanged) @@ -658,7 +940,6 @@ ON_COMMAND(IDC_CHECK5, OnSettingsChanged) ON_COMMAND(IDC_CHECK6, OnSettingsChanged) ON_COMMAND(IDC_CHECK7, OnSettingsChanged) - ON_COMMAND(IDC_BUTTON_DEFAULT_RESAMPLING, OnDefaultResampling) END_MESSAGE_MAP() @@ -667,13 +948,6 @@ { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(COptionsPlayer) - DDX_Control(pDX, IDC_COMBO1, m_CbnResampling); - //rewbs.resamplerConf - DDX_Control(pDX, IDC_WFIRTYPE, m_CbnWFIRType); - DDX_Control(pDX, IDC_WFIRCUTOFF, m_CEditWFIRCutoff); - DDX_Control(pDX, IDC_RAMPING_IN, m_CEditRampUp); - DDX_Control(pDX, IDC_RAMPING_OUT, m_CEditRampDown); - //end rewbs.resamplerConf DDX_Control(pDX, IDC_COMBO2, m_CbnReverbPreset); DDX_Control(pDX, IDC_SLIDER1, m_SbXBassDepth); DDX_Control(pDX, IDC_SLIDER2, m_SbXBassRange); @@ -691,17 +965,6 @@ CPropertyPage::OnInitDialog(); dwQuality = TrackerSettings::Instance().MixerDSPMask; - // Resampling type - { - m_CbnResampling.AddString("No Interpolation"); - m_CbnResampling.AddString("Linear"); - m_CbnResampling.AddString("Cubic spline"); - //rewbs.resamplerConf - m_CbnResampling.AddString("Polyphase"); - m_CbnResampling.AddString("XMMS-ModPlug"); - //end rewbs.resamplerConf - m_CbnResampling.SetCurSel(TrackerSettings::Instance().ResamplerMode); - } // Effects #ifndef NO_DSP if (dwQuality & SNDDSP_MEGABASS) CheckDlgButton(IDC_CHECK1, MF_CHECKED); @@ -784,17 +1047,6 @@ m_SbSurroundDepth.ShowWindow(SW_HIDE); m_SbSurroundDelay.ShowWindow(SW_HIDE); #endif - //rewbs.resamplerConf - OnResamplerChanged(); - - char s[16] = ""; - _ltoa(TrackerSettings::Instance().MixerVolumeRampUpSamples, s, 10); - m_CEditRampUp.SetWindowText(s); - - _ltoa(TrackerSettings::Instance().MixerVolumeRampDownSamples, s, 10); - m_CEditRampDown.SetWindowText(s); - - //end rewbs.resamplerConf return TRUE; } @@ -825,91 +1077,36 @@ } } -//rewbs.resamplerConf -void COptionsPlayer::OnWFIRTypeChanged() -{ - TrackerSettings::Instance().ResamplerSubMode = static_cast<BYTE>(m_CbnWFIRType.GetCurSel()); - OnSettingsChanged(); -} -void COptionsPlayer::OnResamplerChanged() -{ - DWORD dwSrcMode = m_CbnResampling.GetCurSel(); - m_CbnWFIRType.ResetContent(); - - char s[10] = ""; - switch (dwSrcMode) - { - case SRCMODE_POLYPHASE: - m_CbnWFIRType.AddString("Kaiser 8 Tap"); - m_CbnWFIRType.SetCurSel(0); - m_CbnWFIRType.EnableWindow(FALSE); - m_CEditWFIRCutoff.EnableWindow(TRUE); - wsprintf(s, "%d", static_cast<int>((TrackerSettings::Instance().ResamplerCutoffPercent))); - break; - case SRCMODE_FIRFILTER: - m_CbnWFIRType.AddString("Hann"); - m_CbnWFIRType.AddString("Hamming"); - m_CbnWFIRType.AddString("Blackman Exact"); - m_CbnWFIRType.AddString("Blackman 3 Tap 61"); - m_CbnWFIRType.AddString("Blackman 3 Tap 67"); - m_CbnWFIRType.AddString("Blackman 4 Tap 92"); - m_CbnWFIRType.AddString("Blackman 4 Tap 74"); - m_CbnWFIRType.AddString("Kaiser 4 Tap"); - m_CbnWFIRType.SetCurSel(TrackerSettings::Instance().ResamplerSubMode); - m_CbnWFIRType.EnableWindow(TRUE); - m_CEditWFIRCutoff.EnableWindow(TRUE); - wsprintf(s, "%d", static_cast<int>((TrackerSettings::Instance().ResamplerCutoffPercent))); - break; - default: - m_CbnWFIRType.AddString("None"); - m_CEditWFIRCutoff.EnableWindow(FALSE); - m_CbnWFIRType.EnableWindow(FALSE); - } - - m_CEditWFIRCutoff.SetWindowText(s); - OnSettingsChanged(); -} - - -void COptionsPlayer::OnDefaultResampling() -//---------------------------------------- -{ - CResamplerSettings resamplerDefaults; - m_CbnResampling.SetCurSel(resamplerDefaults.SrcMode); - OnResamplerChanged(); - m_CbnWFIRType.SetCurSel(resamplerDefaults.gbWFIRType); - m_CEditWFIRCutoff.SetWindowText(Stringify(static_cast<int>(resamplerDefaults.gdWFIRCutoff * 100)).c_str()); - MixerSettings mixerDefaults; - m_CEditRampUp.SetWindowText(Stringify(mixerDefaults.glVolumeRampUpSamples).c_str()); - m_CEditRampDown.SetWindowText(Stringify(mixerDefaults.glVolumeRampDownSamples).c_str()); - OnSettingsChanged(); -} - - void COptionsPlayer::OnOK() //------------------------- { DWORD dwQuality = 0; - DWORD dwSrcMode = 0; + DWORD dwQualityMask = 0; + #ifndef NO_DSP + dwQualityMask |= SNDDSP_MEGABASS; if (IsDlgButtonChecked(IDC_CHECK1)) dwQuality |= SNDDSP_MEGABASS; #endif #ifndef NO_AGC + dwQualityMask |= SNDDSP_AGC; if (IsDlgButtonChecked(IDC_CHECK2)) dwQuality |= SNDDSP_AGC; #endif #ifndef NO_EQ + dwQualityMask |= SNDDSP_EQ; if (IsDlgButtonChecked(IDC_CHECK3)) dwQuality |= SNDDSP_EQ; #endif #ifndef NO_DSP + dwQualityMask |= SNDDSP_SURROUND; + dwQualityMask |= SNDDSP_NOISEREDUCTION; if (IsDlgButtonChecked(IDC_CHECK4)) dwQuality |= SNDDSP_SURROUND; if (IsDlgButtonChecked(IDC_CHECK5)) dwQuality |= SNDDSP_NOISEREDUCTION; #endif #ifndef NO_REVERB + dwQualityMask |= SNDDSP_REVERB; if (IsDlgButtonChecked(IDC_CHECK6)) dwQuality |= SNDDSP_REVERB; #endif - dwSrcMode = m_CbnResampling.GetCurSel(); #ifndef NO_DSP // Bass Expansion @@ -922,7 +1119,6 @@ if (nXBassRange > 21) nXBassRange = 21; TrackerSettings::Instance().m_DSPSettings.m_nXBassDepth = nXBassDepth; TrackerSettings::Instance().m_DSPSettings.m_nXBassRange = nXBassRange; - CMainFrame::GetMainFrame()->SetupPlayer(); } #endif #ifndef NO_REVERB @@ -931,7 +1127,6 @@ // Reverb depth is dynamically changed UINT nReverbType = m_CbnReverbPreset.GetItemData(m_CbnReverbPreset.GetCurSel()); if (nReverbType < NUM_REVERBTYPES) TrackerSettings::Instance().m_ReverbSettings.m_nReverbType = nReverbType; - CMainFrame::GetMainFrame()->SetupPlayer(); } #endif #ifndef NO_DSP @@ -941,31 +1136,11 @@ UINT nProLogicDelay = 5 + (m_SbSurroundDelay.GetPos() * 5); TrackerSettings::Instance().m_DSPSettings.m_nProLogicDepth = nProLogicDepth; TrackerSettings::Instance().m_DSPSettings.m_nProLogicDelay = nProLogicDelay; - CMainFrame::GetMainFrame()->SetupPlayer(); } #endif - //rewbs.resamplerConf - CString s; - m_CEditWFIRCutoff.GetWindowText(s); - if(s != "") - { - int newCutoff = atoi(s); - Limit(newCutoff, 0, 100); - TrackerSettings::Instance().ResamplerCutoffPercent = newCutoff; - } - { - CHAR s[64]; - wsprintf(s, "%d", TrackerSettings::Instance().ResamplerCutoffPercent.Get()); - m_CEditWFIRCutoff.SetWindowText(s); - } - //TrackerSettings::Instance().m_ResamplerSettings.gbWFIRType set in OnWFIRTypeChange - m_CEditRampUp.GetWindowText(s); - TrackerSettings::Instance().MixerVolumeRampUpSamples = atol(s); - m_CEditRampDown.GetWindowText(s); - TrackerSettings::Instance().MixerVolumeRampDownSamples = atol(s); - TrackerSettings::Instance().ResamplerMode = (ResamplingMode)dwSrcMode; TrackerSettings::Instance().MixerDSPMask = dwQuality; + CMainFrame::GetMainFrame()->SetupPlayer(); CPropertyPage::OnOK(); } Modified: trunk/OpenMPT/mptrack/Mpdlgs.h =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.h 2014-02-01 20:47:55 UTC (rev 3622) +++ trunk/OpenMPT/mptrack/Mpdlgs.h 2014-02-01 21:26:00 UTC (rev 3623) @@ -19,12 +19,10 @@ { protected: CComboBoxEx m_CbnDevice; - CComboBox m_CbnLatencyMS, m_CbnUpdateIntervalMS, m_CbnMixingFreq, m_CbnPolyphony, m_CbnChannels, m_CbnSampleFormat; - CSliderCtrl m_SliderStereoSep, m_SliderPreAmp; + CComboBox m_CbnLatencyMS, m_CbnUpdateIntervalMS, m_CbnMixingFreq, m_CbnChannels, m_CbnSampleFormat, m_CbnDither; CComboBox m_CbnBaseChannel; CEdit m_EditStatistics; CButton m_BtnDriverPanel; - bool m_PreAmpNoteShowed; void SetDevice(SoundDeviceID dev, bool forceReload=false); SoundDeviceInfo m_CurrentDeviceInfo; @@ -44,8 +42,8 @@ void UpdateSampleRates(); void UpdateChannels(); void UpdateSampleFormat(); + void UpdateDither(); void UpdateControls(); - void SetPreAmpSliderPosition(); protected: virtual BOOL OnInitDialog(); @@ -55,25 +53,70 @@ void UpdateStereoSep(); afx_msg void OnDeviceChanged(); afx_msg void OnSettingsChanged() { SetModified(TRUE); } - afx_msg void OnHScroll(UINT, UINT, CScrollBar *); - afx_msg void OnVScroll(UINT, UINT, CScrollBar *); + afx_msg void OnSampleFormatChanged(); afx_msg void OnSoundCardRescan(); afx_msg void OnSoundCardDriverPanel(); DECLARE_MESSAGE_MAP() }; +//======================================= +class COptionsMixer: public CPropertyPage +//======================================= +{ +protected: + + CComboBox m_CbnResampling; + CEdit m_CEditWFIRCutoff; + CComboBox m_CbnWFIRType; + + CEdit m_CEditRampUp; + CEdit m_CEditRampDown; + CEdit m_CInfoRampUp; + CEdit m_CInfoRampDown; + + CComboBox m_CbnPolyphony; + + CSliderCtrl m_SliderStereoSep; + + // check box soft pan + + CSliderCtrl m_SliderPreAmp; + +public: + COptionsMixer():CPropertyPage(IDD_OPTIONS_MIXER) {} + +protected: + void UpdateRamping(); + void UpdateStereoSep(); + + virtual BOOL OnInitDialog(); + virtual void OnOK(); + virtual BOOL OnSetActive(); + virtual void DoDataExchange(CDataExchange* pDX); + + afx_msg void OnSettingsChanged() { SetModified(TRUE); } + afx_msg void OnResamplerChanged(); + afx_msg void OnRampingChanged(); + + afx_msg void OnHScroll(UINT n, UINT pos, CScrollBar *p) { CPropertyPage::OnHScroll(n, pos, p); OnScroll(n, pos, p); } + afx_msg void OnVScroll(UINT n, UINT pos, CScrollBar *p) { CPropertyPage::OnVScroll(n, pos, p); OnScroll(n, pos, p); } + void OnScroll(UINT n, UINT pos, CScrollBar *p); + + DECLARE_MESSAGE_MAP() + +}; + + //======================================== class COptionsPlayer: public CPropertyPage //======================================== { protected: - CComboBox m_CbnResampling, m_CbnReverbPreset, m_CbnWFIRType; //rewbs.resamplerConf: added m_CbnWFIRType + CComboBox m_CbnReverbPreset; CSliderCtrl m_SbXBassDepth, m_SbXBassRange; CSliderCtrl m_SbSurroundDepth, m_SbSurroundDelay; CSliderCtrl m_SbReverbDepth; - CEdit m_CEditWFIRCutoff; - CEdit m_CEditRampUp, m_CEditRampDown; public: COptionsPlayer():CPropertyPage(IDD_OPTIONS_PLAYER) {} @@ -85,11 +128,6 @@ virtual void DoDataExchange(CDataExchange* pDX); afx_msg void OnHScroll(UINT, UINT, CScrollBar *); afx_msg void OnSettingsChanged() { SetModified(TRUE); } - //rewbs.resamplerConf - afx_msg void OnWFIRTypeChanged(); - afx_msg void OnResamplerChanged(); - afx_msg void OnDefaultResampling(); - //end rewbs.resamplerConf DECLARE_MESSAGE_MAP() }; Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2014-02-01 20:47:55 UTC (rev 3622) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2014-02-01 21:26:00 UTC (rev 3623) @@ -165,9 +165,8 @@ , MixerOutputChannels(conf, "Sound Settings", "ChannelMode", MixerSettings().gnChannels) , MixerPreAmp(conf, "Sound Settings", "PreAmp", MixerSettings().m_nPreAmp) , MixerStereoSeparation(conf, "Sound Settings", "StereoSeparation", MixerSettings().m_nStereoSeparation) - , MixerVolumeRampUpSamples(conf, "Sound Settings", "VolumeRampUpSamples", MixerSettings().glVolumeRampUpSamples) - , MixerVolumeRampDownSamples(conf, "Sound Settings", "VolumeRampDownSamples", MixerSettings().glVolumeRampDownSamples) - , MixerVolumeRampSamples_DEPRECATED(conf, "Sound Settings", "VolumeRampSamples", 42) + , MixerVolumeRampUpMicroseconds(conf, "Sound Settings", "VolumeRampUpMicroseconds", MixerSettings().GetVolumeRampUpMicroseconds()) + , MixerVolumeRampDownMicroseconds(conf, "Sound Settings", "VolumeRampDownMicroseconds", MixerSettings().GetVolumeRampDownMicroseconds()) , ResamplerMode(conf, "Sound Settings", "SrcMode", GetDefaultResamplerMode()) , ResamplerSubMode(conf, "Sound Settings", "XMMSModplugResamplerWFIRType", CResamplerSettings().gbWFIRType) , ResamplerCutoffPercent(conf, "Sound Settings", "ResamplerWFIRCutoff", Util::Round<int32>(CResamplerSettings().gdWFIRCutoff * 100.0)) @@ -430,9 +429,17 @@ } if(storedVersion < MAKE_VERSION_NUMERIC(1,20,00,22)) { - MixerVolumeRampUpSamples = MixerVolumeRampSamples_DEPRECATED.Get(); - MixerVolumeRampDownSamples = MixerVolumeRampSamples_DEPRECATED.Get(); - conf.Remove(MixerVolumeRampSamples_DEPRECATED.GetPath()); + MixerSettings settings = GetMixerSettings(); + settings.SetVolumeRampUpSamples(conf.Read<int32>("Sound Settings", "VolumeRampSamples", 42)); + settings.SetVolumeRampDownSamples(conf.Read<int32>("Sound Settings", "VolumeRampSamples", 42)); + SetMixerSettings(settings); + conf.Remove("Sound Settings", "VolumeRampSamples"); + } else if(storedVersion < MAKE_VERSION_NUMERIC(1,22,07,18)) + { + MixerSettings settings = GetMixerSettings(); + settings.SetVolumeRampUpSamples(conf.Read<int32>("Sound Settings", "VolumeRampUpSamples", MixerSettings().GetVolumeRampUpSamples())); + settings.SetVolumeRampDownSamples(conf.Read<int32>("Sound Settings", "VolumeRampDownSamples", MixerSettings().GetVolumeRampDownSamples())); + SetMixerSettings(settings); } Limit(ResamplerCutoffPercent, 0, 100); @@ -524,6 +531,7 @@ Setting<SampleFormat> sampleFormat; Setting<bool> ExclusiveMode; Setting<bool> BoostThreadPriority; + Setting<bool> KeepDeviceRunning; Setting<bool> UseHardwareTiming; Setting<int> DitherType; Setting<SoundChannelMapping> ChannelMapping; @@ -540,6 +548,7 @@ , sampleFormat(conf, L"Sound Settings", deviceInfo.GetIdentifier() + L"_" + L"SampleFormat", defaults.sampleFormat) , ExclusiveMode(conf, L"Sound Settings", deviceInfo.GetIdentifier() + L"_" + L"ExclusiveMode", defaults.ExclusiveMode) , BoostThreadPriority(conf, L"Sound Settings", deviceInfo.GetIdentifier() + L"_" + L"BoostThreadPriority", defaults.BoostThreadPriority) + , KeepDeviceRunning(conf, L"Sound Settings", deviceInfo.GetIdentifier() + L"_" + L"KeepDeviceRunning", defaults.KeepDeviceRunning) , UseHardwareTiming(conf, L"Sound Settings", deviceInfo.GetIdentifier() + L"_" + L"UseHardwareTiming", defaults.UseHardwareTiming) , DitherType(conf, L"Sound Settings", deviceInfo.GetIdentifier() + L"_" + L"DitherType", defaults.DitherType) , ChannelMapping(conf, L"Sound Settings", deviceInfo.GetIdentifier() + L"_" + L"ChannelMapping", defaults.ChannelMapping) @@ -560,6 +569,7 @@ sampleFormat = settings.sampleFormat; ExclusiveMode = settings.ExclusiveMode; BoostThreadPriority = settings.BoostThreadPriority; + KeepDeviceRunning = settings.KeepDeviceRunning; UseHardwareTiming = settings.UseHardwareTiming; DitherType = settings.DitherType; ChannelMapping = settings.ChannelMapping; @@ -576,6 +586,7 @@ settings.sampleFormat = sampleFormat; settings.ExclusiveMode = ExclusiveMode; settings.BoostThreadPriority = BoostThreadPriority; + settings.KeepDeviceRunning = KeepDeviceRunning; settings.UseHardwareTiming = UseHardwareTiming; settings.DitherType = DitherType; settings.ChannelMapping = ChannelMapping; @@ -638,8 +649,8 @@ settings.gnChannels = MixerOutputChannels; settings.m_nPreAmp = MixerPreAmp; settings.m_nStereoSeparation = MixerStereoSeparation; - settings.glVolumeRampUpSamples = MixerVolumeRampUpSamples; - settings.glVolumeRampDownSamples = MixerVolumeRampDownSamples; + settings.VolumeRampUpMicroseconds = MixerVolumeRampUpMicroseconds; + settings.VolumeRampDownMicroseconds = MixerVolumeRampDownMicroseconds; return settings; } @@ -653,8 +664,8 @@ MixerOutputChannels = settings.gnChannels; MixerPreAmp = settings.m_nPreAmp; MixerStereoSeparation = settings.m_nStereoSeparation; - MixerVolumeRampUpSamples = settings.glVolumeRampUpSamples; - MixerVolumeRampDownSamples = settings.glVolumeRampDownSamples; + MixerVolumeRampUpMicroseconds = settings.VolumeRampUpMicroseconds; + MixerVolumeRampDownMicroseconds = settings.VolumeRampDownMicroseconds; } Modified: trunk/OpenMPT/mptrack/TrackerSettings.h =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h 2014-02-01 20:47:55 UTC (rev 3622) +++ trunk/OpenMPT/mptrack/TrackerSettings.h 2014-02-01 21:26:00 UTC (rev 3623) @@ -295,9 +295,8 @@ Setting<uint32> MixerOutputChannels; Setting<uint32> MixerPreAmp; Setting<uint32> MixerStereoSeparation; - Setting<uint32> MixerVolumeRampUpSamples; - Setting<uint32> MixerVolumeRampDownSamples; - Setting<uint32> MixerVolumeRampSamples_DEPRECATED; + Setting<uint32> MixerVolumeRampUpMicroseconds; + Setting<uint32> MixerVolumeRampDownMicroseconds; MixerSettings GetMixerSettings() const; void SetMixerSettings(const MixerSettings &settings); Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2014-02-01 20:47:55 UTC (rev 3622) +++ trunk/OpenMPT/mptrack/mptrack.rc 2014-02-01 21:26:00 UTC (rev 3623) @@ -429,7 +429,7 @@ IDD_OPTIONS_PLAYER DIALOGEX 0, 0, 272, 279 STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Player" +CAPTION "DSP" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN GROUPBOX "Control",IDC_STATIC,6,6,257,150 @@ -458,21 +458,6 @@ CONTROL "Slider2",IDC_SLIDER6,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,149,128,62,15 LTEXT "5ms",IDC_STATIC,131,131,18,8 LTEXT "50ms",IDC_STATIC,211,131,23,8 - GROUPBOX "Sound Quality",IDC_STATIC,6,162,256,114 - LTEXT "Resampling:",IDC_STATIC,18,182,42,8 - COMBOBOX IDC_COMBO1,66,180,114,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "WFIR type:",IDC_STATIC,18,200,42,8 - COMBOBOX IDC_WFIRTYPE,66,198,114,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "WFIR cutoff factor:",IDC_STATIC,18,219,63,8 - EDITTEXT IDC_WFIRCUTOFF,156,216,24,14,ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC,186,219,8,8 - LTEXT "Sample ramping (click avoidance):",IDC_STATIC,18,238,109,8 - LTEXT "(can be overridden by instrument setting)",IDC_STATIC,18,248,138,8 - EDITTEXT IDC_RAMPING_IN,156,235,24,14,ES_AUTOHSCROLL | ES_NUMBER - LTEXT "Samples (Ramp In)",IDC_STATIC,182,238,70,8 - EDITTEXT IDC_RAMPING_OUT,156,252,24,14,ES_AUTOHSCROLL | ES_NUMBER - LTEXT "Samples (Ramp Out)",IDC_STATIC,182,255,70,8 - PUSHBUTTON "Default Settings",IDC_BUTTON_DEFAULT_RESAMPLING,186,180,66,12 END IDD_WAVECONVERT DIALOGEX 0, 0, 388, 239 @@ -1300,41 +1285,36 @@ LTEXT "Description",IDC_TEXT1,144,126,111,138 END -IDD_OPTIONS_SOUNDCARD DIALOGEX 0, 0, 268, 263 +IDD_OPTIONS_SOUNDCARD DIALOGEX 0, 0, 274, 281 STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Sound Card" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - GROUPBOX "",IDC_STATIC,6,6,258,114 - LTEXT "Sound Device:",IDC_STATIC,12,18,47,8 - CONTROL "",IDC_COMBO1,"ComboBoxEx32",CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP,12,30,204,96 - PUSHBUTTON "Rescan",IDC_BUTTON1,222,30,36,12 - LTEXT "Latency:",IDC_STATIC,12,48,54,12,SS_CENTERIMAGE - COMBOBOX IDC_COMBO2,72,48,66,83,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - CONTROL "Use device exclusively",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,144,48,102,12 - LTEXT "Update Interval:",IDC_STATIC_UPDATEINTERVAL,12,66,54,12,SS_CENTERIMAGE - COMBOBOX IDC_COMBO_UPDATEINTERVAL,72,66,66,83,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - CONTROL "Boost thread priority",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,144,66,89,12 - LTEXT "Output format:",IDC_STATIC,12,84,54,12,SS_CENTERIMAGE - COMBOBOX IDC_COMBO3,72,84,66,90,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_COMBO5,144,84,42,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_COMBO6,192,84,66,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Base channel:",IDC_STATIC_BASECHANNEL,12,102,54,12,SS_CENTERIMAGE - COMBOBOX IDC_COMBO9,72,102,114,90,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Driver Panel",IDC_BUTTON2,192,102,66,12 - GROUPBOX "",IDC_STATIC,6,126,258,90 - LTEXT "Max. Polyphony:",IDC_STATIC,12,138,54,12,SS_CENTERIMAGE - COMBOBOX IDC_COMBO4,72,138,66,88,CBS_DROPDOWNLIST | WS_TABSTOP - CONTROL "Soft Panning",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,138,78,12 - LTEXT "Stereo Separation:",IDC_STATIC,12,157,62,8 - LTEXT "100%",IDC_TEXT1,80,157,20,8 - RTEXT "Low",IDC_STATIC,22,168,15,14,SS_CENTERIMAGE - CONTROL "Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,46,168,83,18 - LTEXT "High",IDC_STATIC,136,168,16,12,SS_CENTERIMAGE - CTEXT "Pre-Amp",IDC_STATIC,174,156,36,8 - CONTROL "Slider2",IDC_SLIDER_PREAMP,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOOLTIPS | WS_TABSTOP,174,168,74,24 - LTEXT "Note: The Pre-Amp and Soft Panning settings are ignored by songs with mix levels set to 1.17RC3 or later in the Song Properties.",IDC_STATIC,12,195,246,18 - EDITTEXT IDC_EDIT_STATISTICS,6,222,258,36,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP + GROUPBOX "&Device",IDC_STATIC,6,6,264,120 + CONTROL "",IDC_COMBO1,"ComboBoxEx32",CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP,12,18,252,96 + PUSHBUTTON "&Setup device ...",IDC_BUTTON2,48,36,72,12 + PUSHBUTTON "&Rescan device list",IDC_BUTTON1,198,36,66,12 + LTEXT "&Latency:",IDC_STATIC,12,54,30,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO2,48,54,54,83,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + LTEXT "&Period:",IDC_STATIC_UPDATEINTERVAL,12,72,30,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO_UPDATEINTERVAL,48,72,54,83,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + LTEXT "&Format:",IDC_STATIC,12,90,30,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO3,48,90,54,90,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO5,108,90,42,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBO6,156,90,36,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Use device exclusively",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,54,84,12 + CONTROL "Keep running",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,198,54,66,12 + CONTROL "&Boost thread priority",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,72,84,12 + CONTROL "Hardware timing",IDC_CHECK9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,198,72,66,12 + LTEXT "Base &channel:",IDC_STATIC_BASECHANNEL,12,108,48,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO9,66,108,198,90,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "General",IDC_STATIC,6,132,264,48 + CONTROL "Keep device &open when playback is stopped",IDC_CHECK6, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,144,162,12 + CONTROL "Open device at &startup",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,162,162,12 + GROUPBOX "Stat&istics",IDC_STATIC,6,186,264,60 + EDITTEXT IDC_EDIT_STATISTICS,12,197,252,42,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY | NOT WS_TABSTOP + COMBOBOX IDC_COMBO10,198,90,66,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_MIDIMACRO DIALOGEX 0, 0, 358, 354 @@ -1614,7 +1594,41 @@ CONTROL "Resize to",IDC_RADIO_RESIZETO,"Button",BS_AUTORADIOBUTTON,12,60,102,8 END +IDD_OPTIONS_MIXER DIALOGEX 0, 0, 274, 281 +STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Mixer" +FONT 8, "MS Shell Dlg", 400, 0, 0x0 +BEGIN + GROUPBOX "Resampling",IDC_STATIC,6,6,264,66 + LTEXT "Filter:",IDC_STATIC,12,18,24,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO_FILTER,54,18,90,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Bandwidth:",IDC_STATIC,12,36,42,12,SS_CENTERIMAGE + EDITTEXT IDC_WFIRCUTOFF,54,36,18,12,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC,78,36,8,12,SS_CENTERIMAGE + LTEXT "Window:",IDC_STATIC,12,54,30,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO_FILTERWINDOW,54,54,84,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Volume Ramping",IDC_STATIC,6,78,264,48 + LTEXT "\xB5s up",IDC_STATIC,42,90,22,12,SS_CENTERIMAGE + EDITTEXT IDC_RAMPING_IN,12,90,24,12,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT IDC_EDIT_VOLRAMP_SAMPLES_UP,78,90,90,12,ES_AUTOHSCROLL | ES_READONLY + LTEXT "\xB5s down",IDC_STATIC,42,110,28,11,SS_CENTERIMAGE + EDITTEXT IDC_RAMPING_OUT,12,108,24,12,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT IDC_EDIT_VOLRAMP_SAMPLES_DOWN,78,108,90,12,ES_AUTOHSCROLL | ES_READONLY + GROUPBOX "Polyphony",IDC_STATIC,6,132,264,30 + LTEXT "Maximum Mixed Channels:",IDC_STATIC,12,144,84,12,SS_CENTERIMAGE + COMBOBOX IDC_COMBO_POLYPHONY,102,144,66,88,CBS_DROPDOWNLIST | WS_TABSTOP + GROUPBOX "Behaviour",IDC_STATIC,6,168,264,30 + LTEXT "Stereo Separation:",IDC_STATIC,12,180,62,8 + CONTROL "",IDC_SLIDER_STEREOSEP,"msctls_trackbar32",TBS_AUTOTICKS | TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,78,180,54,12 + LTEXT "100%",IDC_TEXT_STEREOSEP,132,180,20,8 + GROUPBOX "Pre-1.17RC3 mixing levels",IDC_STATIC,6,204,264,60 + CONTROL "Soft Panning",IDC_CHECK_SOFTPAN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,222,60,12 + LTEXT "Pre-Amp",IDC_STATIC,78,222,30,12,SS_CENTERIMAGE + CONTROL "",IDC_SLIDER_PREAMP,"msctls_trackbar32",TBS_AUTOTICKS | TBS_BOTH | TBS_TOOLTIPS | WS_TABSTOP,108,216,96,24 + LTEXT "Note: Pre-Amp and Soft Panning settings are ignored by songs with mix levels set to 1.17RC3 or later in Song Properties.",IDC_STATIC,12,240,204,18 +END + ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO @@ -1780,8 +1794,8 @@ IDD_OPTIONS_SOUNDCARD, DIALOG BEGIN - RIGHTMARGIN, 246 - BOTTOMMARGIN, 160 + RIGHTMARGIN, 252 + BOTTOMMARGIN, 178 END IDD_MIDIMACRO, DIALOG @@ -1869,6 +1883,14 @@ TOPMARGIN, 7 BOTTOMMARGIN, 75 END + + IDD_OPTIONS_MIXER, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 267 + TOPMARGIN, 7 + BOTTOMMARGIN, 274 + END END #endif // APSTUDIO_INVOKED Modified: trunk/OpenMPT/mptrack/resource.h =================================================================== --- trunk/OpenMPT/mptrack/resource.h 2014-02-01 20:47:55 UTC (rev 3622) +++ trunk/OpenMPT/mptrack/resource.h 2014-02-01 21:26:00 UTC (rev 3623) @@ -8,6 +8,7 @@ #define IDD_DIRECTORIES 104 #define IDD_WAVECONVERT 105 #define IDD_PROGRESS 106 +#define IDD_OPTIONS_MIXER 107 #define IDD_OPTIONS_KEYBOARD 108 #define IDD_OPTIONS_COLORS 109 #define IDD_OPTIONS_MIDI 111 @@ -200,6 +201,7 @@ #define IDC_COMBO5 1205 #define IDC_COMBO6 1206 #define IDC_COMBO9 1207 +#define IDC_COMBO10 1208 #define IDC_NOTEMAP 1213 #define IDC_TEXT1 1301 #define IDC_TEXT2 1302 @@ -935,6 +937,15 @@ #define IDC_STATIC_UPDATEINTERVAL 2458 #define IDC_COMBO_UPDATEINTERVAL 2459 #define IDC_STATIC_BASECHANNEL 2461 +#define IDC_COMBO_FILTER 2462 +#define IDC_COMBO_POLYPHONY 2463 +#define IDC_SLIDER_STEREOSEP 2464 +#define IDC_CHECK_SOFTPAN 2465 +#define IDC_COMBO_FILTERWINDOW 2466 +#define IDC_TEXT_STEREOSEP 2467 +#define IDC_EDIT_VOLRAMP_SAMPLES_UP 2468 +#define IDC_EDIT_VOLRAMP_SAMPLES_DOWN 2469 +#define IDC_CHECK_KEEPDEVICEOPEN 2470 #define ID_FILE_NEWMOD 32771 #define ID_FILE_NEWXM 32772 #define ID_FILE_NEWS3M 32773 @@ -1216,7 +1227,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 541 #define _APS_NEXT_COMMAND_VALUE 44643 -#define _APS_NEXT_CONTROL_VALUE 2462 +#define _APS_NEXT_CONTROL_VALUE 2471 #define _APS_NEXT_SYMED_VALUE 901 #endif #endif Modified: trunk/OpenMPT/sounddev/SoundDevice.h =================================================================== --- trunk/OpenMPT/sounddev/SoundDevice.h 2014-02-01 20:47:55 UTC (rev 3622) +++ trunk/OpenMPT/sounddev/SoundDevice.h 2014-02-01 21:26:00 UTC (rev 3623) @@ -251,6 +251,7 @@ SampleFormat sampleFormat; bool ExclusiveMode; // Use hardware buffers directly bool BoostThreadPriority; // Boost thread priority for glitch-free audio rendering + bool KeepDeviceRunning; bool UseHardwareTiming; int DitherType; SoundChannelMapping ChannelMapping; @@ -263,6 +264,7 @@ , sampleFormat(SampleFormatFloat32) , ExclusiveMode(false) , BoostThreadPriority(true) + , KeepDeviceRunning(true) , UseHardwareTiming(false) , DitherType(1) { @@ -279,6 +281,7 @@ && sampleFormat == cmp.sampleFormat && ExclusiveMode == cmp.ExclusiveMode && BoostThreadPriority == cmp.BoostThreadPriority + && KeepDeviceRunning == cmp.KeepDeviceRunning && UseHardwareTiming == cmp.UseHardwareTiming && ChannelMapping == cmp.ChannelMapping && DitherType == cmp.DitherType @@ -308,6 +311,7 @@ bool CanSampleFormat; bool CanExclusiveMode; bool CanBoostThreadPriority; + bool CanKeepDeviceRunning; bool CanUseHardwareTiming; bool CanChannelMapping; bool CanDriverPanel; @@ -319,6 +323,7 @@ , CanSampleFormat(true) , CanExclusiveMode(false) , CanBoostThreadPriority(true) + , CanKeepDeviceRunning(false) , CanUseHardwareTiming(false) , CanChannelMapping(false) , CanDriverPanel(false) Modified: trunk/OpenMPT/sounddev/SoundDeviceASIO.cpp =================================================================== --- trunk/OpenMPT/sounddev/SoundDeviceASIO.cpp 2014-02-01 20:47:55 UTC (rev 3622) +++ trunk/OpenMPT/sounddev/SoundDeviceASIO.cpp 2014-02-01 21:26:00 UTC (rev 3623) @@ -500,7 +500,7 @@ { ALWAYS_ASSERT_WARN_MESSAGE(!CriticalSection::IsLocked(), "AudioCriticalSection locked while starting ASIO"); - if(m_Settings.ExclusiveMode) + if(m_Settings.KeepDeviceRunning) { if(m_DeviceRunning) { @@ -529,7 +529,7 @@ { ALWAYS_ASSERT_WARN_MESSAGE(!CriticalSection::IsLocked(), "AudioCriticalSection locked while stopping ASIO"); - if(m_Settings.ExclusiveMode) + if(m_Settings.KeepDeviceRunning) { SetRenderSilence(true, true); return; @@ -1192,12 +1192,12 @@ caps.CanUpdateInterval = false; caps.CanSampleFormat = false; - caps.CanExclusiveMode = true; + caps.CanExclusiveMode = false; caps.CanBoostThreadPriority = false; + caps.CanKeepDeviceRunning = true; caps.CanUseHardwareTiming = true; caps.CanChannelMapping = true; caps.CanDriverPanel = true; - caps.ExclusiveModeDescription = L"Keep device running"; TemporaryASIODriverOpener opener(*this); if(!IsDriverOpen()) Modified: trunk/OpenMPT/soundlib/MixerSettings.cpp =================================================================== --- trunk/OpenMPT/soundlib/MixerSettings.cpp 2014-02-01 20:47:55 UTC (rev 3622) +++ trunk/OpenMPT/soundlib/MixerSettings.cpp 2014-02-01 21:26:00 UTC (rev 3623) @@ -28,31 +28,25 @@ m_nPreAmp = 128; - glVolumeRampUpSamples = 16; - glVolumeRampDownSamples = 42; + VolumeRampUpMicroseconds = 363; // 16 @44100 + VolumeRampDownMicroseconds = 952; // 42 @44100 } - -int32 MixerSettings::GetVolumeRampUpMicroseconds() const +int32 MixerSettings::GetVolumeRampUpSamples() const { - return Util::muldivr(glVolumeRampUpSamples, 1000000, gdwMixingFreq); + return Util::muldivr(VolumeRampUpMicroseconds, gdwMixingFreq, 1000000); } - - -int32 MixerSettings::GetVolumeRampDownMicroseconds() const +int32 MixerSettings::GetVolumeRampDownSamples() const { - return Util::muldivr(glVolumeRampDownSamples, 1000000, gdwMixingFreq); + return Util::muldivr(VolumeRampDownMicroseconds, gdwMixingFreq, 1000000); } - -void MixerSettings::SetVolumeRampUpMicroseconds(int32 rampUpMicroseconds) +void MixerSettings::SetVolumeRampUpSamples(int32 rampUpSamples) { - glVolumeRampUpSamples = Util::muldivr(rampUpMicroseconds, gdwMixingFreq, 1000000); + VolumeRampUpMicroseconds = Util::muldivr(rampUpSamples, 1000000, gdwMixingFreq); } - - -void MixerSettings::SetVolumeRampDownMicroseconds(int32 rampDownMicroseconds) +void MixerSettings::SetVolumeRampDownSamples(int32 rampDownSamples) { - glVolumeRampDownSamples = Util::muldivr(rampDownMicroseconds, gdwMixingFreq, 1000000); + VolumeRampDownMicroseconds = Util::muldivr(rampDownSamples, 1000000, gdwMixingFreq); } Modified: trunk/OpenMPT/soundlib/MixerSettings.h =================================================================== --- trunk/OpenMPT/soundlib/MixerSettings.h 2014-02-01 20:47:55 UTC (rev 3622) +++ trunk/OpenMPT/soundlib/MixerSettings.h 2014-02-01 21:26:00 UTC (rev 3623) @@ -21,14 +21,19 @@ DWORD gnChannels; DWORD m_nPreAmp; - long glVolumeRampUpSamples; - long glVolumeRampDownSamples; + int32 VolumeRampUpMicroseconds; + int32 VolumeRampDownMicroseconds; + int32 GetVolumeRampUpMicroseconds() const { return VolumeRampUpMicroseconds; } + int32 GetVolumeRampDownMicroseconds() const { return VolumeRampDownMicroseconds; } + void SetVolumeRampUpMicroseconds(int32 rampUpMicroseconds) { VolumeRampUpMicroseconds = rampUpMicroseconds; } + void SetVolumeRampDownMicroseconds(int32 rampDownMicroseconds) { VolumeRampDownMicroseconds = rampDownMicroseconds; } - int32 GetVolumeRampUpMicroseconds() const; - int32 GetVolumeRampDownMicroseconds() const; - void SetVolumeRampUpMicroseconds(int32 rampUpMicroseconds); - void SetVolumeRampDownMicroseconds(int32 rampDownMicroseconds); + int32 GetVolumeRampUpSamples() const; + int32 GetVolumeRampDownSamples() const; + void SetVolumeRampUpSamples(int32 rampUpSamples); + void SetVolumeRampDownSamples(int32 rampDownSamples); + bool IsValid() const { return (gdwMixingFreq > 0) && (gnChannels == 1 || gnChannels == 2 || gnChannels == 4); Modified: trunk/OpenMPT/soundlib/Sndmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sndmix.cpp 2014-02-01 20:47:55 UTC (rev 3622) +++ trunk/OpenMPT/soundlib/Sndmix.cpp 2014-02-01 21:26:00 UTC (rev 3623) @@ -1509,7 +1509,7 @@ { const bool rampUp = (pChn->newLeftVol > pChn->leftVol) || (pChn->newRightVol > pChn->rightVol); int32 rampLength, globalRampLength, instrRampLength = 0; - rampLength = globalRampLength = (rampUp ? m_MixerSettings.glVolumeRampUpSamples : m_MixerSettings.glVolumeRampDownSamples); + rampLength = globalRampLength = (rampUp ? m_MixerSettings.GetVolumeRampUpSamples() : m_MixerSettings.GetVolumeRampDownSamples()); //XXXih: add real support for bidi ramping here if(GetModFlag(MSF_VOLRAMP) && (GetType() & MOD_TYPE_XM)) @@ -2184,7 +2184,7 @@ const bool rampUp = m_nGlobalVolume > m_nGlobalVolumeDestination; m_nGlobalVolumeDestination = m_nGlobalVolume; - m_nSamplesToGlobalVolRampDest = m_nGlobalVolumeRampAmount = rampUp ? m_MixerSettings.glVolumeRampUpSamples : m_MixerSettings.glVolumeRampDownSamples; + m_nSamplesToGlobalVolRampDest = m_nGlobalVolumeRampAmount = rampUp ? m_MixerSettings.GetVolumeRampUpSamples() : m_MixerSettings.GetVolumeRampDownSamples(); } // calculate ramping step This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |