【VC开源代码栏目提醒】:网学会员,鉴于大家对VC开源代码十分关注,论文会员在此为大家搜集整理了“AUDIOFX.CPP”一文,供大家参考学习!
//-----------------------------------------------------------------------------
// File: AudioFX.cpp
//
// Desc: Sample to demonstrate soundFX and parameters with DirectMusic
//
//
// Copyright ( c ) 1998-2000 Microsoft Corporation. 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 <stdio.h>
#include <tchar.h>
#include "DMUtil.h"
#include "DSUtil.h"
#include "DXUtil.h"
#include "resource.h"
//-----------------------------------------------------------------------------
// Function-prototypes
//-----------------------------------------------------------------------------
INT_PTR CALLBACK MainDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam );
VOID OnInitDialog( HWND hDlg );
VOID OnOpenSoundFile( HWND hDlg );
HRESULT OnPlaySound( HWND hDlg );
VOID OnEffectChanged( HWND hDlg );
HRESULT ValidateFile( HWND hDlg, TCHAR* strFileName );
HRESULT CreateAndFillBuffer( HWND hDlg, DWORD dwCreationFlags );
VOID SetBufferOptions( LONG lFrequency, LONG lPakn, LONG lVolume );
VOID EnablePlayUI( HWND hDlg, BOOL bEnable );
HRESULT ProcessDirectMusicMessages( HWND hDlg );
VOID LoadParameterUI ( HWND hDlg, DWORD dwFXType );
VOID ResetParameterUI ( HWND hDlg );
//-----------------------------------------------------------------------------
// Name: enum ESFXType
// Desc: each is a unique identifier mapped to a DirectSoundFX
//-----------------------------------------------------------------------------
enum ESFXType
{
eSFX_chorus = 0,
eSFX_compressor,
eSFX_distortion,
eSFX_echo,
eSFX_flanger,
eSFX_gargle,
eSFX_parameq,
eSFX_reverb,
// number of enumerated effects
eNUM_SFX
};
//-----------------------------------------------------------------------------
// Name: class CSoundFXManager
// Desc: Takes care of effects for one DirectSoundBuffer
//-----------------------------------------------------------------------------
class CSoundFXManager
{
public:
CSoundFXManager();
~CSoundFXManager();
public: // interface
HRESULT Initialize ( IDirectMusicAudioPath8 * pAudioPath8, BOOL bLoadDefaultParamValues );
HRESULT UnInitialize ();
HRESULT SetFXEnable( DWORD esfxType );
HRESULT ActivateFX();
HRESULT DisableAllFX();
HRESULT LoadCurrentFXParameters();
public: // members
LPDIRECTSOUNDFXCHORUS8 m_lpChorus;
LPDIRECTSOUNDFXCOMPRESSOR8 m_lpCompressor;
LPDIRECTSOUNDFXDISTORTION8 m_lpDistortion;
LPDIRECTSOUNDFXECHO8 m_lpEcho;
LPDIRECTSOUNDFXFLANGER8 m_lpFlanger;
LPDIRECTSOUNDFXGARGLE8 m_lpGargle;
LPDIRECTSOUNDFXPARAMEQ8 m_lpParamEq;
LPDIRECTSOUNDFXWAVESREVERB8 m_lpReverb;
DSFXChorus m_paramsChorus;
DSFXCompressor m_paramsCompressor;
DSFXDistortion m_paramsDistortion;
DSFXEcho m_paramsEcho;
DSFXFlanger m_paramsFlanger;
DSFXGargle m_paramsGargle;
DSFXParamEq m_paramsParamEq;
DSFXWavesReverb m_paramsReverb;
LPDIRECTSOUNDBUFFER8 m_lpDSB8;
IDirectMusicAudioPath8 * m_pAudioPath;
protected:
DSEFFECTDESC m_rgFxDesc[eNUM_SFX];
const GUID * m_rgRefGuids[eNUM_SFX];
LPVOID * m_rgPtrs[eNUM_SFX];
BOOL m_rgLoaded[eNUM_SFX];
DWORD m_dwNumFX;
HRESULT EnableGenericFX( GUID guidSFXClass, REFGUID rguidInterface, LPVOID * ppObj );
HRESULT LoadDefaultParamValues();
};
//-----------------------------------------------------------------------------
// defines and global variables
//-----------------------------------------------------------------------------
#define DEFAULT_SLIDER_MIN 1
#define DEFAULT_SLIDER_MAX 0x7FFFFF
#define DEFAULT_SLIDER_INC DEFAULT_SLIDER_MAX >> 11
CMusicManager * g_lpMusicManager = NULL;
CMusicSegment * g_pSegment = NULL;
CSoundFXManager * g_lpFXManager = NULL;
HINSTANCE g_hInst = NULL;
TCHAR g_strFileName[MAX_PATH];
DWORD g_dwCurrentFXType = eSFX_chorus;
HANDLE g_hDMusicMessageEvent = NULL;
const TCHAR * g_strFXNames[] = { "Chorus", "Compressor", "Distortion", "Echo",
"Flanger", "Gargle", "Param Eq", "Reverb" };
//-----------------------------------------------------------------------------
// 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 )
{
HWND hDlg = NULL;
BOOL bDone = FALSE;
int nExitCode;
HRESULT hr;
DWORD dwResult;
MSG msg;
g_hInst = hInst;
CoInitialize( NULL );
// Init the common control dll
InitCommonControls();
// Display the main dialog box.
hDlg = CreateDialog( hInst, MAKEINTRESOURCE(IDD_MAIN), NULL, MainDlgProc );
ShowWindow( hDlg, nCmdShow );
UpdateWindow( hDlg );
while( !bDone )
{
dwResult = MsgWaitForMultipleObjects( 1, &g_hDMusicMessageEvent,
FALSE, INFINITE, QS_ALLEVENTS );
switch( dwResult )
{
case WAIT_OBJECT_0 + 0:
// g_hDPMessageEvent is signaled, so there are
// DirectPlay messages available
if( FAILED( hr = ProcessDirectMusicMessages( hDlg ) ) )
{
DXTRACE_ERR( TEXT("ProcessDirectMusicMessages"), hr );
return FALSE;
}
break;
case WAIT_OBJECT_0 + 1:
// Windows messages are available
while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
{
if( !IsDialogMessage( hDlg, &msg ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
if( msg.message == WM_QUIT )
{
nExitCode = (int)msg.wParam;
bDone = TRUE;
DestroyWindow( hDlg );
}
}
break;
}
}
CoUninitialize();
return nExitCode;
}
//-----------------------------------------------------------------------------
// 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 IDOK:
case IDCANCEL:
PostQuitMessage( 0 );
break;
case IDC_BUTTON_OPEN:
OnOpenSoundFile( hDlg );
break;
case IDC_BUTTON_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_BUTTON_STOP:
if( g_pS
上一篇:
AudioDecoderMP3.cpp
下一篇:
全站仪三角高程测量在喀斯特溶蚀地貌施工复测中的运用