pcsx2/plugins/PeopsSPU2/cfg.c
2010-04-25 00:31:27 +00:00

257 lines
7.8 KiB
C

/***************************************************************************
cfg.c - description
-------------------
begin : Wed May 15 2002
copyright : (C) 2002 by Pete Bernert
email : BlackDove@addcom.de
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. See also the license.txt file for *
* additional informations. *
* *
***************************************************************************/
//*************************************************************************//
// History of changes:
//
// 2004/04/04 - Pete
// - changed plugin to emulate PS2 spu
//
// 2003/06/07 - Pete
// - added Linux NOTHREADLIB define
//
// 2003/02/28 - Pete
// - added option for kode54's interpolation and linuzappz's mono mode
//
// 2003/01/19 - Pete
// - added Neill's reverb
//
// 2002/08/04 - Pete
// - small linux bug fix: now the cfg file can be in the main emu directory as well
//
// 2002/06/08 - linuzappz
// - Added combo str for SPUasync, and MAXMODE is now defined as 2
//
// 2002/05/15 - Pete
// - generic cleanup for the Peops release
//
//*************************************************************************//
#include "stdafx.h"
#define _IN_CFG
#include "externals.h"
////////////////////////////////////////////////////////////////////////
// WINDOWS CONFIG/ABOUT HANDLING
////////////////////////////////////////////////////////////////////////
#include "resource.h"
////////////////////////////////////////////////////////////////////////
// simple about dlg handler
////////////////////////////////////////////////////////////////////////
BOOL CALLBACK AboutDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_COMMAND:
{
switch(LOWORD(wParam))
{case IDOK: EndDialog(hW,TRUE);return TRUE;}
}
}
return FALSE;
}
////////////////////////////////////////////////////////////////////////
// READ CONFIG: from win registry
////////////////////////////////////////////////////////////////////////
// timer mode 2 (spuupdate sync mode) can be enabled for windows
// by setting MAXMODE to 2.
// Attention: that mode is not much tested, maybe the dsound buffers
// need to get adjusted to use that mode safely. Also please note:
// sync sound updates will _always_ cause glitches, if the system is
// busy by, for example, long lasting cdrom accesses. OK, you have
// be warned :)
#define MAXMODE 2
//#define MAXMODE 1
void ReadConfig(void)
{
HKEY myKey;
DWORD temp;
DWORD type;
DWORD size;
// init vars
iVolume=3;
iDebugMode=0;
iRecordMode=0;
iUseReverb=0;
iUseInterpolation=2;
iUseTimer = 2;
if(RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\PS2Eplugin\\SPU2\\PeopsSound",0,KEY_ALL_ACCESS,&myKey)==ERROR_SUCCESS)
{
size = 4;
if(RegQueryValueEx(myKey,"Volume",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS)
iVolume=(int)temp;
size = 4;
if(RegQueryValueEx(myKey,"DebugMode",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS)
iDebugMode=(int)temp;
size = 4;
if(RegQueryValueEx(myKey,"RecordMode",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS)
iRecordMode=(int)temp;
size = 4;
if(RegQueryValueEx(myKey,"UseReverb",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS)
iUseReverb=(int)temp;
size = 4;
if(RegQueryValueEx(myKey,"UseInterpolation",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS)
iUseInterpolation=(int)temp;
size = 4;
if(RegQueryValueEx(myKey,"UseTimer",0,&type,(LPBYTE)&temp,&size)==ERROR_SUCCESS)
iUseTimer=(int)temp;
RegCloseKey(myKey);
}
if(iVolume<1) iVolume=1;
if(iVolume>5) iVolume=5;
}
////////////////////////////////////////////////////////////////////////
// WRITE CONFIG: in win registry
////////////////////////////////////////////////////////////////////////
void WriteConfig(void)
{
HKEY myKey;
DWORD myDisp;
DWORD temp;
RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\PS2Eplugin\\SPU2\\PeopsSound",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&myKey,&myDisp);
temp=iVolume;
RegSetValueEx(myKey,"Volume",0,REG_DWORD,(LPBYTE) &temp,sizeof(temp));
temp=iDebugMode;
RegSetValueEx(myKey,"DebugMode",0,REG_DWORD,(LPBYTE) &temp,sizeof(temp));
temp=iRecordMode;
RegSetValueEx(myKey,"RecordMode",0,REG_DWORD,(LPBYTE) &temp,sizeof(temp));
temp=iUseReverb;
RegSetValueEx(myKey,"UseReverb",0,REG_DWORD,(LPBYTE) &temp,sizeof(temp));
temp=iUseInterpolation;
RegSetValueEx(myKey,"UseInterpolation",0,REG_DWORD,(LPBYTE) &temp,sizeof(temp));
temp=iUseTimer;
RegSetValueEx(myKey,"UseTimer",0,REG_DWORD,(LPBYTE) &temp,sizeof(temp));
RegCloseKey(myKey);
}
////////////////////////////////////////////////////////////////////////
// INIT WIN CFG DIALOG
////////////////////////////////////////////////////////////////////////
BOOL OnInitDSoundDialog(HWND hW)
{
HWND hWC;
ReadConfig();
hWC=GetDlgItem(hW,IDC_VOLUME);
ComboBox_AddString(hWC, "0: Mute");
ComboBox_AddString(hWC, "1: low");
ComboBox_AddString(hWC, "2: medium");
ComboBox_AddString(hWC, "3: loud");
ComboBox_AddString(hWC, "4: loudest");
ComboBox_SetCurSel(hWC,5-iVolume);
if(iDebugMode) CheckDlgButton(hW,IDC_DEBUGMODE,TRUE);
if(iRecordMode) CheckDlgButton(hW,IDC_RECORDMODE,TRUE);
if(iUseTimer==0) CheckDlgButton(hW,IDC_TIMER,TRUE);
hWC=GetDlgItem(hW,IDC_USEREVERB);
ComboBox_AddString(hWC, "0: No reverb (fastest)");
ComboBox_AddString(hWC, "1: SPU2 reverb (may be buggy, not tested yet)");
ComboBox_SetCurSel(hWC,iUseReverb);
hWC=GetDlgItem(hW,IDC_INTERPOL);
ComboBox_AddString(hWC, "0: None (fastest)");
ComboBox_AddString(hWC, "1: Simple interpolation");
ComboBox_AddString(hWC, "2: Gaussian interpolation (good quality)");
ComboBox_AddString(hWC, "3: Cubic interpolation (better treble)");
ComboBox_SetCurSel(hWC,iUseInterpolation);
return TRUE;
}
////////////////////////////////////////////////////////////////////////
// WIN CFG DLG OK
////////////////////////////////////////////////////////////////////////
void OnDSoundOK(HWND hW)
{
HWND hWC;
if(IsDlgButtonChecked(hW,IDC_TIMER))
iUseTimer=0; else iUseTimer=2;
hWC=GetDlgItem(hW,IDC_VOLUME);
iVolume=5-ComboBox_GetCurSel(hWC);
hWC=GetDlgItem(hW,IDC_USEREVERB);
iUseReverb=ComboBox_GetCurSel(hWC);
hWC=GetDlgItem(hW,IDC_INTERPOL);
iUseInterpolation=ComboBox_GetCurSel(hWC);
if(IsDlgButtonChecked(hW,IDC_DEBUGMODE))
iDebugMode=1; else iDebugMode=0;
if(IsDlgButtonChecked(hW,IDC_RECORDMODE))
iRecordMode=1; else iRecordMode=0;
WriteConfig(); // write registry
EndDialog(hW,TRUE);
}
////////////////////////////////////////////////////////////////////////
// WIN CFG DLG CANCEL
////////////////////////////////////////////////////////////////////////
void OnDSoundCancel(HWND hW)
{
EndDialog(hW,FALSE);
}
////////////////////////////////////////////////////////////////////////
// WIN CFG PROC
////////////////////////////////////////////////////////////////////////
BOOL CALLBACK DSoundDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
return OnInitDSoundDialog(hW);
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDCANCEL: OnDSoundCancel(hW);return TRUE;
case IDOK: OnDSoundOK(hW); return TRUE;
}
}
}
return FALSE;
}