mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 01:39:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,256 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//
|
||||
//=============================================================================//
|
||||
// voice_tweak.cpp : Defines the class behaviors for the application.
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <assert.h>
|
||||
#include "voice_tweak.h"
|
||||
#include "waveout.h"
|
||||
#include "voice_tweakDlg.h"
|
||||
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
|
||||
//extern IVoiceRecord* CreateVoiceRecord_WaveIn(int sampleRate);
|
||||
extern IVoiceRecord* CreateVoiceRecord_DSound(int sampleRate);
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
LANGUAGE_ENGLISH=0,
|
||||
LANGUAGE_SPANISH=1,
|
||||
LANGUAGE_FRENCH=2,
|
||||
LANGUAGE_ITALIAN=3,
|
||||
LANGUAGE_GERMAN=4,
|
||||
LANGUAGE_COUNT=5
|
||||
} VoiceTweakLanguageID;
|
||||
|
||||
VoiceTweakLanguageID g_CurrentLanguage = LANGUAGE_ENGLISH;
|
||||
|
||||
#define LANGENTRY(name) {IDS_##name##, IDS_SPANISH_##name##, IDS_FRENCH_##name##, IDS_ITALIAN_##name##, IDS_GERMAN_##name##}
|
||||
|
||||
int g_StringIDs[][LANGUAGE_COUNT] =
|
||||
{
|
||||
LANGENTRY(HELPTEXT),
|
||||
LANGENTRY(ERROR),
|
||||
LANGENTRY(CANTFINDMICBOOST),
|
||||
LANGENTRY(CANTFINDMICVOLUME),
|
||||
LANGENTRY(CANTFINDMICMUTE),
|
||||
LANGENTRY(CANTCREATEWAVEIN),
|
||||
LANGENTRY(CANTLOADVOICEMODULE),
|
||||
LANGENTRY(CANTCREATEWAVEOUT),
|
||||
LANGENTRY(NODPLAYVOICE),
|
||||
LANGENTRY(WINDOWTITLE),
|
||||
LANGENTRY(OKAY),
|
||||
LANGENTRY(CANCEL),
|
||||
LANGENTRY(SYSTEMSETUP),
|
||||
LANGENTRY(HELP),
|
||||
LANGENTRY(VOICEINPUT),
|
||||
LANGENTRY(VOLUME),
|
||||
LANGENTRY(ENABLEGAIN),
|
||||
};
|
||||
#define NUM_STRINGIDS (sizeof(g_StringIDs)/sizeof(g_StringIDs[0]))
|
||||
|
||||
// Pass in the english string ID, and this returns the string ID in the current language.
|
||||
int MapLanguageStringID( int idEnglish )
|
||||
{
|
||||
for( int i=0; i < NUM_STRINGIDS; i++ )
|
||||
{
|
||||
if( idEnglish == g_StringIDs[i][LANGUAGE_ENGLISH] )
|
||||
return g_StringIDs[i][g_CurrentLanguage];
|
||||
}
|
||||
|
||||
assert( !"MapLanguageStringID: unknown string ID" );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CVoiceTweakApp
|
||||
|
||||
BEGIN_MESSAGE_MAP(CVoiceTweakApp, CWinApp)
|
||||
//{{AFX_MSG_MAP(CVoiceTweakApp)
|
||||
// NOTE - the ClassWizard will add and remove mapping macros here.
|
||||
// DO NOT EDIT what you see in these blocks of generated code!
|
||||
//}}AFX_MSG
|
||||
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CVoiceTweakApp construction
|
||||
|
||||
CVoiceTweakApp::CVoiceTweakApp()
|
||||
{
|
||||
m_pVoiceRecord = 0;
|
||||
m_pWaveOut = 0;
|
||||
m_pMixerControls = 0;
|
||||
}
|
||||
|
||||
CVoiceTweakApp::~CVoiceTweakApp()
|
||||
{
|
||||
StopDevices();
|
||||
}
|
||||
|
||||
|
||||
bool CVoiceTweakApp::StartDevices()
|
||||
{
|
||||
StopDevices();
|
||||
|
||||
CString str, errStr;
|
||||
|
||||
// Setup wave in.
|
||||
if( !(m_pVoiceRecord = CreateVoiceRecord_DSound(VOICE_TWEAK_SAMPLE_RATE)) )
|
||||
{
|
||||
//if( !(m_pVoiceRecord = CreateVoiceRecord_WaveIn(VOICE_TWEAK_SAMPLE_RATE)) )
|
||||
{
|
||||
str.LoadString( MapLanguageStringID(IDS_CANTCREATEWAVEIN) );
|
||||
::MessageBox(NULL, str, errStr, MB_OK);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
m_pVoiceRecord->RecordStart();
|
||||
|
||||
|
||||
if( !(m_pWaveOut = CreateWaveOut(VOICE_TWEAK_SAMPLE_RATE)) )
|
||||
{
|
||||
str.LoadString( MapLanguageStringID(IDS_CANTCREATEWAVEOUT) );
|
||||
::MessageBox(NULL, str, errStr, MB_OK);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void CVoiceTweakApp::StopDevices()
|
||||
{
|
||||
if(m_pVoiceRecord)
|
||||
{
|
||||
m_pVoiceRecord->Release();
|
||||
m_pVoiceRecord = NULL;
|
||||
}
|
||||
|
||||
if(m_pWaveOut)
|
||||
{
|
||||
m_pWaveOut->Release();
|
||||
m_pWaveOut = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// The one and only CVoiceTweakApp object
|
||||
|
||||
CVoiceTweakApp theApp;
|
||||
|
||||
char const* FindArg(char const *pName)
|
||||
{
|
||||
for(int i=0; i < __argc; i++)
|
||||
if(stricmp(__argv[i], pName) == 0)
|
||||
return ((i+1) < __argc) ? __argv[i+1] : "";
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CVoiceTweakApp initialization
|
||||
BOOL CVoiceTweakApp::InitInstance()
|
||||
{
|
||||
// Set the thread locale so it grabs the string resources for the right language. If
|
||||
// we don't have resources for the system default language, it just uses English.
|
||||
if( FindArg("-french") )
|
||||
g_CurrentLanguage = LANGUAGE_FRENCH;
|
||||
else if( FindArg("-spanish") )
|
||||
g_CurrentLanguage = LANGUAGE_SPANISH;
|
||||
else if(FindArg("-italian"))
|
||||
g_CurrentLanguage = LANGUAGE_ITALIAN;
|
||||
else if(FindArg("-german"))
|
||||
g_CurrentLanguage = LANGUAGE_GERMAN;
|
||||
else
|
||||
g_CurrentLanguage = LANGUAGE_ENGLISH;
|
||||
|
||||
CString errStr, str;
|
||||
errStr.LoadString( MapLanguageStringID(IDS_ERROR) );
|
||||
|
||||
m_pMixerControls = GetMixerControls();
|
||||
|
||||
// Initialize the mixer controls.
|
||||
bool bFoundVolume, bFoundMute;
|
||||
|
||||
float volume, mute;
|
||||
bFoundVolume = m_pMixerControls->GetValue_Float(IMixerControls::Control::MicVolume, volume);
|
||||
bFoundMute = m_pMixerControls->GetValue_Float(IMixerControls::Control::MicMute, mute);
|
||||
|
||||
if(!bFoundVolume)
|
||||
{
|
||||
str.LoadString( MapLanguageStringID(IDS_CANTFINDMICVOLUME) );
|
||||
::MessageBox(NULL, str, errStr, MB_OK);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if(!bFoundMute)
|
||||
{
|
||||
str.LoadString( MapLanguageStringID(IDS_CANTFINDMICMUTE) );
|
||||
::MessageBox(NULL, str, errStr, MB_OK);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Set mute and boost for them automatically.
|
||||
m_pMixerControls->SetValue_Float(IMixerControls::Control::MicMute, 1);
|
||||
|
||||
// We cycle the mic boost because for some reason Windows misses the first call to set it to 1, but
|
||||
// if the user clicks the checkbox on and off again, it works.
|
||||
m_pMixerControls->SetValue_Float(IMixerControls::Control::MicBoost, 1);
|
||||
m_pMixerControls->SetValue_Float(IMixerControls::Control::MicBoost, 0);
|
||||
m_pMixerControls->SetValue_Float(IMixerControls::Control::MicBoost, 1);
|
||||
|
||||
// Enable the mic for wave input.
|
||||
m_pMixerControls->SelectMicrophoneForWaveInput();
|
||||
|
||||
if(!StartDevices())
|
||||
return false;
|
||||
|
||||
|
||||
// Standard initialization
|
||||
// If you are not using these features and wish to reduce the size
|
||||
// of your final executable, you should remove from the following
|
||||
// the specific initialization routines you do not need.
|
||||
|
||||
#ifdef _AFXDLL
|
||||
Enable3dControls(); // Call this when using MFC in a shared DLL
|
||||
#else
|
||||
Enable3dControlsStatic(); // Call this when linking to MFC statically
|
||||
#endif
|
||||
|
||||
CVoiceTweakDlg dlg;
|
||||
m_pMainWnd = &dlg;
|
||||
int nResponse = dlg.DoModal();
|
||||
if (nResponse == IDOK)
|
||||
{
|
||||
// TODO: Place code here to handle when the dialog is
|
||||
// dismissed with OK
|
||||
}
|
||||
else if (nResponse == IDCANCEL)
|
||||
{
|
||||
// TODO: Place code here to handle when the dialog is
|
||||
// dismissed with Cancel
|
||||
}
|
||||
|
||||
// Since the dialog has been closed, return FALSE so that we exit the
|
||||
// application, rather than start the application's message pump.
|
||||
return FALSE;
|
||||
}
|
||||
Reference in New Issue
Block a user