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

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

?? dsutil.cpp

?? 3D俄羅斯方塊源碼.rar
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
//-----------------------------------------------------------------------------
// File: DSUtil.cpp
//
// Desc: DirectSound framework classes for reading and writing wav files and
//       playing them in DirectSound buffers. Feel free to use this class 
//       as a starting point for adding extra functionality.
//
// Copyright (c) 1999-2000 Microsoft Corp. All rights reserved.
//-----------------------------------------------------------------------------
#define STRICT
#include <windows.h>
#include <basetsd.h>
#include <mmsystem.h>
#include <dxerr8.h>
#include <dsound.h>
#include "DSUtil.h"
#include "DXUtil.h"




//-----------------------------------------------------------------------------
// Name: CSoundManager::CSoundManager()
// Desc: Constructs the class
//-----------------------------------------------------------------------------
CSoundManager::CSoundManager()
{
    m_pDS = NULL;
}




//-----------------------------------------------------------------------------
// Name: CSoundManager::~CSoundManager()
// Desc: Destroys the class
//-----------------------------------------------------------------------------
CSoundManager::~CSoundManager()
{
    SAFE_RELEASE( m_pDS ); 
}




//-----------------------------------------------------------------------------
// Name: CSoundManager::Initialize()
// Desc: Initializes the IDirectSound object and also sets the primary buffer
//       format.  This function must be called before any others.
//-----------------------------------------------------------------------------
HRESULT CSoundManager::Initialize( HWND  hWnd, 
                                   DWORD dwCoopLevel, 
                                   DWORD dwPrimaryChannels, 
                                   DWORD dwPrimaryFreq, 
                                   DWORD dwPrimaryBitRate )
{
    HRESULT             hr;
    LPDIRECTSOUNDBUFFER pDSBPrimary = NULL;

    SAFE_RELEASE( m_pDS );

    // Create IDirectSound using the primary sound device
    if( FAILED( hr = DirectSoundCreate8( NULL, &m_pDS, NULL ) ) )
        return DXTRACE_ERR( TEXT("DirectSoundCreate8"), hr );

    // Set DirectSound coop level 
    if( FAILED( hr = m_pDS->SetCooperativeLevel( hWnd, dwCoopLevel ) ) )
        return DXTRACE_ERR( TEXT("SetCooperativeLevel"), hr );
    
    // Set primary buffer format
    SetPrimaryBufferFormat( dwPrimaryChannels, dwPrimaryFreq, dwPrimaryBitRate );

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: CSoundManager::SetPrimaryBufferFormat()
// Desc: Set primary buffer to a specified format 
//       For example, to set the primary buffer format to 22kHz stereo, 16-bit
//       then:   dwPrimaryChannels = 2
//               dwPrimaryFreq     = 22050, 
//               dwPrimaryBitRate  = 16
//-----------------------------------------------------------------------------
HRESULT CSoundManager::SetPrimaryBufferFormat( DWORD dwPrimaryChannels, 
                                               DWORD dwPrimaryFreq, 
                                               DWORD dwPrimaryBitRate )
{
    HRESULT             hr;
    LPDIRECTSOUNDBUFFER pDSBPrimary = NULL;

    if( m_pDS == NULL )
        return CO_E_NOTINITIALIZED;

    // Get the primary buffer 
    DSBUFFERDESC dsbd;
    ZeroMemory( &dsbd, sizeof(DSBUFFERDESC) );
    dsbd.dwSize        = sizeof(DSBUFFERDESC);
    dsbd.dwFlags       = DSBCAPS_PRIMARYBUFFER;
    dsbd.dwBufferBytes = 0;
    dsbd.lpwfxFormat   = NULL;
       
    if( FAILED( hr = m_pDS->CreateSoundBuffer( &dsbd, &pDSBPrimary, NULL ) ) )
        return DXTRACE_ERR( TEXT("CreateSoundBuffer"), hr );

    WAVEFORMATEX wfx;
    ZeroMemory( &wfx, sizeof(WAVEFORMATEX) ); 
    wfx.wFormatTag      = WAVE_FORMAT_PCM; 
    wfx.nChannels       = (WORD) dwPrimaryChannels; 
    wfx.nSamplesPerSec  = dwPrimaryFreq; 
    wfx.wBitsPerSample  = (WORD) dwPrimaryBitRate; 
    wfx.nBlockAlign     = wfx.wBitsPerSample / 8 * wfx.nChannels;
    wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;

    if( FAILED( hr = pDSBPrimary->SetFormat(&wfx) ) )
        return DXTRACE_ERR( TEXT("SetFormat"), hr );

    SAFE_RELEASE( pDSBPrimary );

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: CSoundManager::Get3DListenerInterface()
// Desc: Returns the 3D listener interface associated with primary buffer.
//-----------------------------------------------------------------------------
HRESULT CSoundManager::Get3DListenerInterface( LPDIRECTSOUND3DLISTENER* ppDSListener )
{
    HRESULT             hr;
    DSBUFFERDESC        dsbdesc;
    LPDIRECTSOUNDBUFFER pDSBPrimary = NULL;

    if( ppDSListener == NULL )
        return E_INVALIDARG;
    if( m_pDS == NULL )
        return CO_E_NOTINITIALIZED;

    *ppDSListener = NULL;

    // Obtain primary buffer, asking it for 3D control
    ZeroMemory( &dsbdesc, sizeof(DSBUFFERDESC) );
    dsbdesc.dwSize = sizeof(DSBUFFERDESC);
    dsbdesc.dwFlags = DSBCAPS_CTRL3D | DSBCAPS_PRIMARYBUFFER;
    if( FAILED( hr = m_pDS->CreateSoundBuffer( &dsbdesc, &pDSBPrimary, NULL ) ) )
        return DXTRACE_ERR( TEXT("CreateSoundBuffer"), hr );

    if( FAILED( hr = pDSBPrimary->QueryInterface( IID_IDirectSound3DListener, 
                                                  (VOID**)ppDSListener ) ) )
    {
        SAFE_RELEASE( pDSBPrimary );
        return DXTRACE_ERR( TEXT("QueryInterface"), hr );
    }

    // Release the primary buffer, since it is not need anymore
    SAFE_RELEASE( pDSBPrimary );

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: CSoundManager::Create()
// Desc: 
//-----------------------------------------------------------------------------
HRESULT CSoundManager::Create( CSound** ppSound, 
                               LPTSTR strWaveFileName, 
                               DWORD dwCreationFlags, 
                               GUID guid3DAlgorithm,
                               DWORD dwNumBuffers )
{
    HRESULT hr;
    HRESULT hrRet = S_OK;
    DWORD   i;
    LPDIRECTSOUNDBUFFER* apDSBuffer     = NULL;
    DWORD                dwDSBufferSize = NULL;
    CWaveFile*           pWaveFile      = NULL;

    if( m_pDS == NULL )
        return CO_E_NOTINITIALIZED;
    if( strWaveFileName == NULL || ppSound == NULL || dwNumBuffers < 1 )
        return E_INVALIDARG;

    apDSBuffer = new LPDIRECTSOUNDBUFFER[dwNumBuffers];
    if( apDSBuffer == NULL )
    {
        hr = E_OUTOFMEMORY;
        goto LFail;
    }

    pWaveFile = new CWaveFile();
    if( pWaveFile == NULL )
    {
        hr = E_OUTOFMEMORY;
        goto LFail;
    }

    pWaveFile->Open( strWaveFileName, NULL, WAVEFILE_READ );

    if( pWaveFile->GetSize() == 0 )
    {
        // Wave is blank, so don't create it.
        hr = E_FAIL;
        goto LFail;
    }

    // Make the DirectSound buffer the same size as the wav file
    dwDSBufferSize = pWaveFile->GetSize();

    // Create the direct sound buffer, and only request the flags needed
    // since each requires some overhead and limits if the buffer can 
    // be hardware accelerated
    DSBUFFERDESC dsbd;
    ZeroMemory( &dsbd, sizeof(DSBUFFERDESC) );
    dsbd.dwSize          = sizeof(DSBUFFERDESC);
    dsbd.dwFlags         = dwCreationFlags;
    dsbd.dwBufferBytes   = dwDSBufferSize;
    dsbd.guid3DAlgorithm = guid3DAlgorithm;
    dsbd.lpwfxFormat     = pWaveFile->m_pwfx;

    // DirectSound is only guarenteed to play PCM data.  Other
    // formats may or may not work depending the sound card driver.
    hr = m_pDS->CreateSoundBuffer( &dsbd, &apDSBuffer[0], NULL );

    // Be sure to return this error code if it occurs so the
    // callers knows this happened.
    if( hr == DS_NO_VIRTUALIZATION )
        hrRet = DS_NO_VIRTUALIZATION;
            
    if( FAILED(hr) )
    {
        // DSERR_BUFFERTOOSMALL will be returned if the buffer is
        // less than DSBSIZE_FX_MIN (100ms) and the buffer is created
        // with DSBCAPS_CTRLFX.
        if( hr != DSERR_BUFFERTOOSMALL )
            DXTRACE_ERR( TEXT("CreateSoundBuffer"), hr );
            
        goto LFail;
    }

    for( i=1; i<dwNumBuffers; i++ )
    {
        if( FAILED( hr = m_pDS->DuplicateSoundBuffer( apDSBuffer[0], &apDSBuffer[i] ) ) )
        {
            DXTRACE_ERR( TEXT("DuplicateSoundBuffer"), hr );
            goto LFail;
        }
    }

    // Create the sound
    *ppSound = new CSound( apDSBuffer, dwDSBufferSize, dwNumBuffers, pWaveFile );
    
    SAFE_DELETE( apDSBuffer );
    return hrRet;

LFail:
    // Cleanup
    SAFE_DELETE( pWaveFile );
    SAFE_DELETE( apDSBuffer );
    return hr;
}









//-----------------------------------------------------------------------------
// Name: CSoundManager::CreateFromMemory()
// Desc: 
//-----------------------------------------------------------------------------
HRESULT CSoundManager::CreateFromMemory( CSound** ppSound, 
                                        BYTE* pbData,
                                        ULONG  ulDataSize,
                                        LPWAVEFORMATEX pwfx,
                                        DWORD dwCreationFlags, 
                                        GUID guid3DAlgorithm,
                                        DWORD dwNumBuffers )
{
    HRESULT hr;
    DWORD   i;
    LPDIRECTSOUNDBUFFER* apDSBuffer     = NULL;
    DWORD                dwDSBufferSize = NULL;
    CWaveFile*           pWaveFile      = NULL;

    if( m_pDS == NULL )
        return CO_E_NOTINITIALIZED;
    if( pbData == NULL || ppSound == NULL || dwNumBuffers < 1 )
        return E_INVALIDARG;

    apDSBuffer = new LPDIRECTSOUNDBUFFER[dwNumBuffers];
    if( apDSBuffer == NULL )
    {
        hr = E_OUTOFMEMORY;
        goto LFail;
    }

    pWaveFile = new CWaveFile();
    if( pWaveFile == NULL )
    {
        hr = E_OUTOFMEMORY;
        goto LFail;
    }

    pWaveFile->OpenFromMemory( pbData,ulDataSize, pwfx, WAVEFILE_READ );


    // Make the DirectSound buffer the same size as the wav file
    dwDSBufferSize = ulDataSize;

    // Create the direct sound buffer, and only request the flags needed
    // since each requires some overhead and limits if the buffer can 
    // be hardware accelerated
    DSBUFFERDESC dsbd;
    ZeroMemory( &dsbd, sizeof(DSBUFFERDESC) );
    dsbd.dwSize          = sizeof(DSBUFFERDESC);
    dsbd.dwFlags         = dwCreationFlags;
    dsbd.dwBufferBytes   = dwDSBufferSize;
    dsbd.guid3DAlgorithm = guid3DAlgorithm;
    dsbd.lpwfxFormat     = pwfx;

    if( FAILED( hr = m_pDS->CreateSoundBuffer( &dsbd, &apDSBuffer[0], NULL ) ) )
    {
        DXTRACE_ERR( TEXT("CreateSoundBuffer"), hr );
        goto LFail;
    }

    for( i=1; i<dwNumBuffers; i++ )
    {
        if( FAILED( hr = m_pDS->DuplicateSoundBuffer( apDSBuffer[0], &apDSBuffer[i] ) ) )
        {
            DXTRACE_ERR( TEXT("DuplicateSoundBuffer"), hr );
            goto LFail;
        }
    }

    // Create the sound
    *ppSound = new CSound( apDSBuffer, dwDSBufferSize, dwNumBuffers, pWaveFile );

    SAFE_DELETE( apDSBuffer );
    return S_OK;

LFail:
    // Cleanup
   
    SAFE_DELETE( apDSBuffer );
    return hr;
}





//-----------------------------------------------------------------------------
// Name: CSoundManager::CreateStreaming()
// Desc: 
//-----------------------------------------------------------------------------
HRESULT CSoundManager::CreateStreaming( CStreamingSound** ppStreamingSound, 
                                        LPTSTR strWaveFileName, 
                                        DWORD dwCreationFlags, 
                                        GUID guid3DAlgorithm,
                                        DWORD dwNotifyCount, 
                                        DWORD dwNotifySize, 
                                        HANDLE hNotifyEvent )
{
    HRESULT hr;

    if( m_pDS == NULL )
        return CO_E_NOTINITIALIZED;
    if( strWaveFileName == NULL || ppStreamingSound == NULL || hNotifyEvent == NULL )
        return E_INVALIDARG;

    LPDIRECTSOUNDBUFFER pDSBuffer      = NULL;
    DWORD               dwDSBufferSize = NULL;
    CWaveFile*          pWaveFile      = NULL;
    DSBPOSITIONNOTIFY*  aPosNotify     = NULL; 
    LPDIRECTSOUNDNOTIFY pDSNotify      = NULL;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本大道久久a久久精二百| 国产传媒久久文化传媒| 国产日韩欧美精品在线| 日韩欧美色电影| 日韩欧美一级二级三级| 制服丝袜一区二区三区| 3d动漫精品啪啪1区2区免费| 欧美精品日日鲁夜夜添| 91精品久久久久久久99蜜桃| 欧美日韩视频一区二区| 欧美日韩精品一区二区三区蜜桃| 91高清在线观看| 91成人免费在线| 欧美在线不卡一区| 欧美日本一区二区三区| 91精品综合久久久久久| 日韩色在线观看| 久久亚洲综合色一区二区三区| 日韩色在线观看| 久久五月婷婷丁香社区| 欧美国产丝袜视频| 最新国产の精品合集bt伙计| 夜夜精品视频一区二区| 天堂成人免费av电影一区| 美国欧美日韩国产在线播放| 精品一区二区三区免费观看| 国产成人av电影在线播放| 91麻豆免费看| 日韩三级在线免费观看| 欧美国产成人在线| 亚洲成人免费在线| 韩国成人精品a∨在线观看| 99久久99久久免费精品蜜臀| 91高清视频在线| 久久亚洲二区三区| 亚洲美女免费在线| 国内精品伊人久久久久影院对白| www.色精品| 欧美精品粉嫩高潮一区二区| 久久综合久久综合久久| 亚洲最大的成人av| 激情深爱一区二区| 色香蕉久久蜜桃| www一区二区| 亚洲成年人网站在线观看| 韩国一区二区在线观看| 欧美日韩一区不卡| 国产精品久久久久久福利一牛影视| 午夜伊人狠狠久久| 成人免费毛片嘿嘿连载视频| 91麻豆精品国产自产在线| 国产精品蜜臀在线观看| 精品在线播放免费| 欧美精品久久99久久在免费线 | 欧美激情一区二区三区在线| 亚洲综合视频网| 国产精品一二一区| 欧美久久久久中文字幕| 国产精品久久久久久久久免费相片 | 制服丝袜激情欧洲亚洲| 国产精品久久看| 国产一区二区视频在线播放| 欧美色图免费看| 亚洲视频在线一区观看| 国产精品一区2区| 精品国产免费一区二区三区香蕉| 一区二区激情小说| 91在线你懂得| 国产精品三级电影| 国产老妇另类xxxxx| 91精品在线观看入口| 亚洲一区二区欧美日韩| 在线视频你懂得一区| 亚洲欧美日本在线| 高清shemale亚洲人妖| 日韩欧美中文字幕制服| 婷婷中文字幕一区三区| 91电影在线观看| 亚洲男帅同性gay1069| 不卡的看片网站| 国产精品免费久久久久| 成人app在线| 自拍偷拍亚洲综合| 色综合天天综合网天天看片| 亚洲国产日韩在线一区模特| 91麻豆精东视频| 一区二区三区免费观看| 色中色一区二区| 亚洲一区二区视频在线观看| 欧美日韩一区二区三区免费看| 亚洲成人中文在线| 91精品国产入口| 久久精品国产成人一区二区三区| 日韩女优制服丝袜电影| 国产乱码精品一区二区三区忘忧草| 精品久久久久久久久久久久久久久 | 日韩成人免费电影| 日韩欧美一二三四区| 国产一区二区三区日韩| 中日韩av电影| 91久久一区二区| 老司机精品视频在线| 久久久久国色av免费看影院| 99精品视频在线免费观看| 一区二区三区在线视频免费观看| 欧美精选在线播放| 国产一区美女在线| 一区二区三区中文在线观看| 日韩欧美激情四射| av动漫一区二区| 偷拍日韩校园综合在线| 亚洲国产成人一区二区三区| 色婷婷综合中文久久一本| 免费成人你懂的| 成人免费一区二区三区视频| 欧美三级韩国三级日本一级| 黄色资源网久久资源365| 成人免费视频在线观看| 精品美女在线观看| 在线亚洲精品福利网址导航| 国产麻豆视频一区二区| 亚洲一区二区三区四区五区中文| 久久综合视频网| 欧美电影一区二区| 91色.com| 成人在线视频一区| 青青草国产成人99久久| 一区二区三区欧美在线观看| 精品国产91亚洲一区二区三区婷婷 | 中日韩免费视频中文字幕| 欧美人与禽zozo性伦| 国产91清纯白嫩初高中在线观看| 五月激情综合婷婷| 亚洲日本电影在线| 国产女主播在线一区二区| 欧美日韩国产高清一区二区 | 伊人色综合久久天天| 久久久久久一级片| 欧美一级理论性理论a| 欧洲精品视频在线观看| 高清国产一区二区| 国产精品中文字幕欧美| 免费在线观看一区二区三区| 亚洲一区二区欧美日韩| 亚洲免费伊人电影| 中文字幕国产精品一区二区| www国产成人免费观看视频 深夜成人网| 欧美日本韩国一区二区三区视频| 91丨九色porny丨蝌蚪| 成人午夜电影网站| 福利视频网站一区二区三区| 国产乱码一区二区三区| 国精产品一区一区三区mba桃花 | 日本成人在线不卡视频| 亚洲午夜久久久久久久久电影网 | 日韩亚洲电影在线| 欧美一区二区女人| 日韩丝袜美女视频| 欧美一区二区三区在线电影| 欧美一区在线视频| 日韩精品一区二区三区在线播放| 91麻豆精品国产91久久久资源速度| 欧美精品久久99久久在免费线| 777奇米四色成人影色区| 欧美一区二区视频网站| 日韩欧美中文字幕制服| 久久综合九色综合欧美98| 国产欧美一区二区精品久导航 | 日本午夜一区二区| 看片网站欧美日韩| 激情综合色丁香一区二区| 国产乱码一区二区三区| 99这里只有精品| 欧美日韩一级视频| 日韩视频中午一区| 中文一区一区三区高中清不卡| 亚洲视频资源在线| 午夜精品一区二区三区电影天堂| 蜜桃一区二区三区四区| 高清不卡一区二区| 在线一区二区三区四区| 91精品国产乱| 中文字幕+乱码+中文字幕一区| 亚洲自拍都市欧美小说| 黄色成人免费在线| 91美女在线视频| 欧美第一区第二区| 综合在线观看色| 九色|91porny| 色综合久久久久久久| 欧美电影精品一区二区| 自拍偷拍欧美精品| 老司机精品视频在线| 成人av网址在线| 69堂亚洲精品首页| 亚洲日本va在线观看| 久久99精品久久久| 欧美日韩久久久| 亚洲欧洲精品成人久久奇米网| 青青草国产成人av片免费|