Initial commit: ROW Client source code

Game client codebase including:
- CharacterActionControl: Character and creature management
- GlobalScript: Network, items, skills, quests, utilities
- RYLClient: Main client application with GUI and event handlers
- Engine: 3D rendering engine (RYLGL)
- MemoryManager: Custom memory allocation
- Library: Third-party dependencies (DirectX, boost, etc.)
- Tools: Development utilities

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-29 16:24:34 +09:00
commit e067522598
5135 changed files with 1745744 additions and 0 deletions

View File

@@ -0,0 +1,516 @@
//----------------------------------------------------------------------------
// File: AmplitudeModulation.cpp
//
// Desc: AmplitudeModulation sample shows how to create an effect buffer and
// adjust amplitude modulation parameters.
//
// Copyright (c) 1999-2001 Microsoft Corp. All rights reserved.
//-----------------------------------------------------------------------------
#define STRICT
#include <windows.h>
#include <basetsd.h>
#include <mmsystem.h>
#include <mmreg.h>
#include <dxerr8.h>
#include <dsound.h>
#include <cguid.h>
#include <commctrl.h>
#include <commdlg.h>
#include <dsound.h>
#include "resource.h"
#include "DSUtil.h"
#include "DXUtil.h"
//-----------------------------------------------------------------------------
// Function-prototypes
//-----------------------------------------------------------------------------
INT_PTR CALLBACK MainDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam );
VOID OnInitDialog( HWND hDlg );
VOID OnTimer( HWND hDlg );
VOID OnOpenSoundFile( HWND hDlg );
HRESULT ValidateWaveFile( HWND hDlg, TCHAR* strFileName );
HRESULT OnPlaySound( HWND hDlg );
HRESULT CreateAndFillBuffer( HWND hDlg, DWORD dwCreationFlags );
VOID OnEffectChanged( HWND hDlg );
VOID SetBufferOptions( LONG lFrequency, LONG lPan, LONG lVolume );
VOID EnablePlayUI( HWND hDlg, BOOL bEnable );
//-----------------------------------------------------------------------------
// Defines, constants, and global variables
//-----------------------------------------------------------------------------
#define DSFX_GARGLE_RATEHZ_MAX 1000
#define DSFX_GARGLE_RATEHZ_MIN 1
TCHAR g_strWaveFileName[MAX_PATH];
CSoundManager* g_pSoundManager = NULL;
CSound* g_pSound = NULL;
LPDIRECTSOUNDFXGARGLE g_pIGargle = NULL;
HINSTANCE g_hInst = NULL;
//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: Entry point for the application. Since we use a simple dialog for
// user interaction we don't need to pump messages.
//-----------------------------------------------------------------------------
INT APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, INT nCmdShow )
{
g_hInst = hInst;
CoInitialize( NULL );
// Init the common control dll
InitCommonControls();
// Display the main dialog box.
DialogBox( hInst, MAKEINTRESOURCE(IDD_MAIN), NULL, MainDlgProc );
CoUninitialize();
return TRUE;
}
//-----------------------------------------------------------------------------
// Name: MainDlgProc()
// Desc: Handles dialog messages
//-----------------------------------------------------------------------------
INT_PTR CALLBACK MainDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam )
{
HRESULT hr;
switch( msg )
{
case WM_COMMAND:
switch( LOWORD(wParam) )
{
case IDCANCEL:
EndDialog( hDlg, IDCANCEL );
break;
case IDC_SOUNDFILE:
OnOpenSoundFile( hDlg );
break;
case IDC_PLAY:
if( FAILED( hr = OnPlaySound( hDlg ) ) )
{
DXTRACE_ERR( TEXT("OnPlaySound"), hr );
MessageBox( hDlg, "Error playing DirectSound buffer."
"Sample will now exit.", "DirectSound Sample",
MB_OK | MB_ICONERROR );
EndDialog( hDlg, IDABORT );
}
break;
case IDC_STOP:
SAFE_RELEASE( g_pIGargle );
if( g_pSound )
{
g_pSound->Stop();
g_pSound->Reset();
}
break;
case IDC_WAVEFORM_TRIANGLE:
case IDC_WAVEFORM_SQUARE:
OnEffectChanged( hDlg );
break;
default:
return FALSE; // Didn't handle message
}
break;
case WM_TIMER:
OnTimer( hDlg );
break;
case WM_INITDIALOG:
OnInitDialog( hDlg );
break;
case WM_NOTIFY:
OnEffectChanged( hDlg );
break;
case WM_DESTROY:
// Cleanup everything
KillTimer( hDlg, 1 );
SAFE_RELEASE( g_pIGargle );
SAFE_DELETE( g_pSound );
SAFE_DELETE( g_pSoundManager );
break;
default:
return FALSE; // Didn't handle message
}
return TRUE; // Handled message
}
//-----------------------------------------------------------------------------
// Name: OnInitDialog()
// Desc: Initializes the dialogs (sets up UI controls, etc.)
//-----------------------------------------------------------------------------
VOID OnInitDialog( HWND hDlg )
{
HRESULT hr;
// Load the icon
HICON hIcon = LoadIcon( g_hInst, MAKEINTRESOURCE( IDR_MAINFRAME ) );
// Create a static IDirectSound in the CSound class.
// Set coop level to DSSCL_PRIORITY, and set primary buffer
// format to stereo, 22kHz and 16-bit output.
g_pSoundManager = new CSoundManager();
if( FAILED( hr = g_pSoundManager->Initialize( hDlg, DSSCL_PRIORITY, 2, 22050, 16 ) ) )
{
DXTRACE_ERR( TEXT("Initialize"), hr );
MessageBox( hDlg, "Error initializing DirectSound. Sample will now exit.",
"DirectSound Sample", MB_OK | MB_ICONERROR );
EndDialog( hDlg, IDABORT );
return;
}
// Set the icon for this dialog.
PostMessage( hDlg, WM_SETICON, ICON_BIG, (LPARAM) hIcon ); // Set big icon
PostMessage( hDlg, WM_SETICON, ICON_SMALL, (LPARAM) hIcon ); // Set small icon
// Create a timer, so we can check for when the soundbuffer is stopped
SetTimer( hDlg, 0, 250, NULL );
// Get handles to dialog items
HWND hFreqSlider = GetDlgItem( hDlg, IDC_FREQUENCY_SLIDER );
// Set UI defaults
CheckDlgButton( hDlg, IDC_LOOP_CHECK, BST_CHECKED );
CheckRadioButton( hDlg, IDC_WAVEFORM_TRIANGLE, IDC_WAVEFORM_TRIANGLE, IDC_WAVEFORM_TRIANGLE );
// Set the range and position of the freq slider from
// DSBFREQUENCY_MIN and DSBFREQUENCY_MAX are DirectSound constants
PostMessage( hFreqSlider, TBM_SETRANGEMAX, TRUE, DSFX_GARGLE_RATEHZ_MAX );
PostMessage( hFreqSlider, TBM_SETRANGEMIN, TRUE, DSFX_GARGLE_RATEHZ_MIN );
PostMessage( hFreqSlider, TBM_SETPOS, TRUE, DSFX_GARGLE_RATEHZ_MIN );
// Load default wave file
TCHAR strFile[MAX_PATH];
GetWindowsDirectory( strFile, MAX_PATH );
lstrcat( strFile, "\\media\\ding.wav" );
if( FAILED( hr = ValidateWaveFile( hDlg, strFile ) ) )
{
// Set the UI controls
SetDlgItemText( hDlg, IDC_FILENAME, TEXT("") );
SetDlgItemText( hDlg, IDC_STATUS, TEXT("No file loaded.") );
}
}
//-----------------------------------------------------------------------------
// Name: OnOpenSoundFile()
// Desc: Called when the user requests to open a sound file
//-----------------------------------------------------------------------------
VOID OnOpenSoundFile( HWND hDlg )
{
static TCHAR strFileName[MAX_PATH] = TEXT("");
static TCHAR strPath[MAX_PATH] = TEXT("");
// Setup the OPENFILENAME structure
OPENFILENAME ofn = { sizeof(OPENFILENAME), hDlg, NULL,
TEXT("Wave Files\0*.wav\0All Files\0*.*\0\0"), NULL,
0, 1, strFileName, MAX_PATH, NULL, 0, strPath,
TEXT("Open Sound File"),
OFN_FILEMUSTEXIST|OFN_HIDEREADONLY, 0, 0,
TEXT(".wav"), 0, NULL, NULL };
// Get the default media path (something like C:\WINDOWS\MEDIA)
if( '\0' == strPath[0] )
{
GetWindowsDirectory( strPath, MAX_PATH );
if( strcmp( &strPath[strlen(strPath)], TEXT("\\") ) )
strcat( strPath, TEXT("\\") );
strcat( strPath, TEXT("MEDIA") );
}
// Update the UI controls to show the sound as loading a file
EnableWindow( GetDlgItem( hDlg, IDC_PLAY ), FALSE );
EnableWindow( GetDlgItem( hDlg, IDC_STOP ), FALSE );
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Loading file...") );
SAFE_RELEASE( g_pIGargle );
if( g_pSound )
{
g_pSound->Stop();
g_pSound->Reset();
}
// Display the OpenFileName dialog. Then, try to load the specified file
if( TRUE != GetOpenFileName( &ofn ) )
{
if( g_pSound )
{
EnableWindow( GetDlgItem( hDlg, IDC_PLAY ), TRUE );
EnableWindow( GetDlgItem( hDlg, IDC_STOP ), TRUE );
}
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Load aborted.") );
return;
}
SetDlgItemText( hDlg, IDC_FILENAME, TEXT("") );
// Make sure wave file is a valid wav file
ValidateWaveFile( hDlg, strFileName );
// Remember the path for next time
strcpy( strPath, strFileName );
char* strLastSlash = strrchr( strPath, '\\' );
strLastSlash[0] = '\0';
}
//-----------------------------------------------------------------------------
// Name: ValidateWaveFile()
// Desc: Open the wave file with the helper
// class CWaveFile to make sure it is valid
//-----------------------------------------------------------------------------
HRESULT ValidateWaveFile( HWND hDlg, TCHAR* strFileName )
{
HRESULT hr;
CWaveFile waveFile;
if( -1 == GetFileAttributes(strFileName) )
return E_FAIL;
// Load the wave file
if( FAILED( hr = waveFile.Open( strFileName, NULL, WAVEFILE_READ ) ) )
{
waveFile.Close();
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Bad wave file.") );
return DXTRACE_ERR( TEXT("Open"), hr );
}
else // The load call succeeded
{
WAVEFORMATEX* pwfx = waveFile.GetFormat();
if( pwfx->wFormatTag != WAVE_FORMAT_PCM )
{
// Sound must be PCM when using DSBCAPS_CTRLFX
SAFE_RELEASE( g_pIGargle );
SAFE_DELETE( g_pSound );
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Wave file must be PCM for effects control.") );
SetDlgItemText( hDlg, IDC_FILENAME, TEXT("") );
return S_FALSE;
}
// Update the UI controls to show the sound as the file is loaded
waveFile.Close();
EnablePlayUI( hDlg, TRUE );
SetDlgItemText( hDlg, IDC_FILENAME, strFileName );
SetDlgItemText( hDlg, IDC_STATUS, TEXT("File loaded.") );
strcpy( g_strWaveFileName, strFileName );
// Get the samples per sec from the wave file
DWORD dwSamplesPerSec = waveFile.m_pwfx->nSamplesPerSec;
return S_OK;
}
}
//-----------------------------------------------------------------------------
// Name: OnPlaySound()
// Desc: User hit the "Play" button
//-----------------------------------------------------------------------------
HRESULT OnPlaySound( HWND hDlg )
{
HRESULT hr;
DWORD dwCreationFlags;
DWORD dwResults;
LPDIRECTSOUNDBUFFER pDSB = NULL;
LPDIRECTSOUNDBUFFER8 pDSB8 = NULL;
BOOL bLooped = ( IsDlgButtonChecked( hDlg, IDC_LOOP_CHECK ) == BST_CHECKED );
// We would only use CTRLFX control on dsound buffer
dwCreationFlags = DSBCAPS_CTRLFX;
// Free any previous sound and FXs
SAFE_RELEASE( g_pIGargle );
SAFE_DELETE( g_pSound );
// Since the user can change the focus before the sound is played,
// we need to create the sound buffer every time the play button is pressed
// Load the wave file into a DirectSound buffer
if( FAILED( hr = g_pSoundManager->Create( &g_pSound, g_strWaveFileName, dwCreationFlags, GUID_NULL ) ) )
{
// Not a critical failure, so just update the status
DXTRACE_ERR_NOMSGBOX( TEXT("Create"), hr );
if( hr == DSERR_BUFFERTOOSMALL )
{
// DSERR_BUFFERTOOSMALL will be returned if the buffer is
// less than DSBSIZE_FX_MIN (100ms) and the buffer is created
// with DSBCAPS_CTRLFX.
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Wave file is too short (less than 100ms) for effect processing.") );
}
else
{
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Could not create sound buffer.") );
}
return S_FALSE;
}
// Query IDirectSoundBuffer8 interface
pDSB = g_pSound->GetBuffer( 0 );
if( FAILED( hr = pDSB->QueryInterface( IID_IDirectSoundBuffer8, (LPVOID*) &pDSB8 ) ) )
return DXTRACE_ERR( TEXT("QueryInterface"), hr );
// Set gargle effect on the IDirectSoundBuffer8
DSEFFECTDESC dsed;
ZeroMemory( &dsed, sizeof(DSEFFECTDESC) );
dsed.dwSize = sizeof(DSEFFECTDESC);
dsed.dwFlags = 0;
dsed.guidDSFXClass = GUID_DSFX_STANDARD_GARGLE;
if( FAILED( hr = pDSB8->SetFX( 1, &dsed, &dwResults ) ) )
{
// Not a critical failure, so just update the status
DXTRACE_ERR( TEXT("SetFX"), hr );
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Could not set gargle effect.") );
return S_FALSE;
}
// Get gargle effect friendly interface
if( FAILED( hr = pDSB8->GetObjectInPath( GUID_DSFX_STANDARD_GARGLE, 0,
IID_IDirectSoundFXGargle,
(LPVOID*) &g_pIGargle ) ) )
return DXTRACE_ERR( TEXT("GetObjectInPath"), hr );
// Cleanup
SAFE_RELEASE( pDSB8 );
// Set the buffer options to what the sliders are set to
OnEffectChanged( hDlg );
// Play the sound
DWORD dwLooped = bLooped ? DSBPLAY_LOOPING : 0L;
if( FAILED( hr = g_pSound->Play( 0, dwLooped ) ) )
return DXTRACE_ERR( TEXT("Play"), hr );
// Update the UI controls to show the sound as playing
EnablePlayUI( hDlg, FALSE );
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Sound playing.") );
return S_OK;
}
//-----------------------------------------------------------------------------
// Name: OnTimer()
// Desc: When we think the sound is playing this periodically checks to see if
// the sound has stopped. If it has then updates the dialog.
//-----------------------------------------------------------------------------
VOID OnTimer( HWND hDlg )
{
if( IsWindowEnabled( GetDlgItem( hDlg, IDC_STOP ) ) )
{
// We think the sound is playing, so see if it has stopped yet.
if( !g_pSound->IsSoundPlaying() )
{
// Update the UI controls to show the sound as stopped
EnablePlayUI( hDlg, TRUE );
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Sound stopped.") );
}
}
}
//-----------------------------------------------------------------------------
// Name: OnEffectChanged()
// Desc: Called when the UI prompted an effect change
//-----------------------------------------------------------------------------
VOID OnEffectChanged( HWND hDlg )
{
DSFXGargle dsfxGargle;
// Get handles to dialog items
HWND hFreqSlider = GetDlgItem( hDlg, IDC_FREQUENCY_SLIDER );
// Get the position of the sliders
dsfxGargle.dwRateHz = (DWORD)SendMessage( hFreqSlider, TBM_GETPOS, 0, 0 );
// Update UI
TCHAR strBuffer[10];
wsprintf( strBuffer, TEXT("%ld"), dsfxGargle.dwRateHz );
SetDlgItemText( hDlg, IDC_FREQUENCY, strBuffer );
// Get wave form
if( IsDlgButtonChecked( hDlg, IDC_WAVEFORM_SQUARE ) == BST_CHECKED )
dsfxGargle.dwWaveShape = DSFXGARGLE_WAVE_SQUARE;
else
dsfxGargle.dwWaveShape = DSFXGARGLE_WAVE_TRIANGLE;
// Set the options in the DirectSound buffer
if( g_pSound && g_pIGargle )
{
g_pIGargle->SetAllParameters( &dsfxGargle );
}
}
//-----------------------------------------------------------------------------
// Name: EnablePlayUI()
// Desc: Enables or disables the Play UI controls
//-----------------------------------------------------------------------------
VOID EnablePlayUI( HWND hDlg, BOOL bEnable )
{
if( bEnable )
{
EnableWindow( GetDlgItem( hDlg, IDC_LOOP_CHECK ), TRUE );
EnableWindow( GetDlgItem( hDlg, IDC_PLAY ), TRUE );
EnableWindow( GetDlgItem( hDlg, IDC_STOP ), FALSE );
SetFocus( GetDlgItem( hDlg, IDC_PLAY ) );
}
else
{
EnableWindow( GetDlgItem( hDlg, IDC_LOOP_CHECK ), FALSE );
EnableWindow( GetDlgItem( hDlg, IDC_PLAY ), FALSE );
EnableWindow( GetDlgItem( hDlg, IDC_STOP ), TRUE );
SetFocus( GetDlgItem( hDlg, IDC_STOP ) );
}
}

View File

@@ -0,0 +1,143 @@
# Microsoft Developer Studio Project File - Name="AmplitudeModulation" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Application" 0x0101
CFG=AmplitudeModulation - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "amplitudemodulation.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "amplitudemodulation.mak" CFG="AmplitudeModulation - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "AmplitudeModulation - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "AmplitudeModulation - Win32 Debug" (based on "Win32 (x86) Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "AmplitudeModulation - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /I "..\..\common\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
# ADD LINK32 comctl32.lib dxerr8.lib winmm.lib dsound.lib dxguid.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /stack:0x200000,0x200000
!ELSEIF "$(CFG)" == "AmplitudeModulation - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\common\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
# ADD LINK32 comctl32.lib dxerr8.lib winmm.lib dsound.lib dxguid.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept /stack:0x200000,0x200000
!ENDIF
# Begin Target
# Name "AmplitudeModulation - Win32 Release"
# Name "AmplitudeModulation - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\AmplitudeModulation.cpp
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# Begin Source File
SOURCE=.\AmplitudeModulation.rc
# End Source File
# Begin Source File
SOURCE=.\directx.ico
# End Source File
# Begin Source File
SOURCE=.\resource.h
# End Source File
# Begin Source File
SOURCE=.\winmain.ico
# End Source File
# End Group
# Begin Group "Common"
# PROP Default_Filter ""
# Begin Source File
SOURCE=..\..\common\src\dsutil.cpp
# End Source File
# Begin Source File
SOURCE=..\..\common\include\dsutil.h
# End Source File
# Begin Source File
SOURCE=..\..\common\src\dxutil.cpp
# End Source File
# Begin Source File
SOURCE=..\..\common\include\dxutil.h
# End Source File
# End Group
# Begin Source File
SOURCE=.\readme.txt
# End Source File
# End Target
# End Project

View File

@@ -0,0 +1,29 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "AmplitudeModulation"=.\amplitudemodulation.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@@ -0,0 +1,221 @@
# Microsoft Developer Studio Generated NMAKE File, Based on amplitudemodulation.dsp
!IF "$(CFG)" == ""
CFG=AmplitudeModulation - Win32 Debug
!MESSAGE No configuration specified. Defaulting to AmplitudeModulation - Win32 Debug.
!ENDIF
!IF "$(CFG)" != "AmplitudeModulation - Win32 Release" && "$(CFG)" != "AmplitudeModulation - Win32 Debug"
!MESSAGE Invalid configuration "$(CFG)" specified.
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "amplitudemodulation.mak" CFG="AmplitudeModulation - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "AmplitudeModulation - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "AmplitudeModulation - Win32 Debug" (based on "Win32 (x86) Application")
!MESSAGE
!ERROR An invalid configuration is specified.
!ENDIF
!IF "$(OS)" == "Windows_NT"
NULL=
!ELSE
NULL=nul
!ENDIF
!IF "$(CFG)" == "AmplitudeModulation - Win32 Release"
OUTDIR=.\Release
INTDIR=.\Release
# Begin Custom Macros
OutDir=.\Release
# End Custom Macros
ALL : "$(OUTDIR)\amplitudemodulation.exe"
CLEAN :
-@erase "$(INTDIR)\AmplitudeModulation.obj"
-@erase "$(INTDIR)\AmplitudeModulation.res"
-@erase "$(INTDIR)\dsutil.obj"
-@erase "$(INTDIR)\dxutil.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(OUTDIR)\amplitudemodulation.exe"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP=cl.exe
CPP_PROJ=/nologo /ML /W3 /GX /O2 /I "..\..\common\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /Fp"$(INTDIR)\amplitudemodulation.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
MTL=midl.exe
MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
RSC=rc.exe
RSC_PROJ=/l 0x409 /fo"$(INTDIR)\AmplitudeModulation.res" /d "NDEBUG"
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\amplitudemodulation.bsc"
BSC32_SBRS= \
LINK32=link.exe
LINK32_FLAGS=comctl32.lib dxerr8.lib winmm.lib dsound.lib dxguid.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:no /pdb:"$(OUTDIR)\amplitudemodulation.pdb" /machine:I386 /out:"$(OUTDIR)\amplitudemodulation.exe" /stack:0x200000,0x200000
LINK32_OBJS= \
"$(INTDIR)\AmplitudeModulation.obj" \
"$(INTDIR)\dsutil.obj" \
"$(INTDIR)\dxutil.obj" \
"$(INTDIR)\AmplitudeModulation.res"
"$(OUTDIR)\amplitudemodulation.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ELSEIF "$(CFG)" == "AmplitudeModulation - Win32 Debug"
OUTDIR=.\Debug
INTDIR=.\Debug
# Begin Custom Macros
OutDir=.\Debug
# End Custom Macros
ALL : "$(OUTDIR)\amplitudemodulation.exe"
CLEAN :
-@erase "$(INTDIR)\AmplitudeModulation.obj"
-@erase "$(INTDIR)\AmplitudeModulation.res"
-@erase "$(INTDIR)\dsutil.obj"
-@erase "$(INTDIR)\dxutil.obj"
-@erase "$(INTDIR)\vc60.idb"
-@erase "$(INTDIR)\vc60.pdb"
-@erase "$(OUTDIR)\amplitudemodulation.exe"
-@erase "$(OUTDIR)\amplitudemodulation.ilk"
-@erase "$(OUTDIR)\amplitudemodulation.pdb"
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP=cl.exe
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /Zi /Od /I "..\..\common\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /Fp"$(INTDIR)\amplitudemodulation.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
.c{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.obj::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.c{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cpp{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
.cxx{$(INTDIR)}.sbr::
$(CPP) @<<
$(CPP_PROJ) $<
<<
MTL=midl.exe
MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
RSC=rc.exe
RSC_PROJ=/l 0x409 /fo"$(INTDIR)\AmplitudeModulation.res" /d "_DEBUG"
BSC32=bscmake.exe
BSC32_FLAGS=/nologo /o"$(OUTDIR)\amplitudemodulation.bsc"
BSC32_SBRS= \
LINK32=link.exe
LINK32_FLAGS=comctl32.lib dxerr8.lib winmm.lib dsound.lib dxguid.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:yes /pdb:"$(OUTDIR)\amplitudemodulation.pdb" /debug /machine:I386 /out:"$(OUTDIR)\amplitudemodulation.exe" /pdbtype:sept /stack:0x200000,0x200000
LINK32_OBJS= \
"$(INTDIR)\AmplitudeModulation.obj" \
"$(INTDIR)\dsutil.obj" \
"$(INTDIR)\dxutil.obj" \
"$(INTDIR)\AmplitudeModulation.res"
"$(OUTDIR)\amplitudemodulation.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
!ENDIF
!IF "$(NO_EXTERNAL_DEPS)" != "1"
!IF EXISTS("amplitudemodulation.dep")
!INCLUDE "amplitudemodulation.dep"
!ELSE
!MESSAGE Warning: cannot find "amplitudemodulation.dep"
!ENDIF
!ENDIF
!IF "$(CFG)" == "AmplitudeModulation - Win32 Release" || "$(CFG)" == "AmplitudeModulation - Win32 Debug"
SOURCE=.\AmplitudeModulation.cpp
"$(INTDIR)\AmplitudeModulation.obj" : $(SOURCE) "$(INTDIR)"
SOURCE=.\AmplitudeModulation.rc
"$(INTDIR)\AmplitudeModulation.res" : $(SOURCE) "$(INTDIR)"
$(RSC) $(RSC_PROJ) $(SOURCE)
SOURCE=..\..\common\src\dsutil.cpp
"$(INTDIR)\dsutil.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=..\..\common\src\dxutil.cpp
"$(INTDIR)\dxutil.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
!ENDIF

View File

@@ -0,0 +1,149 @@
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
"#define _AFX_NO_OLE_RESOURCES\r\n"
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
"\r\n"
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
"#ifdef _WIN32\r\n"
"LANGUAGE 9, 1\r\n"
"#pragma code_page(1252)\r\n"
"#endif\r\n"
"#include ""afxres.rc"" // Standard components\r\n"
"#endif\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME ICON DISCARDABLE "directx.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_MAIN DIALOGEX 0, 0, 315, 119
STYLE DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "AmplitudeModulation"
FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "Sound &file...",IDC_SOUNDFILE,7,7,46,13
LTEXT "Static",IDC_FILENAME,57,7,251,13,SS_CENTERIMAGE,
WS_EX_CLIENTEDGE
LTEXT "Status",IDC_STATIC,7,24,42,13,SS_CENTERIMAGE
LTEXT "Static",IDC_STATUS,57,24,251,13,SS_CENTERIMAGE,
WS_EX_CLIENTEDGE
LTEXT "Frequency",IDC_STATIC,12,49,42,13,SS_CENTERIMAGE
CTEXT "0",IDC_FREQUENCY,57,49,35,13,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "1 Hz",IDC_STATIC,97,49,25,13,SS_CENTERIMAGE
CONTROL "Slider1",IDC_FREQUENCY_SLIDER,"msctls_trackbar32",
TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,125,48,144,15
CTEXT "1000 Hz",IDC_STATIC,268,49,30,13,SS_CENTERIMAGE
CONTROL "&Loop sound",IDC_LOOP_CHECK,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,7,85,53,10
PUSHBUTTON "&Play",IDC_PLAY,7,97,50,14,WS_DISABLED
PUSHBUTTON "&Stop",IDC_STOP,62,97,50,14,WS_DISABLED
PUSHBUTTON "E&xit",IDCANCEL,258,97,50,14
LTEXT "Wave Form",IDC_STATIC,12,64,42,13,SS_CENTERIMAGE
CONTROL "Triangle",IDC_WAVEFORM_TRIANGLE,"Button",
BS_AUTORADIOBUTTON,82,65,44,10
CONTROL "Square",IDC_WAVEFORM_SQUARE,"Button",BS_AUTORADIOBUTTON,
125,65,49,10
GROUPBOX "Effect Runtime Settings",IDC_STATIC,7,38,301,43
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_MAIN, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 308
TOPMARGIN, 7
BOTTOMMARGIN, 112
END
END
#endif // APSTUDIO_INVOKED
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE 9, 1
#pragma code_page(1252)
#endif
#include "afxres.rc" // Standard components
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,46 @@
//-----------------------------------------------------------------------------
//
// Sample Name: AmplitudeModulation Sample
//
// Copyright (c) 1999-2001 Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
Description
===========
The AmplitudeModulation sample shows how to apply an effect to a
DirectSound secondary buffer and modify the parameters of the effect.
Path
====
Source: DXSDK\Samples\Multimedia\DSound\AmplitudeModulation
Executable: DXSDK\Samples\Multimedia\DSound\Bin
User's Guide
============
Play the default sound or load another wave file by clicking Sound File.
Change the parameters of the effect by selecting one of the Wave Form
options and moving the slider to change the modulation rate.
Programming Notes
=================
For a simpler example of how to setup a DirectSound buffer without a
DirectSound effect, see the PlaySound sample.
* To set an effect on a buffer
1. Make sure the buffer is created with the DSBCAPS_CTRLFX flag.
2. Fill out a DSEFFECTDESC struct setting the guidDSFXClass
to the GUID of the effect desired.
3. Call IDirectSoundBuffer8::SetFX passing in the DSEFFECTDESC struct.
4. Call IDirectSoundBuffer8::GetObjectInPath to get a interface
pointer to the effect in the buffer, such as IDirectSoundFXGargle.
* To control various parameters of the gargle effect:
1. Fill out a DSFXGargle struct with desired params
2. Call IDirectSoundFXGargle::SetAllParameters

View File

@@ -0,0 +1,28 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by AmplitudeModulation.rc
//
#define IDR_MAINFRAME 128
#define IDD_MAIN 130
#define IDC_PLAY 1000
#define IDC_STOP 1001
#define IDC_FREQUENCY_SLIDER 1003
#define IDC_LOOP_CHECK 1009
#define IDC_SOUNDFILE 1011
#define IDC_FREQUENCY 1012
#define IDC_FILENAME 1015
#define IDC_STATUS 1016
#define IDC_WAVEFORM_TRIANGLE 1026
#define IDC_WAVEFORM_SQUARE 1028
#define IDC_BEHAVIOR 1033
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 134
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1026
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif