From: <man...@us...> - 2013-04-14 13:46:02
|
Revision: 1875 http://sourceforge.net/p/modplug/code/1875 Author: manxorist Date: 2013-04-14 13:45:50 +0000 (Sun, 14 Apr 2013) Log Message: ----------- [Ref] Split sound device flags from mixer flags. [Mod] Rename "Use secondary buffers" option to the negated form "Use primary buffer". [Imp] Support exclusive device access also for wasapi devices. Show "Use primary buffer" as "Use device exclusively" in that case. [Fix] New installations defaulted to not using secondary buffers since some time. This was accidental, revert to non-primary access by default. [Mod] OpenMPT: Version is now 1.22.01.03 Modified Paths: -------------- trunk/OpenMPT/common/version.h trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.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/sounddev/SoundDevice.cpp trunk/OpenMPT/soundlib/Snd_defs.h Modified: trunk/OpenMPT/common/version.h =================================================================== --- trunk/OpenMPT/common/version.h 2013-04-14 11:18:13 UTC (rev 1874) +++ trunk/OpenMPT/common/version.h 2013-04-14 13:45:50 UTC (rev 1875) @@ -19,7 +19,7 @@ #define VER_MAJORMAJOR 1 #define VER_MAJOR 22 #define VER_MINOR 01 -#define VER_MINORMINOR 02 +#define VER_MINORMINOR 03 //Creates version number from version parts that appears in version string. //For example MAKE_VERSION_NUMERIC(1,17,02,28) gives version number of Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2013-04-14 11:18:13 UTC (rev 1874) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2013-04-14 13:45:50 UTC (rev 1875) @@ -498,6 +498,26 @@ } +bool CMainFrame::WritePrivateProfileBool(const CString section, const CString key, const bool value, const CString iniFile) +{ + CHAR valueBuffer[INIBUFFERSIZE]; + wsprintf(valueBuffer, "%li", value?1:0); + return (WritePrivateProfileString(section, key, valueBuffer, iniFile) != 0); +} + + +bool CMainFrame::GetPrivateProfileBool(const CString section, const CString key, const bool defaultValue, const CString iniFile) +{ + CHAR defaultValueBuffer[INIBUFFERSIZE]; + wsprintf(defaultValueBuffer, "%li", defaultValue?1:0); + + CHAR valueBuffer[INIBUFFERSIZE]; + GetPrivateProfileString(section, key, defaultValueBuffer, valueBuffer, INIBUFFERSIZE, iniFile); + + return atol(valueBuffer)?true:false; +} + + bool CMainFrame::WritePrivateProfileLong(const CString section, const CString key, const long value, const CString iniFile) { CHAR valueBuffer[INIBUFFERSIZE]; @@ -817,11 +837,7 @@ if(!gpSoundDevice) gpSoundDevice = CreateSoundDevice(nDevType); if(!gpSoundDevice) return false; gpSoundDevice->SetSource(this); - gpSoundDevice->Configure(m_hWnd, TrackerSettings::Instance().m_LatencyMS, TrackerSettings::Instance().m_UpdateIntervalMS, - ((TrackerSettings::Instance().m_MixerSettings.MixerFlags & SOUNDSETUP_SECONDARY) ? 0 : SNDDEV_OPTIONS_EXCLUSIVE) - | - ((TrackerSettings::Instance().m_MixerSettings.MixerFlags & SOUNDSETUP_NOBOOSTTHREADPRIORITY) ? 0 : SNDDEV_OPTIONS_BOOSTTHREADPRIORITY) - ); + gpSoundDevice->Configure(m_hWnd, TrackerSettings::Instance().m_LatencyMS, TrackerSettings::Instance().m_UpdateIntervalMS, TrackerSettings::Instance().GetSoundDeviceFlags()); if (!gpSoundDevice->Open(SNDDEV_GET_NUMBER(TrackerSettings::Instance().m_nWaveDevice), &WaveFormat.Format)) return false; } return true; @@ -1672,11 +1688,11 @@ } -BOOL CMainFrame::SetupSoundCard(DWORD q, DWORD rate, SampleFormat sampleformat, UINT nChns, UINT latency_ms, UINT updateinterval_ms, LONG wd) +BOOL CMainFrame::SetupSoundCard(DWORD deviceflags, DWORD rate, SampleFormat sampleformat, UINT nChns, UINT latency_ms, UINT updateinterval_ms, LONG wd) //--------------------------------------------------------------------------------------------------------------------------------------------- { const bool isPlaying = IsPlaying(); - if (((TrackerSettings::Instance().m_MixerSettings.MixerFlags & SOUNDSETUP_RESTARTMASK) != (q & SOUNDSETUP_RESTARTMASK)) + if ((TrackerSettings::Instance().GetSoundDeviceFlags() != deviceflags) || (TrackerSettings::Instance().m_MixerSettings.gdwMixingFreq != rate) || (TrackerSettings::Instance().m_nWaveDevice != wd) || (TrackerSettings::Instance().m_LatencyMS != latency_ms) @@ -1692,7 +1708,7 @@ } TrackerSettings::Instance().m_nWaveDevice = wd; TrackerSettings::Instance().m_MixerSettings.gdwMixingFreq = rate; - TrackerSettings::Instance().m_MixerSettings.MixerFlags = q; + TrackerSettings::Instance().SetSoundDeviceFlags(deviceflags); TrackerSettings::Instance().m_LatencyMS = latency_ms; TrackerSettings::Instance().m_UpdateIntervalMS = updateinterval_ms; TrackerSettings::Instance().m_MixerSettings.m_SampleFormat = sampleformat; @@ -1705,7 +1721,6 @@ UpdateWindow(); } else { - TrackerSettings::Instance().m_MixerSettings.MixerFlags = q; // No need to restart playback CriticalSection cs; if(GetSoundFilePlaying()) UpdateAudioParameters(*GetSoundFilePlaying(), FALSE); @@ -1865,7 +1880,7 @@ CPropertySheet dlg("OpenMPT Setup", this, m_nLastOptionsPage); COptionsGeneral general; - COptionsSoundcard sounddlg(TrackerSettings::Instance().m_MixerSettings.gdwMixingFreq, TrackerSettings::Instance().m_MixerSettings.MixerFlags, TrackerSettings::Instance().m_MixerSettings.m_SampleFormat, TrackerSettings::Instance().m_MixerSettings.gnChannels, TrackerSettings::Instance().m_LatencyMS, TrackerSettings::Instance().m_UpdateIntervalMS, TrackerSettings::Instance().m_nWaveDevice); + COptionsSoundcard sounddlg(TrackerSettings::Instance().m_MixerSettings.gdwMixingFreq, TrackerSettings::Instance().GetSoundDeviceFlags(), TrackerSettings::Instance().m_MixerSettings.m_SampleFormat, TrackerSettings::Instance().m_MixerSettings.gnChannels, TrackerSettings::Instance().m_LatencyMS, TrackerSettings::Instance().m_UpdateIntervalMS, TrackerSettings::Instance().m_nWaveDevice); COptionsKeyboard keyboard; COptionsColors colors; COptionsPlayer playerdlg; Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2013-04-14 11:18:13 UTC (rev 1874) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2013-04-14 13:45:50 UTC (rev 1875) @@ -357,6 +357,8 @@ static CInputHandler *m_InputHandler; //rewbs.customKeys static CAutoSaver *m_pAutoSaver; //rewbs.customKeys + static bool WritePrivateProfileBool(const CString section, const CString key, const bool value, const CString iniFile); + static bool GetPrivateProfileBool(const CString section, const CString key, const bool defaultValue, const CString iniFile); static bool WritePrivateProfileLong(const CString section, const CString key, const long value, const CString iniFile); static long GetPrivateProfileLong(const CString section, const CString key, const long defaultValue, const CString iniFile); static bool WritePrivateProfileDWord(const CString section, const CString key, const DWORD value, const CString iniFile); @@ -437,7 +439,7 @@ BOOL StopRenderer(CSoundFile*); void SwitchToActiveView(); - BOOL SetupSoundCard(DWORD q, DWORD rate, SampleFormat sampleformat, UINT chns, UINT latency_ms, UINT updateinterval_ms, LONG wd); + BOOL SetupSoundCard(DWORD deviceflags, DWORD rate, SampleFormat sampleformat, UINT chns, UINT latency_ms, UINT updateinterval_ms, LONG wd); BOOL SetupMiscOptions(); BOOL SetupPlayer(); Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp 2013-04-14 11:18:13 UTC (rev 1874) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp 2013-04-14 13:45:50 UTC (rev 1875) @@ -124,10 +124,10 @@ CHAR s[128]; CPropertyPage::OnInitDialog(); - if (m_dwSoundSetup & SNDMIX_SOFTPANNING) CheckDlgButton(IDC_CHECK2, MF_CHECKED); - if (m_dwSoundSetup & SNDMIX_ENABLEMMX) CheckDlgButton(IDC_CHECK3, MF_CHECKED); - if (m_dwSoundSetup & SOUNDSETUP_SECONDARY) CheckDlgButton(IDC_CHECK4, MF_CHECKED); - if (!(m_dwSoundSetup & SOUNDSETUP_NOBOOSTTHREADPRIORITY)) CheckDlgButton(IDC_CHECK5, MF_CHECKED); + if(TrackerSettings::Instance().m_MixerSettings.MixerFlags & SNDMIX_SOFTPANNING) CheckDlgButton(IDC_CHECK2, MF_CHECKED); + if(TrackerSettings::Instance().m_MixerSettings.MixerFlags & SNDMIX_ENABLEMMX) CheckDlgButton(IDC_CHECK3, MF_CHECKED); + if(m_SoundDeviceFlags & SNDDEV_OPTIONS_EXCLUSIVE) CheckDlgButton(IDC_CHECK4, MF_CHECKED); + if(m_SoundDeviceFlags & SNDDEV_OPTIONS_BOOSTTHREADPRIORITY) CheckDlgButton(IDC_CHECK5, MF_CHECKED); // Multimedia extensions ::EnableWindow(::GetDlgItem(m_hWnd, IDC_CHECK3), (CSoundFile::GetSysInfo() & PROCSUPPORT_MMX) ? TRUE : FALSE); if(CSoundFile::GetSysInfo() & PROCSUPPORT_SSE) @@ -245,9 +245,7 @@ nDev++; } } - GetDlgItem(IDC_CHECK4)->EnableWindow((SNDDEV_GET_TYPE(m_nSoundDevice) == SNDDEV_DSOUND /*|| SNDDEV_GET_TYPE(m_nSoundDevice) == SNDDEV_PORTAUDIO_WASAPI*/) ? TRUE : FALSE); - GetDlgItem(IDC_STATIC_UPDATEINTERVAL)->EnableWindow((SNDDEV_GET_TYPE(m_nSoundDevice) == SNDDEV_ASIO) ? FALSE : TRUE); - GetDlgItem(IDC_COMBO_UPDATEINTERVAL)->EnableWindow((SNDDEV_GET_TYPE(m_nSoundDevice) == SNDDEV_ASIO) ? FALSE : TRUE); + UpdateControls(m_nSoundDevice); } // Sample Format { @@ -336,9 +334,7 @@ if (n >= 0) { int dev = m_CbnDevice.GetItemData(n); - GetDlgItem(IDC_CHECK4)->EnableWindow((SNDDEV_GET_TYPE(dev) == SNDDEV_DSOUND /*|| SNDDEV_GET_TYPE(dev) == SNDDEV_PORTAUDIO_WASAPI*/) ? TRUE : FALSE); - GetDlgItem(IDC_STATIC_UPDATEINTERVAL)->EnableWindow((SNDDEV_GET_TYPE(dev) == SNDDEV_ASIO) ? FALSE : TRUE); - GetDlgItem(IDC_COMBO_UPDATEINTERVAL)->EnableWindow((SNDDEV_GET_TYPE(dev) == SNDDEV_ASIO) ? FALSE : TRUE); + UpdateControls(dev); UpdateSampleRates(dev); OnSettingsChanged(); } @@ -406,6 +402,22 @@ } +void COptionsSoundcard::UpdateControls(int dev) +//--------------------------------------------- +{ + GetDlgItem(IDC_CHECK4)->EnableWindow((SNDDEV_GET_TYPE(dev) == SNDDEV_DSOUND || SNDDEV_GET_TYPE(dev) == SNDDEV_PORTAUDIO_WASAPI) ? TRUE : FALSE); + GetDlgItem(IDC_STATIC_UPDATEINTERVAL)->EnableWindow((SNDDEV_GET_TYPE(dev) == SNDDEV_ASIO) ? FALSE : TRUE); + GetDlgItem(IDC_COMBO_UPDATEINTERVAL)->EnableWindow((SNDDEV_GET_TYPE(dev) == SNDDEV_ASIO) ? FALSE : TRUE); + if(SNDDEV_GET_TYPE(dev) == SNDDEV_DSOUND) + { + GetDlgItem(IDC_CHECK4)->SetWindowText("Use primary buffer"); + } else + { + GetDlgItem(IDC_CHECK4)->SetWindowText("Use device exclusively"); + } +} + + BOOL COptionsSoundcard::OnSetActive() //----------------------------------- { @@ -417,11 +429,11 @@ void COptionsSoundcard::OnOK() //---------------------------- { - m_dwSoundSetup &= ~(SNDMIX_ENABLEMMX | SOUNDSETUP_SECONDARY | SNDMIX_SOFTPANNING | SOUNDSETUP_NOBOOSTTHREADPRIORITY); - if (IsDlgButtonChecked(IDC_CHECK2)) m_dwSoundSetup |= SNDMIX_SOFTPANNING; - if (IsDlgButtonChecked(IDC_CHECK3)) m_dwSoundSetup |= SNDMIX_ENABLEMMX; - if (IsDlgButtonChecked(IDC_CHECK4)) m_dwSoundSetup |= SOUNDSETUP_SECONDARY; - if (!IsDlgButtonChecked(IDC_CHECK5)) m_dwSoundSetup |= SOUNDSETUP_NOBOOSTTHREADPRIORITY; + if(IsDlgButtonChecked(IDC_CHECK2)) TrackerSettings::Instance().m_MixerSettings.MixerFlags |= SNDMIX_SOFTPANNING; else TrackerSettings::Instance().m_MixerSettings.MixerFlags &= ~SNDMIX_SOFTPANNING; + if(IsDlgButtonChecked(IDC_CHECK3)) TrackerSettings::Instance().m_MixerSettings.MixerFlags |= SNDMIX_ENABLEMMX; else TrackerSettings::Instance().m_MixerSettings.MixerFlags &= ~SNDMIX_ENABLEMMX; + m_SoundDeviceFlags = 0; + if(IsDlgButtonChecked(IDC_CHECK4)) m_SoundDeviceFlags |= SNDDEV_OPTIONS_EXCLUSIVE; + if(IsDlgButtonChecked(IDC_CHECK5)) m_SoundDeviceFlags |= SNDDEV_OPTIONS_BOOSTTHREADPRIORITY; // Mixing Freq { m_dwRate = m_CbnMixingFreq.GetItemData(m_CbnMixingFreq.GetCurSel()); @@ -467,7 +479,7 @@ wsprintf(s, "%d ms", m_UpdateIntervalMS); m_CbnUpdateIntervalMS.SetWindowText(s); } - CMainFrame::GetMainFrame()->SetupSoundCard(m_dwSoundSetup, m_dwRate, m_SampleFormat, m_nChannels, m_LatencyMS, m_UpdateIntervalMS, m_nSoundDevice); + CMainFrame::GetMainFrame()->SetupSoundCard(m_SoundDeviceFlags, m_dwRate, m_SampleFormat, m_nChannels, m_LatencyMS, m_UpdateIntervalMS, m_nSoundDevice); UpdateStatistics(); CPropertyPage::OnOK(); } Modified: trunk/OpenMPT/mptrack/Mpdlgs.h =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.h 2013-04-14 11:18:13 UTC (rev 1874) +++ trunk/OpenMPT/mptrack/Mpdlgs.h 2013-04-14 13:45:50 UTC (rev 1875) @@ -24,7 +24,7 @@ CComboBox m_CbnLatencyMS, m_CbnUpdateIntervalMS, m_CbnMixingFreq, m_CbnPolyphony, m_CbnQuality; CSliderCtrl m_SliderStereoSep, m_SliderPreAmp; CEdit m_EditStatistics; - DWORD m_dwRate, m_dwSoundSetup; + DWORD m_dwRate, m_SoundDeviceFlags; SampleFormat m_SampleFormat; DWORD m_nChannels; DWORD m_LatencyMS; @@ -33,14 +33,15 @@ bool m_PreAmpNoteShowed; public: - COptionsSoundcard(DWORD rate, DWORD q, SampleFormat sampleformat, DWORD chns, DWORD latency_ms, DWORD updateinterval_ms, DWORD sd):CPropertyPage(IDD_OPTIONS_SOUNDCARD) - { m_dwRate = rate; m_dwSoundSetup = q; m_SampleFormat = sampleformat; m_nChannels = chns; + COptionsSoundcard(DWORD rate, DWORD flags, SampleFormat sampleformat, DWORD chns, DWORD latency_ms, DWORD updateinterval_ms, DWORD sd):CPropertyPage(IDD_OPTIONS_SOUNDCARD) + { m_dwRate = rate; m_SoundDeviceFlags = flags; m_SampleFormat = sampleformat; m_nChannels = chns; m_LatencyMS = latency_ms; m_UpdateIntervalMS = updateinterval_ms; m_nSoundDevice = sd; m_PreAmpNoteShowed = false; } void UpdateStatistics(); private: void UpdateSampleRates(int dev); + void UpdateControls(int dev); void SetPreAmpSliderPosition(); protected: Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2013-04-14 11:18:13 UTC (rev 1874) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2013-04-14 13:45:50 UTC (rev 1875) @@ -23,12 +23,17 @@ #include "TrackerSettings.h" #include "../common/misc_util.h" #include "PatternClipboard.h" +#include "../sounddev/SoundDevice.h" #define OLD_SNDDEV_MINBUFFERLEN 1 // 1ms #define OLD_SNDDEV_MAXBUFFERLEN 1000 // 1sec +#define OLD_SOUNDSETUP_REVERSESTEREO 0x20 +#define OLD_SOUNDSETUP_SECONDARY 0x40 +#define OLD_SOUNDSETUP_NOBOOSTTHREADPRIORITY 0x80 + TrackerSettings TrackerSettings::settings; const TCHAR *TrackerSettings::m_szDirectoryToSettingsName[NUM_DIRS] = { _T("Songs_Directory"), _T("Samples_Directory"), _T("Instruments_Directory"), _T("Plugins_Directory"), _T("Plugin_Presets_Directory"), _T("Export_Directory"), _T(""), _T("") }; @@ -66,6 +71,8 @@ m_nWaveDevice = SNDDEV_BUILD_ID(0, SNDDEV_WAVEOUT); // Default value will be overridden m_LatencyMS = SNDDEV_DEFAULT_LATENCY_MS; m_UpdateIntervalMS = SNDDEV_DEFAULT_UPDATEINTERVAL_MS; + m_SoundDeviceExclusiveMode = false; + m_SoundDeviceBoostThreadPriority = true; #ifndef NO_EQ // Default EQ settings @@ -146,6 +153,21 @@ } +DWORD TrackerSettings::GetSoundDeviceFlags() const +//------------------------------------------------ +{ + return (m_SoundDeviceExclusiveMode ? SNDDEV_OPTIONS_EXCLUSIVE : 0) | (m_SoundDeviceBoostThreadPriority ? SNDDEV_OPTIONS_BOOSTTHREADPRIORITY : 0); +} + + +void TrackerSettings::SetSoundDeviceFlags(DWORD flags) +//---------------------------------------------------- +{ + m_SoundDeviceExclusiveMode = (flags & SNDDEV_OPTIONS_EXCLUSIVE) ? true : false; + m_SoundDeviceBoostThreadPriority = (flags & SNDDEV_OPTIONS_BOOSTTHREADPRIORITY) ? true : false; +} + + void TrackerSettings::GetDefaultColourScheme(COLORREF (&colours)[MAX_MODCOLORS]) //------------------------------------------------------------------------------ { @@ -255,7 +277,7 @@ } // GUI Stuff - m_ShowSplashScreen = !!CMainFrame::GetPrivateProfileLong("Display", "ShowSplashScreen", m_ShowSplashScreen, iniFile); + m_ShowSplashScreen = CMainFrame::GetPrivateProfileBool("Display", "ShowSplashScreen", m_ShowSplashScreen, iniFile); gbMdiMaximize = CMainFrame::GetPrivateProfileLong("Display", "MDIMaximize", gbMdiMaximize, iniFile); glTreeWindowWidth = CMainFrame::GetPrivateProfileLong("Display", "MDITreeWidth", glTreeWindowWidth, iniFile); glTreeSplitRatio = CMainFrame::GetPrivateProfileLong("Display", "MDITreeRatio", glTreeSplitRatio, iniFile); @@ -315,9 +337,18 @@ CASIODevice::baseChannel = GetPrivateProfileInt("Sound Settings", "ASIOBaseChannel", CASIODevice::baseChannel, iniFile); #endif // NO_ASIO m_nWaveDevice = CMainFrame::GetPrivateProfileLong("Sound Settings", "WaveDevice", defaultDevice, iniFile); + if(vIniVersion < MAKE_VERSION_NUMERIC(1, 22, 01, 03)) m_MixerSettings.MixerFlags |= OLD_SOUNDSETUP_SECONDARY; m_MixerSettings.MixerFlags = CMainFrame::GetPrivateProfileDWord("Sound Settings", "SoundSetup", m_MixerSettings.MixerFlags, iniFile); - if(vIniVersion < MAKE_VERSION_NUMERIC(1, 21, 01, 26)) - m_MixerSettings.MixerFlags &= ~0x20; // Reverse stereo + m_SoundDeviceExclusiveMode = CMainFrame::GetPrivateProfileBool("Sound Settings", "ExclusiveMode", m_SoundDeviceExclusiveMode, iniFile); + m_SoundDeviceBoostThreadPriority = CMainFrame::GetPrivateProfileBool("Sound Settings", "BoostThreadPriority", m_SoundDeviceBoostThreadPriority, iniFile); + if(vIniVersion < MAKE_VERSION_NUMERIC(1, 21, 01, 26)) m_MixerSettings.MixerFlags &= ~OLD_SOUNDSETUP_REVERSESTEREO; + if(vIniVersion < MAKE_VERSION_NUMERIC(1, 22, 01, 03)) + { + m_SoundDeviceExclusiveMode = ((m_MixerSettings.MixerFlags & OLD_SOUNDSETUP_SECONDARY) == 0); + m_SoundDeviceBoostThreadPriority = ((m_MixerSettings.MixerFlags & OLD_SOUNDSETUP_NOBOOSTTHREADPRIORITY) == 0); + m_MixerSettings.MixerFlags &= ~OLD_SOUNDSETUP_SECONDARY; + m_MixerSettings.MixerFlags &= ~OLD_SOUNDSETUP_NOBOOSTTHREADPRIORITY; + } m_MixerSettings.DSPMask = CMainFrame::GetPrivateProfileDWord("Sound Settings", "Quality", m_MixerSettings.DSPMask, iniFile); m_ResamplerSettings.SrcMode = (ResamplingMode)CMainFrame::GetPrivateProfileDWord("Sound Settings", "SrcMode", m_ResamplerSettings.SrcMode, iniFile); m_MixerSettings.gdwMixingFreq = CMainFrame::GetPrivateProfileDWord("Sound Settings", "Mixing_Rate", 0, iniFile); @@ -580,7 +611,9 @@ if (RegOpenKeyEx(HKEY_CURRENT_USER, m_csRegKey, 0, KEY_READ, &key) == ERROR_SUCCESS) { RegQueryValueEx(key, "SoundSetup", NULL, &dwREG_DWORD, (LPBYTE)&m_MixerSettings.MixerFlags, &dwDWORDSize); - m_MixerSettings.MixerFlags &= ~0x20; // Reverse stereo + m_MixerSettings.MixerFlags &= ~OLD_SOUNDSETUP_REVERSESTEREO; + m_SoundDeviceExclusiveMode = ((m_MixerSettings.MixerFlags & OLD_SOUNDSETUP_SECONDARY) == 0); + m_MixerSettings.MixerFlags &= ~OLD_SOUNDSETUP_SECONDARY; RegQueryValueEx(key, "Quality", NULL, &dwREG_DWORD, (LPBYTE)&m_MixerSettings.DSPMask, &dwDWORDSize); DWORD dummysrcmode = m_ResamplerSettings.SrcMode; RegQueryValueEx(key, "SrcMode", NULL, &dwREG_DWORD, (LPBYTE)&dummysrcmode, &dwDWORDSize); @@ -791,6 +824,8 @@ CMainFrame::WritePrivateProfileLong("Sound Settings", "WaveDevice", m_nWaveDevice, iniFile); CMainFrame::WritePrivateProfileDWord("Sound Settings", "SoundSetup", m_MixerSettings.MixerFlags, iniFile); + CMainFrame::WritePrivateProfileBool("Sound Settings", "ExclusiveMode", m_SoundDeviceExclusiveMode, iniFile); + CMainFrame::WritePrivateProfileBool("Sound Settings", "BoostThreadPriority", m_SoundDeviceBoostThreadPriority, iniFile); CMainFrame::WritePrivateProfileDWord("Sound Settings", "Quality", m_MixerSettings.DSPMask, iniFile); CMainFrame::WritePrivateProfileDWord("Sound Settings", "SrcMode", m_ResamplerSettings.SrcMode, iniFile); CMainFrame::WritePrivateProfileDWord("Sound Settings", "Mixing_Rate", m_MixerSettings.gdwMixingFreq, iniFile); Modified: trunk/OpenMPT/mptrack/TrackerSettings.h =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.h 2013-04-14 11:18:13 UTC (rev 1874) +++ trunk/OpenMPT/mptrack/TrackerSettings.h 2013-04-14 13:45:50 UTC (rev 1875) @@ -117,11 +117,6 @@ #define MIDISETUP_PLAYPATTERNONMIDIIN 0x100 // Play pattern if MIDI Note is received and playback is paused -#define SOUNDSETUP_SECONDARY SNDMIX_SECONDARY -#define SOUNDSETUP_NOBOOSTTHREADPRIORITY SNDMIX_NOBOOSTTHREADPRIORITY -#define SOUNDSETUP_RESTARTMASK (SOUNDSETUP_SECONDARY|SOUNDSETUP_NOBOOSTTHREADPRIORITY) - - // EQ struct EQPreset { @@ -178,6 +173,11 @@ LONG m_nWaveDevice; // use the SNDDEV_GET_NUMBER and SNDDEV_GET_TYPE macros to decode DWORD m_LatencyMS; DWORD m_UpdateIntervalMS; + bool m_SoundDeviceExclusiveMode; + bool m_SoundDeviceBoostThreadPriority; + DWORD GetSoundDeviceFlags() const; + void SetSoundDeviceFlags(DWORD flags); + #ifndef NO_EQ EQPreset m_EqSettings; #endif Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2013-04-14 11:18:13 UTC (rev 1874) +++ trunk/OpenMPT/mptrack/mptrack.rc 2013-04-14 13:45:50 UTC (rev 1875) @@ -1278,7 +1278,7 @@ CONTROL "",IDC_COMBO1,"ComboBoxEx32",CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP,12,30,246,96 LTEXT "Latency:",IDC_STATIC,12,48,60,12,SS_CENTERIMAGE COMBOBOX IDC_COMBO2,78,48,72,83,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - CONTROL "Use secondary buffers",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,48,102,12 + CONTROL "Use device exclusively",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,48,102,12 LTEXT "Update Interval:",IDC_STATIC_UPDATEINTERVAL,12,66,60,12,SS_CENTERIMAGE COMBOBOX IDC_COMBO_UPDATEINTERVAL,78,66,72,83,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP LTEXT "Mixing Quality:",IDC_STATIC,12,84,57,12,SS_CENTERIMAGE Modified: trunk/OpenMPT/sounddev/SoundDevice.cpp =================================================================== --- trunk/OpenMPT/sounddev/SoundDevice.cpp 2013-04-14 11:18:13 UTC (rev 1874) +++ trunk/OpenMPT/sounddev/SoundDevice.cpp 2013-04-14 13:45:50 UTC (rev 1875) @@ -1816,7 +1816,7 @@ } m_StreamParameters.suggestedLatency = m_LatencyMS / 1000.0; m_StreamParameters.hostApiSpecificStreamInfo = NULL; - if(false && (m_HostApi == Pa_HostApiTypeIdToHostApiIndex(paWASAPI)) && (m_fulCfgOptions & SNDDEV_OPTIONS_EXCLUSIVE)) + if((m_HostApi == Pa_HostApiTypeIdToHostApiIndex(paWASAPI)) && (m_fulCfgOptions & SNDDEV_OPTIONS_EXCLUSIVE)) { MemsetZero(m_WasapiStreamInfo); m_WasapiStreamInfo.size = sizeof(PaWasapiStreamInfo); @@ -1927,7 +1927,7 @@ StreamParameters.sampleFormat = paInt16; StreamParameters.suggestedLatency = 0.0; StreamParameters.hostApiSpecificStreamInfo = NULL; - if(false && (m_HostApi == Pa_HostApiTypeIdToHostApiIndex(paWASAPI)) && (m_fulCfgOptions & SNDDEV_OPTIONS_EXCLUSIVE)) + if((m_HostApi == Pa_HostApiTypeIdToHostApiIndex(paWASAPI)) && (m_fulCfgOptions & SNDDEV_OPTIONS_EXCLUSIVE)) { MemsetZero(m_WasapiStreamInfo); m_WasapiStreamInfo.size = sizeof(PaWasapiStreamInfo); Modified: trunk/OpenMPT/soundlib/Snd_defs.h =================================================================== --- trunk/OpenMPT/soundlib/Snd_defs.h 2013-04-14 11:18:13 UTC (rev 1874) +++ trunk/OpenMPT/soundlib/Snd_defs.h 2013-04-14 13:45:50 UTC (rev 1875) @@ -295,9 +295,6 @@ // Misc Flags (can safely be turned on or off) #define SNDMIX_ENABLEMMX 0x08 // use MMX-accelerated code -#define SNDMIX_SECONDARY 0x40 -#define SNDMIX_NOBOOSTTHREADPRIORITY 0x80 - //#define SNDMIX_NOBACKWARDJUMPS 0x40000 // stop when jumping back in the order (currently unused as it seems) #define SNDMIX_MAXDEFAULTPAN 0x80000 // Used by the MOD loader (currently unused) #define SNDMIX_MUTECHNMODE 0x100000 // Notes are not played on muted channels This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |