#pragma once

struct kbsnesapu_Settings
{//Genearal
    int  nSampleRate;   //再生周波数
    int  nInterpolation;//補間処理
    int  nDefaultAmp;   //音量既定値
    int  nSeekControl;  //シーク制御
    bool bUseXid6Amp;  //XID6 の音量値を使う
    bool bReplayGain;  //リプレイゲイン
    bool bLPF;         //実機ローパスフィルタ
    bool bNoSurround;  //サラウンド無効
    bool bEchoFir;     //実機エコー/FIR 処理
 //Temporary
    int  nSpeed;    //再生速度
    int  nPitch;    //音程
    int  nDspStereo;//左右拡散度
    int  nDspEFBCT;//フィードバック反転度
    bool bBassBoost;//BASS BOOST
    bool bOldADPCM; //過去の ADPCM 互換;
    bool bReverse;  //左右反転
    bool bSurround; //逆位相サラウンド強制;
    bool bNoEcho;   //エコー無効
    bool bNoPitchMod;//ピッチモジュレーション無効
    bool bNoPitchRead;//ピッチベンド無効
    bool bNoFIR;    //FIR フィルタ無効
    bool bNoEnv;    //エンベロープ無効
    bool bNoNoise;  //ノイズ無効
    bool bEnvSpd;   //エンベロープ速度を同期
    wchar_t szChMute[9]; //チャンネルミュート
    wchar_t szChNoise[9];//チャンネルノイズ
};

class IKpiConfig;
class IKpiConfigEnumerator;

BOOL  __fastcall kbsnesapu_EnumConfig(IKpiConfig *pConfig, IKpiConfigEnumerator *pEnumerator);
DWORD __fastcall kbsnesapu_ApplyConfig(IKpiConfig *pConfig,
                              const wchar_t *cszSection, //セクション名
                              const wchar_t *cszKey, //キー名
                              INT64  nValue, //変更後の値(BOOL/INT の場合)
                              double dValue, //変更後の値(FLOAT の場合)
                              const wchar_t *cszValue);//変更後の値(文字列)
void __fastcall kbsnesapu_GetSettings(IKpiConfig *pConfig, kbsnesapu_Settings *pSettings);
void __fastcall kbsnesapu_GetDllPath(IKpiConfig* pConfig, wchar_t *pszPath, int nSize);
