⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 directsound.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		return	nReturn;
	}

	return	nReturn;
}




int		//stream 滚欺俊辑 敲饭捞矫
WaveReadFile( HMMIO hmmioIn, UINT cbRead, BYTE *pbDest, MMCKINFO *pckIn, UINT *cbActualRead, int type )
{
	MMIOINFO	mmioinfoIn;
	int			nError;
	UINT		cT, cbDataIn;

	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;
	

	if( type == WAVE_ENCODING_ )
	{
		char crc = 0;
		for ( cT = 0; cT < cbDataIn; cT++ )
		{
			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;
				}
			}
				
			*( ( BYTE* )pbDest+cT ) = *( ( BYTE* )mmioinfoIn.pchNext ++ ) ^ crc;
			crc ++;
		}
	}
	else
	{

		for ( cT = 0; cT < cbDataIn; cT++ )
		{
			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;
				}
			}
				
			*( ( BYTE* )pbDest+cT ) = *( ( BYTE* )mmioinfoIn.pchNext ++ );
		}
	}

	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;
}

int
WaveCloseReadFile( HMMIO *phmmio, WAVEFORMATEX **ppwfxSrc )
{
	if ( *ppwfxSrc != NULL )
	{
		GlobalFree( *ppwfxSrc );
		*ppwfxSrc = NULL;
	}

	if ( *phmmio != NULL )
	{
		mmioClose( *phmmio, 0 );
		*phmmio = NULL;
	}

	return	0;
}

int
WaveLoadFile( char* pszFileName, UINT* cbSize, WAVEFORMATEX** ppwfxInfo, BYTE** ppbData )
{
	HMMIO		hmmioIn;        
	MMCKINFO	ckInRiff;
	MMCKINFO	ckIn;
	int			nError;
	UINT		cbActualRead;
	int			encoding = 0;

	*ppbData = NULL;
	*ppwfxInfo = NULL;
	*cbSize = 0;
	
	if ( ( nError = WaveOpenFile( pszFileName, &hmmioIn, ppwfxInfo, &ckInRiff, &encoding ) ) != 0 )
	{
		goto	ERROR_LOADING;
	}

	if ( ( nError = WaveStartDataRead( &hmmioIn, &ckIn, &ckInRiff ) ) != 0 )
	{
		goto	ERROR_LOADING;
	}

	if ( ( *ppbData = ( BYTE* )GlobalAlloc( GMEM_FIXED, ckIn.cksize ) ) == NULL )
	{
		nError = ER_MEM;
		goto	ERROR_LOADING;
	}

	if ( ( nError = WaveReadFile( hmmioIn, ckIn.cksize, *ppbData, &ckIn, &cbActualRead, encoding ) ) != 0 )
	{
		goto	ERROR_LOADING;
	}        
	
	*cbSize = cbActualRead;
	goto	DONE_LOADING;

ERROR_LOADING:

	//// 0615 LKH 趣矫 荤款靛 单捞磐 拳老捞 粮犁窍瘤 臼绰 版快甫 茫扁 困茄 抛胶飘 风凭(诀单捞飘窍搁 救凳)  ////
	//char	error_message[40];
	//sprintf(error_message, "%s 拳老俊 巩力啊 乐嚼聪促.", pszFileName);
	//MessageBox(NULL, error_message, 0, MB_OK);
	
	if ( *ppbData != NULL )
	{
		GlobalFree( *ppbData );
		*ppbData = NULL;
	}
	
	if ( *ppwfxInfo != NULL )
	{
		GlobalFree( *ppwfxInfo );
		*ppwfxInfo = NULL;
	}
			
DONE_LOADING:

	if ( hmmioIn != NULL )
	{
		mmioClose( hmmioIn, 0 );
		hmmioIn = NULL;
	}

	return	nError;
}

///////////////////////////////////////////////////////////////////////////////
//

BOOL
InitSfx( HWND hWnd )
{
	g_SoundInfo.bInitialized = FALSE;
	
	if ( !InitGlobals( hWnd ) )
	{
		return	FALSE;
	}
	
	if ( !InitFixedSounds( ) )		//檬扁俊 胶鸥平 荤款靛 单捞磐 佬绢客辑 滚欺俊 历厘
	{
		FreeGlobals( );
		return	FALSE;
	}
	
	g_SoundInfo.bInitialized = TRUE;
	
	return	TRUE;
}

void
FreeSfx( void )
{
	if ( g_SoundInfo.bInitialized )
	{
		FreeFixedSounds( );
		FreeGlobals( );
	}
}

//////////////// SoundUp lkh 荐沥 ////////////////// ( BGM狼 版快 胶抛饭坷 / 瓤苞澜狼 版快 葛畴 : 2辆幅狼 滚欺 鞘夸)
BOOL	InitGlobals( HWND hWnd )
{
	PCMWAVEFORMAT	pcmwf;
	DSBUFFERDESC	dsbdesc;

	if ( DirectSoundCreate( NULL, &g_SoundInfo.lpDirectSound, NULL ) != DS_OK )		//IDirectSound牢磐其捞胶狼 积己苞 檬扁拳
    {
//		MessageBox(NULL, "IDirectSound牢磐其捞胶 积己 角菩", 0, MB_OK);
		return	FALSE;
	}

	// PCM 傀捞宏 屈怕狼 坷叼坷 单捞磐俊 措茄 汲疙
	memset( &pcmwf, 0, sizeof( PCMWAVEFORMAT ) );

	pcmwf.wf.wFormatTag = WAVE_FORMAT_PCM;
	pcmwf.wf.nChannels = 2;					//1:mono    2:stereo
	pcmwf.wf.nSamplesPerSec = 22050;
	pcmwf.wf.nBlockAlign = 4;
	pcmwf.wf.nAvgBytesPerSec = pcmwf.wf.nSamplesPerSec * pcmwf.wf.nBlockAlign;
	pcmwf.wBitsPerSample = 16;
	
	// 促捞泛飘 荤款靛 滚欺狼 漂己阑 疙矫
	memset( &dsbdesc, 0, sizeof( DSBUFFERDESC ) );

	dsbdesc.dwSize = sizeof( DSBUFFERDESC );
	dsbdesc.dwFlags = DSBCAPS_PRIMARYBUFFER | DSBCAPS_CTRL3D | DSBCAPS_CTRLVOLUME | DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_MUTE3DATMAXDISTANCE; //| DSBCAPS_CTRLPAN (2D俊辑父 荤侩)
	//| DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLFREQUENCY | DSBCAPS_CTRLPOSITIONNOTIFY ;
	dsbdesc.dwBufferBytes = 0;
	dsbdesc.lpwfxFormat = NULL;

	if ( IDirectSound_SetCooperativeLevel( g_SoundInfo.lpDirectSound, hWnd, DSSCL_NORMAL ) == DS_OK )													//荤款靛 厘摹甫 荤侩且 锭狼 橇肺技辑 刀痢苞 包访等 饭骇 汲沥
	{
		if ( IDirectSound_CreateSoundBuffer( g_SoundInfo.lpDirectSound, &dsbdesc, &g_SoundInfo.lpPrimaryBuffer, NULL ) == DS_OK )						//促捞泛飘 荤款靛 滚欺 按眉甫 积己
		{
			if ( g_SoundInfo.lpPrimaryBuffer->QueryInterface( IID_IDirectSound3DListener, ( void** )&g_SoundInfo.lpDirectSound3DListener ) == DS_OK )	//lpDirectSound3DListener 牢磐其捞胶俊 措茄 器牢磐 掘绢咳
			{
				if ( IDirectSound3DListener_SetPosition( g_SoundInfo.lpDirectSound3DListener, 0.0f, 0.0f, 0.0f, DS3D_DEFERRED ) == DS_OK )				//lpDirectSound3DListener狼 困摹 汲沥(default:X:0,Y:0,Z:0)
				{
					if( IDirectSound3DListener_SetDistanceFactor( g_SoundInfo.lpDirectSound3DListener, 1.f, DS3D_DEFERRED ) == DS_OK )					//芭府狼 叼弃靛 窜困 茄 档飘寸 50Cm 固磐烙
					{
						if ( IDirectSound3DListener_SetDopplerFactor( g_SoundInfo.lpDirectSound3DListener, DS3D_DEFAULTDOPPLERFACTOR, DS3D_DEFERRED ) == DS_OK )		//档敲矾 棋磐 悸泼
						{
							//if ( IDirectSound3DListener_SetRolloffFactor( g_SoundInfo.lpDirectSound3DListener, DS3D_DEFAULTROLLOFFFACTOR*5, DS3D_DEFERRED ) == DS_OK )	//费坷橇 棋磐(芭府俊 蝶扼 家府狼 澜樊 炼沥) 悸泼
							if ( IDirectSound3DListener_SetRolloffFactor( g_SoundInfo.lpDirectSound3DListener, DS3D_DEFAULTROLLOFFFACTOR*10, DS3D_DEFERRED ) == DS_OK )	//费坷橇 棋磐(芭府俊 蝶扼 家府狼 澜樊 炼沥) 悸泼
							{
								if ( IDirectSound3DListener_CommitDeferredSettings( g_SoundInfo.lpDirectSound3DListener ) == DS_OK )						//困狼 葛电 汲沥捞 捞 皋家靛甫 龋免窍骨肺辑 角青 贸府 等促.
								{
									return	TRUE;
								}
								else	MessageBox(NULL, "IDirectSound3DListener_CommitDeferredSettings Fail", 0, MB_OK);
							}
							else	MessageBox(NULL, "IDirectSound3DListener_SetRolloffFactor Fail", 0, MB_OK);
						}
						else	MessageBox(NULL, "IDirectSound3DListener_SetDopplerFactor Fail", 0, MB_OK);
					}
					else	MessageBox(NULL, "IDirectSound3DListener_SetDistanceFactor Fail", 0, MB_OK);
				}
				else	MessageBox(NULL, "IDirectSound3DListener_SetPosition Fail", 0, MB_OK);	
			}
			else	MessageBox(NULL, "lpDirectSound3DListener InterFace Fail", 0, MB_OK);	
		}
		else	MessageBox(NULL, "IDirectSound_CreateSoundBuffer Create Fail", 0, MB_OK);
	}
	else	MessageBox(NULL, "IDirectSound_SetCooperativeLevel Fail", 0, MB_OK);


	//角菩沁阑锭 
	FreeGlobals( );

	return	FALSE;
}


void
FreeGlobals( void )		//1瞒滚欺/3D 滚欺/促捞泛飘 荤款靛 按眉 朝府扁
{
	if ( g_SoundInfo.lpPrimaryBuffer != NULL )
	{
		g_SoundInfo.lpPrimaryBuffer->Release( );
		g_SoundInfo.lpPrimaryBuffer = NULL;
	}

	if ( g_SoundInfo.lpDirectSound3DListener != NULL )
	{
		IDirectSound3DListener_Release( g_SoundInfo.lpDirectSound3DListener );
		g_SoundInfo.lpDirectSound3DListener = NULL;
	}

	if ( g_SoundInfo.lpDirectSound != NULL )
	{
		IDirectSound_Release( g_SoundInfo.lpDirectSound );
		g_SoundInfo.lpDirectSound = NULL;
	}
}

BOOL
InitFixedSounds( void )		//沥利肺爹 wave 拳老阑 胶鸥平 滚欺 积己/历厘
{
	char	szFilePath[ _MAX_PATH ];
	int		index;
	BOOL	bRetVal = TRUE;

	FreeFixedSounds( );

	for( index=0 ; index < MAX_SOUND ; index++ )
	{			
		if( g_SoundList[index].static_Sound )
		{		
			wsprintf( szFilePath, "%s/sound/%s", GetCurrentWorkingDirectory(), g_SoundList[index].sound_FileName);
				
			if ( WaveInit( &g_SoundInfo.lpWaveData[ index ], g_SoundInfo.lpDirectSound, szFilePath ) == FALSE )
			{	
				//bRetVal = FALSE;
				//break;
				continue;
			}	
				
			if ( !WaveGetBuffers( g_SoundInfo.lpWaveData[ index ], &g_SoundInfo.lpDirectSoundBuffer[ index ], &g_SoundInfo.lpDirectSound3DBuffer[ index ] ) )
			{	
				bRetVal = FALSE;
				break;
			}	
		}		
	}			
	return	bRetVal;
}				


void
FreeFixedSounds( void )
{
	for ( int i = 0; i < MAX_SOUND ; i++ )
	{
		if( g_SoundList[i].static_Sound )
		{
			if ( g_SoundInfo.lpWaveData[ i ] )
			{
				WaveFree( g_SoundInfo.lpWaveData[ i ] );
				g_SoundInfo.lpWaveData[ i ] = NULL;
			}
		}
	}
}

void
FreeAutoSounds( int index )
{
	if ( g_SoundInfo.lpDirectSound3DBuffer[ index ]!=NULL )
	{
		IDirectSoundBuffer_Release( g_SoundInfo.lpDirectSound3DBuffer[ index ] );
		g_SoundInfo.lpDirectSound3DBuffer[ index ] = NULL;
	}

	if ( g_SoundInfo.lpDirectSoundBuffer[ index ]!=NULL )
	{
		IDirectSoundBuffer_Release( g_SoundInfo.lpDirectSoundBuffer[ index ] );
		g_SoundInfo.lpDirectSoundBuffer[ index ] = NULL;
	}

	if ( g_SoundInfo.lpWaveData[ index ]!=NULL )
	{
		WaveFree( g_SoundInfo.lpWaveData[ index ] );
		g_SoundInfo.lpWaveData[ index ] = NULL;
	}
}

void	SetListener( int x, int y )
{
	IDirectSound3DListener_SetPosition( g_SoundInfo.lpDirectSound3DListener, P2M( x * TILE_SIZE ), P2M( y * TILE_SIZE ), 0.f, DS3D_IMMEDIATE );
}


// flag == 1 : looping.
// flag != 0 : 秦寸 冉荐父怒 馆汗.
// flag == 0 : 1 time.



///////////////////// SoundUp lkh 荐沥 ////////////////////
BOOL PlayListAutoSounds( int index, int x, int y, BOOL flag)		//index->1~999鳖瘤
{
	if(g_Volume_Off!=0)		return FALSE;

	if(index >= MAX_SOUND || index <= 0 )	return FALSE; 

	char	szFilePath[ _MAX_PATH ];
					
	if(!g_SoundList[index].static_Sound)
	{				
		if( g_SoundInfo.bInitialized == FALSE || g_SoundInfo.lpDirectSound == NULL ) return 0;
		//////////////// 荤款靛 滚欺俊 捞固 肺爹登绢 乐绰 荤款靛牢 版快 犁肺爹窍瘤 臼档废 且巴 /////////////////////
		if( g_SoundInfo.lpDirectSoundBuffer[ index ] == NULL )//!IsPlaying(index) )
		{			
			if( checkbeta == '1' )
			{	//< CSD-031030
				wsprintf( szFilePath, "%s/sound_b5/%s", GetCurrentWorkingDirectory(), g_SoundList[index].sound_FileName);
			}	//> CSD-031030
			else wsprintf( szFilePath, "%s/sound/%s", GetCurrentWorkingDirectory(), g_SoundList[index].sound_FileName);
		
			//角力 wav 拳老阑 佬绢客 胶怕平 滚欺俊 肺爹
			if ( WaveInit( &g_SoundInfo.lpWaveData[ index ], g_SoundInfo.lpDirectSound, szFilePath ) == FALSE )	
			{
				if( checkbeta == '1' )
				{
					wsprintf( szFilePath, "%s/sound/%s", GetCurrentWorkingDirectory(), g_SoundList[index].sound_FileName);
					if ( WaveInit( &g_SoundInfo.lpWaveData[ index ], g_SoundInfo.lpDirectSound, szFilePath ) == FALSE )	return false;
				}
				else return FALSE;
			}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -