diff options
Diffstat (limited to 'utils/voice_tweak/voice_tweak.cpp')
| -rw-r--r-- | utils/voice_tweak/voice_tweak.cpp | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/utils/voice_tweak/voice_tweak.cpp b/utils/voice_tweak/voice_tweak.cpp new file mode 100644 index 0000000..5d27d1f --- /dev/null +++ b/utils/voice_tweak/voice_tweak.cpp @@ -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; +} |