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

📄 ndsound.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
📖 第 1 页 / 共 2 页
字号:

#include <windows.h>
#include <mmsystem.h>
#include <dxerr8.h>
#include <dsound.h>
#include <math.h>
#include "DSUtil.h"
#include "NDsound.h" 
#include "media.h"
#include "3dSound.h" 

const	DWORD  DSOUND_3D_SOUND		= 0x00000008;       //3D音乐带有声音的X,Y,RANGE
CNDsound sound;

int  CNDsound::init(HWND hWnd)
{
	if(m_binitOK)
		return 0;
	m_hWnd = hWnd;
	m_nMusicVolume=80;
	m_nSoundVolume=80;
	
	CoInitialize(NULL); 	 
	int nRet = Initialize( hWnd, DSSCL_NORMAL, 2, 22050, 16 );
	switch(nRet)
	{
	case -1:
	case -2:
	case -3:
		m_binitOK =0;
		return nRet;
	case S_OK:
		m_binitOK = 1;
		return 0;	
	}
	return -1;
 
}

void CNDsound::Destroy()
{
	if(!m_binitOK)
		return;
	DWORD i;
	for(i=0; i< m_DequepSound.size();i++)			
			SAFE_DELETE( m_DequepSound[i]);
	
	for(i=0;i<m_DequepMedia.size();i++)	
			SAFE_DELETE( m_DequepMedia[i]);

	for(i=0;i<m_Dequep3DSound.size();i++)	
			SAFE_DELETE( m_Dequep3DSound[i]);

	m_DequepSound.clear();
	m_DequepMedia.clear();
	m_Dequep3DSound.clear();
 
}
 

void CNDsound::Pause()
{
	if(!m_binitOK)
		return;
	DWORD i;

	for(i=0; i< m_DequepMedia.size();i++)
	{
		if(m_DequepMedia[i])
			m_DequepMedia[i]->Pause();
	}

	for(i=0; i< m_DequepSound.size();i++)
	{
		if(m_DequepSound[i])
			m_DequepSound[i]->Stop();
	}

	for(i=0; i< m_Dequep3DSound.size();i++)
	{
		if(m_Dequep3DSound[i])
			m_Dequep3DSound[i]->Stop();
	}
}

void CNDsound::Continue()
{
	if(!m_binitOK)
		return;
 
	DWORD i;
	for(i=0; i< m_DequepMedia.size();i++)
	{
		if(m_DequepMedia[i])
			m_DequepMedia[i]->Pause();
	}

	for(  i=0; i< m_DequepSound.size();i++)
	{
		if(m_DequepSound[i])
			m_DequepSound[i]->Continue();
	}

	for(  i=0; i< m_Dequep3DSound.size();i++)
	{
		if(m_Dequep3DSound[i])
			m_Dequep3DSound[i]->Continue();
	}

}
void CNDsound::SetMusicVolume(int nVolume)
{
	if(!m_binitOK)
		return;
	m_nMusicVolume = nVolume;
	DWORD i;
	for(i=0; i< m_DequepMedia.size();i++)
	{
		if(m_DequepMedia[i])
				m_DequepMedia[i]->SetVolume(nVolume);
	}

}

void CNDsound::SetSoundVolume(int nVolume)
{
	if(!m_binitOK)
		return;

	if(nVolume >100)
		nVolume=100;
	else
		if(nVolume <0)
			nVolume=0;
	m_nSoundVolume = nVolume;
	for(DWORD i=0; i< m_DequepSound.size();i++)
	{
		if(m_DequepSound[i])
			m_DequepSound[i]->SetVolume(m_nSoundVolume);
	}
	for( i=0; i< m_Dequep3DSound.size();i++)
	{
		if(m_Dequep3DSound[i])
			m_Dequep3DSound[i]->SetVolume(m_nSoundVolume);
	}
	
}

 
BOOL CNDsound::CloseMedia(char *szFileName)
{
	if(!m_binitOK)
		return 0;

	for(DWORD i = 0;i<m_DequepMedia.size();i++)
	{
		if(m_DequepSound[i])
		{
			if(strcmp(m_DequepMedia[i]->m_szFileName ,szFileName) == 0)
			{
				SAFE_DELETE( m_DequepMedia[i]);
				m_DequepMedia.erase(m_DequepMedia.begin() + i);
				return 1;
			}
		}
	}
	return 0;
}

void CNDsound::SetVolume(char *szFileName,int nVolume,int nWorldX ,int nWorldY)
{

	if(!m_binitOK)
		return ;

	for(DWORD i=0; i< m_DequepSound.size();i++)
	{
		if(m_DequepSound[i])
		{
			if(strcmp(m_DequepSound[i]->m_szFileName ,szFileName) == 0)
				if(nWorldX ||nWorldY)
				{
					if(m_DequepSound[i]->m_dwControl & DSOUND_3D_SOUND)
					{
						if(m_DequepSound[i]->m_nWorldX == nWorldX && m_DequepSound[i]->m_nWorldY == nWorldY)
						{						 
							m_DequepSound[i]->SetSelfVolume(nVolume) ;	
							m_DequepSound[i]->SetVolume(m_nSoundVolume);							
							return ;
						}
					}
				}
				else
				{
					m_DequepSound[i]->SetSelfVolume(nVolume) ;	
					m_DequepSound[i]->SetVolume(m_nSoundVolume);
					return ;
				}
		}
	}
}

BOOL CNDsound::CloseSound(char *szFileName,int nX,int nY)
{
	if(!m_binitOK)
		return 0;

	for(DWORD i=0; i< m_DequepSound.size();i++)
	{
		if(m_DequepSound[i])
		{
			if(strcmp(m_DequepSound[i]->m_szFileName ,szFileName) == 0)
				if(nX || nY)
				{
					if(m_DequepSound[i]->m_dwControl & DSOUND_3D_SOUND)
					{
						if(m_DequepSound[i]->m_nWorldX == nX && m_DequepSound[i]->m_nWorldY == nY)
						{
							SAFE_DELETE( m_DequepSound[i]);						
							m_DequepSound.erase(m_DequepSound.begin() + i);
							return 1;
						}
					}
				}
				else
				{
					SAFE_DELETE( m_DequepSound[i]);				
					m_DequepSound.erase(m_DequepSound.begin() + i);
					return 1;
				}
		}
	}
	return 0;	

}

BOOL CNDsound::Close3DSound(char *szFileName,int nX,int nY)
{
	if(!m_binitOK)
		return 0;
	for(DWORD i=0; i< m_Dequep3DSound.size();i++)
	{
		if(m_Dequep3DSound[i])
		{
			if(strcmp(m_Dequep3DSound[i]->m_szFileName ,szFileName) == 0)		
				if(m_Dequep3DSound[i]->GetWorldX() == nX && m_Dequep3DSound[i]->GetWorldZ() == nY)
				{
					SAFE_DELETE( m_Dequep3DSound[i]);	
					m_Dequep3DSound.erase(m_Dequep3DSound.begin() + i);
					return 1;
				}			
		}
	}
	return 0;	
}

const CSound * CNDsound::GetSound(char *szFileName,int nX,int nY)
{
	if(!m_binitOK)
		return NULL;

	for(DWORD i=0; i< m_DequepSound.size();i++)
	{
		if(m_DequepSound[i])
		{
			if(strcmp(m_DequepSound[i]->m_szFileName, szFileName) == 0)
				if(nX || nY)
				{
					if(m_DequepSound[i]->m_dwControl & DSOUND_3D_SOUND)
					{
						if(m_DequepSound[i]->m_nWorldX == nX && m_DequepSound[i]->m_nWorldY == nY)
		 					return m_DequepSound[i];						 
					}
				}
				else
					return m_DequepSound[i];
		}
	}
	return NULL;	
}


const C3DSound * CNDsound::Get3DSound(char *szFileName,int nX,int nY)
{

	if(!m_binitOK)
		return NULL;

	for(DWORD i=0; i< m_Dequep3DSound.size();i++)
	{
		if(m_Dequep3DSound[i])
		{
			if(strcmp(m_Dequep3DSound[i]->m_szFileName, szFileName) == 0)
				if(nX || nY)				
					if(m_Dequep3DSound[i]->GetWorldX() == nX && m_Dequep3DSound[i]->GetWorldZ() == nY)
		 				return m_Dequep3DSound[i];		 
					
		}
	}
	return NULL;	

}

BOOL	CNDsound::CloseSound(CSound *psound)
{
	if(!m_binitOK)
		return 0;

	for(DWORD i=0; i< m_DequepSound.size();i++)
	{
		if(m_DequepSound[i])
			if(m_DequepSound[i] == psound)
			{
				SAFE_DELETE( m_DequepSound[i]);
				m_DequepSound.erase(m_DequepSound.begin() + i);
				return 1;

			}
	}
	return 0;
}
BOOL	CNDsound::CloseSound(C3DSound *psound)
{
	if(!m_binitOK)
		return 0;

	for(DWORD i=0; i< m_Dequep3DSound.size();i++)
	{
		if(m_Dequep3DSound[i])
			if(m_Dequep3DSound[i] == psound)
			{
				SAFE_DELETE( m_Dequep3DSound[i]);
				m_Dequep3DSound.erase(m_Dequep3DSound.begin() + i);
				return 1;

			}
	}
	return 0;
}

void	CNDsound::SetSoundPos(CSound *psound ,int nX,int nY)
{
	if(!m_binitOK)
		return ;
	
	for(DWORD i=0; i< m_DequepSound.size();i++)
	{
		if(m_DequepSound[i])
			if(m_DequepSound[i] == psound)
			{			 
				psound->SetSoundPos(nX,nY,psound->m_nRange);
				return ;

			}
	}
}

void	CNDsound::SetSoundPos(C3DSound *psound,int nX,int nY,int nZ)
{
	if(!m_binitOK)
		return ;

	for(DWORD i=0; i< m_Dequep3DSound.size();i++)
	{
		if(m_Dequep3DSound[i])
			if(m_Dequep3DSound[i] == psound)
			{
				psound->ResetOrigPos(nX,nY,nZ);				
				return ;
			}
	}	
}

CMedia *CNDsound::PlayMedia(HWND hwnd ,char * szFileName,int nLoop)
{
	if(!m_binitOK)
		return NULL;

	CMedia * pMedia;
	pMedia = new CMedia;
	if(!pMedia->PlayMedia(hwnd,szFileName,nLoop))
		return NULL;
	pMedia->SetVolume(m_nMusicVolume);
	m_DequepMedia.push_back(pMedia);
	return pMedia;	
}

C3DSound * CNDsound::Play3DSound(HWND hwnd,char *szFileName,int nWorldX ,int nWorldY,int nWorldZ,int nRange,int nLoop)
{
	if(!m_binitOK)
		return NULL;
	if(!szFileName || strcmp(szFileName,"")==0)
		return NULL;

	for(int i=0; i< m_Dequep3DSound.size();i++)
	{
		if(m_Dequep3DSound[i]->m_dwSleepTime)	
 			if(strcmp(m_Dequep3DSound[i]->m_szFileName,szFileName)==0)
			{
					m_Dequep3DSound[i]->RePlay(nWorldX,nWorldY,nWorldZ,nRange,nLoop);
					return m_Dequep3DSound[i];
			}
	}

	C3DSound *p3dSound = new C3DSound();
	if(!p3dSound)
		return NULL;
	p3dSound->PlaySound(hwnd,szFileName,nWorldX,nWorldY,nWorldZ,nRange,nLoop);
	m_Dequep3DSound.push_back(p3dSound);
	return p3dSound;
}

CSound * CNDsound::PlaySound(char * szFileName,int nWorldX,int nWorldY,int nRange,int nLoop,int nVolume)
{
	if(!m_binitOK)
		return NULL;
	if(!szFileName || strcmp(szFileName," ")==0)
		return NULL;
	int i;
	char szExt[10];
	for(i = strlen(szFileName) - 1;i>=0;i--)
	{
		if(szFileName[i] == '.')
			strcpy(szExt,&szFileName[i]);
	}
	strupr(szExt);
	if(strcmp(szExt,".WAV")!=0)
		return NULL;// not wav file
	if((m_nSoundVolume < 20 || nVolume < 20)  && nLoop !=-1)

⌨️ 快捷键说明

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