mirror of https://github.com/PCSX2/pcsx2.git
Advanced (per-channel) Volume Adjustment AKA Room Correction (Windows-only, need someone to fix the linux counterpart)
This commit is contained in:
parent
0bf7a35a53
commit
654343f875
|
@ -64,7 +64,16 @@ extern wxString RegDumpFileName;
|
||||||
extern int Interpolation;
|
extern int Interpolation;
|
||||||
extern int numSpeakers;
|
extern int numSpeakers;
|
||||||
extern bool EffectsDisabled;
|
extern bool EffectsDisabled;
|
||||||
extern float FinalVolume;
|
extern float FinalVolume; // Global / pre-scale
|
||||||
|
extern bool AdvancedVolumeControl;
|
||||||
|
extern float VolumeAdjustFLdb;
|
||||||
|
extern float VolumeAdjustCdb;
|
||||||
|
extern float VolumeAdjustFRdb;
|
||||||
|
extern float VolumeAdjustBLdb;
|
||||||
|
extern float VolumeAdjustBRdb;
|
||||||
|
extern float VolumeAdjustSLdb;
|
||||||
|
extern float VolumeAdjustSRdb;
|
||||||
|
extern float VolumeAdjustLFEdb;
|
||||||
extern bool postprocess_filter_enabled;
|
extern bool postprocess_filter_enabled;
|
||||||
extern bool postprocess_filter_dealias;
|
extern bool postprocess_filter_dealias;
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,10 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
// Implemented in Config.cpp
|
||||||
|
extern float VolumeAdjustFL;
|
||||||
|
extern float VolumeAdjustFR;
|
||||||
|
|
||||||
struct StereoOut32
|
struct StereoOut32
|
||||||
{
|
{
|
||||||
static StereoOut32 Empty;
|
static StereoOut32 Empty;
|
||||||
|
@ -76,6 +80,13 @@ struct StereoOut32
|
||||||
this->Right = src.Right << 2;
|
this->Right = src.Right << 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s32) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s32) (Right * VolumeAdjustFR);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct FrequencyResponseFilter
|
struct FrequencyResponseFilter
|
||||||
|
|
|
@ -270,14 +270,28 @@ template<typename T> void SndBuffer::ReadSamples(T* bData)
|
||||||
if(b1 > nSamples)
|
if(b1 > nSamples)
|
||||||
b1 = nSamples;
|
b1 = nSamples;
|
||||||
|
|
||||||
// First part
|
if (AdvancedVolumeControl)
|
||||||
for( int i=0; i<b1; i++ )
|
{
|
||||||
bData[i].ResampleFrom( m_buffer[i + m_rpos] );
|
// First part
|
||||||
|
for (int i = 0; i < b1; i++)
|
||||||
|
bData[i].AdjustFrom(m_buffer[i + m_rpos]);
|
||||||
|
|
||||||
// Second part
|
// Second part
|
||||||
int b2 = nSamples - b1;
|
int b2 = nSamples - b1;
|
||||||
for( int i=0; i<b2; i++ )
|
for (int i = 0; i < b2; i++)
|
||||||
bData[i+b1].ResampleFrom( m_buffer[i] );
|
bData[i + b1].AdjustFrom(m_buffer[i]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// First part
|
||||||
|
for (int i = 0; i < b1; i++)
|
||||||
|
bData[i].ResampleFrom(m_buffer[i + m_rpos]);
|
||||||
|
|
||||||
|
// Second part
|
||||||
|
int b2 = nSamples - b1;
|
||||||
|
for (int i = 0; i < b2; i++)
|
||||||
|
bData[i + b1].ResampleFrom(m_buffer[i]);
|
||||||
|
}
|
||||||
|
|
||||||
_DropSamples_Internal(nSamples);
|
_DropSamples_Internal(nSamples);
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,16 @@ static const int SampleRate = 48000;
|
||||||
|
|
||||||
extern int FindOutputModuleById( const wchar_t* omodid );
|
extern int FindOutputModuleById( const wchar_t* omodid );
|
||||||
|
|
||||||
|
// Implemented in Config.cpp
|
||||||
|
extern float VolumeAdjustFL;
|
||||||
|
extern float VolumeAdjustC;
|
||||||
|
extern float VolumeAdjustFR;
|
||||||
|
extern float VolumeAdjustBL;
|
||||||
|
extern float VolumeAdjustBR;
|
||||||
|
extern float VolumeAdjustSL;
|
||||||
|
extern float VolumeAdjustSR;
|
||||||
|
extern float VolumeAdjustLFE;
|
||||||
|
|
||||||
struct Stereo51Out16DplII;
|
struct Stereo51Out16DplII;
|
||||||
struct Stereo51Out32DplII;
|
struct Stereo51Out32DplII;
|
||||||
|
|
||||||
|
@ -78,6 +88,14 @@ struct StereoOut16
|
||||||
// Use StereoOut32's built in conversion
|
// Use StereoOut32's built in conversion
|
||||||
*this = src.DownSample();
|
*this = src.DownSample();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s16) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s16) (Right * VolumeAdjustFR);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct StereoOutFloat
|
struct StereoOutFloat
|
||||||
|
@ -122,6 +140,15 @@ struct Stereo21Out16
|
||||||
Right = src.Right >> SndOutVolumeShift;
|
Right = src.Right >> SndOutVolumeShift;
|
||||||
LFE = (src.Left + src.Right) >> (SndOutVolumeShift + 1);
|
LFE = (src.Left + src.Right) >> (SndOutVolumeShift + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s16) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s16) (Right * VolumeAdjustFR);
|
||||||
|
LFE = (s16) (LFE * VolumeAdjustLFE);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Stereo40Out16
|
struct Stereo40Out16
|
||||||
|
@ -138,6 +165,16 @@ struct Stereo40Out16
|
||||||
LeftBack = src.Left >> SndOutVolumeShift;
|
LeftBack = src.Left >> SndOutVolumeShift;
|
||||||
RightBack = src.Right >> SndOutVolumeShift;
|
RightBack = src.Right >> SndOutVolumeShift;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s16) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s16) (Right * VolumeAdjustFR);
|
||||||
|
LeftBack = (s16) (LeftBack * VolumeAdjustBL);
|
||||||
|
RightBack = (s16) (RightBack * VolumeAdjustBR);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Stereo40Out32
|
struct Stereo40Out32
|
||||||
|
@ -154,6 +191,16 @@ struct Stereo40Out32
|
||||||
LeftBack = src.Left << SndOutVolumeShift32;
|
LeftBack = src.Left << SndOutVolumeShift32;
|
||||||
RightBack = src.Right << SndOutVolumeShift32;
|
RightBack = src.Right << SndOutVolumeShift32;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s32) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s32) (Right * VolumeAdjustFR);
|
||||||
|
LeftBack = (s32) (LeftBack * VolumeAdjustBL);
|
||||||
|
RightBack = (s32) (RightBack * VolumeAdjustBR);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Stereo41Out16
|
struct Stereo41Out16
|
||||||
|
@ -172,6 +219,17 @@ struct Stereo41Out16
|
||||||
LeftBack = src.Left >> SndOutVolumeShift;
|
LeftBack = src.Left >> SndOutVolumeShift;
|
||||||
RightBack = src.Right >> SndOutVolumeShift;
|
RightBack = src.Right >> SndOutVolumeShift;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s32) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s32) (Right * VolumeAdjustFR);
|
||||||
|
LeftBack = (s32) (LeftBack * VolumeAdjustBL);
|
||||||
|
RightBack = (s32) (RightBack * VolumeAdjustBR);
|
||||||
|
LFE = (s32) (LFE * VolumeAdjustLFE);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Stereo51Out16
|
struct Stereo51Out16
|
||||||
|
@ -197,6 +255,18 @@ struct Stereo51Out16
|
||||||
LeftBack = src.Left >> SndOutVolumeShift;
|
LeftBack = src.Left >> SndOutVolumeShift;
|
||||||
RightBack = src.Right >> SndOutVolumeShift;
|
RightBack = src.Right >> SndOutVolumeShift;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s16) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s16) (Right * VolumeAdjustFR);
|
||||||
|
LeftBack = (s16) (LeftBack * VolumeAdjustBL);
|
||||||
|
RightBack = (s16) (RightBack * VolumeAdjustBR);
|
||||||
|
Center = (s16) (Center * VolumeAdjustC);
|
||||||
|
LFE = (s16) (LFE * VolumeAdjustLFE);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Stereo51Out16DplII
|
struct Stereo51Out16DplII
|
||||||
|
@ -212,6 +282,18 @@ struct Stereo51Out16DplII
|
||||||
{
|
{
|
||||||
ProcessDplIISample16(src, this);
|
ProcessDplIISample16(src, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s32) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s32) (Right * VolumeAdjustFR);
|
||||||
|
LeftBack = (s32) (LeftBack * VolumeAdjustBL);
|
||||||
|
RightBack = (s32) (RightBack * VolumeAdjustBR);
|
||||||
|
Center = (s32) (Center * VolumeAdjustC);
|
||||||
|
LFE = (s32) (LFE * VolumeAdjustLFE);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Stereo51Out32DplII
|
struct Stereo51Out32DplII
|
||||||
|
@ -227,8 +309,19 @@ struct Stereo51Out32DplII
|
||||||
{
|
{
|
||||||
ProcessDplIISample32(src, this);
|
ProcessDplIISample32(src, this);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s32) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s32) (Right * VolumeAdjustFR);
|
||||||
|
LeftBack = (s32) (LeftBack * VolumeAdjustBL);
|
||||||
|
RightBack = (s32) (RightBack * VolumeAdjustBR);
|
||||||
|
Center = (s32) (Center * VolumeAdjustC);
|
||||||
|
LFE = (s32) (LFE * VolumeAdjustLFE);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
struct Stereo51Out16Dpl
|
struct Stereo51Out16Dpl
|
||||||
{
|
{
|
||||||
|
@ -243,6 +336,18 @@ struct Stereo51Out16Dpl
|
||||||
{
|
{
|
||||||
ProcessDplSample16(src, this);
|
ProcessDplSample16(src, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s32) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s32) (Right * VolumeAdjustFR);
|
||||||
|
LeftBack = (s32) (LeftBack * VolumeAdjustBL);
|
||||||
|
RightBack = (s32) (RightBack * VolumeAdjustBR);
|
||||||
|
Center = (s32) (Center * VolumeAdjustC);
|
||||||
|
LFE = (s32) (LFE * VolumeAdjustLFE);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Stereo51Out32Dpl
|
struct Stereo51Out32Dpl
|
||||||
|
@ -258,6 +363,18 @@ struct Stereo51Out32Dpl
|
||||||
{
|
{
|
||||||
ProcessDplSample32(src, this);
|
ProcessDplSample32(src, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s32) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s32) (Right * VolumeAdjustFR);
|
||||||
|
LeftBack = (s32) (LeftBack * VolumeAdjustBL);
|
||||||
|
RightBack = (s32) (RightBack * VolumeAdjustBR);
|
||||||
|
Center = (s32) (Center * VolumeAdjustC);
|
||||||
|
LFE = (s32) (LFE * VolumeAdjustLFE);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Stereo71Out16
|
struct Stereo71Out16
|
||||||
|
@ -283,6 +400,20 @@ struct Stereo71Out16
|
||||||
LeftSide = src.Left >> (SndOutVolumeShift+1);
|
LeftSide = src.Left >> (SndOutVolumeShift+1);
|
||||||
RightSide = src.Right >> (SndOutVolumeShift+1);
|
RightSide = src.Right >> (SndOutVolumeShift+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s16) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s16) (Right * VolumeAdjustFR);
|
||||||
|
LeftBack = (s16) (LeftBack * VolumeAdjustBL);
|
||||||
|
RightBack = (s16) (RightBack * VolumeAdjustBR);
|
||||||
|
LeftSide = (s16) (LeftBack * VolumeAdjustSL);
|
||||||
|
RightSide = (s16) (RightBack * VolumeAdjustSR);
|
||||||
|
Center = (s16) (Center * VolumeAdjustC);
|
||||||
|
LFE = (s16) (LFE * VolumeAdjustLFE);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Stereo71Out32
|
struct Stereo71Out32
|
||||||
|
@ -308,18 +439,40 @@ struct Stereo71Out32
|
||||||
LeftSide = src.Left << (SndOutVolumeShift32 - 1);
|
LeftSide = src.Left << (SndOutVolumeShift32 - 1);
|
||||||
RightSide = src.Right << (SndOutVolumeShift32 - 1);
|
RightSide = src.Right << (SndOutVolumeShift32 - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s32) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s32) (Right * VolumeAdjustFR);
|
||||||
|
LeftBack = (s32) (LeftBack * VolumeAdjustBL);
|
||||||
|
RightBack = (s32) (RightBack * VolumeAdjustBR);
|
||||||
|
LeftSide = (s32) (LeftBack * VolumeAdjustSL);
|
||||||
|
RightSide = (s32) (RightBack * VolumeAdjustSR);
|
||||||
|
Center = (s32) (Center * VolumeAdjustC);
|
||||||
|
LFE = (s32) (LFE * VolumeAdjustLFE);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Stereo20Out32
|
struct Stereo20Out32
|
||||||
{
|
{
|
||||||
s32 Left;
|
s32 Left;
|
||||||
s32 Right;
|
s32 Right;
|
||||||
|
|
||||||
void ResampleFrom( const StereoOut32& src )
|
void ResampleFrom( const StereoOut32& src )
|
||||||
{
|
{
|
||||||
Left = src.Left << SndOutVolumeShift32;
|
Left = src.Left << SndOutVolumeShift32;
|
||||||
Right = src.Right << SndOutVolumeShift32;
|
Right = src.Right << SndOutVolumeShift32;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s32) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s32) (Right * VolumeAdjustFR);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Stereo21Out32
|
struct Stereo21Out32
|
||||||
|
@ -327,13 +480,22 @@ struct Stereo21Out32
|
||||||
s32 Left;
|
s32 Left;
|
||||||
s32 Right;
|
s32 Right;
|
||||||
s32 LFE;
|
s32 LFE;
|
||||||
|
|
||||||
void ResampleFrom( const StereoOut32& src )
|
void ResampleFrom( const StereoOut32& src )
|
||||||
{
|
{
|
||||||
Left = src.Left << SndOutVolumeShift32;
|
Left = src.Left << SndOutVolumeShift32;
|
||||||
Right = src.Right << SndOutVolumeShift32;
|
Right = src.Right << SndOutVolumeShift32;
|
||||||
LFE = (src.Left + src.Right) << (SndOutVolumeShift32 - 1);
|
LFE = (src.Left + src.Right) << (SndOutVolumeShift32 - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s32) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s32) (Right * VolumeAdjustFR);
|
||||||
|
LFE = (s32) (LFE * VolumeAdjustLFE);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Stereo41Out32
|
struct Stereo41Out32
|
||||||
|
@ -343,7 +505,7 @@ struct Stereo41Out32
|
||||||
s32 LFE;
|
s32 LFE;
|
||||||
s32 LeftBack;
|
s32 LeftBack;
|
||||||
s32 RightBack;
|
s32 RightBack;
|
||||||
|
|
||||||
void ResampleFrom( const StereoOut32& src )
|
void ResampleFrom( const StereoOut32& src )
|
||||||
{
|
{
|
||||||
Left = src.Left << SndOutVolumeShift32;
|
Left = src.Left << SndOutVolumeShift32;
|
||||||
|
@ -353,6 +515,17 @@ struct Stereo41Out32
|
||||||
LeftBack = src.Left << SndOutVolumeShift32;
|
LeftBack = src.Left << SndOutVolumeShift32;
|
||||||
RightBack = src.Right << SndOutVolumeShift32;
|
RightBack = src.Right << SndOutVolumeShift32;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s32) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s32) (Right * VolumeAdjustFR);
|
||||||
|
LeftBack = (s32) (LeftBack * VolumeAdjustBL);
|
||||||
|
RightBack = (s32) (RightBack * VolumeAdjustBR);
|
||||||
|
LFE = (s32) (LFE * VolumeAdjustLFE);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Stereo51Out32
|
struct Stereo51Out32
|
||||||
|
@ -373,6 +546,18 @@ struct Stereo51Out32
|
||||||
LeftBack = src.Left << SndOutVolumeShift32;
|
LeftBack = src.Left << SndOutVolumeShift32;
|
||||||
RightBack = src.Right << SndOutVolumeShift32;
|
RightBack = src.Right << SndOutVolumeShift32;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdjustFrom(const StereoOut32& src)
|
||||||
|
{
|
||||||
|
ResampleFrom(src);
|
||||||
|
|
||||||
|
Left = (s32) (Left * VolumeAdjustFL);
|
||||||
|
Right = (s32) (Right * VolumeAdjustFR);
|
||||||
|
LeftBack = (s32) (LeftBack * VolumeAdjustBL);
|
||||||
|
RightBack = (s32) (RightBack * VolumeAdjustBR);
|
||||||
|
Center = (s32) (Center * VolumeAdjustC);
|
||||||
|
LFE = (s32) (LFE * VolumeAdjustLFE);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Developer Note: This is a static class only (all static members).
|
// Developer Note: This is a static class only (all static members).
|
||||||
|
@ -480,7 +665,6 @@ public:
|
||||||
virtual int GetEmptySampleCount() =0;
|
virtual int GetEmptySampleCount() =0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
//internal
|
//internal
|
||||||
extern SndOutModule* WaveOut;
|
extern SndOutModule* WaveOut;
|
||||||
|
|
|
@ -87,6 +87,13 @@ void CfgWriteInt(const TCHAR* Section, const TCHAR* Name, int Value)
|
||||||
WritePrivateProfileString(Section,Name,Data,CfgFile);
|
WritePrivateProfileString(Section,Name,Data,CfgFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CfgWriteFloat(const TCHAR* Section, const TCHAR* Name, float Value)
|
||||||
|
{
|
||||||
|
TCHAR Data[32];
|
||||||
|
_swprintf(Data, L"%f", Value);
|
||||||
|
WritePrivateProfileString(Section, Name, Data, CfgFile);
|
||||||
|
}
|
||||||
|
|
||||||
/*void CfgWriteStr(const TCHAR* Section, const TCHAR* Name, const TCHAR *Data)
|
/*void CfgWriteStr(const TCHAR* Section, const TCHAR* Name, const TCHAR *Data)
|
||||||
{
|
{
|
||||||
WritePrivateProfileString( Section, Name, Data, CfgFile );
|
WritePrivateProfileString( Section, Name, Data, CfgFile );
|
||||||
|
@ -133,6 +140,20 @@ int CfgReadInt(const TCHAR* Section, const TCHAR* Name,int Default)
|
||||||
return _wtoi(Data);
|
return _wtoi(Data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CfgReadFloat(const TCHAR* Section, const TCHAR* Name, float Default)
|
||||||
|
{
|
||||||
|
TCHAR Data[255] = { 0 };
|
||||||
|
GetPrivateProfileString(Section, Name, L"", Data, 255, CfgFile);
|
||||||
|
Data[254] = 0;
|
||||||
|
|
||||||
|
if (wcslen(Data) == 0) {
|
||||||
|
CfgWriteFloat(Section, Name, Default);
|
||||||
|
return Default;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (float)_wtof(Data);
|
||||||
|
}
|
||||||
|
|
||||||
void CfgReadStr(const TCHAR* Section, const TCHAR* Name, TCHAR* Data, int DataSize, const TCHAR* Default)
|
void CfgReadStr(const TCHAR* Section, const TCHAR* Name, TCHAR* Data, int DataSize, const TCHAR* Default)
|
||||||
{
|
{
|
||||||
GetPrivateProfileString(Section,Name,L"",Data,DataSize,CfgFile);
|
GetPrivateProfileString(Section,Name,L"",Data,DataSize,CfgFile);
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#include "Global.h"
|
#include "Global.h"
|
||||||
#include "Dialogs.h"
|
#include "Dialogs.h"
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#ifdef PCSX2_DEVBUILD
|
#ifdef PCSX2_DEVBUILD
|
||||||
static const int LATENCY_MAX = 3000;
|
static const int LATENCY_MAX = 3000;
|
||||||
|
@ -38,7 +39,26 @@ int Interpolation = 4;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool EffectsDisabled = false;
|
bool EffectsDisabled = false;
|
||||||
float FinalVolume;
|
|
||||||
|
float FinalVolume; // Global
|
||||||
|
bool AdvancedVolumeControl;
|
||||||
|
float VolumeAdjustFLdb; // decibels settings, cos audiophiles love that
|
||||||
|
float VolumeAdjustCdb;
|
||||||
|
float VolumeAdjustFRdb;
|
||||||
|
float VolumeAdjustBLdb;
|
||||||
|
float VolumeAdjustBRdb;
|
||||||
|
float VolumeAdjustSLdb;
|
||||||
|
float VolumeAdjustSRdb;
|
||||||
|
float VolumeAdjustLFEdb;
|
||||||
|
float VolumeAdjustFL; // linear coefs calcualted from decibels,
|
||||||
|
float VolumeAdjustC;
|
||||||
|
float VolumeAdjustFR;
|
||||||
|
float VolumeAdjustBL;
|
||||||
|
float VolumeAdjustBR;
|
||||||
|
float VolumeAdjustSL;
|
||||||
|
float VolumeAdjustSR;
|
||||||
|
float VolumeAdjustLFE;
|
||||||
|
|
||||||
bool postprocess_filter_enabled = 1;
|
bool postprocess_filter_enabled = 1;
|
||||||
bool postprocess_filter_dealias = false;
|
bool postprocess_filter_dealias = false;
|
||||||
|
|
||||||
|
@ -80,11 +100,30 @@ void ReadSettings()
|
||||||
{
|
{
|
||||||
Interpolation = CfgReadInt( L"MIXING",L"Interpolation", 4 );
|
Interpolation = CfgReadInt( L"MIXING",L"Interpolation", 4 );
|
||||||
|
|
||||||
SynchMode = CfgReadInt( L"OUTPUT", L"Synch_Mode", 0);
|
|
||||||
EffectsDisabled = CfgReadBool( L"MIXING", L"Disable_Effects", false );
|
EffectsDisabled = CfgReadBool( L"MIXING", L"Disable_Effects", false );
|
||||||
postprocess_filter_dealias = CfgReadBool( L"MIXING", L"DealiasFilter", false );
|
postprocess_filter_dealias = CfgReadBool( L"MIXING", L"DealiasFilter", false );
|
||||||
FinalVolume = ((float)CfgReadInt( L"MIXING", L"FinalVolume", 100 )) / 100;
|
FinalVolume = ((float)CfgReadInt( L"MIXING", L"FinalVolume", 100 )) / 100;
|
||||||
if ( FinalVolume > 1.0f) FinalVolume = 1.0f;
|
if ( FinalVolume > 1.0f) FinalVolume = 1.0f;
|
||||||
|
|
||||||
|
AdvancedVolumeControl = CfgReadBool(L"MIXING", L"AdvancedVolumeControl", false);
|
||||||
|
VolumeAdjustCdb = CfgReadFloat(L"MIXING", L"VolumeAdjustC(dB)", 0);
|
||||||
|
VolumeAdjustFLdb = CfgReadFloat(L"MIXING", L"VolumeAdjustFL(dB)", 0);
|
||||||
|
VolumeAdjustFRdb = CfgReadFloat(L"MIXING", L"VolumeAdjustFR(dB)", 0);
|
||||||
|
VolumeAdjustBLdb = CfgReadFloat(L"MIXING", L"VolumeAdjustBL(dB)", 0);
|
||||||
|
VolumeAdjustBRdb = CfgReadFloat(L"MIXING", L"VolumeAdjustBR(dB)", 0);
|
||||||
|
VolumeAdjustSLdb = CfgReadFloat(L"MIXING", L"VolumeAdjustSL(dB)", 0);
|
||||||
|
VolumeAdjustSRdb = CfgReadFloat(L"MIXING", L"VolumeAdjustSR(dB)", 0);
|
||||||
|
VolumeAdjustLFEdb = CfgReadFloat(L"MIXING", L"VolumeAdjustLFE(dB)", 0);
|
||||||
|
VolumeAdjustC = powf(10, VolumeAdjustCdb / 10);
|
||||||
|
VolumeAdjustFL = powf(10, VolumeAdjustFLdb / 10);
|
||||||
|
VolumeAdjustFR = powf(10, VolumeAdjustFRdb / 10);
|
||||||
|
VolumeAdjustBL = powf(10, VolumeAdjustBLdb / 10);
|
||||||
|
VolumeAdjustBR = powf(10, VolumeAdjustBRdb / 10);
|
||||||
|
VolumeAdjustSL = powf(10, VolumeAdjustSLdb / 10);
|
||||||
|
VolumeAdjustSR = powf(10, VolumeAdjustSRdb / 10);
|
||||||
|
VolumeAdjustLFE = powf(10, VolumeAdjustLFEdb / 10);
|
||||||
|
|
||||||
|
SynchMode = CfgReadInt( L"OUTPUT", L"Synch_Mode", 0);
|
||||||
numSpeakers = CfgReadInt( L"OUTPUT", L"SpeakerConfiguration", 0);
|
numSpeakers = CfgReadInt( L"OUTPUT", L"SpeakerConfiguration", 0);
|
||||||
dplLevel = CfgReadInt( L"OUTPUT", L"DplDecodingLevel", 0);
|
dplLevel = CfgReadInt( L"OUTPUT", L"DplDecodingLevel", 0);
|
||||||
SndOutLatencyMS = CfgReadInt(L"OUTPUT",L"Latency", 100);
|
SndOutLatencyMS = CfgReadInt(L"OUTPUT",L"Latency", 100);
|
||||||
|
@ -144,6 +183,16 @@ void WriteSettings()
|
||||||
CfgWriteBool(L"MIXING",L"DealiasFilter",postprocess_filter_dealias);
|
CfgWriteBool(L"MIXING",L"DealiasFilter",postprocess_filter_dealias);
|
||||||
CfgWriteInt(L"MIXING",L"FinalVolume",(int)(FinalVolume * 100 + 0.5f));
|
CfgWriteInt(L"MIXING",L"FinalVolume",(int)(FinalVolume * 100 + 0.5f));
|
||||||
|
|
||||||
|
CfgWriteBool(L"MIXING", L"AdvancedVolumeControl", AdvancedVolumeControl);
|
||||||
|
CfgWriteFloat(L"MIXING", L"VolumeAdjustC(dB)", VolumeAdjustCdb);
|
||||||
|
CfgWriteFloat(L"MIXING", L"VolumeAdjustFL(dB)", VolumeAdjustFLdb);
|
||||||
|
CfgWriteFloat(L"MIXING", L"VolumeAdjustFR(dB)", VolumeAdjustFRdb);
|
||||||
|
CfgWriteFloat(L"MIXING", L"VolumeAdjustBL(dB)", VolumeAdjustBLdb);
|
||||||
|
CfgWriteFloat(L"MIXING", L"VolumeAdjustBR(dB)", VolumeAdjustBRdb);
|
||||||
|
CfgWriteFloat(L"MIXING", L"VolumeAdjustSL(dB)", VolumeAdjustSLdb);
|
||||||
|
CfgWriteFloat(L"MIXING", L"VolumeAdjustSR(dB)", VolumeAdjustSRdb);
|
||||||
|
CfgWriteFloat(L"MIXING", L"VolumeAdjustLFE(dB)", VolumeAdjustLFEdb);
|
||||||
|
|
||||||
CfgWriteStr(L"OUTPUT",L"Output_Module", mods[OutputModule]->GetIdent() );
|
CfgWriteStr(L"OUTPUT",L"Output_Module", mods[OutputModule]->GetIdent() );
|
||||||
CfgWriteInt(L"OUTPUT",L"Latency", SndOutLatencyMS);
|
CfgWriteInt(L"OUTPUT",L"Latency", SndOutLatencyMS);
|
||||||
CfgWriteInt(L"OUTPUT",L"Synch_Mode", SynchMode);
|
CfgWriteInt(L"OUTPUT",L"Synch_Mode", SynchMode);
|
||||||
|
|
|
@ -54,12 +54,14 @@ extern bool CfgFindName( const TCHAR *Section, const TCHAR* Name);
|
||||||
|
|
||||||
extern void CfgWriteBool(const TCHAR* Section, const TCHAR* Name, bool Value);
|
extern void CfgWriteBool(const TCHAR* Section, const TCHAR* Name, bool Value);
|
||||||
extern void CfgWriteInt(const TCHAR* Section, const TCHAR* Name, int Value);
|
extern void CfgWriteInt(const TCHAR* Section, const TCHAR* Name, int Value);
|
||||||
|
extern void CfgWriteFloat(const TCHAR* Section, const TCHAR* Name, float Value);
|
||||||
extern void CfgWriteStr(const TCHAR* Section, const TCHAR* Name, const wxString& Data);
|
extern void CfgWriteStr(const TCHAR* Section, const TCHAR* Name, const wxString& Data);
|
||||||
|
|
||||||
extern bool CfgReadBool(const TCHAR *Section,const TCHAR* Name, bool Default);
|
extern bool CfgReadBool(const TCHAR *Section,const TCHAR* Name, bool Default);
|
||||||
extern void CfgReadStr(const TCHAR* Section, const TCHAR* Name, wxString& Data, const TCHAR* Default);
|
extern void CfgReadStr(const TCHAR* Section, const TCHAR* Name, wxString& Data, const TCHAR* Default);
|
||||||
extern void CfgReadStr(const TCHAR* Section, const TCHAR* Name, TCHAR* Data, int DataSize, const TCHAR* Default);
|
extern void CfgReadStr(const TCHAR* Section, const TCHAR* Name, TCHAR* Data, int DataSize, const TCHAR* Default);
|
||||||
extern int CfgReadInt(const TCHAR* Section, const TCHAR* Name,int Default);
|
extern int CfgReadInt(const TCHAR* Section, const TCHAR* Name, int Default);
|
||||||
|
extern int CfgReadFloat(const TCHAR* Section, const TCHAR* Name, float Default);
|
||||||
|
|
||||||
// Items Specific to DirectSound
|
// Items Specific to DirectSound
|
||||||
#define STRFY(x) #x
|
#define STRFY(x) #x
|
||||||
|
|
Loading…
Reference in New Issue