2009-02-09 21:15:56 +00:00
|
|
|
/***************************************************************************
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|