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

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

?? wavread.cpp

?? 一款C++小游戲的源代碼
?? CPP
字號(hào):
//-----------------------------------------------------------------------------
// File: WavRead.cpp
//
// Desc: Wave file support for loading and playing Wave files using DirectSound 
//       buffers.
//
// Copyright (c) 1999 Microsoft Corp. All rights reserved.
//-----------------------------------------------------------------------------
#include <windows.h>
#include "WavRead.h"




//-----------------------------------------------------------------------------
// Defines, constants, and global variables
//-----------------------------------------------------------------------------
#define SAFE_DELETE(p)  { if(p) { delete (p);     (p)=NULL; } }
#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }




//-----------------------------------------------------------------------------
// Name: ReadMMIO()
// Desc: Support function for reading from a multimedia I/O stream
//-----------------------------------------------------------------------------
HRESULT ReadMMIO( HMMIO hmmioIn, MMCKINFO* pckInRIFF, WAVEFORMATEX** ppwfxInfo )
{
    MMCKINFO        ckIn;           // chunk info. for general use.
    PCMWAVEFORMAT   pcmWaveFormat;  // Temp PCM structure to load in.       

    *ppwfxInfo = NULL;

    if( ( 0 != mmioDescend( hmmioIn, pckInRIFF, NULL, 0 ) ) )
        return E_FAIL;

    if( (pckInRIFF->ckid != FOURCC_RIFF) ||
        (pckInRIFF->fccType != mmioFOURCC('W', 'A', 'V', 'E') ) )
        return E_FAIL;

    // Search the input file for for the 'fmt ' chunk.
    ckIn.ckid = mmioFOURCC('f', 'm', 't', ' ');
    if( 0 != mmioDescend(hmmioIn, &ckIn, pckInRIFF, MMIO_FINDCHUNK) )
        return E_FAIL;

    // 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) )
           return E_FAIL;

    // Read the 'fmt ' chunk into <pcmWaveFormat>.
    if( mmioRead( hmmioIn, (HPSTR) &pcmWaveFormat, 
                  sizeof(pcmWaveFormat)) != sizeof(pcmWaveFormat) )
        return E_FAIL;

    // 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 )
    {
        if( NULL == ( *ppwfxInfo = new WAVEFORMATEX ) )
            return E_FAIL;

        // Copy the bytes from the pcm structure to the waveformatex structure
        memcpy( *ppwfxInfo, &pcmWaveFormat, sizeof(pcmWaveFormat) );
        (*ppwfxInfo)->cbSize = 0;
    }
    else
    {
        // Read in length of extra bytes.
        WORD cbExtraBytes = 0L;
        if( mmioRead( hmmioIn, (CHAR*)&cbExtraBytes, sizeof(WORD)) != sizeof(WORD) )
            return E_FAIL;

        *ppwfxInfo = (WAVEFORMATEX*)new CHAR[ sizeof(WAVEFORMATEX) + cbExtraBytes ];
        if( NULL == *ppwfxInfo )
            return E_FAIL;

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

        // Now, read those extra bytes into the structure, if cbExtraAlloc != 0.
        if( mmioRead( hmmioIn, (CHAR*)(((BYTE*)&((*ppwfxInfo)->cbSize))+sizeof(WORD)),
                      cbExtraBytes ) != cbExtraBytes )
        {
            delete *ppwfxInfo;
            *ppwfxInfo = NULL;
            return E_FAIL;
        }
    }

    // Ascend the input file out of the 'fmt ' chunk.
    if( 0 != mmioAscend( hmmioIn, &ckIn, 0 ) )
    {
        delete *ppwfxInfo;
        *ppwfxInfo = NULL;
        return E_FAIL;
    }

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: WaveOpenFile()
// Desc: 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.
//-----------------------------------------------------------------------------
HRESULT WaveOpenFile( CHAR* strFileName, HMMIO* phmmioIn, WAVEFORMATEX** ppwfxInfo,
                  MMCKINFO* pckInRIFF )
{
    HRESULT hr;
    HMMIO   hmmioIn = NULL;
    
    if( NULL == ( hmmioIn = mmioOpen( strFileName, NULL, MMIO_ALLOCBUF|MMIO_READ ) ) )
        return E_FAIL;

    if( FAILED( hr = ReadMMIO( hmmioIn, pckInRIFF, ppwfxInfo ) ) )
    {
        mmioClose( hmmioIn, 0 );
        return hr;
    }

    *phmmioIn = hmmioIn;

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: WaveStartDataRead()
// Desc: Routine has to be called before WaveReadFile as it searches 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...
//-----------------------------------------------------------------------------
HRESULT WaveStartDataRead( HMMIO* phmmioIn, MMCKINFO* pckIn,
                           MMCKINFO* pckInRIFF )
{
    // Seek to the data
    if( -1 == mmioSeek( *phmmioIn, pckInRIFF->dwDataOffset + sizeof(FOURCC),
                        SEEK_SET ) )
        return E_FAIL;

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

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: WaveReadFile()
// Desc: Reads wave data from the wave file. Make sure we're descended into
//       the data chunk before calling this function.
//          hmmioIn      - Handle to mmio.
//          cbRead       - # of bytes to read.   
//          pbDest       - Destination buffer to put bytes.
//          cbActualRead - # of bytes actually read.
//-----------------------------------------------------------------------------
HRESULT WaveReadFile( HMMIO hmmioIn, UINT cbRead, BYTE* pbDest,
                      MMCKINFO* pckIn, UINT* cbActualRead )
{
    MMIOINFO mmioinfoIn;         // current status of <hmmioIn>

    *cbActualRead = 0;

    if( 0 != mmioGetInfo( hmmioIn, &mmioinfoIn, 0 ) )
        return E_FAIL;
                
    UINT cbDataIn = cbRead;
    if( cbDataIn > pckIn->cksize ) 
        cbDataIn = pckIn->cksize;       

    pckIn->cksize -= cbDataIn;
    
    for( DWORD cT = 0; cT < cbDataIn; cT++ )
    {
        // Copy the bytes from the io to the buffer.
        if( mmioinfoIn.pchNext == mmioinfoIn.pchEndRead )
        {
            if( 0 != mmioAdvance( hmmioIn, &mmioinfoIn, MMIO_READ ) )
                return E_FAIL;

            if( mmioinfoIn.pchNext == mmioinfoIn.pchEndRead )
                return E_FAIL;
        }

        // Actual copy.
        *((BYTE*)pbDest+cT) = *((BYTE*)mmioinfoIn.pchNext);
        mmioinfoIn.pchNext++;
    }

    if( 0 != mmioSetInfo( hmmioIn, &mmioinfoIn, 0 ) )
        return E_FAIL;

    *cbActualRead = cbDataIn;
    return S_OK;
}



  
//-----------------------------------------------------------------------------
// Name: CWaveSoundRead()
// Desc: Constructs the class
//-----------------------------------------------------------------------------
CWaveSoundRead::CWaveSoundRead()
{
    m_pwfx   = NULL;
}




//-----------------------------------------------------------------------------
// Name: ~CWaveSoundRead()
// Desc: Destructs the class
//-----------------------------------------------------------------------------
CWaveSoundRead::~CWaveSoundRead()
{
    Close();
    SAFE_DELETE( m_pwfx );
}




//-----------------------------------------------------------------------------
// Name: Open()
// Desc: Opens a wave file for reading
//-----------------------------------------------------------------------------
HRESULT CWaveSoundRead::Open( CHAR* strFilename )
{
    SAFE_DELETE( m_pwfx );

    HRESULT  hr;
    
    if( FAILED( hr = WaveOpenFile( strFilename, &m_hmmioIn, &m_pwfx, &m_ckInRiff ) ) )
        return hr;

    if( FAILED( hr = Reset() ) )
        return hr;

    return hr;
}




//-----------------------------------------------------------------------------
// Name: Reset()
// Desc: Resets the internal m_ckIn pointer so reading starts from the 
//       beginning of the file again 
//-----------------------------------------------------------------------------
HRESULT CWaveSoundRead::Reset()
{
    return WaveStartDataRead( &m_hmmioIn, &m_ckIn, &m_ckInRiff );
}




//-----------------------------------------------------------------------------
// Name: Read()
// Desc: Reads a wave file into a pointer and returns how much read
//       using m_ckIn to determine where to start reading from
//-----------------------------------------------------------------------------
HRESULT CWaveSoundRead::Read( UINT nSizeToRead, BYTE* pbData, UINT* pnSizeRead )
{
    return WaveReadFile( m_hmmioIn, nSizeToRead, pbData, &m_ckIn, pnSizeRead );
}




//-----------------------------------------------------------------------------
// Name: Close()
// Desc: Closes an open wave file 
//-----------------------------------------------------------------------------
HRESULT CWaveSoundRead::Close()
{
    mmioClose( m_hmmioIn, 0 );
    return S_OK;
}



?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜免费久久看| 欧美一区二区三区性视频| 2020国产精品自拍| 国产在线一区二区综合免费视频| 日韩一区二区三| 国产麻豆精品久久一二三| 国产视频一区在线播放| av激情成人网| 亚洲综合成人在线| 日韩精品一区二区三区蜜臀 | 国产一区二区免费在线| 久久精品一区二区三区不卡| 国产91精品一区二区麻豆亚洲| 国产精品麻豆一区二区| 日本精品一区二区三区高清| 天堂一区二区在线| 欧美精品一区二区蜜臀亚洲| 成人激情综合网站| 亚洲成人你懂的| 久久嫩草精品久久久精品| 99久久夜色精品国产网站| 亚洲一级片在线观看| 亚洲精品一区二区三区精华液| 成人精品一区二区三区中文字幕 | 精品国产髙清在线看国产毛片| 懂色av一区二区在线播放| 亚洲国产va精品久久久不卡综合| 日韩欧美综合在线| 高清av一区二区| 日韩精品一二三四| 国产精品久久久久久久久免费相片| 欧美在线不卡一区| 国产精品18久久久久久vr| 亚洲黄一区二区三区| 久久久亚洲综合| 欧美挠脚心视频网站| 不卡一区在线观看| 国产自产v一区二区三区c| 亚洲成人黄色影院| 中文字幕免费不卡在线| 91精品国产91久久久久久一区二区 | 亚洲一区二区三区四区五区黄| 精品久久久久久久久久久久久久久久久| 成人avav影音| 经典三级一区二区| 亚洲成年人影院| 亚洲视频免费观看| xfplay精品久久| 7777女厕盗摄久久久| 色综合久久久久久久| 大白屁股一区二区视频| 久久国产精品第一页| 亚洲一区欧美一区| ㊣最新国产の精品bt伙计久久| 精品国产乱码久久久久久闺蜜| 欧美日免费三级在线| 99视频精品在线| 成人性生交大片免费看在线播放| 久久av资源站| 天天色图综合网| 亚洲大片在线观看| 亚洲一区在线看| 一区二区在线观看视频| 国产精品入口麻豆九色| 国产人久久人人人人爽| 久久久久久久久久电影| 精品国产sm最大网站免费看| 欧美一区二区精品久久911| 欧美肥妇bbw| 欧美猛男超大videosgay| 色婷婷久久久综合中文字幕| 99在线视频精品| 成人综合在线视频| 国产成人综合在线观看| 国产成人无遮挡在线视频| 国产一区二区三区免费在线观看 | 国产欧美日韩精品在线| 久久免费视频一区| 国产清纯美女被跳蛋高潮一区二区久久w | 美女视频黄久久| 蜜桃视频一区二区三区 | 国产亲近乱来精品视频| 久久精品视频在线免费观看| 久久综合九色综合欧美就去吻| 日韩免费高清av| 久久综合九色欧美综合狠狠| 亚洲精品一区二区三区精华液| 精品国精品国产| 久久免费精品国产久精品久久久久 | 国产精品亚洲а∨天堂免在线| 国精产品一区一区三区mba桃花| 国产呦萝稀缺另类资源| 成人免费av在线| 欧美在线啊v一区| 一区二区久久久久久| 亚洲人123区| 亚洲一区av在线| 日本特黄久久久高潮| 国产精品99久久久久| 成人午夜视频在线观看| 一本大道久久a久久精二百 | 91免费视频观看| 欧美日韩大陆一区二区| 日韩精品一区二区三区在线 | 日韩欧美综合一区| 欧美国产禁国产网站cc| 亚洲色图19p| 亚洲福利国产精品| 国产麻豆精品theporn| 色噜噜夜夜夜综合网| 日韩一级高清毛片| 中文字幕在线播放不卡一区| 亚洲一区二区3| 久久91精品国产91久久小草| www.爱久久.com| 在线不卡中文字幕播放| 国产女人18水真多18精品一级做| 亚洲精品视频在线| 久久精品国产99| 99精品一区二区三区| 欧美一级免费观看| 国产精品成人免费| 日本亚洲最大的色成网站www| 成人少妇影院yyyy| 日韩一区二区影院| 亚洲日本成人在线观看| 久久爱另类一区二区小说| 色悠久久久久综合欧美99| 久久亚洲春色中文字幕久久久| 亚洲综合色噜噜狠狠| 国产激情视频一区二区在线观看| 欧美偷拍一区二区| 国产午夜亚洲精品午夜鲁丝片 | 成人av电影观看| 日韩免费在线观看| 亚洲福利一区二区三区| 成人美女视频在线观看18| 欧美电影免费观看完整版| 亚洲在线中文字幕| av激情综合网| 国产亚洲精品7777| 久久国产精品露脸对白| 欧美电影在线免费观看| 一区二区三区在线高清| 丁香激情综合国产| 精品盗摄一区二区三区| 日韩激情视频在线观看| 在线观看免费亚洲| 亚洲精品日日夜夜| 成人国产精品免费观看| 久久人人爽人人爽| 国产制服丝袜一区| 欧美xfplay| 免费看欧美美女黄的网站| 精品视频一区 二区 三区| 亚洲视频一区二区在线| 成+人+亚洲+综合天堂| 国产日韩在线不卡| 国产精品亚洲一区二区三区在线 | 777xxx欧美| 亚洲成人av资源| 国产精品视频免费| 国产精品99久久久久久久女警| 久久午夜羞羞影院免费观看| 精品中文字幕一区二区小辣椒| 日韩午夜在线观看视频| 免费在线观看成人| 日韩一区二区三免费高清| 老司机免费视频一区二区| 日韩一区二区三区在线观看| 免费欧美高清视频| 2023国产精华国产精品| 国产成人亚洲精品青草天美| 中文字幕欧美日韩一区| 99国内精品久久| 一个色在线综合| 欧美美女bb生活片| 日韩av一区二区三区| 欧美成人vr18sexvr| 国产麻豆精品在线| 国产精品久久久久aaaa樱花| 99精品欧美一区二区三区综合在线| 亚洲欧美日韩国产综合在线| 欧美性做爰猛烈叫床潮| 视频一区二区欧美| 欧美videos大乳护士334| 国产精品综合一区二区| 国产精品美女一区二区在线观看| eeuss鲁一区二区三区| 一区二区成人在线| 欧美一区二区三区啪啪| 国产一区二区电影| 中文字幕欧美一| 欧美精品高清视频| 国产乱国产乱300精品| 综合久久国产九一剧情麻豆| 欧美日韩国产一级二级| 另类欧美日韩国产在线| 国产精品久久久久久久久免费相片 | 狠狠色狠狠色综合|