⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winawe32.c

📁 汇编语言编的关于SB-ADD的小程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************
*									     *
* 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 + -