summaryrefslogtreecommitdiff
path: root/utils/voice_tweak/voice_tweak.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utils/voice_tweak/voice_tweak.cpp')
-rw-r--r--utils/voice_tweak/voice_tweak.cpp256
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;
+}