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

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

?? directsound.cpp

?? 實時監控
?? CPP
字號:
/////////////////////////////////////////////////////////////////////////////
// Copyright (C) 1998 by J鰎g K鰊ig
// All rights reserved
//
// This file is part of the completely free tetris clone "CGTetris".
//
// This is free software.
// You may redistribute it by any means providing it is not sold for profit
// without the authors written consent.
//
// No warrantee of any kind, expressed or implied, is included with this
// software; use at your own risk, responsibility for damages (if any) to
// anyone resulting from the use of this software rests entirely with the
// user.
//
// Send bug reports, bug fixes, enhancements, requests, flames, etc., and
// I'll try to keep a version up to date.  I can be reached as follows:
//    J.Koenig@adg.de                 (company site)
//    Joerg.Koenig@rhein-neckar.de    (private site)
/////////////////////////////////////////////////////////////////////////////


// DirectSound.cpp: implementation of the CDirectSound class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DirectSound.h"

// The following macro is defined since DirectX 5, but will work with
// older versions too.
#ifndef DSBLOCK_ENTIREBUFFER
	#define DSBLOCK_ENTIREBUFFER        0x00000002
#endif

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

static void DSError( HRESULT hRes ) {
	switch(hRes) {
		case DS_OK: TRACE0("NO ERROR\n"); break;
		case DSERR_ALLOCATED: TRACE0("ALLOCATED\n"); break;
		case DSERR_INVALIDPARAM: TRACE0("INVALIDPARAM\n"); break;
		case DSERR_OUTOFMEMORY: TRACE0("OUTOFMEMORY\n"); break;
		case DSERR_UNSUPPORTED: TRACE0("UNSUPPORTED\n"); break;
		case DSERR_NOAGGREGATION: TRACE0("NOAGGREGATION\n"); break;
		case DSERR_UNINITIALIZED: TRACE0("UNINITIALIZED\n"); break;
		case DSERR_BADFORMAT: TRACE0("BADFORMAT\n"); break;
		case DSERR_ALREADYINITIALIZED: TRACE0("ALREADYINITIALIZED\n"); break;
		case DSERR_BUFFERLOST: TRACE0("BUFFERLOST\n"); break;
		case DSERR_CONTROLUNAVAIL: TRACE0("CONTROLUNAVAIL\n"); break;
		case DSERR_GENERIC: TRACE0("GENERIC\n"); break;
		case DSERR_INVALIDCALL: TRACE0("INVALIDCALL\n"); break;
		case DSERR_OTHERAPPHASPRIO: TRACE0("OTHERAPPHASPRIO\n"); break;
		case DSERR_PRIOLEVELNEEDED: TRACE0("PRIOLEVELNEEDED\n"); break;
		default: TRACE1("%lu\n",hRes);break;
	}
}

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

//##ModelId=3F90BABC0206
LPDIRECTSOUND CDirectSound::m_lpDirectSound;
//##ModelId=3F90BABC020F
DWORD CDirectSound::m_dwInstances;


//##ModelId=3F90BABC013D
CDirectSound::CDirectSound()
{
	m_lpDirectSound = 0;
	m_pDsb = 0;
	m_pTheSound = 0;
	m_dwTheSound = 0;
	m_bEnabled = TRUE;

	++m_dwInstances;
}

//##ModelId=3F90BABC013E
CDirectSound::~CDirectSound()
{
	Destroy();
}

//##ModelId=3F90BABC0167
void CDirectSound::Destroy()
{
	Stop();
	if( m_pDsb )
	{
		m_pDsb->Release();
		m_pDsb = NULL;
	}

	if( !--m_dwInstances && m_lpDirectSound ) {
		m_lpDirectSound->Release();
		m_lpDirectSound = 0;
	}
}

//##ModelId=3F90BABC0148
BOOL CDirectSound::Create(LPCTSTR pszResource, CWnd * pWnd)
{
	//////////////////////////////////////////////////////////////////
	// load resource
	HINSTANCE hApp = ::GetModuleHandle(0);
	ASSERT(hApp);

	HRSRC hResInfo = ::FindResource(hApp, pszResource, TEXT("WAVE"));
	if(hResInfo == 0)
		return FALSE;

	HGLOBAL hRes = ::LoadResource(hApp, hResInfo);
	if(hRes == 0)
		return FALSE;

	LPVOID pTheSound = ::LockResource(hRes);
	if(pTheSound == 0)
		return FALSE;

	return Create(pTheSound, pWnd);
}


//##ModelId=3F90BABC015D
BOOL CDirectSound :: Create(LPVOID pSoundData, CWnd * pWnd) {
	if(pWnd == 0)
		pWnd = AfxGetApp()->GetMainWnd();

	ASSERT(pWnd != 0);
	ASSERT(::IsWindow(pWnd->GetSafeHwnd()));

	ASSERT(pSoundData != 0);

	//////////////////////////////////////////////////////////////////
	// create direct sound object
	
	if( m_lpDirectSound == 0 ) {
		// Someone might use sounds for starting apps. This may cause
		// DirectSoundCreate() to fail because the driver is used by
		// anyone else. So wait a little before starting with the work ...
		HRESULT hRes = DS_OK;
		short nRes = 0;

		do {
			if( nRes )
				::Sleep(500);
			hRes = ::DirectSoundCreate(0, &m_lpDirectSound, 0);
			++nRes;
		} while( nRes < 10 && (hRes == DSERR_ALLOCATED || hRes == DSERR_NODRIVER) );

		if( hRes != DS_OK )
			return FALSE;
	
		m_lpDirectSound->SetCooperativeLevel(pWnd->GetSafeHwnd(), DSSCL_NORMAL);
	}

	ASSERT(m_lpDirectSound != 0);

	WAVEFORMATEX * pcmwf;
	if( ! GetWaveData(pSoundData, pcmwf, m_pTheSound, m_dwTheSound) ||
		! CreateSoundBuffer(pcmwf) ||
		! SetSoundData(m_pTheSound, m_dwTheSound) )
		return FALSE;

	return TRUE;
}


//##ModelId=3F90BABC01B6
BOOL CDirectSound :: GetWaveData(void * pRes, WAVEFORMATEX * & pWaveHeader, void * & pbWaveData, DWORD & cbWaveSize) {
	pWaveHeader = 0;
	pbWaveData = 0;
	cbWaveSize = 0;

	DWORD * pdw = (DWORD *)pRes;
	DWORD dwRiff = *pdw++;
	DWORD dwLength = *pdw++;
	DWORD dwType = *pdw++;

	if( dwRiff != mmioFOURCC('R', 'I', 'F', 'F') )
		return FALSE;      // not even RIFF

	if( dwType != mmioFOURCC('W', 'A', 'V', 'E') )
		return FALSE;      // not a WAV

	DWORD * pdwEnd = (DWORD *)((BYTE *)pdw + dwLength-4);

	while( pdw < pdwEnd ) {
		dwType = *pdw++;
		dwLength = *pdw++;

		switch( dwType ) {
			case mmioFOURCC('f', 'm', 't', ' '):
				if( !pWaveHeader ) {
					if( dwLength < sizeof(WAVEFORMAT) )
						return FALSE;      // not a WAV

					pWaveHeader = (WAVEFORMATEX *)pdw;

					if( pbWaveData && cbWaveSize )
						return TRUE;
				}
				break;

			case mmioFOURCC('d', 'a', 't', 'a'):
				pbWaveData = LPVOID(pdw);
				cbWaveSize = dwLength;

				if( pWaveHeader )
					return TRUE;
				break;
		}
		pdw = (DWORD *)((BYTE *)pdw + ((dwLength+1)&~1));
	}

	return FALSE;
}


//##ModelId=3F90BABC01AD
BOOL CDirectSound::CreateSoundBuffer(WAVEFORMATEX * pcmwf)
{
	DSBUFFERDESC dsbdesc;

	// Set up DSBUFFERDESC structure.
	memset(&dsbdesc, 0, sizeof(DSBUFFERDESC)); // Zero it out.
	dsbdesc.dwSize = sizeof(DSBUFFERDESC);
	// Need no controls (pan, volume, frequency).
	dsbdesc.dwFlags = DSBCAPS_STATIC;		// assumes that the sound is played often
	dsbdesc.dwBufferBytes = m_dwTheSound;
	dsbdesc.lpwfxFormat = pcmwf;    // Create buffer.
	HRESULT hRes;
	if( DS_OK != (hRes = m_lpDirectSound->CreateSoundBuffer(&dsbdesc, &m_pDsb, 0)) ) {
		// Failed.
		DSError(hRes);
		m_pDsb = 0;
		return FALSE;
	}

	return TRUE;
}


BOOL CDirectSound::SetSoundData(void * pSoundData, DWORD dwSoundSize) {
	LPVOID lpvPtr1;
	DWORD dwBytes1;
	// Obtain write pointer.
	HRESULT hr = m_pDsb->Lock(0, 0, &lpvPtr1, &dwBytes1, 0, 0, DSBLOCK_ENTIREBUFFER);    
    // If DSERR_BUFFERLOST is returned, restore and retry lock.
	if(DSERR_BUFFERLOST == hr) {
		m_pDsb->Restore();
		hr = m_pDsb->Lock(0, 0, &lpvPtr1, &dwBytes1, 0, 0, DSBLOCK_ENTIREBUFFER);
	}
	if(DS_OK == hr) {
		// Write to pointers.
		::CopyMemory(lpvPtr1, pSoundData, dwBytes1);
		// Release the data back to DirectSound.
		hr = m_pDsb->Unlock(lpvPtr1, dwBytes1, 0, 0);
		if(DS_OK == hr)
            return TRUE;
	}
	// Lock, Unlock, or Restore failed.
	return FALSE;
}

//##ModelId=3F90BABC0179
void CDirectSound::Play(DWORD dwStartPosition, BOOL bLoop)
{
	if( ! IsValid() || ! IsEnabled() )
		return;		// no chance to play the sound ...

	if( dwStartPosition > m_dwTheSound )
		dwStartPosition = m_dwTheSound;
	m_pDsb->SetCurrentPosition(dwStartPosition);
	if( DSERR_BUFFERLOST == m_pDsb->Play(0, 0, bLoop ? DSBPLAY_LOOPING : 0) ) {
		// another application had stolen our buffer
		// Note that a "Restore()" is not enough, because
		// the sound data is invalid after Restore().
		SetSoundData(m_pTheSound, m_dwTheSound);

		// Try playing again
		m_pDsb->Play(0, 0, bLoop ? DSBPLAY_LOOPING : 0);
	}
}

//##ModelId=3F90BABC0183
void CDirectSound::Stop()
{
	if( IsValid() )
		m_pDsb->Stop();
}

//##ModelId=3F90BABC018D
void CDirectSound::Pause()
{
	Stop();
}

//##ModelId=3F90BABC018E
void CDirectSound::Continue()
{
	if( IsValid() ) {
		DWORD dwPlayCursor, dwWriteCursor;
		m_pDsb->GetCurrentPosition(&dwPlayCursor, &dwWriteCursor);
		Play(dwPlayCursor);
	}
}

//##ModelId=3F90BABC016F
BOOL CDirectSound::IsValid() const
{
	return (m_lpDirectSound && m_pDsb && m_pTheSound && m_dwTheSound) ? TRUE : FALSE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品视频一区二区三区| 国产99一区视频免费| 亚洲精品一区二区三区精华液| 国产一区二三区| 亚洲色图第一区| 精品久久久久久久久久久久久久久久久 | 亚洲乱码中文字幕综合| 精品乱码亚洲一区二区不卡| 99re热视频精品| 精品一区二区三区在线播放| 一区二区三区蜜桃| 国产亚洲精品超碰| 正在播放亚洲一区| 色婷婷综合久色| 国产成人精品影视| 国产综合久久久久影院| 午夜精品在线看| 一个色综合网站| 国产精品日日摸夜夜摸av| 91精品国模一区二区三区| 色av成人天堂桃色av| 成人午夜在线免费| 国产精品自拍毛片| 蜜桃视频在线观看一区二区| 亚洲国产一区二区a毛片| 国产精品丝袜在线| 国产婷婷一区二区| 欧美变态tickle挠乳网站| 欧美精品亚洲二区| 欧美色综合网站| 91成人免费电影| 91视频com| 色综合久久久久综合| av电影一区二区| 成人午夜电影小说| 国产成+人+日韩+欧美+亚洲| 激情久久五月天| 精品亚洲aⅴ乱码一区二区三区| 日韩二区在线观看| 奇米亚洲午夜久久精品| 日韩高清在线不卡| 视频在线观看国产精品| 日本伊人午夜精品| 日av在线不卡| 蜜臀av在线播放一区二区三区| 日韩精品色哟哟| 另类小说色综合网站| 蜜臀久久99精品久久久久宅男| 久久精品国产久精国产| 久久国产麻豆精品| 国产麻豆一精品一av一免费| 国产一区二区在线电影| 国产真实乱偷精品视频免| 精品一区二区三区在线观看国产| 国产毛片精品视频| jlzzjlzz亚洲女人18| 97精品国产露脸对白| 欧美婷婷六月丁香综合色| 欧美日韩国产免费一区二区 | 欧美色图激情小说| 欧美精品v日韩精品v韩国精品v| 正在播放一区二区| 国产日韩三级在线| 亚洲久草在线视频| 日韩在线卡一卡二| 国产精品69毛片高清亚洲| 色婷婷综合久久久久中文一区二区| 欧美在线三级电影| 日韩无一区二区| 欧美国产成人精品| 亚洲自拍欧美精品| 激情综合一区二区三区| 99久久99久久综合| 欧美喷水一区二区| 欧美激情一区二区| 亚洲国产日韩在线一区模特| 麻豆精品蜜桃视频网站| 成人少妇影院yyyy| 欧美日本在线看| 中文字幕久久午夜不卡| 亚洲国产精品影院| 国产福利电影一区二区三区| 欧美午夜片在线看| 久久久久久97三级| 亚洲一区二区三区四区五区黄| 麻豆国产91在线播放| 成+人+亚洲+综合天堂| 欧美美女黄视频| 中文字幕av免费专区久久| 亚洲bt欧美bt精品777| 国产精品 日产精品 欧美精品| 欧美网站大全在线观看| 国产色婷婷亚洲99精品小说| 亚洲综合视频网| 国产99久久久久| 欧美一级理论片| 一区二区三区在线视频观看| 久久99热国产| 欧美日本高清视频在线观看| 国产精品高潮呻吟久久| 蜜乳av一区二区| 欧美亚洲综合另类| 国产精品久久久久影视| 精品综合久久久久久8888| 欧美主播一区二区三区美女| 中文字幕的久久| 国产一区二区精品久久| 欧美男女性生活在线直播观看| 国产日韩欧美麻豆| 日韩不卡一二三区| 日本高清不卡一区| 国产精品久久精品日日| 麻豆国产欧美日韩综合精品二区| 欧美亚洲一区三区| 日韩理论片中文av| 国产**成人网毛片九色| 日韩欧美第一区| 日韩成人免费看| 91.麻豆视频| 亚洲在线一区二区三区| bt7086福利一区国产| 26uuu另类欧美| 六月婷婷色综合| 欧美一区二区三区免费大片 | 一区二区日韩av| 成人av手机在线观看| 久久综合九色综合97_久久久| 亚洲1区2区3区视频| 91官网在线观看| 国产精品久久久久aaaa| 国产91高潮流白浆在线麻豆| 精品国产髙清在线看国产毛片| 亚洲国产精品人人做人人爽| 日本道精品一区二区三区| 亚洲三级电影网站| 91视频免费观看| 亚洲综合激情另类小说区| 欧美四级电影网| 亚洲成人av中文| 欧美三级中文字幕在线观看| 一区二区三区在线高清| 色先锋aa成人| 亚洲国产人成综合网站| 欧美撒尿777hd撒尿| 性做久久久久久| 777奇米成人网| 久久精品久久综合| 久久免费精品国产久精品久久久久| 日日骚欧美日韩| 5566中文字幕一区二区电影| 日韩av一区二区三区四区| 欧美一区二区三区在线看| 久久国产精品99精品国产| 国产亚洲精品中文字幕| 色一情一伦一子一伦一区| 性做久久久久久免费观看欧美| 日韩欧美在线影院| 国产精品一区二区果冻传媒| 亚洲国产精品传媒在线观看| 色婷婷久久一区二区三区麻豆| 亚洲国产乱码最新视频| 日韩情涩欧美日韩视频| 国产99精品视频| 一区二区三区在线观看动漫| 91精品国产福利| 成人高清视频免费观看| 亚洲国产一区视频| 精品福利一二区| 色偷偷成人一区二区三区91| 日本怡春院一区二区| 日本一区二区久久| 欧美影院一区二区| 九色综合狠狠综合久久| 国产精品区一区二区三区| 欧美在线999| 九色综合狠狠综合久久| 亚洲桃色在线一区| 日韩一区二区三区在线| 成人动漫一区二区三区| 午夜精品爽啪视频| 国产视频一区二区在线观看| 欧美在线视频全部完| 国内精品久久久久影院一蜜桃| **网站欧美大片在线观看| 91精品麻豆日日躁夜夜躁| 国产成人精品免费一区二区| 午夜视频一区在线观看| 国产午夜精品一区二区三区嫩草 | 国产精品美日韩| 欧美日韩久久一区二区| 国产在线一区二区综合免费视频| 中文字幕一区二区三区四区 | 一区二区三区欧美| 精品国精品自拍自在线| 色香蕉成人二区免费| 国产精品综合二区| 五月婷婷综合激情| 亚洲欧美欧美一区二区三区| 久久一二三国产| 欧美日韩一区二区在线观看|