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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dswave.cpp

?? 赤壁之戰的游戲源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/*==========================================================================
 *
 *  Copyright (C) 1995 Microsoft Corporation. All Rights Reserved.
 *
 *  File:               dswave.cpp
 *  Content:    Wave library routines.
 *
 *      This file is used for loading/saving waves, and reading and
 *      writing waves in smaller blocks.
 *      Uses WaveOpenFile, WaveReadFile and WaveCloseReadFile for
 *      single block access to reading wave files.
 *      Uses WaveCreateFile, WaveWriteFile, WaveCloseWriteFile for
 *      single block access for writing  wave files.
 *      Uses WaveLoadFile to load a whole wave file into memory.
 *      Uses WaveSaveFile to save a whole wave file from memory.
 *
 ***************************************************************************/

/* PROTOTYPES */
#include "stdafx.h"
#include <windowsx.h>
#include <mmsystem.h>
#include <dsound.h>
#include "dswave.h"
#include "Assert.h"


/* ROUTINES */
/* -------------------------------------------------------*/

/* This function will open a wave input file and prepare it for reading,
 * so the data can be easily
 * read with WaveReadFile. Returns 0 if successful, the error code if not.
 *      pszFileName - Input filename to load.
 *      phmmioIn    - Pointer to handle which will be used
 *          for further mmio routines.
 *      ppwfxInfo   - Ptr to ptr to WaveFormatEx structure
 *          with all info about the file.                        
 *      
*/
int WaveOpenFile(
        char *pszFileName,                              // (IN)
        HMMIO *phmmioIn,                                // (OUT)
        WAVEFORMATEX **ppwfxInfo,                       // (OUT)
        MMCKINFO *pckInRIFF                             // (OUT)
                        )
{
        HMMIO           hmmioIn;
        MMCKINFO        ckIn;           // chunk info. for general use.
        PCMWAVEFORMAT   pcmWaveFormat;  // Temp PCM structure to load in.       
        WORD            cbExtraAlloc;   // Extra bytes for waveformatex 
        int             nError;         // Return value.


        // Initialization...
        *ppwfxInfo = NULL;
        nError = 0;
        hmmioIn = NULL;
        
        if ((hmmioIn = mmioOpen(pszFileName, NULL, MMIO_ALLOCBUF | MMIO_READ)) == NULL)
                {
                nError = ER_CANNOTOPEN;
                goto ERROR_READING_WAVE;
                }

        if ((nError = (int)mmioDescend(hmmioIn, pckInRIFF, NULL, 0)) != 0)
                {
                goto ERROR_READING_WAVE;
                }


        if ((pckInRIFF->ckid != FOURCC_RIFF) || (pckInRIFF->fccType != mmioFOURCC('W', 'A', 'V', 'E')))
                {
                nError = ER_NOTWAVEFILE;
                goto ERROR_READING_WAVE;
                }
                        
        /* Search the input file for for the 'fmt ' chunk.     */
    ckIn.ckid = mmioFOURCC('f', 'm', 't', ' ');
    if ((nError = (int)mmioDescend(hmmioIn, &ckIn, pckInRIFF, MMIO_FINDCHUNK)) != 0)
                {
                goto ERROR_READING_WAVE;                
                }
                                        
        /* Expect the 'fmt' chunk to be at least as large as <PCMWAVEFORMAT>;
    * if there are extra parameters at the end, we'll ignore them */
    
    if (ckIn.cksize < (long) sizeof(PCMWAVEFORMAT))
                {
                nError = ER_NOTWAVEFILE;
                goto ERROR_READING_WAVE;
                }
                                                                                                                        
        /* Read the 'fmt ' chunk into <pcmWaveFormat>.*/     
    if (mmioRead(hmmioIn, (HPSTR) &pcmWaveFormat, (long) sizeof(pcmWaveFormat)) != (long) sizeof(pcmWaveFormat))
                {
                nError = ER_CANNOTREAD;
                goto ERROR_READING_WAVE;
                }
                                                        

        // Ok, allocate the waveformatex, but if its not pcm
        // format, read the next word, and thats how many extra
        // bytes to allocate.
        if (pcmWaveFormat.wf.wFormatTag == WAVE_FORMAT_PCM)
                cbExtraAlloc = 0;                               
                                                        
        else
                {
                // Read in length of extra bytes.
                if (mmioRead(hmmioIn, (LPSTR) &cbExtraAlloc,
                        (long) sizeof(cbExtraAlloc)) != (long) sizeof(cbExtraAlloc))
                        {
                        nError = ER_CANNOTREAD;
                        goto ERROR_READING_WAVE;
                        }

                }
                                                        
        // Ok, now allocate that waveformatex structure.
        if ((*ppwfxInfo = (struct tWAVEFORMATEX *)GlobalAlloc(GMEM_FIXED, sizeof(WAVEFORMATEX)+cbExtraAlloc)) == NULL)
                {
                nError = ER_MEM;
                goto ERROR_READING_WAVE;
                }

        // Copy the bytes from the pcm structure to the waveformatex structure
        memcpy(*ppwfxInfo, &pcmWaveFormat, sizeof(pcmWaveFormat));
        (*ppwfxInfo)->cbSize = cbExtraAlloc;

        // Now, read those extra bytes into the structure, if cbExtraAlloc != 0.
        if (cbExtraAlloc != 0)
                {
                if (mmioRead(hmmioIn, (LPSTR) (((BYTE*)&((*ppwfxInfo)->cbSize))+sizeof(cbExtraAlloc)),
                        (long) (cbExtraAlloc)) != (long) (cbExtraAlloc))
                        {
                        nError = ER_NOTWAVEFILE;
                        goto ERROR_READING_WAVE;
                        }
                }

        /* Ascend the input file out of the 'fmt ' chunk. */                                                            
        if ((nError = mmioAscend(hmmioIn, &ckIn, 0)) != 0)
                {
                goto ERROR_READING_WAVE;

                }
        

        goto TEMPCLEANUP;               

ERROR_READING_WAVE:
        if (*ppwfxInfo != NULL)
                {
                GlobalFree(*ppwfxInfo);
                *ppwfxInfo = NULL;
                }               

        if (hmmioIn != NULL)
        {
        mmioClose(hmmioIn, 0);
                hmmioIn = NULL;
                }
        
TEMPCLEANUP:
        *phmmioIn = hmmioIn;

        return(nError);

}

/*      This routine has to be called before WaveReadFile as it searchs for the chunk to descend into for
        reading, that is, the 'data' chunk.  For simplicity, this used to be in the open routine, but was
        taken out and moved to a separate routine so there was more control on the chunks that are before
        the data chunk, such as 'fact', etc... */

int WaveStartDataRead(
                                        HMMIO *phmmioIn,
                                        MMCKINFO *pckIn,
                                        MMCKINFO *pckInRIFF
                                        )
{
        int                     nError;

        nError = 0;
        
        // Do a nice little seek...
        if ((nError = mmioSeek(*phmmioIn, pckInRIFF->dwDataOffset + sizeof(FOURCC), SEEK_SET)) == -1)
                {
                Assert(FALSE);
                }

        nError = 0;
        //      Search the input file for for the 'data' chunk.
        pckIn->ckid = mmioFOURCC('d', 'a', 't', 'a');
        if ((nError = mmioDescend(*phmmioIn, pckIn, pckInRIFF, MMIO_FINDCHUNK)) != 0)
                {
                goto ERROR_READING_WAVE;
                }

        goto CLEANUP;

ERROR_READING_WAVE:

CLEANUP:        
        return(nError);
}


/*      This will read wave data from the wave file.  Makre sure we're descended into
        the data chunk, else this will fail bigtime!
        hmmioIn         - Handle to mmio.
        cbRead          - # of bytes to read.   
        pbDest          - Destination buffer to put bytes.
        cbActualRead- # of bytes actually read.

                

*/


int WaveReadFile(
                HMMIO hmmioIn,                          // IN
                UINT cbRead,                            // IN           
                BYTE *pbDest,                           // IN
                MMCKINFO *pckIn,                        // IN.
                UINT *cbActualRead                      // OUT.
                
                )
{

        MMIOINFO    mmioinfoIn;         // current status of <hmmioIn>
        int                     nError;
        UINT                    cT, cbDataIn, uCopyLength;

        nError = 0;

        if (nError = mmioGetInfo(hmmioIn, &mmioinfoIn, 0) != 0)
                {
                goto ERROR_CANNOT_READ;
                }
                                
        cbDataIn = cbRead;
        if (cbDataIn > pckIn->cksize) 
                cbDataIn = pckIn->cksize;       

        pckIn->cksize -= cbDataIn;
        
        for (cT = 0; cT < cbDataIn; )
                {
                /* Copy the bytes from the io to the buffer. */
                if (mmioinfoIn.pchNext == mmioinfoIn.pchEndRead)
                        {
            if ((nError = mmioAdvance(hmmioIn, &mmioinfoIn, MMIO_READ)) != 0)
                                {
                goto ERROR_CANNOT_READ;
                                } 
            if (mmioinfoIn.pchNext == mmioinfoIn.pchEndRead)
                                {
                                nError = ER_CORRUPTWAVEFILE;
                goto ERROR_CANNOT_READ;
                                }
                        }
                        
                // Actual copy.
                uCopyLength = (UINT)(mmioinfoIn.pchEndRead - mmioinfoIn.pchNext);
                if((cbDataIn - cT) < uCopyLength )
                        uCopyLength = cbDataIn - cT;
                memcpy( (BYTE*)(pbDest+cT), (BYTE*)mmioinfoIn.pchNext, uCopyLength );
                cT += uCopyLength;
                mmioinfoIn.pchNext += uCopyLength;
                }

        if ((nError = mmioSetInfo(hmmioIn, &mmioinfoIn, 0)) != 0)
                {
                goto ERROR_CANNOT_READ;
                }

        *cbActualRead = cbDataIn;
        goto FINISHED_READING;

ERROR_CANNOT_READ:
        *cbActualRead = 0;

FINISHED_READING:
        return(nError);

}

/*      This will close the wave file openned with WaveOpenFile.  
        phmmioIn - Pointer to the handle to input MMIO.
        ppwfxSrc - Pointer to pointer to WaveFormatEx structure.

        Returns 0 if successful, non-zero if there was a warning.

*/
int WaveCloseReadFile(
                        HMMIO *phmmio,                                  // IN
                        WAVEFORMATEX **ppwfxSrc                 // IN
                        )
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
69堂国产成人免费视频| 中文字幕中文字幕一区二区| 精品国产伦一区二区三区免费 | 精品欧美乱码久久久久久1区2区 | 精品在线亚洲视频| 国产成人亚洲精品青草天美 | 日韩av二区在线播放| 久久99热这里只有精品| 国产一区二区免费看| 一本大道久久a久久精品综合| 欧美精品色综合| 久久九九久精品国产免费直播| 亚洲精品高清在线| 精油按摩中文字幕久久| 91丨porny丨户外露出| 欧美电影免费观看高清完整版| 欧美国产禁国产网站cc| 视频一区二区三区入口| 处破女av一区二区| 欧美一区二区女人| 亚洲国产综合人成综合网站| 国产主播一区二区三区| 欧美午夜精品免费| 国产精品成人免费精品自在线观看| 亚洲国产精品一区二区久久恐怖片 | 欧美日韩在线亚洲一区蜜芽| 国产日韩欧美一区二区三区综合| 亚洲国产精品一区二区久久 | 精品国产乱码久久久久久夜甘婷婷| 亚洲日本在线a| 国产在线不卡一卡二卡三卡四卡| 欧美三级蜜桃2在线观看| 中文字幕二三区不卡| 精品一区二区三区日韩| 欧美精品丝袜中出| 亚洲午夜久久久久中文字幕久| 成人夜色视频网站在线观看| 日韩免费电影网站| 午夜精品免费在线| 色综合久久综合网| 自拍偷拍国产精品| 91欧美激情一区二区三区成人| 久久久99精品免费观看| 精品午夜久久福利影院| 日韩一区二区三| 亚洲二区视频在线| 欧美视频精品在线| 亚洲电影一级黄| 91福利视频网站| 亚洲另类春色校园小说| 91小视频免费看| 亚洲男人天堂av网| 色狠狠桃花综合| 一区二区在线看| 在线免费观看日韩欧美| 亚洲亚洲精品在线观看| 在线看日韩精品电影| 精品国产伦理网| 丁香亚洲综合激情啪啪综合| 国产精品萝li| 欧美在线观看禁18| 日本欧美在线观看| 日韩精品一区二区在线观看| 精品亚洲成av人在线观看| 精品国产污污免费网站入口| 国产福利91精品一区二区三区| 欧美一区二区福利在线| 韩国欧美国产一区| 国产精品久久久一本精品| 91蜜桃传媒精品久久久一区二区| 亚洲人xxxx| 91精品国产综合久久精品app| 秋霞电影一区二区| 久久久国产综合精品女国产盗摄| 国产毛片精品视频| 亚洲久草在线视频| 91精品国产综合久久精品麻豆 | 久久99国产精品成人| 久久久91精品国产一区二区精品 | 欧美精品一区二区三区视频| 国产精品乡下勾搭老头1| 自拍av一区二区三区| 欧美日本韩国一区| 国产乱一区二区| 一区二区三区免费看视频| 欧美精品一二三| 国产mv日韩mv欧美| 一区二区三区资源| 久久奇米777| 欧美日韩一本到| 国产一区二区三区免费在线观看| 久久综合九色综合欧美就去吻| 成人av在线网| 亚洲精品videosex极品| 日韩精品中文字幕在线一区| 91丨九色丨国产丨porny| 九色|91porny| 亚洲成人一二三| 国产精品国产三级国产专播品爱网| 666欧美在线视频| 91亚洲午夜精品久久久久久| 久久99精品久久久久婷婷| 夜夜嗨av一区二区三区网页| 2017欧美狠狠色| 欧美日韩免费不卡视频一区二区三区| 国产在线精品一区二区夜色| 亚洲日本护士毛茸茸| 精品国产乱码久久久久久久久| 色系网站成人免费| 国产.欧美.日韩| 久久精品国产久精国产| 午夜视频在线观看一区| 亚洲欧美综合在线精品| 久久综合中文字幕| 在线播放一区二区三区| 色欧美片视频在线观看在线视频| 国产99久久久国产精品潘金| 激情深爱一区二区| 麻豆91精品视频| 亚洲成人免费观看| 亚洲在线一区二区三区| 亚洲图片你懂的| 国产婷婷一区二区| 精品久久久久香蕉网| 69堂成人精品免费视频| 成人国产电影网| 国产综合色视频| 激情综合网av| 国产在线精品一区在线观看麻豆| 蜜臀精品一区二区三区在线观看| 日韩精品电影在线| 日韩成人一级片| 美女脱光内衣内裤视频久久影院| 亚洲综合丝袜美腿| 亚洲第一在线综合网站| 午夜成人免费视频| 日韩电影一区二区三区四区| 视频一区二区中文字幕| 同产精品九九九| 免费观看在线色综合| 蜜臀精品一区二区三区在线观看 | 亚洲欧美另类小说| 亚洲男人电影天堂| 午夜视频在线观看一区二区三区| 亚洲夂夂婷婷色拍ww47| 午夜激情一区二区三区| 欧美96一区二区免费视频| 麻豆精品久久精品色综合| 国产自产高清不卡| 成人精品视频一区| 91老师国产黑色丝袜在线| av动漫一区二区| 岛国一区二区三区| 一本久久a久久精品亚洲| 欧美在线一二三四区| 6080国产精品一区二区| 欧美成人国产一区二区| 欧美激情中文字幕| 亚洲视频一区二区在线| 免费的国产精品| 日韩成人午夜精品| 国产精品99久久久久久久vr| 91影院在线免费观看| 欧美一卡2卡三卡4卡5免费| 精品国产乱码久久久久久1区2区| 国产女主播视频一区二区| 欧美国产日韩一二三区| 亚洲精选在线视频| 三级影片在线观看欧美日韩一区二区 | 亚洲精品一区二区三区福利| 国产欧美日韩中文久久| 天堂久久一区二区三区| 成人综合在线观看| 精品久久国产老人久久综合| 亚洲一二三四区| 99精品在线观看视频| 久久久.com| 国产在线精品一区二区三区不卡| 欧美日韩在线不卡| 亚洲欧美一区二区三区久本道91| 韩国理伦片一区二区三区在线播放| 欧美日韩高清在线播放| 亚洲天堂av一区| 成人国产精品免费观看动漫| 久久久久免费观看| 精品一区二区国语对白| 日韩视频123| 日韩一区精品字幕| 欧美日韩黄视频| 一区二区高清在线| 色综合天天综合网国产成人综合天 | 国产性天天综合网| 蜜桃av一区二区在线观看| 欧美日韩精品是欧美日韩精品| 亚洲综合激情另类小说区| 91丝袜国产在线播放| 亚洲欧美日韩久久| 在线看国产日韩| 亚洲一区二区在线播放相泽| 欧洲人成人精品|