📄 mirsound.cpp
字号:
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
VOID CMirSound::Enable3D(VOID)
{
m_3DEnable = TRUE;
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
INT CMirSound::CalsDirection(POINT Src,POINT Chr)
{
return Src.x>Chr.x ? 1 :Src.x<Chr.x ?-1:0;
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
BOOL CMirSound::FreeNotUseBuffer(VOID)
{
DWORD dwCurrentTime;
DWORD dwTempTime;
CSBuffer* pxTempBuffer;
int i=0;
dwCurrentTime = timeGetTime(); // 泅犁 矫埃阑 备茄促.
do
{
dwTempTime = m_ppBuffer[i]->GetLastUsedTime();
if(dwTempTime!=0)
{
dwTempTime = dwCurrentTime - dwTempTime;
if(dwTempTime > MAX_LIM_TIME) // 1盒 捞惑 救敬巴阑 朝妨扼
{
m_ppBuffer[i]->Release();
pxTempBuffer = m_ppBuffer[i];
m_nUseCount--;
for(int j = i; j<m_nUseCount;j++)
{
m_ppBuffer[j] = m_ppBuffer[j+1];
}
m_ppBuffer[m_nUseCount] = pxTempBuffer;
i--;
}
i++;
}
}
while(i<m_nUseCount);
return FALSE;
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
VOID CMirSound::SetEnableBGM(VOID)
{
m_bBGMPlay = TRUE;
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
VOID CMirSound::SetDisableBGM(VOID)
{
m_bBGMPlay = FALSE;
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
VOID CMirSound::SetEnablePlay(VOID)
{
m_bPlay = TRUE;
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
VOID CMirSound::SetDisablePlay(VOID)
{
m_bPlay = FALSE;
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
VOID CMirSound::SetDisableAmbiance(VOID)
{
if(m_bAmbiance)
{
m_bAmbiance = FALSE;
for(INT i = 0 ; i < MAX_AMBIANCE_COUNT ; i++)
{
m_pAmbianceBuffer[i]->Release();
delete m_pAmbianceBuffer[i];
}
// m_CommonWavBuffer.Release();
if(m_CommonWavBuffer.Load(m_pSound,"10.wav",1)!=E_FAIL)
{
m_CommonWavBuffer.m_ID = 1;
m_CommonWavBuffer.SetVolume(m_lWavMaxVol);
m_CommonWavBuffer.Play(0);
}
KillTimer(g_xMainWnd.GetSafehWnd(),ID_AMBIANCE_TIMER);
}
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
VOID CMirSound::SetEnableAmbiance(INT nMapNum,INT nCount)
{
CHAR szPname[MAX_PATH];
CHAR szFname[MAX_PATH];
CHAR szTname[MAX_PATH];
if(!m_bAmbiance)
{
m_nAmbienceNum = nMapNum;
m_nAmbianceCount = nCount;
// _itoa(m_nAmbienceNum,szFname,10);
ZeroMemory(szPname,MAX_PATH);
// strcat(szPname,szFname);
if(m_CommonWavBuffer.Load(m_pSound,"00.wav",1)!=E_FAIL) // FadeIn
{
m_CommonWavBuffer.SetVolume(m_lWavMaxVol);
m_CommonWavBuffer.m_ID = 1; // 骏厚攫胶老版快俊父 1肺 秦霖促.
m_CommonWavBuffer.Play(0);
}
for(INT i = 0 ; i < MAX_AMBIANCE_COUNT ; i++)
{
_itoa(i,szTname,10);
strcat(szTname,".wav");
strcpy(szFname,szPname);
strcat(szFname,szTname);
m_pAmbianceBuffer[i] = new CSBuffer;
if(m_3DEnable) m_pAmbianceBuffer[i]->Enable3d();
m_pAmbianceBuffer[i]->Load(m_pSound,szFname,2);
m_pAmbianceBuffer[i]->m_ID = 1; // 骏厚攫胶老版快俊父 1肺 秦霖促.
}
m_bAmbiance = TRUE;
SetTimer(m_hWnd,ID_AMBIANCE_TIMER,1000,(TIMERPROC)(AmbianceTimerProc));
}
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
BOOL CMirSound::BGMFadeIn(LONG lMaxVol)
{
if(!m_bRunningTimer)
{
if(m_pMp3->IsPlaying())
{
m_lMp3MaxVol = lMaxVol;
SetTimer(m_hWnd,ID_TIMER_1,100,(TIMERPROC)(FadeInTimerProc));
m_bRunningTimer = TRUE;
return TRUE;
}
}
return FALSE;
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
BOOL CMirSound::BGMFadeOut(LONG lTime,LONG lMinVol)
{
if(!m_bRunningTimer)
{
if(m_pMp3->IsPlaying())
{
lTime = (lTime*2)/100;
m_lMp3MaxVol = lMinVol;
SetTimer(m_hWnd,ID_TIMER_1,lTime,(TIMERPROC)(FadeOutTimerProc));
m_bRunningTimer = TRUE;
return TRUE;
}
}
return FALSE;
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
HRESULT CMirSound::MessageProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DSHOW_NOTIFY:
{
m_pMp3->MessageProcess();
break;
}
}
return 0l;
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
VOID CMirSound::EndFading(INT nState)
{
if(nState==0)
{
// End of Fade in
KillTimer(g_xMainWnd.GetSafehWnd(),ID_TIMER_1);
//
}
else
{
// End of Fade out
if(m_lMp3MaxVol<=(-5000)) m_pMp3->OnStop();
KillTimer(g_xMainWnd.GetSafehWnd(),ID_TIMER_1);
//
}
m_bRunningTimer = FALSE;
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
VOID CMirSound::SetInWarMode(VOID)
{
if(!m_bIsWarMode)
{
m_lMp3MaxVol =(-2000);
BGMFadeOut(m_lMp3MaxVol);
m_bIsWarMode = TRUE;
}
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
VOID CMirSound::SetInPeaceMode(VOID)
{
if(m_bIsWarMode)
{
m_lMp3MaxVol =(0);
BGMFadeIn(m_lMp3MaxVol);
m_bIsWarMode = FALSE;
}
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
// MAX = 100 Min = 1
BOOL CMirSound::SetMasterVol(INT nVolume)
{
if(nVolume>=1 && nVolume<=100)
{
m_lWavMaxVol = (nVolume-101)*(50); // 100 -> -50 0 -> -5000
m_lMp3MaxVol = (m_lWavMaxVol-1)*(10); // Wav volume狼 -10db
return TRUE;
}
return FALSE;
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
// MAX = 100 Min = 1
BOOL CMirSound::SetBGMVol(INT nVolume)
{
if(nVolume>=0 && nVolume<=100)
{
m_lMp3MaxVol = (m_lWavMaxVol-1)*(10)*(nVolume+1); // Wav volume狼 -10dB狼 割%?
return TRUE;
}
return FALSE;
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
BOOL CMirSound::SetWavVol(INT nVolume)
{
return SetMasterVol(nVolume);
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
void CALLBACK FadeInTimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
LONG lVolume;
lVolume = g_xSound.m_pMp3->GetVolume();
// if End of Fade-out SendMessage to Window WM_USER_ENDTIMER
if(lVolume>=(g_xSound.m_lMp3MaxVol))
SendMessage(g_xMainWnd.GetSafehWnd(),WM_USER_ENDTIMER,(WPARAM)0,NULL);
lVolume = lVolume + 100;
g_xSound.m_pMp3->SetVolume(lVolume);
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
void CALLBACK FadeOutTimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime )
{
LONG lVolume;
lVolume = g_xSound.m_pMp3->GetVolume();
// if End of Fade-out SendMessage to Window WM_USER_ENDTIMER
if(lVolume<(g_xSound.m_lMp3MaxVol))
SendMessage(g_xMainWnd.GetSafehWnd(),WM_USER_ENDTIMER,(WPARAM)1,NULL);
lVolume = lVolume - 100;
g_xSound.m_pMp3->SetVolume(lVolume);
}
///////////////////////////////////////////////////////////////////////
// Name :
// Destination :
//
// Parameter :
//
// Return Value:
// Update :
///////////////////////////////////////////////////////////////////////
void CALLBACK AmbianceTimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime )
{
static INT nCount = 11;
static INT nReply = 0;
INT nNum;
INT Fact_1,Fact_2;
Fact_1 = (rand())%10+1;
Fact_2 = (rand())%10+1;
nCount++;
if((Fact_1+Fact_2)<=6) // 15%捞惑狼 犬伏肺 Play 1~15% = 15%
nNum = 1;
else
if((Fact_1+Fact_2)<=8) // 28%捞惑狼 犬伏肺 Play 16~28% = 12%
nNum = 2;
else
if((Fact_1+Fact_2)<=10) // 45%捞惑狼 犬伏肺 Play 27~45% = 18%
nNum = 3;
else
if((Fact_1+Fact_2)<=11) // 55%捞惑狼 犬伏肺 Play 46~55% = 10%
nNum = 4;
else
if((Fact_1+Fact_2)<=13) // 72%捞惑狼 犬伏肺 Play 56~72% = 16%
nNum = 5;
else
if((Fact_1+Fact_2)<=16) // 90%捞惑狼 犬伏肺 Play 72~90 = 18%
nNum = 7;
else
nNum = 8; // 10%
if(nCount>=13)
{
nNum = 0;
nCount = 0;
nReply++;
}
if(nNum >= 0 && nNum <= 8)
{
g_xSound.PlayAmbianceWav(nNum); // 盔贰
}
if(nReply>=g_xSound.m_nAmbianceCount)
{
nReply = 0;
g_xSound.SetDisableAmbiance();
return;
}
}
BOOL CMirSound::ChgPlayingSet(INT nWavIdx,INT nBufferIdx,INT Sx,INT Sy,INT Dx,INT Dy)
{
POINT Mon,Chr;
INT Dis;
INT Dir;
CSBuffer* pBuffer;
MAKEPOS(Mon,Sx,Sy);
MAKEPOS(Chr,Dx,Sy);
pBuffer= FindBuffer(nWavIdx,FALSE);
if(pBuffer!=NULL)
{
Dis = CalsDistance(Mon,Chr);
Dir = CalsDirection(Mon,Chr);
pBuffer->Pause(nBufferIdx);
pBuffer->SetPan(nBufferIdx,CalsPan(Dir,Dis));
pBuffer->SetVolume(nBufferIdx,CalsVolume(Dis));
pBuffer->Continue(nBufferIdx);
return TRUE;
}
else
{
return FALSE;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -