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

📄 csound.cpp

📁 成熟的RPG引擎,Flysky发布. 斜视角引擎.
💻 CPP
字号:
#include "../GameH.h"
//播放声音
//小飞侠修改 制作
//加入 一个通道 用于播放音效
//2005年5月15日更新
//最新。多声道播放 多类型支持,只要Windows支持,游戏就支持
//MCI编程 By Flysky
CSound::CSound()
{
wDeviceID[0]=0;
wDeviceID[1]=0;
MidTRe=false;
}
bool CSound::Sethwnd(HWND Hwnd){HwnD=Hwnd;return true;}
DWORD CSound::Play(char* MidiFile)
{
	Stop(wDeviceID[0]); //先停止
	//此为Flysky 的双通道解决方案
	//2005.7.12
	mciOpenParms.lpstrElementName = MidiFile; //要播放的MIDI
	if (wDeviceID[0]!=0) mciOpenParms.wDeviceID=wDeviceID[0];
	mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)(LPVOID)&mciOpenParms);	// 打开
	if (wDeviceID[0]==0) wDeviceID[0]=mciOpenParms.wDeviceID;
	mciSendCommand(wDeviceID[0],MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&mciPlayParms);	//播放
    mciPlayParms.dwCallback = (DWORD) HwnD;
	if (dwReturn = mciSendCommand(wDeviceID[0], MCI_PLAY, MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParms))
     {
      mciSendCommand(wDeviceID[0], MCI_CLOSE, 0, NULL);
      return (dwReturn);
      }
    return (0L);
	//Flysky 的双通道解决方案结束
}
DWORD CSound::PlayO(char* MidiFile,bool IsR)
{
//此为Flysky 的双通道解决方案
//2005.7.12
Stop(wDeviceID[1]); //先停止
MidTRe=IsR; //用于以后的判断
mciOpenParms.lpstrElementName = (LPCSTR) MidiFile; //文件名
if (wDeviceID[1]!=0) mciOpenParms.wDeviceID=wDeviceID[1];
mciSendCommand (NULL, MCI_OPEN, MCI_OPEN_ELEMENT,(DWORD)(LPVOID) &mciOpenParms); //打开设备
if (wDeviceID[1]==0) wDeviceID[1]=mciOpenParms.wDeviceID;
if (MidTRe==false) //判断是否要循环播放,如果不
mciSendCommand (wDeviceID[1], MCI_PLAY, //DeviceID需等于上面的设备标识
MCI_FROM, (DWORD)(LPVOID)&mciPlayParms); //播放MIDI
else
{
	mciSendCommand(wDeviceID[1],MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&mciPlayParms);	//播放
	mciPlayParms.dwCallback = (DWORD) HwnD;
	if (dwReturn = mciSendCommand(wDeviceID[1], MCI_PLAY, MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParms))
     {
         mciSendCommand(wDeviceID[1], MCI_CLOSE, 0, NULL);
         return (dwReturn);
     }
}
return (0L);
//Flysky 的双通道解决方案结束
}
bool CSound::SetVolume(DWORD Vol)
{
//waveOutSetVolume(0, (DWORD)0x40008000UL);
waveOutSetVolume(0,Vol); //社定音量
return true;
}

//循环播放
void CSound::Replay(WPARAM w,LPARAM l)
{
	if (w==MCI_NOTIFY_SUCCESSFUL)
	{
		if( wDeviceID[0]!=0 && l==wDeviceID[0])
		{
			mciSendCommand(wDeviceID[0], MCI_SEEK, MCI_SEEK_TO_START, NULL);
			mciSendCommand(wDeviceID[0], MCI_PLAY, MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParms);
		}
		else if (MidTRe==true && wDeviceID[1]!=0 && l==wDeviceID[1])
		{
			mciSendCommand(wDeviceID[1], MCI_SEEK, MCI_SEEK_TO_START, NULL);
			mciSendCommand(wDeviceID[1], MCI_PLAY, MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParms);
		}
	}
}
//停止
void CSound::Stop(UINT ID)
{
	if( wDeviceID[0] != 0&& ID==wDeviceID[0])
	{
		mciSendCommand(wDeviceID[0], MCI_STOP, MCI_WAIT, NULL);
		mciSendCommand(wDeviceID[0], MCI_CLOSE, 0, NULL);
		wDeviceID[0] = 0;
	}
	else if ( wDeviceID[1] != 0&& ID==wDeviceID[1])
	{
		mciSendCommand(wDeviceID[1], MCI_STOP, MCI_WAIT, NULL);
		mciSendCommand(wDeviceID[1], MCI_CLOSE, 0, NULL);
		wDeviceID[1] = 0;
	}
}
void CSound::Pause()
{
	//全部暂停
	if( wDeviceID[0] != 0) mciSendCommand(wDeviceID[0], MCI_PAUSE, MCI_WAIT, NULL);
	if ( wDeviceID[1] != 0) mciSendCommand(wDeviceID[1], MCI_PAUSE, MCI_WAIT, NULL);	
}
void CSound::Sequence()
{
	//全部暂停
	if( wDeviceID[0] != 0) mciSendCommand(wDeviceID[0], MCI_PLAY,MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParms);//继续播放
	if ( wDeviceID[1] != 0) 
	{
		if (MidTRe==true) mciSendCommand(wDeviceID[1], MCI_PLAY,MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParms);//继续播放
		else mciSendCommand (wDeviceID[1], MCI_PLAY,NULL, (DWORD)(LPVOID)&mciPlayParms); //继续播放
	}
}
void CSound::Stop()
{
	//全部停止
	if( wDeviceID[0] != 0)
	{
		mciSendCommand(wDeviceID[0], MCI_STOP, MCI_WAIT, NULL);
		mciSendCommand(wDeviceID[0], MCI_CLOSE, 0, NULL);
		wDeviceID[0] = 0;
	}
	if ( wDeviceID[1] != 0)
	{
		mciSendCommand(wDeviceID[1], MCI_STOP, MCI_WAIT, NULL);
		mciSendCommand(wDeviceID[1], MCI_CLOSE, 0, NULL);
		wDeviceID[1] = 0;
	}
}

⌨️ 快捷键说明

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