亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? soundmanager.cpp

?? 此程序?yàn)榉植际教箍擞螒?
?? CPP
字號:
/*****************************************************************************
*                                                                             
*   SoundManager.cpp
*                                                                             
*   Electrical Engineering Faculty - Software Lab                             
*   Spring semester 1998                                                      
*                                                                             
*   Tanks game                                                                
*                                                                             
*   Module description: Manages the DirectSound objects.
*                       
*                                                                             
*   Authors: Eran Yariv - 28484475                                           
*            Moshe Zur  - 24070856                                           
*                                                                            
*                                                                            
*   Date: 23/09/98                                                           
*                                                                            
******************************************************************************/
#include "stdafx.h"
#include "mmsystem.h"
#include "SoundManager.h"

LPCSTR CSoundManager::m_aszSoundFileNames[] =
{
    "FIRE_BULLET", 
    "FIRE_SHELL", 
    "SHELL_EXPLODE",
    "MINE_EXPLODE",
    "TANK_EXPLODE",
    "DROP_BOMB",
    "PICK_BONUS",
    "GAME_OVER"
};

CSoundManager::CSoundManager() :
m_pDirectSound(NULL),
m_bMuteMode(FALSE)
{}

/*------------------------------------------------------------------------------

  Function: Init

  Purpose:  Initialize DirectSound objects.

  Input:    hWnd - Handle to main window

  Output:   Return TRUE if initializtion succeeded.

  Remarks:  
------------------------------------------------------------------------------*/
BOOL
CSoundManager::Init(HWND hWnd)
{
    ASSERT (! m_pDirectSound);
    if (m_pDirectSound)
        m_pDirectSound->Release();
    // Create DirectSound object
    if (DirectSoundCreate (NULL, &m_pDirectSound, NULL) == DS_OK)
    {
        // Set cooperative level for DirectSound. Normal means our
        // sounds will be silenced when our window loses input focus.
        if (m_pDirectSound->SetCooperativeLevel (hWnd, //AfxGetMainWnd()->m_hWnd,
                DSSCL_NORMAL) != DS_OK)
        {
            m_pDirectSound->Release();
            m_pDirectSound = NULL;
            return FALSE;
        }
    } else
    {
        m_pDirectSound = NULL;
        return FALSE;
    }
    // Load each wav files into DirectSound buffers:
    for (UINT i = 0; i < LAST_SOUND_TYPE; i++)
    {
        LoadWavToBuffer((SoundType)i);
    }

    return TRUE;
}

CSoundManager::~CSoundManager()
{
    // Release DirectSound interface (auto. release the sec. buffers):
    if (m_pDirectSound)
        m_pDirectSound->Release();
}

/*------------------------------------------------------------------------------

  Function: Play

  Purpose:  Play the 2nd buffer specified.

  Input:    ind - Index to 2nd buffer.

  Output:   None.

  Remarks:  Restarts to play buffer if called while buffer is playing.
------------------------------------------------------------------------------*/
void
CSoundManager::Play(CSoundManager::SoundType ind)
{
    // Check if play is anabled:
    if (m_bMuteMode || !m_pDirectSound)
        return;

    ASSERT (ind < LAST_SOUND_TYPE);
    if (ind >= LAST_SOUND_TYPE)
        return;

    // Play buffer(ind):
    if (m_aSoundBuffers[ind])
    {
//        m_aSoundBuffers[ind]->Stop();
        m_aSoundBuffers[ind]->SetCurrentPosition(0);
        m_aSoundBuffers[ind]->Play(0, 0, 0);
    }
}

/*------------------------------------------------------------------------------

  Function: LoadWavToBuffer

  Purpose:  Do all the dirty job - open the wav file and load it into its buffer.

  Input:    ind - Index to 2nd buffer.

  Output:   None.

  Remarks:  
------------------------------------------------------------------------------*/
void
CSoundManager::LoadWavToBuffer(CSoundManager::SoundType ind)
{
    HMMIO           hmmio       = NULL;
    MMCKINFO        mmckinfoParent;
    MMCKINFO        mmckinfoSubchunk;
    DWORD           dwFmtSize;
    LPCSTR          szFileName;
    HANDLE          hFormat     = NULL;
    WAVEFORMATEX   *pFormat     = NULL;
    HANDLE          hData       = NULL;
    HPSTR           lpData      = NULL;
    BYTE           *pbData      = NULL;
    BYTE           *pbData2     = NULL;
    DWORD           dwDataSize;
    WORD            wBlockSize;
    DWORD           dwLength;
    DWORD           dwLength2;

    m_aSoundBuffers[ind] = NULL;
    szFileName = m_aszSoundFileNames[ind];
    //
    //  Load WAVE files from resource
    //
    HANDLE      hRes    = NULL;
    HANDLE      hBuffer = NULL;
    LPSTR       lpRes   = NULL;
    HRSRC       hResInfo;
    HINSTANCE   hInst   = AfxGetInstanceHandle();
    MMIOINFO    mmioInfo;

    // Find the wav resource
    hResInfo = FindResource(hInst, (LPSTR)szFileName, "WAVE");
    if (!hResInfo)
    {
        TRACE("SoundManager: Failed to find resource file %s.\n", szFileName);
        return;
    }

    // Load the wav resource
    hRes = LoadResource(hInst, hResInfo);
    if (!hRes)
    {
        TRACE("SoundManager: Failed to load resource file %s.\n", szFileName);
        return;
    }

    // Lock the wav resource
    lpRes = (LPSTR)LockResource(hRes);
    if (!lpRes)
    {
        TRACE("SoundManager: Failed to lock resource.\n");
        goto CLEANUP;
    }

    //
    //  Read the wav file into memory:
    //

    // Prepare memory for reading using buffered I/O:
    ZeroMemory (&mmioInfo, sizeof(mmioInfo));
    mmioInfo.fccIOProc = FOURCC_MEM;
    mmioInfo.pchBuffer = (LPSTR)lpRes;
    mmioInfo.cchBuffer = SizeofResource(hInst, hResInfo);
    hBuffer = GlobalAlloc (LMEM_MOVEABLE, mmioInfo.cchBuffer);
    if (!hBuffer)
    {
        TRACE("SoundManager: Out of memory.\n");
        goto CLEANUP;
    }
    mmioInfo.pchBuffer = (LPSTR) GlobalLock(hBuffer);
    if (!mmioInfo.pchBuffer)
    {
        TRACE("SoundManager: Failed to lock memory for buffer.\n");
        goto CLEANUP;
    }
    memcpy (mmioInfo.pchBuffer, lpRes, mmioInfo.cchBuffer);

    if (!mmioInfo.cchBuffer)
    {
        TRACE("SoundManager: Failed to get resource size (Error=%d).\n", 
            GetLastError());
        goto CLEANUP;
    }

    hmmio = mmioOpen(NULL, &mmioInfo, MMIO_READWRITE /*| MMIO_ALLOCBUF*/);
    if(!hmmio)
    {
        TRACE("SoundManager: Failed to open file %s.\n", szFileName);
        return;
    }

    // Locate a 'RIFF' chunk with a 'WAVE' form type
    // to make sure it's a WAVE file.
    mmckinfoParent.fccType = mmioFOURCC('W', 'A', 'V', 'E');
    if (mmioDescend(hmmio, (LPMMCKINFO) &mmckinfoParent, NULL, MMIO_FINDRIFF))
    {
        TRACE("SoundManager: This is not a WAVE file.\n");
        goto CLEANUP;
    }

    // Now, find the format chunk (form type 'fmt '). It should be
    // a subchunk of the 'RIFF' parent chunk.
    mmckinfoSubchunk.ckid = mmioFOURCC('f', 'm', 't', ' ');
    if (mmioDescend(hmmio, &mmckinfoSubchunk, &mmckinfoParent,
        MMIO_FINDCHUNK))
    {
        TRACE("SoundManager: WAVE file is corrupted.\n");
        goto CLEANUP;
    }

    // Get the size of the format chunk, allocate and lock memory for it.
    dwFmtSize = mmckinfoSubchunk.cksize;
    hFormat = GlobalAlloc(LMEM_MOVEABLE, LOWORD(dwFmtSize));
    if (!hFormat)
    {
        TRACE("SoundManager: Out of memory.\n");
        goto CLEANUP;
    }
    pFormat = (WAVEFORMATEX *) GlobalLock(hFormat);
    if (!pFormat)
    {
        TRACE("SoundManager: Failed to lock memory for format chunk.\n");
        goto CLEANUP;
    }

    // Read the format chunk.
    if (mmioRead(hmmio, (HPSTR) pFormat, dwFmtSize) != (LONG) dwFmtSize)
    {
        TRACE("SoundManager: Failed to read format chunk.\n");
        goto CLEANUP;
    }

    // Make sure it's a PCM file.
    if (pFormat->wFormatTag != WAVE_FORMAT_PCM)
    {
        TRACE("SoundManager: The file is not a PCM file.\n");
        goto CLEANUP;
    }

    // Ascend out of the format subchunk.
    mmioAscend(hmmio, &mmckinfoSubchunk, 0);

    // Find the data subchunk.
    mmckinfoSubchunk.ckid = mmioFOURCC('d', 'a', 't', 'a');
    if (mmioDescend(hmmio, &mmckinfoSubchunk, &mmckinfoParent,
        MMIO_FINDCHUNK))
    {
        TRACE("SoundManager: WAVE file has no data chunk.\n");
        goto CLEANUP;
    }

    // Get the size of the data subchunk.
    dwDataSize = mmckinfoSubchunk.cksize;
    if (dwDataSize == 0L)
    {
        TRACE("SoundManager: The data chunk has no data.\n");
        goto CLEANUP;
    }


    // Save block alignment info for later use.
    wBlockSize = pFormat->nBlockAlign;


    // Allocate and lock memory for the waveform data.
    hData = GlobalAlloc(GMEM_MOVEABLE , dwDataSize );
                       // GMEM_SHARE is not needed on 32 bits
    if (!hData)
    {
        TRACE("SoundManager: Out of memory.\n");
        goto CLEANUP;
    }
    lpData = (char *)GlobalLock(hData);
    if (!lpData)
    {
        TRACE("SoundManager: Failed to lock memory for data chunk.\n");
        goto CLEANUP;
    }

    // Read the waveform data subchunk.
    if(mmioRead(hmmio, (HPSTR) lpData, dwDataSize) != (LONG) dwDataSize)
    {
        TRACE("SoundManager: Failed to read data chunk.\n");
        goto CLEANUP;
    }

    //
    //  Create DirectSoundBuffer:
    //

    DSBUFFERDESC dsbd;
    
    //DS Now create the secondary buffer
    memset(&dsbd, 0, sizeof(DSBUFFERDESC));
    dsbd.dwSize       = sizeof(DSBUFFERDESC);
    dsbd.dwFlags      = DSBCAPS_CTRLDEFAULT ;
    dsbd.dwBufferBytes= dwDataSize; // size of the audio data in bytes
    dsbd.lpwfxFormat  = pFormat;    
    if (m_pDirectSound->CreateSoundBuffer(
        &dsbd, 
        &m_aSoundBuffers[ind],
        NULL) != 0)
    {
        TRACE("SoundManager: Direct Sound Buffer Creation Failed\n");
        goto CLEANUP;
    }
    ASSERT (m_aSoundBuffers[ind]);    

    //
    //  Copy data to buffer:
    //

    if (m_aSoundBuffers[ind]->Lock
                  ( 0,                      // the position to start to lock
                    dwDataSize,             // number of bytes to lock
                    (PVOID *)&pbData,       // pbData will point to the memory area
                    &dwLength,              // number of bytes to use under pbData
                    (PVOID *)&pbData2,      // not used since no wrap around
                    &dwLength2,             // not used since no wrap around
                    0L) != DS_OK)
    {
        TRACE("SoundManager: Sound buffer Lock Failed.\n");
        goto CLEANUP;
    }

    // Now we can copy data into the area by, say, memcpy function
    memcpy(pbData, lpData, dwLength);

    // Unlock it
    if (m_aSoundBuffers[ind]->Unlock(pbData, dwLength, NULL, 0) != DS_OK)
    {
        TRACE("SoundManager: Sound buffer Unlock Failed.\n");
    }

CLEANUP:
    if (hRes)
        FreeResource(hRes);

    if (hFormat)
    {
        LocalUnlock( hFormat );
        LocalFree( hFormat );
    }
    if (hData)
    {
        GlobalUnlock( hData );
        GlobalFree( hData );
    }
    if (hBuffer)
    {
        GlobalUnlock( hBuffer );
        GlobalFree( hBuffer );
    }
    if (hmmio)
        mmioClose(hmmio, 0);

    return;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲电影视频在线| 亚洲国产中文字幕在线视频综合 | 在线播放/欧美激情| 欧美精品一区二区三区在线 | 亚洲免费观看高清完整| 久久激五月天综合精品| 欧美在线色视频| 综合久久久久久| 国产九色sp调教91| 日韩亚洲欧美成人一区| 亚洲一区二区免费视频| 91免费在线视频观看| 久久精品一区蜜桃臀影院| 美女爽到高潮91| 欧美日韩一级二级三级| 亚洲精品精品亚洲| 99久久久久久| 国产精品二区一区二区aⅴ污介绍| 蜜桃一区二区三区在线| 欧美日韩亚洲另类| 一二三区精品福利视频| 色综合色狠狠综合色| 中文字幕日韩一区| 福利一区二区在线| 久久久噜噜噜久噜久久综合| 麻豆91在线观看| 欧美成人三级在线| 蜜桃一区二区三区在线| 日韩一区二区精品葵司在线| 天天色天天操综合| 欧美电影影音先锋| 丝袜亚洲另类丝袜在线| 欧美日韩国产首页| 午夜私人影院久久久久| 欧美视频一区二区三区四区| 亚洲午夜精品久久久久久久久| 91免费观看视频在线| 一区二区中文字幕在线| 99久久综合99久久综合网站| 国产欧美日韩另类一区| 丰满白嫩尤物一区二区| 亚洲午夜视频在线| 久久久久久久久免费| 久久精品久久99精品久久| 日韩欧美中文一区| 日本美女视频一区二区| 欧美一级片在线| 久久99精品久久久| 精品国产91亚洲一区二区三区婷婷| 免费不卡在线观看| 精品国产一区二区亚洲人成毛片 | 亚洲一区二区在线观看视频| 色狠狠一区二区| 亚洲h在线观看| 欧美一区二区三区电影| 激情文学综合插| 国产人成亚洲第一网站在线播放| 成人av在线资源网站| 一区二区三区四区乱视频| 欧美精选在线播放| 麻豆精品国产91久久久久久| 国产亚洲成aⅴ人片在线观看| 成人在线一区二区三区| 亚洲精品成人天堂一二三| 欧美日韩电影在线| 精品一区二区三区不卡| 欧美国产欧美综合| 欧美午夜影院一区| 久久电影国产免费久久电影| 亚洲国产精品ⅴa在线观看| 91美女片黄在线观看91美女| 亚洲电影第三页| 久久影院电视剧免费观看| 成人动漫精品一区二区| 亚洲福利一区二区三区| 久久综合狠狠综合久久综合88| 成人精品视频一区| 亚洲一区二区三区不卡国产欧美| 88在线观看91蜜桃国自产| 国产精品一区二区三区网站| 亚洲青青青在线视频| 这里是久久伊人| 成人黄色在线看| 丝袜亚洲另类欧美| 国产精品视频在线看| 欧美日韩一本到| 国产成人av一区二区三区在线 | 亚洲精选视频在线| 日韩欧美一区中文| 99国产欧美久久久精品| 日韩av二区在线播放| 国产精品美女久久久久久| 欧美久久婷婷综合色| 成人av资源下载| 蜜臀av亚洲一区中文字幕| **性色生活片久久毛片| 日韩一区二区免费在线电影| 成人av免费在线观看| 老司机精品视频在线| 亚洲精品伦理在线| 久久久99精品久久| 欧美剧情电影在线观看完整版免费励志电影| 精品一区二区免费视频| 亚洲成av人片一区二区| 欧美精彩视频一区二区三区| 9191成人精品久久| 色综合天天综合网天天看片| 韩国三级中文字幕hd久久精品| 一区二区三区中文在线| 久久久www免费人成精品| 精品视频免费在线| gogo大胆日本视频一区| 精品一区二区三区免费视频| 一区二区三区不卡视频在线观看| 久久一二三国产| 5月丁香婷婷综合| 欧洲亚洲国产日韩| 成人黄色777网| 国产乱子伦视频一区二区三区| 日韩国产欧美一区二区三区| 亚洲美女淫视频| 国产精品色眯眯| 久久免费视频一区| 欧美一级午夜免费电影| 在线观看日产精品| 成人av在线电影| 国产美女精品人人做人人爽| 男女男精品视频| 午夜av电影一区| 亚洲福利视频导航| 亚洲日本在线观看| 国产精品天美传媒| 国产三级三级三级精品8ⅰ区| 亚洲成av人**亚洲成av**| 国产99精品在线观看| 久久 天天综合| 精品美女一区二区| 国产精品美日韩| 99国产欧美久久久精品| 大白屁股一区二区视频| 韩国视频一区二区| 精品一区二区三区蜜桃| 免费黄网站欧美| 日本最新不卡在线| 日韩国产精品久久久| 亚洲福中文字幕伊人影院| 亚洲综合在线免费观看| 《视频一区视频二区| 国产精品成人一区二区艾草 | 欧美精品丝袜中出| 欧美影院一区二区| 色久优优欧美色久优优| 色综合天天综合在线视频| 91麻豆蜜桃一区二区三区| 91麻豆高清视频| 色综合久久久网| 在线视频中文字幕一区二区| 91福利精品视频| 欧美日精品一区视频| 4438x成人网最大色成网站| 欧美精品三级日韩久久| 欧美一三区三区四区免费在线看| 7777精品伊人久久久大香线蕉完整版 | 国产午夜精品久久久久久免费视| 久久综合九色综合97婷婷 | 97精品久久久午夜一区二区三区| 成人国产精品免费观看| 91麻豆国产在线观看| 91浏览器在线视频| 色噜噜夜夜夜综合网| 欧洲在线/亚洲| 91精品视频网| 亚洲精品一区二区三区香蕉| 国产亚洲综合色| 中文字幕视频一区| 亚洲一级电影视频| 日本伊人精品一区二区三区观看方式| 青娱乐精品在线视频| 激情偷乱视频一区二区三区| 丰满亚洲少妇av| 色8久久人人97超碰香蕉987| 欧美日韩国产免费| 欧美成人精精品一区二区频| 国产清纯白嫩初高生在线观看91| 国产女主播视频一区二区| 最新高清无码专区| 亚洲高清免费视频| 国产在线视频不卡二| av电影天堂一区二区在线| 欧美亚洲一区二区在线| 日韩欧美国产午夜精品| 国产精品丝袜在线| 亚洲制服丝袜一区| 久久成人免费网| 91视频国产资源| 欧美一区二区三区视频| 国产欧美精品在线观看| 亚洲国产一区二区三区 | 亚洲成a人v欧美综合天堂下载 | 日韩电影在线一区|