📄 winawe32.c
字号:
/*****************************************************************************
* *
* WINAWE32 Sample demo for Sound Blaster Advanced WavEffects *
* *
* (C) Copyright Creative Technology Ltd. 1992-94. All rights reserved *
* worldwide. *
* *
* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY *
* KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE *
* IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR *
* PURPOSE. *
* *
* You have a royalty-free right to use, modify, reproduce and *
* distribute the Sample Files (and/or any modified version) in *
* any way you find useful, provided that you agree to *
* the Creative's Software Licensing Aggreement and you also agree that *
* Creative has no warranty obligations or liability for any Sample Files. *
* *
******************************************************************************/
/*****************************************************************************\
* File name : WINAWE32.C *
* *
* Programmer : Cheng Kok Hoong *
* Creative Technology Ltd, 1994. All rights reserved. *
* *
* Version : 1.1.1 *
* *
* WINAWE32 is a sample application that uses SB AWE32's AWEMAN.DLL *
* and AWEGUI.DLL *
* *
******************************************************************************/
#include "windows.h"
#include "mmsystem.h"
#include "winawe32.h"
#include "awe_dll.h"
#include "awe_api.h"
#include "mci.h"
#include "commdlg.h"
#include "string.h"
BOOL InitAWEDLL(void);
BOOL OpenAWEMAN(void);
BOOL CloseAWEMAN(void);
BOOL FetchMIDIFile(HWND);
BOOL FetchUserBankFile(HWND);
void SetReverb(WORD);
void SetChorus(WORD);
BOOL bIsMIDIPlaying = FALSE;
BOOL bIsUserBankLoaded = FALSE;
typedef LRESULT (FAR PASCAL *LPCONTROLPANEL)(LPCSTR, BOOL);
typedef LRESULT (FAR PASCAL *LPCONTROLLERBOB)(LPCSTR, BOOL);
LPCONTROLPANEL lpControlPanel = NULL;
LPCONTROLLERBOB lpControllerBob = NULL;
LPFNAWEMANAGER lpAWEManager = NULL;
HANDLE hInst;
HANDLE hAWEGUIDLL = NULL;
HANDLE hAWEMANDLL = NULL;
AWEHANDLE hAWEHandle = NULL;
WORD wMCIDeviceID = 0;
HWND hWndDemo = NULL;
char szFileName[128];
char szBareName[12];
char szUserBankName[128];
HMIDIOUT hMIDIOut;
#define USER_BANK_NUM 1
int PASCAL WinMain(HANDLE hInstance,
HANDLE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
if (hPrevInstance)
return FALSE;
else
if (!InitApplication(hInstance))
return (FALSE);
if (!InitInstance(hInstance, nCmdShow))
return (FALSE);
if (!InitAWEDLL() )
return FALSE;
if ( !OpenAWEMAN() ) {
MessageBox(NULL, "Unable to open AWEMAN\0", "Error\0", MB_OK|MB_ICONHAND);
return FALSE;
}
while (GetMessage(&msg, NULL, NULL, NULL) ) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
}
BOOL InitApplication(HANDLE hInstance)
{
WNDCLASS wc;
wc.style = NULL;
wc.lpfnWndProc = MainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, (LPCSTR)IDI_ICON1);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = "WinAWE32Menu";
wc.lpszClassName = "WinAWE32Class";
return (RegisterClass(&wc));
}
BOOL InitInstance(HANDLE hInstance, int nCmdShow)
{
HWND hWnd;
RECT rectWindow;
hInst = hInstance;
hWnd = CreateWindow(
"WinAWE32Class",
"WinAWE32 Sample Demo",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
if (!hWnd)
return (FALSE);
// Resize the Window
#define WIN_WIDTH 400
#define WIN_HEIGHT 100
GetWindowRect(hWnd, &rectWindow);
MoveWindow(hWnd, rectWindow.left, rectWindow.top, WIN_WIDTH, WIN_HEIGHT, TRUE);
ShowWindow(hWnd, nCmdShow);
hWndDemo = hWnd;
return (TRUE);
}
long CALLBACK __export MainWndProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
CParamObject cObject;
CBufferObject cBufferObj;
DWORD dwMaxDRAM, dwAvailableDRAM;
char ach[128];
HCURSOR hCursor;
cObject.m_SBankIndex = 0;
cObject.m_UBankIndex = 0;
cObject.m_InstrIndex = 0;
cObject.m_TypeIndex = REVERB_CHORUS;
cObject.m_SubIndex = REVERB;
switch (message)
{
case WM_COMMAND: {
switch ( wParam ) {
case ID_CLEAR_BANK: {
if ( bIsUserBankLoaded == TRUE ) {
if ( lpAWEManager(hAWEHandle, AWE_CLEAR_USER_BANK, USER_BANK_NUM, NULL) != AWE_NO_ERR )
MessageBox(NULL, "Error clearing user bank\0", "Error\0", MB_OK|MB_ICONHAND);
else {
MessageBox(NULL, "User Bank 1 unloaded\0", "Info\0", MB_OK);
bIsUserBankLoaded = FALSE;
}
}
}
break;
case ID_STOP_MIDI:
if ( bIsMIDIPlaying == TRUE ) {
if ( MCIEndPlay(wMCIDeviceID) )
MessageBox(NULL, "Error stop playing MCISEQ.\0", "Error.\0", MB_OK|MB_ICONSTOP);
if ( MCICloseDevice(wMCIDeviceID) )
MessageBox(NULL, "Error closing MCISEQ.\0", "Error.\0", MB_OK|MB_ICONSTOP);
bIsMIDIPlaying = FALSE;
}
break;
case ID_LOAD_USERBANK:
if ( FetchUserBankFile(hWnd) ) {
// Now load the bank into user bank 1... not enough
// time to do a flexible user bank dialog box
cBufferObj.m_Size = 128; // Size of string buffer
cBufferObj.m_Flag = OPER_FILE;
cBufferObj.m_Buffer = (LPSTR)szUserBankName;
hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
if ( lpAWEManager(hAWEHandle,
AWE_LOAD_USER_BANK,
(LPARAM)USER_BANK_NUM,
(LPARAM)(LPSTR)&cBufferObj) == AWE_NO_ERR ) {
MessageBox(NULL, "User Bank 1 load successful\0",
"Info\0",
MB_OK);
bIsUserBankLoaded = TRUE;
}
else {
MessageBox(NULL, "User Bank load failed.\0",
"Error\0",
MB_OK);
}
SetCursor(hCursor);
}
break;
case ID_SETTINGS_TRIGGERME:
DialogBox(hInst, /* current instance */
"TriggerMe", /* resource to use */
hWnd, /* parent handle */
TriggerMe); /* About() instance address */
break;
case ID_FILE_OPEN:
if ( FetchMIDIFile(hWnd) ) {
if ( bIsMIDIPlaying == TRUE ) {
MCIEndPlay(wMCIDeviceID);
MCICloseDevice(wMCIDeviceID);
}
if ( MCIOpenDevice(&wMCIDeviceID, szFileName) ) {
MessageBox(NULL, "Error in opening MCI.\0", "Error\0", MB_OK|MB_ICONSTOP);
break;
}
else {
MCIPlayDevice(hWnd, wMCIDeviceID);
bIsMIDIPlaying = TRUE;
// Update main windows's title to reflect the currently playing MIDI file
SetWindowText(hWnd, szBareName);
}
}
break;
case ID_QUIT:
PostMessage(hWnd, WM_DESTROY, NULL, NULL); break;
case IDM_ABOUT:
DialogBox(hInst, /* current instance */
"AboutBox", /* resource to use */
hWnd, /* parent handle */
About); /* About() instance address */
break;
case ID_QUERY_SYNTH: {
CBufferObject buffer;
char voila;
enum SBANK sBank;
buffer.m_Size = sizeof(voila);
buffer.m_Buffer = (LPSTR)&voila;
lpAWEManager(hAWEHandle,
AWE_GET_SYN_BANK,
(LPARAM)(LPBUFFEROBJECT)&buffer,
0L);
sBank = (enum SBANK)buffer.m_Flag;
if ( sBank == GENERAL_MIDI )
MessageBox(NULL, "Current synthesizer mode is General MIDI\0",
"Info\0",
MB_OK);
if ( sBank == ROLAND_GS )
MessageBox(NULL, "Current synthesizer mode is GS\0",
"Info\0",
MB_OK);
if ( sBank == MT_32 )
MessageBox(NULL, "Current synthesizer mode is MT-32\0",
"Info\0",
MB_OK);
}
break;
case ID_QUERY_DRAM:
if ( lpAWEManager(hAWEHandle,
AWE_QUERY_DRAM_SIZE,
(LPARAM)(LPSTR)&dwMaxDRAM,
(LPARAM)(LPSTR)&dwAvailableDRAM) == AWE_NO_ERR ) {
(void)wsprintf(ach, "TotalDRAM = %lu bytes, AvailableDRAM = %lu bytes\0", dwMaxDRAM*2, dwAvailableDRAM*2);
MessageBox(NULL, ach, "DRAM Info\0", MB_OK);
}
break;
case ID_GUI_CONTROLPANEL: {
LRESULT result = lpControlPanel("Peek-A-Boo !\0", FALSE);
if ( result != AWE_NO_ERR ) {
switch ( result ) {
case AWE_ERR_DLL_BUSY:
MessageBox(NULL, "DLL Busy\0", "Error\0", MB_OK);
break;
case AWE_ERR_SYSMEM_INSUFFICIENT:
MessageBox(NULL,"Insufficient Memory\0", "Error\0", MB_OK);
break;
case AWE_ERR_ACTIVATE_BOB:
MessageBox(NULL,"BOB already activated\0", "Error\0", MB_OK);
break;
case AWE_ERR_DEVICE_DRV_INVALID:
MessageBox(NULL,"Invalid driver\0", "Error\0", MB_OK);
break;
}
}
break;
}
case ID_GUI_CONTROLLER: {
LRESULT result = lpControllerBob("Peek-A-Boo Two !\0", FALSE);
if ( result != AWE_NO_ERR ) {
switch ( result ) {
case AWE_ERR_DLL_BUSY:
MessageBox(NULL,"DLL Busy\0", "Error\0", MB_OK);
break;
case AWE_ERR_SYSMEM_INSUFFICIENT:
MessageBox(NULL,"Insufficient Memory\0", "Error\0", MB_OK);
break;
case AWE_ERR_ACTIVATE_BOB:
MessageBox(NULL,"BOB already activated\0", "Error\0", MB_OK);
break;
case AWE_ERR_DEVICE_DRV_INVALID:
MessageBox(NULL,"Invalid driver\0", "Error\0", MB_OK);
break;
}
}
break;
}
case ID_MISC_SYNTHBANK_GM:
hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
if ( lpAWEManager(hAWEHandle, AWE_SELECT_SYN_BANK, GENERAL_MIDI, NULL) == AWE_NO_ERR )
MessageBox(NULL, "Set synthesizer mode to General MIDI successful.\0", "Info\0", MB_OK);
else
MessageBox(NULL, "Set GM failed.\0", "Error\0", MB_OK);
SetCursor(hCursor);
break;
case ID_MISC_SYNTHBANK_GS:
hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
if ( lpAWEManager(hAWEHandle, AWE_SELECT_SYN_BANK, ROLAND_GS, NULL) == AWE_NO_ERR )
MessageBox(NULL, "Set synthesizer mode to GS successful.\0", "Info\0", MB_OK);
else
MessageBox(NULL, "Set GS failed.\0", "Error\0", MB_OK);
SetCursor(hCursor);
break;
case ID_MISC_SYNTHBANK_MT32:
hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
if ( lpAWEManager(hAWEHandle, AWE_SELECT_SYN_BANK, MT_32, NULL) == AWE_NO_ERR )
MessageBox(NULL, "Set synthesizer mode to MT-32 successful.\0", "Info\0", MB_OK);
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -