From: <man...@us...> - 2013-04-11 17:14:38
|
Revision: 1842 http://sourceforge.net/p/modplug/code/1842 Author: manxorist Date: 2013-04-11 17:14:21 +0000 (Thu, 11 Apr 2013) Log Message: ----------- merge branch nonglobal-mixer: r1841 [Ref] Remove CSoundFile::AssertAlignment(). It was checking alignment of gFastSinc (which is irrelevant since the MMX mixer was removed) and it was checking the size of struct ModChannel to be a multiple of 32 (which is enforced by a __decl... --------------------- r1836 [Fix] Fix building with NO_DSP or NO_REVERB. --------------------- r1825 [Ref] Make the whole mixer and DSP state local to each CSoundFile instance. Do a bunch of required and related cleanups. --------------------- r1801 [Ref] Put builtin and local tunings handling inside #ifdef MODPLUG_TRACKER. --------------------- r1800 [Ref] Only regenerate resampler tables when the settings actually changed. --------------------- r1799 [Ref] Put gpSndMixHook inside #ifdef MODPLUG_TRACKER. --------------------- r1798 [Ref] Put gpMixPluginCreateProc inside #ifndef NO_VST. --------------------- r1795 [Ref] Remove unused CAGC::Initialize declaration. --------------------- r1762 [Ref] Move the global preamp setting into struct MixerSettings. [Ref] Rename SetMasterVolume to SetPreAmp and remove its adjustAGC parameter which was always true except when rendering wave files when agc was disabled anyway. --------------------- r1748 [Ref] Move updating of EQ and AGC settings into UpdateDspEffects(). --------------------- r1747 [Ref] Split SNDMIX flags into SNDMIX and SNDDSP flags. [Ref] Split MixerSettings::gdwSoundSetup into MixerSettings::DSPMask and MixerSettings::MixerFlags. [Ref] Make SNDMIX and SNDDSP use the same bitmasks as SOUNDSETUP respectively QUALITY... --------------------- r1740 [Ref] MixBuffers are members of class CSoundFile now. --------------------- r1733 [Ref] Remove SNDMIX_DIRECTTODISK and replace usage sites wiht IsRenderingToDisc() based on the already existing m_bIsRendering. --------------------- r1732 [Ref] Remove SNDMIX_*SRCMODE resampler settings and always use enum ResamplingMode. --------------------- r1731 [Ref] Move a bunch of mixer-related settings into class MixerSettings. Might break some stuff, will be fixed and cleaned up later. --------------------- r1728 [Ref] Remove global cpu feature flags gdwSysInfo. [Ref] Split ResamplerSettings from MixerSettings. [Ref] Remove support code for win3.11 with win32s. --------------------- r1725 [Var] Fix debug builds. --------------------- r1718 [Ref] Encapsulate resampler tables into a seperate class CResampler. [Ref] Move some more reverb related code to Snd_rvb.h [Ref] Remove the unneeded MMX_EndMix() function. All mmx-using functions have the emms instruction at the end anyway.... --------------------- Revision Links: -------------- http://sourceforge.net/p/modplug/code/1841 http://sourceforge.net/p/modplug/code/1836 http://sourceforge.net/p/modplug/code/1825 http://sourceforge.net/p/modplug/code/1801 http://sourceforge.net/p/modplug/code/1800 http://sourceforge.net/p/modplug/code/1799 http://sourceforge.net/p/modplug/code/1798 http://sourceforge.net/p/modplug/code/1795 http://sourceforge.net/p/modplug/code/1762 http://sourceforge.net/p/modplug/code/1748 http://sourceforge.net/p/modplug/code/1747 http://sourceforge.net/p/modplug/code/1740 http://sourceforge.net/p/modplug/code/1733 http://sourceforge.net/p/modplug/code/1732 http://sourceforge.net/p/modplug/code/1731 http://sourceforge.net/p/modplug/code/1728 http://sourceforge.net/p/modplug/code/1725 http://sourceforge.net/p/modplug/code/1718 Modified Paths: -------------- trunk/OpenMPT/mptrack/MainFrm.cpp trunk/OpenMPT/mptrack/Mainfrm.h trunk/OpenMPT/mptrack/Mod2wave.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/TrackerSettings.h trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/mptrack/Vstplug.cpp trunk/OpenMPT/mptrack/mptrack_08.vcproj trunk/OpenMPT/mptrack/mptrack_10.vcxproj trunk/OpenMPT/mptrack/mptrack_10.vcxproj.filters trunk/OpenMPT/sounddsp/AGC.h trunk/OpenMPT/sounddsp/DSP.cpp trunk/OpenMPT/sounddsp/DSP.h trunk/OpenMPT/sounddsp/EQ.cpp trunk/OpenMPT/sounddsp/EQ.h trunk/OpenMPT/soundlib/Fastmix.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/MixerSettings.cpp trunk/OpenMPT/soundlib/MixerSettings.h trunk/OpenMPT/soundlib/Mmx_mix.cpp trunk/OpenMPT/soundlib/Snd_defs.h trunk/OpenMPT/soundlib/Snd_flt.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Snd_rvb.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h trunk/OpenMPT/soundlib/Sndmix.cpp trunk/OpenMPT/soundlib/Tables.cpp trunk/OpenMPT/soundlib/Waveform.cpp trunk/OpenMPT/soundlib/WindowedFIR.cpp trunk/OpenMPT/soundlib/WindowedFIR.h trunk/OpenMPT/soundlib/snd_rvb.h Added Paths: ----------- trunk/OpenMPT/soundlib/Resampler.h Property Changed: ---------------- trunk/OpenMPT/ Index: trunk/OpenMPT =================================================================== --- trunk/OpenMPT 2013-04-11 16:32:02 UTC (rev 1841) +++ trunk/OpenMPT 2013-04-11 17:14:21 UTC (rev 1842) Property changes on: trunk/OpenMPT ___________________________________________________________________ Modified: svn:mergeinfo ## -1,5 +1,6 ## /branches/manx/build-speedup:1586-1589 /branches/manx/header-dependencies-cleanups:1394-1397,1401-1402,1405-1406 +/branches/manx/nonglobal-mixer:1715-1841 /branches/manx/profiler:1813 /branches/manx/project-files-cleanups:1378-1382 /branches/manx/snddev-fixes:1605-1713 \ No newline at end of property Modified: trunk/OpenMPT/mptrack/MainFrm.cpp =================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp 2013-04-11 16:32:02 UTC (rev 1841) +++ trunk/OpenMPT/mptrack/MainFrm.cpp 2013-04-11 17:14:21 UTC (rev 1842) @@ -264,8 +264,7 @@ // Setup Keyboard Hook ghKbdHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, AfxGetInstanceHandle(), GetCurrentThreadId()); - // Initialize Audio Mixer - UpdateAudioParameters(TRUE); + // Update the tree m_wndTree.Init(); @@ -832,9 +831,9 @@ if(!gpSoundDevice) return false; gpSoundDevice->SetSource(this); gpSoundDevice->Configure(m_hWnd, TrackerSettings::Instance().m_LatencyMS, TrackerSettings::Instance().m_UpdateIntervalMS, - ((TrackerSettings::Instance().m_dwSoundSetup & SOUNDSETUP_SECONDARY) ? 0 : SNDDEV_OPTIONS_EXCLUSIVE) + ((TrackerSettings::Instance().m_MixerSettings.MixerFlags & SOUNDSETUP_SECONDARY) ? 0 : SNDDEV_OPTIONS_EXCLUSIVE) | - ((TrackerSettings::Instance().m_dwSoundSetup & SOUNDSETUP_NOBOOSTTHREADPRIORITY) ? 0 : SNDDEV_OPTIONS_BOOSTTHREADPRIORITY) + ((TrackerSettings::Instance().m_MixerSettings.MixerFlags & SOUNDSETUP_NOBOOSTTHREADPRIORITY) ? 0 : SNDDEV_OPTIONS_BOOSTTHREADPRIORITY) ); if (!gpSoundDevice->Open(SNDDEV_GET_NUMBER(TrackerSettings::Instance().m_nWaveDevice), &WaveFormat.Format)) return false; return true; @@ -855,20 +854,20 @@ UINT nFixedBitsPerSample; bool err = false; - if (!TrackerSettings::Instance().m_dwRate) err = true; - if ((TrackerSettings::Instance().m_nChannels != 1) && (TrackerSettings::Instance().m_nChannels != 2) && (TrackerSettings::Instance().m_nChannels != 4)) err = true; + if (!TrackerSettings::Instance().m_MixerSettings.gdwMixingFreq) err = true; + if ((TrackerSettings::Instance().m_MixerSettings.gnChannels != 1) && (TrackerSettings::Instance().m_MixerSettings.gnChannels != 2) && (TrackerSettings::Instance().m_MixerSettings.gnChannels != 4)) err = true; if(!err) { - err = !audioTryOpeningDevice(TrackerSettings::Instance().m_nChannels, - TrackerSettings::Instance().m_nBitsPerSample, - TrackerSettings::Instance().m_dwRate); + err = !audioTryOpeningDevice(TrackerSettings::Instance().m_MixerSettings.gnChannels, + TrackerSettings::Instance().m_MixerSettings.gnBitsPerSample, + TrackerSettings::Instance().m_MixerSettings.gdwMixingFreq); nFixedBitsPerSample = (gpSoundDevice) ? gpSoundDevice->HasFixedBitsPerSample() : 0; - if(err && (nFixedBitsPerSample && (nFixedBitsPerSample != TrackerSettings::Instance().m_nBitsPerSample))) + if(err && (nFixedBitsPerSample && (nFixedBitsPerSample != TrackerSettings::Instance().m_MixerSettings.gnBitsPerSample))) { - if(nFixedBitsPerSample) TrackerSettings::Instance().m_nBitsPerSample = nFixedBitsPerSample; - err = !audioTryOpeningDevice(TrackerSettings::Instance().m_nChannels, - TrackerSettings::Instance().m_nBitsPerSample, - TrackerSettings::Instance().m_dwRate); + if(nFixedBitsPerSample) TrackerSettings::Instance().m_MixerSettings.gnBitsPerSample = nFixedBitsPerSample; + err = !audioTryOpeningDevice(TrackerSettings::Instance().m_MixerSettings.gnChannels, + TrackerSettings::Instance().m_MixerSettings.gnBitsPerSample, + TrackerSettings::Instance().m_MixerSettings.gdwMixingFreq); } } // Display error message box @@ -1069,7 +1068,7 @@ notification.masterVU[1] = rVu; if(gnClipLeft) notification.masterVU[0] |= Notification::ClipVU; if(gnClipRight) notification.masterVU[1] |= Notification::ClipVU; - uint32 dwVuDecay = Util::muldiv(dwSamplesRead, 120000, TrackerSettings::Instance().m_dwRate) + 1; + uint32 dwVuDecay = Util::muldiv(dwSamplesRead, 120000, TrackerSettings::Instance().m_MixerSettings.gdwMixingFreq) + 1; if (lVu >= dwVuDecay) gnLVuMeter = (lVu - dwVuDecay) << 11; else gnLVuMeter = 0; if (rVu >= dwVuDecay) gnRVuMeter = (rVu - dwVuDecay) << 11; else gnRVuMeter = 0; @@ -1088,63 +1087,36 @@ } -void CMainFrame::UpdateDspEffects() -//--------------------------------- +void CMainFrame::UpdateDspEffects(CSoundFile &sndFile, bool reset) +//---------------------------------------------------------------- { - CSoundFile::SetDspEffects( -#ifndef NO_DSP - TrackerSettings::Instance().m_dwQuality & QUALITY_SURROUND, -#else - FALSE, + CriticalSection cs; +#ifndef NO_REVERB + sndFile.m_Reverb.m_Settings = TrackerSettings::Instance().m_ReverbSettings; #endif - TrackerSettings::Instance().m_dwQuality & QUALITY_REVERB, #ifndef NO_DSP - TrackerSettings::Instance().m_dwQuality & QUALITY_MEGABASS, - TrackerSettings::Instance().m_dwQuality & QUALITY_NOISEREDUCTION, -#else - FALSE, - FALSE, + sndFile.m_DSP.m_Settings = TrackerSettings::Instance().m_DSPSettings; #endif #ifndef NO_EQ - TrackerSettings::Instance().m_dwQuality & QUALITY_EQ -#else - FALSE + sndFile.SetEQGains(TrackerSettings::Instance().m_EqSettings.Gains, MAX_EQ_BANDS, TrackerSettings::Instance().m_EqSettings.Freqs, reset?TRUE:FALSE); #endif - ); + sndFile.SetDspEffects(TrackerSettings::Instance().m_MixerSettings.DSPMask); + sndFile.InitPlayer(reset?TRUE:FALSE); } -void CMainFrame::UpdateAudioParameters(BOOL bReset) -//------------------------------------------------- +void CMainFrame::UpdateAudioParameters(CSoundFile &sndFile, bool reset) +//--------------------------------------------------------------------- { - if ((TrackerSettings::Instance().m_nBitsPerSample != 8) && (TrackerSettings::Instance().m_nBitsPerSample != 32)) TrackerSettings::Instance().m_nBitsPerSample = 16; - CSoundFile::SetWaveConfig(TrackerSettings::Instance().m_dwRate, - TrackerSettings::Instance().m_nBitsPerSample, - TrackerSettings::Instance().m_nChannels, - (TrackerSettings::Instance().m_dwSoundSetup & SOUNDSETUP_ENABLEMMX) ? TRUE : FALSE); - - // Soft panning - if (TrackerSettings::Instance().m_dwSoundSetup & SOUNDSETUP_SOFTPANNING) - CSoundFile::gdwSoundSetup |= SNDMIX_SOFTPANNING; - else - CSoundFile::gdwSoundSetup &= ~SNDMIX_SOFTPANNING; + CriticalSection cs; if (TrackerSettings::Instance().m_dwPatternSetup & PATTERN_MUTECHNMODE) - CSoundFile::gdwSoundSetup |= SNDMIX_MUTECHNMODE; + TrackerSettings::Instance().m_MixerSettings.MixerFlags |= SNDMIX_MUTECHNMODE; else - CSoundFile::gdwSoundSetup &= ~SNDMIX_MUTECHNMODE; - CSoundFile::SetResamplingMode(TrackerSettings::Instance().m_nSrcMode); - UpdateDspEffects(); -#ifndef NO_AGC - CSoundFile::SetAGC(TrackerSettings::Instance().m_dwQuality & QUALITY_AGC); -#endif -#ifndef NO_EQ - CSoundFile::SetEQGains( TrackerSettings::Instance().m_EqSettings.Gains, MAX_EQ_BANDS, TrackerSettings::Instance().m_EqSettings.Freqs, bReset ); -#endif - if (bReset) - { - CSoundFile::SetMixerSettings(TrackerSettings::Instance().m_MixerSettings); - CSoundFile::InitPlayer(TRUE); - } + TrackerSettings::Instance().m_MixerSettings.MixerFlags &= ~SNDMIX_MUTECHNMODE; + sndFile.SetMixerSettings(TrackerSettings::Instance().m_MixerSettings); + sndFile.SetResamplerSettings(TrackerSettings::Instance().m_ResamplerSettings); + UpdateDspEffects(sndFile, false); // reset done in next line + sndFile.InitPlayer(reset?TRUE:FALSE); } @@ -1264,8 +1236,8 @@ void CMainFrame::SetPreAmp(UINT n) //-------------------------------- { - TrackerSettings::Instance().m_nPreAmp = n; - if (m_pSndFile) m_pSndFile->SetMasterVolume(TrackerSettings::Instance().m_nPreAmp, true); + TrackerSettings::Instance().m_MixerSettings.m_nPreAmp = n; + if (m_pSndFile) m_pSndFile->SetPreAmp(TrackerSettings::Instance().m_MixerSettings.m_nPreAmp); } @@ -1277,24 +1249,6 @@ } -void CMainFrame::ApplyTrackerSettings(CSoundFile *pSndFile) -//---------------------------------------------------------- -{ - if(!pSndFile) return; - pSndFile->SetWaveConfig(TrackerSettings::Instance().m_dwRate, TrackerSettings::Instance().m_nBitsPerSample, TrackerSettings::Instance().m_nChannels, (TrackerSettings::Instance().m_dwSoundSetup & SOUNDSETUP_ENABLEMMX) ? TRUE : FALSE); - pSndFile->SetResamplingMode(TrackerSettings::Instance().m_nSrcMode); - UpdateDspEffects(); -#ifndef NO_AGC - pSndFile->SetAGC(TrackerSettings::Instance().m_dwQuality & QUALITY_AGC); -#endif - pSndFile->SetMasterVolume(TrackerSettings::Instance().m_nPreAmp, true); - pSndFile->SetMixerSettings(TrackerSettings::Instance().m_MixerSettings); -#ifndef NO_AGC - CSoundFile::m_AGC.Reset(); -#endif -} - - bool CMainFrame::PreparePlayback() //-------------------------------- { @@ -1403,7 +1357,7 @@ if (!PreparePlayback()) return false; // set mixing parameters in CSoundFile - ApplyTrackerSettings(pSndFile); + UpdateAudioParameters(*pSndFile); SetPlaybackSoundFile(pSndFile); @@ -1510,7 +1464,7 @@ return false; } - ApplyTrackerSettings(pSndFile); + UpdateAudioParameters(*pSndFile); SetPlaybackSoundFile(pSndFile); @@ -1714,10 +1668,14 @@ BOOL CMainFrame::SetupSoundCard(DWORD q, DWORD rate, UINT nBits, UINT nChns, UINT latency_ms, UINT updateinterval_ms, LONG wd) //---------------------------------------------------------------------------------------------------------------------------- { - const bool isPlaying = (IsPlaying() != 0); - if ((TrackerSettings::Instance().m_dwRate != rate) || ((TrackerSettings::Instance().m_dwSoundSetup & SOUNDSETUP_RESTARTMASK) != (q & SOUNDSETUP_RESTARTMASK)) - || (TrackerSettings::Instance().m_nWaveDevice != wd) || (TrackerSettings::Instance().m_LatencyMS != latency_ms) || (TrackerSettings::Instance().m_UpdateIntervalMS != updateinterval_ms) || (nBits != TrackerSettings::Instance().m_nBitsPerSample) - || (TrackerSettings::Instance().m_nChannels != nChns)) + const bool isPlaying = IsPlaying(); + if (((TrackerSettings::Instance().m_MixerSettings.MixerFlags & SOUNDSETUP_RESTARTMASK) != (q & SOUNDSETUP_RESTARTMASK)) + || (TrackerSettings::Instance().m_MixerSettings.gdwMixingFreq != rate) + || (TrackerSettings::Instance().m_nWaveDevice != wd) + || (TrackerSettings::Instance().m_LatencyMS != latency_ms) + || (TrackerSettings::Instance().m_UpdateIntervalMS != updateinterval_ms) + || (TrackerSettings::Instance().m_MixerSettings.gnBitsPerSample != nBits) + || (TrackerSettings::Instance().m_MixerSettings.gnChannels != nChns)) { CModDoc *pActiveMod = NULL; if (isPlaying) @@ -1726,45 +1684,33 @@ PauseMod(); } TrackerSettings::Instance().m_nWaveDevice = wd; - TrackerSettings::Instance().m_dwRate = rate; - TrackerSettings::Instance().m_dwSoundSetup = q; + TrackerSettings::Instance().m_MixerSettings.gdwMixingFreq = rate; + TrackerSettings::Instance().m_MixerSettings.MixerFlags = q; TrackerSettings::Instance().m_LatencyMS = latency_ms; TrackerSettings::Instance().m_UpdateIntervalMS = updateinterval_ms; - TrackerSettings::Instance().m_nBitsPerSample = nBits; - TrackerSettings::Instance().m_nChannels = nChns; + TrackerSettings::Instance().m_MixerSettings.gnBitsPerSample = nBits; + TrackerSettings::Instance().m_MixerSettings.gnChannels = nChns; { CriticalSection cs; - UpdateAudioParameters(FALSE); + if (pActiveMod) UpdateAudioParameters(pActiveMod->GetrSoundFile(), FALSE); } if (pActiveMod) PlayMod(pActiveMod); UpdateWindow(); } else { // No need to restart playback - TrackerSettings::Instance().m_dwSoundSetup = q; - CSoundFile::EnableMMX((TrackerSettings::Instance().m_dwSoundSetup & SOUNDSETUP_ENABLEMMX) != 0); + CriticalSection cs; + if(GetSoundFilePlaying()) UpdateAudioParameters(*GetSoundFilePlaying(), FALSE); } return TRUE; } -BOOL CMainFrame::SetupPlayer(DWORD q, DWORD srcmode, BOOL bForceUpdate) -//--------------------------------------------------------------------- +BOOL CMainFrame::SetupPlayer() +//---------------------------- { - if ((q != TrackerSettings::Instance().m_dwQuality) || (srcmode != TrackerSettings::Instance().m_nSrcMode) || (bForceUpdate)) - { - TrackerSettings::Instance().m_nSrcMode = srcmode; - TrackerSettings::Instance().m_dwQuality = q; - { - CriticalSection cs; - CSoundFile::SetMixerSettings(TrackerSettings::Instance().m_MixerSettings); - CSoundFile::SetResamplingMode(TrackerSettings::Instance().m_nSrcMode); - UpdateDspEffects(); -#ifndef NO_AGC - CSoundFile::SetAGC(TrackerSettings::Instance().m_dwQuality & QUALITY_AGC); -#endif - } - } + CriticalSection cs; + if(GetSoundFilePlaying()) UpdateAudioParameters(*GetSoundFilePlaying(), FALSE); return TRUE; } @@ -1785,9 +1731,13 @@ //--------------------------------- { if (TrackerSettings::Instance().m_dwPatternSetup & PATTERN_MUTECHNMODE) - CSoundFile::gdwSoundSetup |= SNDMIX_MUTECHNMODE; + TrackerSettings::Instance().m_MixerSettings.MixerFlags |= SNDMIX_MUTECHNMODE; else - CSoundFile::gdwSoundSetup &= ~SNDMIX_MUTECHNMODE; + TrackerSettings::Instance().m_MixerSettings.MixerFlags &= ~SNDMIX_MUTECHNMODE; + { + CriticalSection cs; + if(GetSoundFilePlaying()) UpdateAudioParameters(*GetSoundFilePlaying()); + } m_wndToolBar.EnableFlatButtons(TrackerSettings::Instance().m_dwPatternSetup & PATTERN_FLATBUTTONS); @@ -1900,7 +1850,7 @@ CPropertySheet dlg("OpenMPT Setup", this, m_nLastOptionsPage); COptionsGeneral general; - COptionsSoundcard sounddlg(TrackerSettings::Instance().m_dwRate, TrackerSettings::Instance().m_dwSoundSetup, TrackerSettings::Instance().m_nBitsPerSample, TrackerSettings::Instance().m_nChannels, TrackerSettings::Instance().m_LatencyMS, TrackerSettings::Instance().m_UpdateIntervalMS, TrackerSettings::Instance().m_nWaveDevice); + COptionsSoundcard sounddlg(TrackerSettings::Instance().m_MixerSettings.gdwMixingFreq, TrackerSettings::Instance().m_MixerSettings.MixerFlags, TrackerSettings::Instance().m_MixerSettings.gnBitsPerSample, TrackerSettings::Instance().m_MixerSettings.gnChannels, TrackerSettings::Instance().m_LatencyMS, TrackerSettings::Instance().m_UpdateIntervalMS, TrackerSettings::Instance().m_nWaveDevice); COptionsKeyboard keyboard; COptionsColors colors; COptionsPlayer playerdlg; @@ -2529,11 +2479,19 @@ } + //end rewbs.VSTTimeInfo long CMainFrame::GetSampleRate() //------------------------------ { - return CSoundFile::GetSampleRate(); + CriticalSection cs; + if(GetSoundFilePlaying()) + { + return GetSoundFilePlaying()->GetSampleRate(); + } else + { + return TrackerSettings::Instance().m_MixerSettings.gdwMixingFreq; + } } @@ -2555,7 +2513,7 @@ //------------------------------------------------- { CriticalSection cs; - pSndFile->m_bIsRendering=true; + pSndFile->m_bIsRendering = true; pSndFile->SuspendPlugins(); pSndFile->ResumePlugins(); return true; @@ -2566,7 +2524,7 @@ { CriticalSection cs; pSndFile->SuspendPlugins(); - pSndFile->m_bIsRendering=false; + pSndFile->m_bIsRendering = false; return true; } //end rewbs.VSTTimeInfo Modified: trunk/OpenMPT/mptrack/Mainfrm.h =================================================================== --- trunk/OpenMPT/mptrack/Mainfrm.h 2013-04-11 16:32:02 UTC (rev 1841) +++ trunk/OpenMPT/mptrack/Mainfrm.h 2013-04-11 17:14:21 UTC (rev 1842) @@ -108,26 +108,6 @@ }; -#define SOUNDSETUP_ENABLEMMX 0x08 -#define SOUNDSETUP_SOFTPANNING 0x10 -#define SOUNDSETUP_SECONDARY 0x40 -#define SOUNDSETUP_NOBOOSTTHREADPRIORITY 0x80 -#define SOUNDSETUP_RESTARTMASK (SOUNDSETUP_SECONDARY|SOUNDSETUP_NOBOOSTTHREADPRIORITY) - -#ifndef NO_DSP -#define QUALITY_NOISEREDUCTION 0x01 -#define QUALITY_MEGABASS 0x02 -#define QUALITY_SURROUND 0x08 -#endif -#define QUALITY_REVERB 0x20 -#ifndef NO_AGC -#define QUALITY_AGC 0x40 -#endif -#ifndef NO_EQ -#define QUALITY_EQ 0x80 -#endif - - #define NUM_VUMETER_PENS 32 @@ -336,8 +316,8 @@ // Low-Level Audio public: - static void UpdateDspEffects(); - static void UpdateAudioParameters(BOOL bReset=FALSE); + static void UpdateDspEffects(CSoundFile &sndFile, bool reset=false); + static void UpdateAudioParameters(CSoundFile &sndFile, bool reset=false); static void CalcStereoVuMeters(int *, unsigned long, unsigned long); static DWORD WINAPI NotifyThreadWrapper(LPVOID); DWORD NotifyThread(); @@ -403,7 +383,7 @@ bool m_bModTreeHasFocus; //rewbs.customKeys CWnd *m_pNoteMapHasFocus; //rewbs.customKeys CWnd* m_pOrderlistHasFocus; - long GetSampleRate(); + __declspec(deprecated) long GetSampleRate(); double GetApproxBPM(); void ThreadSafeSetModified(CModDoc* modified) {m_pJustModifiedDoc=modified;} void SetElapsedTime(double t) { m_dwTimeSec = static_cast<CSoundFile::samplecount_t>(t); } @@ -426,7 +406,6 @@ // Player functions public: - static void ApplyTrackerSettings(CSoundFile *pSndFile); // high level synchronous playback functions, do not hold AudioCriticalSection while calling these bool PreparePlayback(); @@ -434,6 +413,7 @@ void StopPlayback(); bool PausePlayback(); bool IsPlaybackRunning() const { return m_IsPlaybackRunning; } + static bool IsValidSoundFile(CSoundFile &sndFile) { return sndFile.GetType() ? true : false; } static bool IsValidSoundFile(CSoundFile *pSndFile) { return pSndFile && pSndFile->GetType(); } void SetPlaybackSoundFile(CSoundFile *pSndFile); void UnsetPlaybackSoundFile(); @@ -459,10 +439,12 @@ BOOL InitRenderer(CSoundFile*); BOOL StopRenderer(CSoundFile*); void SwitchToActiveView(); + BOOL SetupSoundCard(DWORD q, DWORD rate, UINT nbits, UINT chns, UINT latency_ms, UINT updateinterval_ms, LONG wd); + BOOL SetupMiscOptions(); + BOOL SetupPlayer(); + BOOL SetupDirectories(LPCTSTR szModDir, LPCTSTR szSampleDir, LPCTSTR szInstrDir, LPCTSTR szVstDir, LPCTSTR szPresetDir); - BOOL SetupMiscOptions(); - BOOL SetupPlayer(DWORD, DWORD, BOOL bForceUpdate=FALSE); BOOL SetupMidi(DWORD d, LONG n); void SetPreAmp(UINT n); HWND GetFollowSong() const; Modified: trunk/OpenMPT/mptrack/Mod2wave.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-04-11 16:32:02 UTC (rev 1841) +++ trunk/OpenMPT/mptrack/Mod2wave.cpp 2013-04-11 17:14:21 UTC (rev 1842) @@ -346,7 +346,7 @@ WaveFormat.Format.wFormatTag = WAVE_FORMAT_PCM; WaveFormat.Format.nSamplesPerSec = m_CbnSampleRate.GetItemData(m_CbnSampleRate.GetCurSel()); if (WaveFormat.Format.nSamplesPerSec < 11025) WaveFormat.Format.nSamplesPerSec = 11025; - if (WaveFormat.Format.nSamplesPerSec > MAX_SAMPLE_RATE) WaveFormat.Format.nSamplesPerSec = MAX_SAMPLE_RATE; + if (WaveFormat.Format.nSamplesPerSec > 192000) WaveFormat.Format.nSamplesPerSec = 192000; WaveFormat.Format.nChannels = (WORD)(dwFormat >> 8); if ((WaveFormat.Format.nChannels != 1) && (WaveFormat.Format.nChannels != 4)) WaveFormat.Format.nChannels = 2; WaveFormat.Format.wBitsPerSample = (WORD)(dwFormat & 0xFF); @@ -692,11 +692,11 @@ } } - int oldVol = m_pSndFile->GetMasterVolume(); - CSoundFile::gdwSoundSetup |= SNDMIX_DIRECTTODISK; - CSoundFile::gdwMixingFreq = m_pWaveFormat->nSamplesPerSec; - CSoundFile::gnBitsPerSample = m_pWaveFormat->wBitsPerSample; - CSoundFile::gnChannels = m_pWaveFormat->nChannels; + MixerSettings oldmixersettings = m_pSndFile->m_MixerSettings; + MixerSettings mixersettings = TrackerSettings::Instance().m_MixerSettings; + mixersettings.gdwMixingFreq = m_pWaveFormat->nSamplesPerSec; + mixersettings.gnBitsPerSample = m_pWaveFormat->wBitsPerSample; + mixersettings.gnChannels = m_pWaveFormat->nChannels; m_pSndFile->m_SongFlags.reset(SONG_PAUSED | SONG_STEP); // -> CODE#0024 // -> DESC="wav export update" @@ -704,19 +704,20 @@ if ((m_bNormalize) && (m_pWaveFormat->wBitsPerSample <= 24)) // -! NEW_FEATURE#0024 { - m_pSndFile->gnBitsPerSample = 24; + mixersettings.gnBitsPerSample = 24; #ifndef NO_AGC - m_pSndFile->SetAGC(FALSE); + mixersettings.DSPMask &= ~SNDDSP_AGC; #endif - if (oldVol > 128) m_pSndFile->SetMasterVolume(128); + if(mixersettings.m_nPreAmp > 128) mixersettings.m_nPreAmp = 128; } else { m_bNormalize = false; } m_pSndFile->ResetChannels(); - CSoundFile::SetMixerSettings(TrackerSettings::Instance().m_MixerSettings); - CSoundFile::InitPlayer(TRUE); + m_pSndFile->SetMixerSettings(mixersettings); + m_pSndFile->SetResamplerSettings(TrackerSettings::Instance().m_ResamplerSettings); + m_pSndFile->InitPlayer(TRUE); if ((!m_dwFileLimit) || (m_dwFileLimit > 2047*1024)) m_dwFileLimit = 2047*1024; // 2GB m_dwFileLimit <<= 10; // File Header @@ -768,7 +769,7 @@ m_pSndFile->m_PatternCuePoints.reserve(m_pSndFile->Order.GetLength()); // Process the conversion - UINT nBytesPerSample = (CSoundFile::gnBitsPerSample * CSoundFile::gnChannels) / 8; + UINT nBytesPerSample = (m_pSndFile->m_MixerSettings.gnBitsPerSample * m_pSndFile->m_MixerSettings.gnChannels) / 8; // For calculating the remaining time DWORD dwStartTime = timeGetTime(); // For giving away some processing time every now and then @@ -777,7 +778,7 @@ CMainFrame::GetMainFrame()->InitRenderer(m_pSndFile); //rewbs.VSTTimeInfo for (UINT n = 0; ; n++) { - UINT lRead = m_pSndFile->Read(buffer, sizeof(buffer)/(CSoundFile::gnChannels*CSoundFile::gnBitsPerSample/8)); + UINT lRead = m_pSndFile->Read(buffer, sizeof(buffer)/(m_pSndFile->m_MixerSettings.gnChannels*m_pSndFile->m_MixerSettings.gnBitsPerSample/8)); // Process cue points (add base offset), if there are any to process. vector<PatternCuePoint>::reverse_iterator iter; @@ -816,7 +817,7 @@ ullSamples += lRead; if (m_bNormalize) { - UINT imax = lRead*3*CSoundFile::gnChannels; + UINT imax = lRead*3*m_pSndFile->m_MixerSettings.gnChannels; for (UINT i=0; i<imax; i+=3) { LONG l = ((((buffer[i+2] << 8) + buffer[i+1]) << 8) + buffer[i]) << 8; @@ -848,7 +849,7 @@ break; if (!(n % 10)) { - DWORD l = (DWORD)(ullSamples / CSoundFile::gdwMixingFreq); + DWORD l = (DWORD)(ullSamples / m_pSndFile->m_MixerSettings.gdwMixingFreq); const DWORD dwCurrentTime = timeGetTime(); DWORD timeRemaining = 0; // estimated remainig time @@ -904,7 +905,7 @@ if (dwSize > dwCount) dwSize = dwCount; fseek(f, dwPos, SEEK_SET); if (fread(buffer, 1, dwSize, f) != dwSize) break; - CSoundFile::Normalize24BitBuffer(buffer, dwSize, lMax, dwBitSize); + m_pSndFile->Normalize24BitBuffer(buffer, dwSize, lMax, dwBitSize); fseek(f, dwOutPos, SEEK_SET); datahdr.length += (dwSize/3)*dwBitSize; fwrite(buffer, 1, (dwSize/3)*dwBitSize, f); @@ -959,11 +960,10 @@ fseek(f, dwDataOffset-sizeof(datahdr), SEEK_SET); fwrite(&datahdr, sizeof(datahdr), 1, f); fclose(f); - CSoundFile::gdwSoundSetup &= ~SNDMIX_DIRECTTODISK; m_pSndFile->m_nMaxOrderPosition = 0; if (m_bNormalize) { - m_pSndFile->SetMasterVolume(oldVol); + m_pSndFile->SetMixerSettings(oldmixersettings); CFile fw; if (fw.Open(m_lpszFileName, CFile::modeReadWrite | CFile::modeNoTruncate)) { @@ -971,7 +971,7 @@ fw.Close(); } } - CMainFrame::UpdateAudioParameters(TRUE); + CMainFrame::UpdateAudioParameters(*m_pSndFile, TRUE); EndDialog(ok); } @@ -1034,6 +1034,8 @@ bool bPrepared = false, bFinished = false; FILE *f; + MixerSettings mixersettings = TrackerSettings::Instance().m_MixerSettings; + progress = ::GetDlgItem(m_hWnd, IDC_PROGRESS1); if ((!m_pSndFile) || (!m_lpszFileName) || (!m_pwfx) || (!m_hadid)) goto OnError; _splitpath(m_lpszFileName, NULL, NULL, NULL, fext); @@ -1102,18 +1104,17 @@ m_FileTags.WriteID3v2Tags(f); } - static DWORD oldsndcfg = CSoundFile::gdwSoundSetup; + DWORD oldsndcfg = m_pSndFile->m_MixerSettings.MixerFlags; oldrepeat = m_pSndFile->GetRepeatCount(); const DWORD dwSongTime = m_pSndFile->GetSongTime(); - CSoundFile::gdwMixingFreq = wfxSrc.nSamplesPerSec; - CSoundFile::gnBitsPerSample = 16; -// CSoundFile::SetResamplingMode(SRCMODE_POLYPHASE); //rewbs.resamplerConf - we don't want this anymore. - CSoundFile::gnChannels = wfxSrc.nChannels; + mixersettings.gdwMixingFreq = wfxSrc.nSamplesPerSec; + mixersettings.gnBitsPerSample = 16; + mixersettings.gnChannels = wfxSrc.nChannels; m_pSndFile->SetRepeatCount(0); m_pSndFile->ResetChannels(); - CSoundFile::SetMixerSettings(TrackerSettings::Instance().m_MixerSettings); - CSoundFile::InitPlayer(TRUE); - CSoundFile::gdwSoundSetup |= SNDMIX_DIRECTTODISK; + m_pSndFile->SetMixerSettings(mixersettings); + m_pSndFile->SetResamplerSettings(TrackerSettings::Instance().m_ResamplerSettings); + m_pSndFile->InitPlayer(TRUE); m_pSndFile->m_SongFlags.reset(SONG_PAUSED | SONG_STEP); m_pSndFile->visitedSongRows.Initialize(true); @@ -1151,7 +1152,7 @@ UINT lRead = 0; if (!bFinished) { - lRead = m_pSndFile->Read(pcmBuffer + WAVECONVERTBUFSIZE - pcmBufSize, pcmBufSize/(CSoundFile::gnChannels*CSoundFile::gnBitsPerSample/8)); + lRead = m_pSndFile->Read(pcmBuffer + WAVECONVERTBUFSIZE - pcmBufSize, pcmBufSize/(m_pSndFile->m_MixerSettings.gnChannels*m_pSndFile->m_MixerSettings.gnBitsPerSample/8)); if (!lRead) bFinished = true; } ullSamples += lRead; @@ -1204,12 +1205,11 @@ } CMainFrame::GetMainFrame()->StopRenderer(m_pSndFile); //rewbs.VSTTimeInfo // Done - CSoundFile::gdwSoundSetup = oldsndcfg; - CSoundFile::gdwSoundSetup &= ~SNDMIX_DIRECTTODISK; + m_pSndFile->m_MixerSettings.MixerFlags = oldsndcfg; m_pSndFile->SetRepeatCount(oldrepeat); m_pSndFile->m_nMaxOrderPosition = 0; m_pSndFile->visitedSongRows.Initialize(true); - CMainFrame::UpdateAudioParameters(TRUE); + CMainFrame::UpdateAudioParameters(*m_pSndFile, TRUE); // Success Modified: trunk/OpenMPT/mptrack/Moddoc.cpp =================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp 2013-04-11 16:32:02 UTC (rev 1841) +++ trunk/OpenMPT/mptrack/Moddoc.cpp 2013-04-11 17:14:21 UTC (rev 1842) @@ -1734,7 +1734,6 @@ dwcdlg.m_bGivePlugsIdleTime = wsdlg.m_bGivePlugsIdleTime; dwcdlg.m_dwSongLimit = wsdlg.m_dwSongLimit; dwcdlg.m_nMaxPatterns = (wsdlg.m_bSelectPlay) ? wsdlg.m_nMaxOrder - wsdlg.m_nMinOrder + 1 : 0; - //if(wsdlg.m_bHighQuality) CSoundFile::SetResamplingMode(SRCMODE_POLYPHASE); if(dwcdlg.DoModal() != IDOK) break; } @@ -1767,7 +1766,7 @@ m_SndFile.SetRepeatCount(oldRepeat); m_SndFile.SetCurrentPos(pos); - CMainFrame::UpdateAudioParameters(TRUE); + CMainFrame::UpdateAudioParameters(m_SndFile, TRUE); } @@ -1825,7 +1824,7 @@ dwcdlg.m_dwSongLimit = wsdlg.m_dwSongLimit; dwcdlg.DoModal(); m_SndFile.SetCurrentPos(pos); - CMainFrame::UpdateAudioParameters(TRUE); + CMainFrame::UpdateAudioParameters(m_SndFile, TRUE); } Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2013-04-11 16:32:02 UTC (rev 1841) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2013-04-11 17:14:21 UTC (rev 1842) @@ -753,7 +753,7 @@ void CModDoc::InitializeInstrument(ModInstrument *pIns) //----------------------------------------------------- { - pIns->nPluginVolumeHandling = CSoundFile::s_DefaultPlugVolumeHandling; + pIns->nPluginVolumeHandling = TrackerSettings::Instance().DefaultPlugVolumeHandling; } Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp 2013-04-11 16:32:02 UTC (rev 1841) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp 2013-04-11 17:14:21 UTC (rev 1842) @@ -124,8 +124,8 @@ CHAR s[128]; CPropertyPage::OnInitDialog(); - if (m_dwSoundSetup & SOUNDSETUP_SOFTPANNING) CheckDlgButton(IDC_CHECK2, MF_CHECKED); - if (m_dwSoundSetup & SOUNDSETUP_ENABLEMMX) CheckDlgButton(IDC_CHECK3, MF_CHECKED); + 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); // Multimedia extensions @@ -147,7 +147,7 @@ { wsprintf(s, "%d (%s)", nCPUMix[n], szCPUNames[n]); m_CbnPolyphony.AddString(s); - if (CSoundFile::m_nMaxMixChannels == nCPUMix[n]) m_CbnPolyphony.SetCurSel(n); + if (TrackerSettings::Instance().m_MixerSettings.m_nMaxMixChannels == nCPUMix[n]) m_CbnPolyphony.SetCurSel(n); } } // latency @@ -191,7 +191,7 @@ m_SliderStereoSep.SetPos(2); for (int n=0; n<=4; n++) { - if ((int)CSoundFile::m_nStereoSeparation <= (int)(32 << n)) + if ((int)TrackerSettings::Instance().m_MixerSettings.m_nStereoSeparation <= (int)(32 << n)) { m_SliderStereoSep.SetPos(n); break; @@ -305,8 +305,9 @@ //--------------------------------------- { CHAR s[64]; - CSoundFile::m_nStereoSeparation = 32 << m_SliderStereoSep.GetPos(); - wsprintf(s, "%d%%", (CSoundFile::m_nStereoSeparation * 100) / 128); + TrackerSettings::Instance().m_MixerSettings.m_nStereoSeparation = 32 << m_SliderStereoSep.GetPos(); + CMainFrame::GetMainFrame()->SetupPlayer(); + wsprintf(s, "%d%%", (TrackerSettings::Instance().m_MixerSettings.m_nStereoSeparation * 100) / 128); SetDlgItemText(IDC_TEXT1, s); } @@ -315,7 +316,7 @@ void COptionsSoundcard::SetPreAmpSliderPosition() //----------------------------------------------- { - int n = (TrackerSettings::Instance().m_nPreAmp - 64) / 8; + int n = (TrackerSettings::Instance().m_MixerSettings.m_nPreAmp - 64) / 8; if ((n < 0) || (n > 40)) n = 16; m_SliderPreAmp.SetPos(n); } @@ -412,9 +413,9 @@ void COptionsSoundcard::OnOK() //---------------------------- { - m_dwSoundSetup &= ~(SOUNDSETUP_ENABLEMMX | SOUNDSETUP_SECONDARY | SOUNDSETUP_SOFTPANNING | SOUNDSETUP_NOBOOSTTHREADPRIORITY); - if (IsDlgButtonChecked(IDC_CHECK2)) m_dwSoundSetup |= SOUNDSETUP_SOFTPANNING; - if (IsDlgButtonChecked(IDC_CHECK3)) m_dwSoundSetup |= SOUNDSETUP_ENABLEMMX; + 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; // Mixing Freq @@ -432,7 +433,11 @@ // Polyphony { int nmmx = m_CbnPolyphony.GetCurSel(); - if ((nmmx >= 0) && (nmmx < CountOf(nCPUMix))) CSoundFile::m_nMaxMixChannels = nCPUMix[nmmx]; + if ((nmmx >= 0) && (nmmx < CountOf(nCPUMix))) + { + TrackerSettings::Instance().m_MixerSettings.m_nMaxMixChannels = nCPUMix[nmmx]; + CMainFrame::GetMainFrame()->SetupPlayer(); + } } // Sound Device { @@ -460,12 +465,14 @@ m_CbnUpdateIntervalMS.SetWindowText(s); } // Soft Panning - if (m_dwSoundSetup & SOUNDSETUP_SOFTPANNING) - CSoundFile::gdwSoundSetup |= SNDMIX_SOFTPANNING; - else - CSoundFile::gdwSoundSetup &= ~SNDMIX_SOFTPANNING; - CMainFrame *pMainFrm = CMainFrame::GetMainFrame(); - if (pMainFrm) pMainFrm->SetupSoundCard(m_dwSoundSetup, m_dwRate, m_nBitsPerSample, m_nChannels, m_LatencyMS, m_UpdateIntervalMS, m_nSoundDevice); + if (m_dwSoundSetup & SNDMIX_SOFTPANNING) + { + TrackerSettings::Instance().m_MixerSettings.MixerFlags |= SNDMIX_SOFTPANNING; + } else + { + TrackerSettings::Instance().m_MixerSettings.MixerFlags &= ~SNDMIX_SOFTPANNING; + } + CMainFrame::GetMainFrame()->SetupSoundCard(m_dwSoundSetup, m_dwRate, m_nBitsPerSample, m_nChannels, m_LatencyMS, m_UpdateIntervalMS, m_nSoundDevice); UpdateStatistics(); CPropertyPage::OnOK(); } @@ -543,7 +550,7 @@ DWORD dwQuality; CPropertyPage::OnInitDialog(); - dwQuality = TrackerSettings::Instance().m_dwQuality; + dwQuality = TrackerSettings::Instance().m_MixerSettings.DSPMask; // Resampling type { m_CbnResampling.AddString("No Interpolation"); @@ -553,28 +560,28 @@ m_CbnResampling.AddString("Polyphase"); m_CbnResampling.AddString("XMMS-ModPlug"); //end rewbs.resamplerConf - m_CbnResampling.SetCurSel(TrackerSettings::Instance().m_nSrcMode); + m_CbnResampling.SetCurSel(TrackerSettings::Instance().m_ResamplerSettings.SrcMode); } // Effects #ifndef NO_DSP - if (dwQuality & QUALITY_MEGABASS) CheckDlgButton(IDC_CHECK1, MF_CHECKED); + if (dwQuality & SNDDSP_MEGABASS) CheckDlgButton(IDC_CHECK1, MF_CHECKED); #else GetDlgItem(IDC_CHECK1)->ShowWindow(SW_HIDE); #endif #ifndef NO_AGC - if (dwQuality & QUALITY_AGC) CheckDlgButton(IDC_CHECK2, MF_CHECKED); + if (dwQuality & SNDDSP_AGC) CheckDlgButton(IDC_CHECK2, MF_CHECKED); #else GetDlgItem(IDC_CHECK2)->ShowWindow(SW_HIDE); #endif #ifndef NO_DSP - if (dwQuality & QUALITY_SURROUND) CheckDlgButton(IDC_CHECK4, MF_CHECKED); - if (dwQuality & QUALITY_NOISEREDUCTION) CheckDlgButton(IDC_CHECK5, MF_CHECKED); + if (dwQuality & SNDDSP_SURROUND) CheckDlgButton(IDC_CHECK4, MF_CHECKED); + if (dwQuality & SNDDSP_NOISEREDUCTION) CheckDlgButton(IDC_CHECK5, MF_CHECKED); #else GetDlgItem(IDC_CHECK4)->ShowWindow(SW_HIDE); GetDlgItem(IDC_CHECK5)->ShowWindow(SW_HIDE); #endif #ifndef NO_EQ - if (dwQuality & QUALITY_EQ) CheckDlgButton(IDC_CHECK3, MF_CHECKED); + if (dwQuality & SNDDSP_EQ) CheckDlgButton(IDC_CHECK3, MF_CHECKED); #else GetDlgItem(IDC_CHECK3)->ShowWindow(SW_HIDE); ::EnableWindow(::GetDlgItem(m_hWnd, IDC_CHECK3), FALSE); @@ -583,9 +590,9 @@ #ifndef NO_DSP // Bass Expansion m_SbXBassDepth.SetRange(0,4); - m_SbXBassDepth.SetPos(8-CSoundFile::m_DSP.m_Settings.m_nXBassDepth); + m_SbXBassDepth.SetPos(8-TrackerSettings::Instance().m_DSPSettings.m_nXBassDepth); m_SbXBassRange.SetRange(0,4); - m_SbXBassRange.SetPos(4 - (CSoundFile::m_DSP.m_Settings.m_nXBassRange - 1) / 5); + m_SbXBassRange.SetPos(4 - (TrackerSettings::Instance().m_DSPSettings.m_nXBassRange - 1) / 5); #else m_SbXBassDepth.ShowWindow(SW_HIDE); m_SbXBassRange.ShowWindow(SW_HIDE); @@ -594,7 +601,7 @@ #ifndef NO_REVERB // Reverb m_SbReverbDepth.SetRange(1, 16); - m_SbReverbDepth.SetPos(CSoundFile::m_Reverb.m_Settings.m_nReverbDepth); + m_SbReverbDepth.SetPos(TrackerSettings::Instance().m_ReverbSettings.m_nReverbDepth); UINT nSel = 0; for (UINT iRvb=0; iRvb<NUM_REVERBTYPES; iRvb++) { @@ -603,18 +610,18 @@ { UINT n = m_CbnReverbPreset.AddString(pszName); m_CbnReverbPreset.SetItemData(n, iRvb); - if (iRvb == CSoundFile::m_Reverb.m_Settings.m_nReverbType) nSel = n; + if (iRvb == TrackerSettings::Instance().m_ReverbSettings.m_nReverbType) nSel = n; } } m_CbnReverbPreset.SetCurSel(nSel); - if (!(CSoundFile::gdwSysInfo & SYSMIX_ENABLEMMX)) + if (!(CSoundFile::GetSysInfo() & SYSMIX_ENABLEMMX)) { ::EnableWindow(::GetDlgItem(m_hWnd, IDC_CHECK6), FALSE); m_SbReverbDepth.EnableWindow(FALSE); m_CbnReverbPreset.EnableWindow(FALSE); } else { - if (dwQuality & QUALITY_REVERB) CheckDlgButton(IDC_CHECK6, MF_CHECKED); + if (dwQuality & SNDDSP_REVERB) CheckDlgButton(IDC_CHECK6, MF_CHECKED); } #else GetDlgItem(IDC_CHECK6)->ShowWindow(SW_HIDE); @@ -625,13 +632,13 @@ #ifndef NO_DSP // Surround { - UINT n = CSoundFile::m_DSP.m_Settings.m_nProLogicDepth; + UINT n = TrackerSettings::Instance().m_DSPSettings.m_nProLogicDepth; if (n < 1) n = 1; if (n > 16) n = 16; m_SbSurroundDepth.SetRange(1, 16); m_SbSurroundDepth.SetPos(n); m_SbSurroundDelay.SetRange(0, 8); - m_SbSurroundDelay.SetPos((CSoundFile::m_DSP.m_Settings.m_nProLogicDelay-5)/5); + m_SbSurroundDelay.SetPos((TrackerSettings::Instance().m_DSPSettings.m_nProLogicDelay-5)/5); } #else m_SbSurroundDepth.ShowWindow(SW_HIDE); @@ -668,10 +675,9 @@ { #ifndef NO_REVERB UINT n = m_SbReverbDepth.GetPos(); - if (n != CSoundFile::m_Reverb.m_Settings.m_nReverbDepth) - { - if ((n) && (n <= 16)) CSoundFile::m_Reverb.m_Settings.m_nReverbDepth = n; - } + if ((n) && (n <= 16)) TrackerSettings::Instance().m_ReverbSettings.m_nReverbDepth = n; + //if ((n) && (n <= 16)) CSoundFile::m_Reverb.m_Settings.m_nReverbDepth = n; + CMainFrame::GetMainFrame()->SetupPlayer(); #endif } else { @@ -682,7 +688,7 @@ //rewbs.resamplerConf void COptionsPlayer::OnWFIRTypeChanged() { - TrackerSettings::Instance().m_MixerSettings.gbWFIRType = static_cast<BYTE>(m_CbnWFIRType.GetCurSel()); + TrackerSettings::Instance().m_ResamplerSettings.gbWFIRType = static_cast<BYTE>(m_CbnWFIRType.GetCurSel()); OnSettingsChanged(); } @@ -699,7 +705,7 @@ m_CbnWFIRType.SetCurSel(0); m_CbnWFIRType.EnableWindow(FALSE); m_CEditWFIRCutoff.EnableWindow(TRUE); - wsprintf(s, "%d", static_cast<int>((TrackerSettings::Instance().m_MixerSettings.gdWFIRCutoff * 100))); + wsprintf(s, "%d", static_cast<int>((TrackerSettings::Instance().m_ResamplerSettings.gdWFIRCutoff * 100))); break; case SRCMODE_FIRFILTER: m_CbnWFIRType.AddString("Hann"); @@ -710,10 +716,10 @@ 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().m_MixerSettings.gbWFIRType); + m_CbnWFIRType.SetCurSel(TrackerSettings::Instance().m_ResamplerSettings.gbWFIRType); m_CbnWFIRType.EnableWindow(TRUE); m_CEditWFIRCutoff.EnableWindow(TRUE); - wsprintf(s, "%d", static_cast<int>((TrackerSettings::Instance().m_MixerSettings.gdWFIRCutoff*100))); + wsprintf(s, "%d", static_cast<int>((TrackerSettings::Instance().m_ResamplerSettings.gdWFIRCutoff*100))); break; default: m_CbnWFIRType.AddString("None"); @@ -738,8 +744,7 @@ } -extern void SndMixInitializeTables(const MixerSettings & mixersettings); -//end rewbs.resamplerConf + void COptionsPlayer::OnOK() //------------------------- { @@ -747,19 +752,19 @@ DWORD dwSrcMode = 0; #ifndef NO_DSP - if (IsDlgButtonChecked(IDC_CHECK1)) dwQuality |= QUALITY_MEGABASS; + if (IsDlgButtonChecked(IDC_CHECK1)) dwQuality |= SNDDSP_MEGABASS; #endif #ifndef NO_AGC - if (IsDlgButtonChecked(IDC_CHECK2)) dwQuality |= QUALITY_AGC; + if (IsDlgButtonChecked(IDC_CHECK2)) dwQuality |= SNDDSP_AGC; #endif #ifndef NO_EQ - if (IsDlgButtonChecked(IDC_CHECK3)) dwQuality |= QUALITY_EQ; + if (IsDlgButtonChecked(IDC_CHECK3)) dwQuality |= SNDDSP_EQ; #endif #ifndef NO_DSP - if (IsDlgButtonChecked(IDC_CHECK4)) dwQuality |= QUALITY_SURROUND; - if (IsDlgButtonChecked(IDC_CHECK5)) dwQuality |= QUALITY_NOISEREDUCTION; + if (IsDlgButtonChecked(IDC_CHECK4)) dwQuality |= SNDDSP_SURROUND; + if (IsDlgButtonChecked(IDC_CHECK5)) dwQuality |= SNDDSP_NOISEREDUCTION; #endif - if (IsDlgButtonChecked(IDC_CHECK6)) dwQuality |= QUALITY_REVERB; + if (IsDlgButtonChecked(IDC_CHECK6)) dwQuality |= SNDDSP_REVERB; dwSrcMode = m_CbnResampling.GetCurSel(); #ifndef NO_DSP @@ -771,8 +776,9 @@ UINT nXBassRange = (4-m_SbXBassRange.GetPos()) * 5 + 1; if (nXBassRange < 5) nXBassRange = 5; if (nXBassRange > 21) nXBassRange = 21; - CSoundFile::m_DSP.m_Settings.m_nXBassDepth = nXBassDepth; - CSoundFile::m_DSP.m_Settings.m_nXBassRange = nXBassRange; + TrackerSettings::Instance().m_DSPSettings.m_nXBassDepth = nXBassDepth; + TrackerSettings::Instance().m_DSPSettings.m_nXBassRange = nXBassRange; + CMainFrame::GetMainFrame()->SetupPlayer(); } #endif #ifndef NO_REVERB @@ -780,7 +786,8 @@ { // Reverb depth is dynamically changed UINT nReverbType = m_CbnReverbPreset.GetItemData(m_CbnReverbPreset.GetCurSel()); - if (nReverbType < NUM_REVERBTYPES) CSoundFile::m_Reverb.m_Settings.m_nReverbType = nReverbType; + if (nReverbType < NUM_REVERBTYPES) TrackerSettings::Instance().m_ReverbSettings.m_nReverbType = nReverbType; + CMainFrame::GetMainFrame()->SetupPlayer(); } #endif #ifndef NO_DSP @@ -788,8 +795,9 @@ { UINT nProLogicDepth = m_SbSurroundDepth.GetPos(); UINT nProLogicDelay = 5 + (m_SbSurroundDelay.GetPos() * 5); - CSoundFile::m_DSP.m_Settings.m_nProLogicDepth = nProLogicDepth; - CSoundFile::m_DSP.m_Settings.m_nProLogicDelay = nProLogicDelay; + TrackerSettings::Instance().m_DSPSettings.m_nProLogicDepth = nProLogicDepth; + TrackerSettings::Instance().m_DSPSettings.m_nProLogicDelay = nProLogicDelay; + CMainFrame::GetMainFrame()->SetupPlayer(); } #endif // Notify CMainFrame @@ -798,17 +806,16 @@ CString s; m_CEditWFIRCutoff.GetWindowText(s); if (s != "") - TrackerSettings::Instance().m_MixerSettings.gdWFIRCutoff = atoi(s)/100.0; - //TrackerSettings::Instance().m_MixerSettings.gbWFIRType set in OnWFIRTypeChange + TrackerSettings::Instance().m_ResamplerSettings.gdWFIRCutoff = atoi(s)/100.0; + //TrackerSettings::Instance().m_ResamplerSettings.gbWFIRType set in OnWFIRTypeChange m_CEditRampUp.GetWindowText(s); TrackerSettings::Instance().m_MixerSettings.glVolumeRampUpSamples = atol(s); m_CEditRampDown.GetWindowText(s); TrackerSettings::Instance().m_MixerSettings.glVolumeRampDownSamples = atol(s); - - SndMixInitializeTables(TrackerSettings::Instance().m_MixerSettings); //regenerate resampling tables - //end rewbs.resamplerConf - if (pParent) pParent->SetupPlayer(dwQuality, dwSrcMode, TRUE); + TrackerSettings::Instance().m_ResamplerSettings.SrcMode = (ResamplingMode)dwSrcMode; + TrackerSettings::Instance().m_MixerSettings.DSPMask = dwQuality; + CMainFrame::GetMainFrame()->SetupPlayer(); CPropertyPage::OnOK(); } @@ -1020,7 +1027,8 @@ { #ifndef NO_EQ CriticalSection cs; - CSoundFile::SetEQGains( m_pEqPreset->Gains, MAX_EQ_BANDS, m_pEqPreset->Freqs, bReset); + if(CMainFrame::GetMainFrame()->GetSoundFilePlaying()) + CMainFrame::GetMainFrame()->GetSoundFilePlaying()->SetEQGains( m_pEqPreset->Gains, MAX_EQ_BANDS, m_pEqPreset->Freqs, bReset); #endif } Modified: trunk/OpenMPT/mptrack/Mptrack.cpp =================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp 2013-04-11 16:32:02 UTC (rev 1841) +++ trunk/OpenMPT/mptrack/Mptrack.cpp 2013-04-11 17:14:21 UTC (rev 1842) @@ -890,15 +890,15 @@ AddDocTemplate(m_pModTemplate); // Initialize Audio - CSoundFile::InitSysInfo(); - if (CSoundFile::gdwSysInfo & SYSMIX_ENABLEMMX) + DWORD sysinfo = CSoundFile::GetSysInfo(); + if(sysinfo & SYSMIX_ENABLEMMX) { - TrackerSettings::Instance().m_dwSoundSetup |= SOUNDSETUP_ENABLEMMX; - TrackerSettings::Instance().m_nSrcMode = SRCMODE_SPLINE; + TrackerSettings::Instance().m_MixerSettings.MixerFlags |= SNDMIX_ENABLEMMX; + TrackerSettings::Instance().m_ResamplerSettings.SrcMode = SRCMODE_SPLINE; } - if (CSoundFile::gdwSysInfo & SYSMIX_MMXEX) + if(sysinfo & SYSMIX_MMXEX) { - TrackerSettings::Instance().m_nSrcMode = SRCMODE_POLYPHASE; + TrackerSettings::Instance().m_ResamplerSettings.SrcMode = SRCMODE_POLYPHASE; } // Load Midi Library if (m_szConfigFileName[0]) ImportMidiConfig(m_szConfigFileName); Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp =================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp 2013-04-11 16:32:02 UTC (rev 1841) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp 2013-04-11 17:14:21 UTC (rev 1842) @@ -62,13 +62,6 @@ gnMsgBoxVisiblityFlags = uint32_max; // Audio device - m_dwRate = 44100; // Default value will be overridden - m_dwSoundSetup = SOUNDSETUP_SECONDARY; - m_nChannels = 2; - m_dwQuality = 0; - m_nSrcMode = SRCMODE_FIRFILTER; - m_nBitsPerSample = 16; - m_nPreAmp = 128; gbLoopSong = TRUE; m_nWaveDevice = SNDDEV_BUILD_ID(0, SNDDEV_WAVEOUT); // Default value will be overridden m_LatencyMS = SNDDEV_DEFAULT_LATENCY_MS; @@ -142,6 +135,8 @@ defaultModType = MOD_TYPE_IT; + DefaultPlugVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE; + gnPlugWindowX = 243; gnPlugWindowY = 273; gnPlugWindowWidth = 370; @@ -320,14 +315,14 @@ CASIODevice::baseChannel = GetPrivateProfileInt("Sound Settings", "ASIOBaseChannel", CASIODevice::baseChannel, iniFile); #endif // NO_ASIO m_nWaveDevice = CMainFrame::GetPrivateProfileLong("Sound Settings", "WaveDevice", defaultDevice, iniFile); - m_dwSoundSetup = CMainFrame::GetPrivateProfileDWord("Sound Settings", "SoundSetup", m_dwSoundSetup, iniFile); + m_MixerSettings.MixerFlags = CMainFrame::GetPrivateProfileDWord("Sound Settings", "SoundSetup", m_MixerSettings.MixerFlags, iniFile); if(vIniVersion < MAKE_VERSION_NUMERIC(1, 21, 01, 26)) - m_dwSoundSetup &= ~0x20; // Reverse stereo - m_dwQuality = CMainFrame::GetPrivateProfileDWord("Sound Settings", "Quality", m_dwQuality, iniFile); - m_nSrcMode = CMainFrame::GetPrivateProfileDWord("Sound Settings", "SrcMode", m_nSrcMode, iniFile); - m_dwRate = CMainFrame::GetPrivateProfileDWord("Sound Settings", "Mixing_Rate", 0, iniFile); - m_nBitsPerSample = CMainFrame::GetPrivateProfileDWord("Sound Settings", "BitsPerSample", m_nBitsPerSample, iniFile); - m_nChannels = CMainFrame::GetPrivateProfileDWord("Sound Settings", "ChannelMode", m_nChannels, iniFile); + m_MixerSettings.MixerFlags &= ~0x20; // Reverse stereo + 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); + m_MixerSettings.gnBitsPerSample = CMainFrame::GetPrivateProfileDWord("Sound Settings", "BitsPerSample", m_MixerSettings.gnBitsPerSample, iniFile); + m_MixerSettings.gnChannels = CMainFrame::GetPrivateProfileDWord("Sound Settings", "ChannelMode", m_MixerSettings.gnChannels, iniFile); DWORD LatencyMS = CMainFrame::GetPrivateProfileDWord("Sound Settings", "Latency", 0, iniFile); DWORD UpdateIntervalMS = CMainFrame::GetPrivateProfileDWord("Sound Settings", "UpdateInterval", 0, iniFile); if(LatencyMS == 0 || UpdateIntervalMS == 0) @@ -358,9 +353,9 @@ m_LatencyMS = LatencyMS; m_UpdateIntervalMS = UpdateIntervalMS; } - if(m_dwRate == 0) + if(m_MixerSettings.gdwMixingFreq == 0) { - m_dwRate = 44100; + m_MixerSettings.gdwMixingFreq = 44100; #ifndef NO_ASIO // If no mixing rate is specified and we're using ASIO, get a mixing rate supported by the device. if(SNDDEV_GET_TYPE(m_nWaveDevice) == SNDDEV_ASIO) @@ -368,19 +363,19 @@ ISoundDevice *dummy = CreateSoundDevice(SNDDEV_ASIO); if(dummy) { - m_dwRate = dummy->GetCurrentSampleRate(SNDDEV_GET_NUMBER(m_nWaveDevice)); + m_MixerSettings.gdwMixingFreq = dummy->GetCurrentSampleRate(SNDDEV_GET_NUMBER(m_nWaveDevice)); delete dummy; } } #endif // NO_ASIO } - m_nPreAmp = CMainFrame::GetPrivateProfileDWord("Sound Settings", "PreAmp", m_nPreAmp, iniFile); - CSoundFile::m_nStereoSeparation = CMainFrame::GetPrivateProfileLong("Sound Settings", "StereoSeparation", CSoundFile::m_nStereoSeparation, iniFile); - CSoundFile::m_nMaxMixChannels = CMainFrame::GetPrivateProfileLong("Sound Settings", "MixChannels", CSoundFile::m_nMaxMixChannels, iniFile); - m_MixerSettings.gbWFIRType = static_cast<BYTE>(CMainFrame::GetPrivateProfileDWord("Sound Settings", "XMMSModplugResamplerWFIRType", m_MixerSettings.gbWFIRType, iniFile)); + m_MixerSettings.m_nPreAmp = CMainFrame::GetPrivateProfileDWord("Sound Settings", "PreAmp", m_MixerSettings.m_nPreAmp, iniFile); + m_MixerSettings.m_nStereoSeparation = CMainFrame::GetPrivateProfileLong("Sound Settings", "StereoSeparation", m_MixerSettings.m_nStereoSeparation, iniFile); + m_MixerSettings.m_nMaxMixChannels = CMainFrame::GetPrivateProfileLong("Sound Settings", "MixChannels", m_MixerSettings.m_nMaxMixChannels, iniFile); + m_ResamplerSettings.gbWFIRType = static_cast<BYTE>(CMainFrame::GetPrivateProfileDWord("Sound Settings", "XMMSModplugResamplerWFIRType", m_ResamplerSettings.gbWFIRType, iniFile)); //gdWFIRCutoff = static_cast<double>(CMainFrame::GetPrivateProfileLong("Sound Settings", "ResamplerWFIRCutoff", gdWFIRCutoff * 100.0, iniFile)) / 100.0; - m_MixerSettings.gdWFIRCutoff = static_cast<double>(CMainFrame::GetPrivateProfileLong("Sound Settings", "ResamplerWFIRCutoff", Util::Round<long>(m_MixerSettings.gdWFIRCutoff * 100.0), iniFile)) / 100.0; + m_ResamplerSettings.gdWFIRCutoff = static_cast<double>(CMainFrame::GetPrivateProfileLong("Sound Settings", "ResamplerWFIRCutoff", Util::Round<long>(m_ResamplerSettings.gdWFIRCutoff * 100.0), iniFile)) / 100.0; // Ramping... first try to read the old setting, then the new ones const long volRamp = CMainFrame::GetPrivateProfileLong("Sound Settings", "VolumeRampSamples", -1, iniFile); @@ -430,8 +425,8 @@ rowDisplayOffset = GetPrivateProfileInt("Pattern Editor", "RowDisplayOffset", rowDisplayOffset, iniFile); recordQuantizeRows = CMainFrame::GetPrivateProfileDWord("Pattern Editor", "RecordQuantize", recordQuantizeRows, iniFile); gbShowHackControls = (0 != CMainFrame::GetPrivateProfileDWord("Misc", "ShowHackControls", gbShowHackControls ? 1 : 0, iniFile)); - CSoundFile::s_DefaultPlugVolumeHandling = static_cast<uint8>(GetPrivateProfileInt("Misc", "DefaultPlugVolumeHandling", CSoundFile::s_DefaultPlugVolumeHandling, iniFile)); - if(CSoundFile::s_DefaultPlugVolumeHandling >= PLUGIN_VOLUMEHANDLING_MAX) CSoundFile::s_DefaultPlugVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE; + DefaultPlugVolumeHandling = static_cast<uint8>(GetPrivateProfileInt("Misc", "DefaultPlugVolumeHandling", DefaultPlugVolumeHandling, iniFile)); + if(DefaultPlugVolumeHandling >= PLUGIN_VOLUMEHANDLING_MAX) DefaultPlugVolumeHandling = PLUGIN_VOLUMEHANDLING_IGNORE; m_nSampleUndoMaxBuffer = CMainFrame::GetPrivateProfileLong("Sample Editor" , "UndoBufferSize", m_nSampleUndoMaxBuffer >> 20, iniFile); m_nSampleUndoMaxBuffer = max(1, m_nSampleUndoMaxBuffer) << 20; @@ -456,16 +451,16 @@ // Effects Settings #ifndef NO_DSP - CSoundFile::m_DSP.m_Settings.m_nXBassDepth = CMainFrame::GetPrivateProfileLong("Effects", "XBassDepth", CSoundFile::m_DSP.m_Settings.m_nXBassDepth, iniFile); - CSoundFile::m_DSP.m_Settings.m_nXBassRange = CMainFrame::GetPrivateProfileLong("Effects", "XBassRange", CSoundFile::m_DSP.m_Settings.m_nXBassRange, iniFile); + m_DSPSettings.m_nXBassDepth = CMainFrame::GetPrivateProfileLong("Effects", "XBassDepth", m_DSPSettings.m_nXBassDepth, iniFile); + m_DSPSettings.m_nXBassRange = CMainFrame::GetPrivateProfileLong("Effects", "XBassRange", m_DSPSettings.m_nXBassRange, iniFile); #endif #ifndef NO_REVERB - CSoundFile::m_Reverb.m_Settings.m_nReverbDepth = CMainFrame::GetPrivateProfileLong("Effects", "ReverbDepth", CSoundFile::m_Reverb.m_Settings.m_nReverbDepth, iniFile); - CSoundFile::m_Reverb.m_Settings.m_nReverbType = CMainFrame::GetPrivateProfileLong("Effects", "ReverbType", CSoundFile::m_Reverb.m_Settings.m_nReverbType, iniFile); + m_ReverbSettings.m_nReverbDepth = CMainFrame::GetPrivateProfileLong("Effects", "ReverbDepth", m_ReverbSettings.m_nReverbDepth, iniFile); + m_ReverbSettings.m_nReverbType = CMainFrame::GetPrivateProfileLong("Effects", "ReverbType", m_ReverbSettings.m_nReverbType, iniFile); #endif #ifndef NO_DSP - CSoundFile::m_DSP.m_Settings.m_nProLogicDepth = CMainFrame::GetPrivateProfileLong("Effects", "ProLogicDepth", CSoundFile::m_DSP.m_Settings.m_nProLogicDepth, iniFile); - CSoundFile::m_DSP.m_Settings.m_nProLogicDelay = CMainFrame::GetPrivateProfileLong("Effects", "ProLogicDelay", CSoundFile::m_DSP.m_Settings.m_nProLogicDelay, iniFile); + m_DSPSettings.m_nProLogicDepth = CMainFrame::GetPrivateProfileLong("Effects", "ProLogicDepth", m_DSPSettings.m_nProLogicDepth, iniFile); + m_DSPSettings.m_nProLogicDelay = CMainFrame::GetPrivateProfileLong("Effects", "ProLogicDelay", m_DSPSettings.m_nProLogicDelay, iniFile); #endif @@ -584,11 +579,13 @@ if (RegOpenKeyEx(HKEY_CURRENT_USER, m_csRegKey, 0, KEY_READ, &key) == ERROR_SUCCESS) { - RegQueryValueEx(key, "SoundSetup", NULL, &dwREG_DWORD, (LPBYTE)&m_dwSoundSetup, &dwDWORDSize); - m_dwSoundSetup &= ~0x20; // Reverse stereo - RegQueryValueEx(key, "Quality", NULL, &dwREG_DWORD, (LPBYTE)&m_dwQuality, &dwDWORDSize); - RegQueryValueEx(key, "SrcMode", NULL, &dwREG_DWORD, (LPBYTE)&m_nSrcMode, &dwDWORDSize); - RegQueryValueEx(key, "Mixing_Rate", NULL, &dwREG_DWORD, (LPBYTE)&m_dwRate, &dwDWORDSize); + RegQueryValueEx(key, "SoundSetup", NULL, &dwREG_DWORD, (LPBYTE)&m_MixerSettings.MixerFlags, &dwDWORDSize); + m_MixerSettings.MixerFlags &= ~0x20; // Reverse stereo + 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); + m_ResamplerSettings.SrcMode = (ResamplingMode)dummysrcmode; + RegQueryValueEx(key, "Mixing_Rate", NULL, &dwREG_DWORD, (LPBYTE)&m_MixerSettings.gdwMixingFreq, &dwDWORDSize); DWORD BufferLengthMS = 0; RegQueryValueEx(key, "BufferLength", NULL, &dwREG_DWORD, (LPBYTE)&BufferLengthMS, &dwDWORDSize); if(BufferLengthMS != 0) @@ -604,7 +601,7 @@ m_UpdateIntervalMS = BufferLengthMS / 8; } } - RegQueryValueEx(key, "PreAmp", NULL, &dwREG_DWORD, (LPBYTE)&m_nPreAmp, &dwDWORDSize); + RegQueryValueEx(key, "PreAmp", NULL, &dwREG_DWORD, (LPBYTE)&m_MixerSettings.m_nPreAmp, &dwDWORDSize); CHAR sPath[_MAX_PATH] = ""; DWORD dwSZSIZE = sizeof(sPath); @@ -623,19 +620,19 @@ RegQueryValueEx(key, "Key_Config_File", NULL, &dwREG_SZ, (LPBYTE)m_szKbdFile, &dwSZSIZE); #ifndef NO_DSP - RegQueryValueEx(key, "XBassDepth", NULL, &dwREG_DWORD, (LPBYTE)&CSoundFile::m_DSP.m_Settings.m_nXBassDepth, &dwDWORDSize); - RegQueryValueEx(key, "XBassRange", NULL, &dwREG_DWORD, (LPBYTE)&CSoundFile::m_DSP.m_Settings.m_nXBassRange, &dwDWORDSize); + RegQueryValueEx(key, "XBassDepth", NULL, &dwREG_DWORD, (LPBYTE)&m_DSPSettings.m_nXBassDepth, &dwDWORDSize); + RegQueryValueEx(key, "XBassRange", NULL, &dwREG_DWORD, (LPBYTE)&m_DSPSettings.m_nXBassRange, &dwDWORDSize); #endif #ifndef NO_REVERB - RegQueryValueEx(key, "ReverbDepth", NULL, &dwREG_DWORD, (LPBYTE)&CSoundFile::m_Reverb.m_Settings.m_nReverbDepth, &dwDWORDSize); - RegQueryValueEx(key, "ReverbType", NULL, &dwREG_DWORD, (LPBYTE)&CSoundFile::m_Reverb.m_Settings.m_nReverbType, &dwDWORDSize); + RegQueryValueEx(key, "ReverbDepth", NULL, &dwREG_DWORD, (LPBYTE)&m_ReverbSettings.m_nReverbDepth, &dwDWORDSize); + RegQueryValueEx(key, "ReverbType", NULL, &dwREG_DWORD, (LPBYTE)&m_ReverbSettings.m_nReverbType, &dwDWORDSize); #endif NO_REVERB #ifndef NO_DSP - RegQueryValueEx(key, "ProLogicDepth", NULL, &dwREG_DWORD, (LPBYTE)&CSoundFile::m_DSP.m_Settings.m_nProLogicDepth, &dwDWORDSize); - RegQueryValueEx(key, "ProLogicDelay", NULL, &dwREG_DWORD, (LPBYTE)&CSoundFile::m_DSP.m_Settings.m_nProLogicDelay, &dwDWORDSize); + RegQueryValueEx(key, "ProLogicDepth", NULL, &dwREG_DWORD, (LPBYTE)&m_DSPSettings.m_nProLogicDepth, &dwDWORDSize); + RegQueryValueEx(key, "ProLogicDelay", NULL, &dwREG_DWORD, (LPBYTE)&m_DSPSettings.m_nProLogicDelay, &dwDWORDSize); #endif - RegQueryValueEx(key, "StereoSeparation", NULL, &dwREG_DWORD, (LPBYTE)&CSoundFile::m_nStereoSeparation, &dwDWORDSize); - RegQueryValueEx(key, "MixChannels", NULL, &dwREG_DWORD, (LPBYTE)&CSoundFile::m_nMaxMixChannels, &dwDWORDSize); + RegQueryValueEx(key, "StereoSeparation", NULL, &dwREG_DWORD, (LPBYTE)&m_MixerSettings.m_nStereoSeparation, &dwDWORDSize); + RegQueryValueEx(key, "MixChannels", NULL, &dwREG_DWORD, (LPBYTE)&m_MixerSettings.m_nMaxMixChannels, &dwDW... [truncated message content] |